Skip to content

Spec: Weekly Goals

FieldValue
ModuleGospl Platform (People)
Sourcev0.1 Draft — June 2026
StatusDraft — acceptance criteria already present per US; Claude added build status, data model, clarifications. Awaiting owner sign-off.
OwnerTBD (People Team)
Contract/contracts/people/weekly-goals.yaml
Design linkTBD — entry point (OQ-02)
Spine relationshipOPEN — 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.


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.

  • 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.

RefAcceptance criterionStatus
US-001 / FR-03,04,09Add-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-10Cancel/close exits the form with no goal created, at any point.buildable now
US-003 / FR-08The card’s inline complete control marks the goal done in-column; no complete toggle exists in the form.buildable now
FR-01 / FR-02Three columns render; within each, Professional listed before Personal with a separator.blocked: G2 (week-boundary rule defines column membership)
FR-05A goal can be dragged between This Week and Next Week; its week assignment updates and persists.blocked: G2
FR-06Goal title/description render in full; card height grows to fit; no truncation.buildable now
FR-07Form: Title required, Description optional, Type dropdown (Professional/Personal).buildable now
US-004 / FR-14Archive type filter (All/Pro/Personal) shows only the selected type.buildable now
US-005 / FR-15Archive period filter (month/year) shows only goals set/completed in that period.buildable now (OQ-05 = custom ranges?)
FR-12 / FR-13 / FR-16Archive: reverse-chron default; rows show title/type/date set/date completed/view-edit; pagination within filtered results.buildable now
FR-11Section labelled “Goals Archive” (not “Rock Archive”).buildable now
US-006 / FR-18A 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-20Manager-of-managers sees the full reporting chain; People Team/Admin sees all org goals.blocked: G3 (recursive reporting chain)
FR-17Default: a user sees only their own goals.buildable now (enforced server-side)
US-007 / FR-21,22,23Monday report lists no-goal users scoped to recipient’s visibility, grouped by dept for People Team.blocked: G3, OQ-04 (chain; delivery channel)
FR-24Flag when a user sets the same/near-identical goal 3+ consecutive weeks.blocked: G4 (near-identical definition)
FR-25Flag goal-drift over a rolling period.blocked: OQ-03 (threshold)
EntityOwnerFields (indicative)Notes
GoalGosplid, 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 linkOPEN (G1)possibly outcomeId/actionId → spineIf 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 chartGospl orgread hereSource for manager visibility (FR-18/19/20) + report scoping. Recursive chain = recursive CTE (PR-13). Same reportsTo as Personal Page Role (FR-20).
Week definitionGosplweekStartDay, timezoneDefines Previous/This/Next + rollover + the Monday report trigger (G2).
Non-setter report runGosplscheduled Monday jobScoped 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.

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 (default Europe/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 reportsTo graph 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.

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).