Spec: Weekly Goals
Spec: Weekly Goals
Section titled “Spec: Weekly Goals”| Field | Value |
|---|---|
| Module | Gospl Platform (People) |
| Source | v0.1 Draft — June 2026 |
| Status | Draft — acceptance criteria already present per US; Claude added build status, data model, clarifications. Awaiting owner sign-off. |
| Owner | TBD (People Team) |
| Contract | /contracts/people/weekly-goals.yaml |
| Design link | TBD — entry point (OQ-02) |
| Spine relationship | OPEN — see §C / G1. Likely the Personal Page’s hook into the actions→outcomes spine. |
Processed like the others. The source already carries good acceptance criteria (US-001…007) — preserved verbatim in §A and extended with build-status flags + criteria for FRs not covered by a US. §B data model, §C clarifications added by Claude.
1. Overview
Section titled “1. Overview”Personal space to set, track, review short-term professional and personal goals. Replaces the legacy OS section, keeping the familiar three-column layout (Previous / This / Next Week). Primary problem solved: the broken journey that drops goals into the wrong week. Secondary: cleaner archive with filtering, simplified entry form, manager-visible reporting.
2–6. Functional summary
Section titled “2–6. Functional summary”- Goals page (§2): three columns side by side. Previous Week is read-only; This Week + Next Week are active. Within a column, Professional first then Personal, visual separator. Each active column has its own Add-a-Goal button that opens the form pre-scoped to that column (the core fix — no drag needed). Drag-and-drop between This/Next Week retained. Inline complete button on each card is the sole completion mechanic. Cards grow to fit text — no truncation.
- Entry form (§3): Title (required), Description (optional), Type (Professional / Personal). Complete toggle removed. Save → adds to pre-scoped column + returns to board. Cancel/Close always available.
- Archive (§4): renamed “Rock Archive” → Goals Archive. Reverse-chronological. Rows: title, type, date set, date completed, view/edit. Filter by type (All / Pro / Personal) and by period (month/year). Pagination retained within filtered results.
- Access (§5): own goals only by default (protects personal goals). Hierarchy: team member = own; line manager = own + direct reports (via their page); manager-of-managers = full chain; People Team/Admin = whole org.
- Reporting (§6): Monday-morning non-setter report, scoped to recipient’s visibility, grouped by department for People Team. Lists name, dept/team, last-goal-set date. Lightweight AI flags (v1): repeated goal 3+ consecutive weeks (FR-24); goal-drift — sets but doesn’t complete over a rolling period, threshold TBC (FR-25).
7. User Stories (with source acceptance criteria)
Section titled “7. User Stories (with source acceptance criteria)”- US-001 Add to correct week — click Add a Goal on a column → form pre-set to that week → on save goal appears in that column.
- US-002 Cancel entry — Cancel/close → form closes, no goal created.
- US-003 Mark complete — click complete on card → goal visually complete in column.
- US-004 Filter archive by type — select Personal → only Personal shown.
- US-005 Filter archive by period — select Jan 2024 → only goals set/completed that month shown.
- US-006 Manager views team goals — line manager on a direct report’s page → sees their current + previous weekly goals.
- US-007 Non-setter report — Monday → recipient gets notification/email of direct reports with no goals set this week.
§A. Acceptance Criteria & Build Status
Section titled “§A. Acceptance Criteria & Build Status”| Ref | Acceptance criterion | Status |
|---|---|---|
| US-001 / FR-03,04,09 | Add-a-Goal on This Week / Next Week opens the form pre-scoped to that week; on save the goal lands in that column. | buildable now |
| US-002 / FR-10 | Cancel/close exits the form with no goal created, at any point. | buildable now |
| US-003 / FR-08 | The card’s inline complete control marks the goal done in-column; no complete toggle exists in the form. | buildable now |
| FR-01 / FR-02 | Three columns render; within each, Professional listed before Personal with a separator. | blocked: G2 (week-boundary rule defines column membership) |
| FR-05 | A goal can be dragged between This Week and Next Week; its week assignment updates and persists. | blocked: G2 |
| FR-06 | Goal title/description render in full; card height grows to fit; no truncation. | buildable now |
| FR-07 | Form: Title required, Description optional, Type dropdown (Professional/Personal). | buildable now |
| US-004 / FR-14 | Archive type filter (All/Pro/Personal) shows only the selected type. | buildable now |
| US-005 / FR-15 | Archive period filter (month/year) shows only goals set/completed in that period. | buildable now (OQ-05 = custom ranges?) |
| FR-12 / FR-13 / FR-16 | Archive: reverse-chron default; rows show title/type/date set/date completed/view-edit; pagination within filtered results. | buildable now |
| FR-11 | Section labelled “Goals Archive” (not “Rock Archive”). | buildable now |
| US-006 / FR-18 | A line manager viewing a direct report’s page sees that report’s current + previous goals; a non-manager gets 403. | blocked: G3, OQ-01 (org-chart source; current-OS visibility) |
| FR-19 / FR-20 | Manager-of-managers sees the full reporting chain; People Team/Admin sees all org goals. | blocked: G3 (recursive reporting chain) |
| FR-17 | Default: a user sees only their own goals. | buildable now (enforced server-side) |
| US-007 / FR-21,22,23 | Monday report lists no-goal users scoped to recipient’s visibility, grouped by dept for People Team. | blocked: G3, OQ-04 (chain; delivery channel) |
| FR-24 | Flag when a user sets the same/near-identical goal 3+ consecutive weeks. | blocked: G4 (near-identical definition) |
| FR-25 | Flag goal-drift over a rolling period. | blocked: OQ-03 (threshold) |
§B. Data Model Stub
Section titled “§B. Data Model Stub”| Entity | Owner | Fields (indicative) | Notes |
|---|---|---|---|
| Goal | Gospl | id, tenantId, userId, title, description?, type(professional|personal), weekStart(date), status(active|complete), dateSet, dateCompleted? | weekStart anchors a goal to a week; column = derived from current week vs weekStart (G2). |
| ↳ spine link | OPEN (G1) | possibly outcomeId/actionId → spine | If a weekly goal IS a spine node, it references spine entity IDs (PR-09) rather than standing alone. Resolve before finalising this table. |
| Reporting line / org chart | Gospl org | read here | Source for manager visibility (FR-18/19/20) + report scoping. Recursive chain = recursive CTE (PR-13). Same reportsTo as Personal Page Role (FR-20). |
| Week definition | Gospl | weekStartDay, timezone | Defines Previous/This/Next + rollover + the Monday report trigger (G2). |
| Non-setter report run | Gospl | scheduled Monday job | Scoped per recipient visibility; grouped by dept for People Team. |
Tenancy/permission: tenant-scoped; visibility hierarchy here (team member / line
manager / manager-of-managers / People Team-Admin) is the richest role model across
all specs so far — propose adopting it as the basis for principles.md PR-06. Manager
access is org-chart-driven (graph), not a flat role.
AI flags (FR-24/25): v1 is lightweight. “Near-identical” (FR-24) can start as normalised string match; semantic match is a later pgvector use — don’t pull the vector store in for v1. Drift (FR-25) is a rolling completion-rate threshold (OQ-03), no embeddings needed.
§C. Clarifications Needed
Section titled “§C. Clarifications Needed”Blocking:
- G1 — Is a Weekly Goal a node in the actions→outcomes spine, or a standalone personal entity? The operating model names Weekly Goals as the Personal Page’s hook into the spine (PR-09). If goals ARE spine outcomes/actions, this entity references spine IDs and the spine spec must exist first; if standalone, it’s self-contained. Highest-leverage question here — it changes the data model and the build order. → architecture decision (you + external team), ideally at/after the stack call.
- G2 — Week definition + rollover. Week start day + timezone now live in
admin/tenant-settings(defaultEurope/London, Monday start). Remaining: exact rollover moment (Monday 00:00 tenant-time?) and the rejoin-after-leave edge. The 3-column model + Monday report read tenant settings. - G3 — Org-chart / reporting-line source for manager visibility (FR-18/19/20) and
report scoping. Same
reportsTograph as the Role Page? Recursive chain for manager-of-managers. → confirm single source; ties to PR-06. - G4 — “Same or near-identical goal” (FR-24) definition: exact/normalised string, or fuzzy/semantic? Sets whether v1 is string-match (recommended) or needs embeddings.
- OQ-03 — Goal-drift threshold (consecutive incomplete weeks) before FR-25 flags.
- OQ-04 — Monday report delivery: in-app, email, or both? New cross-cutting dependency — a notification/email channel (MVP nominations used inline-only). If email is required, that’s shared infrastructure to stand up. → product decision.
Non-blocking (assume + confirm):
- OQ-01 Current-OS goal visibility — validates the §5 hierarchy. Assume hierarchy as written.
- OQ-02 Entry point (homepage / nav / both) — assume reachable; wire when design lands.
- OQ-05 Archive filter: month/year granularity assumed sufficient for v1; custom ranges deferred unless confirmed.
§9. Out of Scope (v1)
Section titled “§9. Out of Scope (v1)”AI goal suggestions/coaching; goal-drift analytics beyond basic flagging (→ Annual Development Plan); whole-company visibility for all users; Rocks / Annual Development Plan integration (separate spec).