Skip to content

pm-stack(aggregator): /today render 500s on a lined-up task with a non-GitHub ref — objectives call refUrl unguarded and the section gate never checks linedUp ref #6174

Closed

Description

@dezren39

Summary

pm-stack/aggregator — the /today render crashes (throws, served as the error-boundary 500) when an orchestration-section lined-up task carries a ref that is not a GitHub owner/repo#N ref. This is the same failure class PR #6149 fixed today for tierItemCard on the Needs-you page, left unguarded on the Today page's objectives path — and the section validator that is supposed to be the only gate never checks the lined-up ref field at all, not even its type.

Chain of the defect (all on current main 1a069c3ff2):

  • src/feed.ts:223 isLinedUpElement — the per-element gate for goal linedUp arrays — checks title, horizon, status, and horizonWhy, but not ref: a string like goal_b647ff5c92f5, or even a non-string (12345), passes isOrchestrationSection.
  • src/work-items.ts:191 assembleWorkItems copies ref: task.ref onto the canonical work item with no validity check; a tier merge can also supply it (if (!match.ref && t.ref) match.ref = t.ref), and tier refs are known to legitimately carry tracked-goal ids (that is exactly the live data that broke Needs-you in fix(aggregator): Needs-you render no longer 500s on a tier item with a non-GitHub ref #6149).
  • src/derive.ts:724 todayFromSection copies ref: item.ref onto today's objectives (items with horizon === "today" and a goal).
  • src/render.ts:3368 the objectives render calls refUrl(o.ref) unguarded: refUrl → parseRef throws Error: not a repo-qualified ref: …. The sibling sites fixed in fix(aggregator): Needs-you render no longer 500s on a tier item with a non-GitHub ref #6149 guard with isValidRef (src/render.ts:2489, :2524), and sessionRecordLine wraps refUrl in try/catch — the objectives site does neither.

Evidence (verified this run, laptop probe against the real aggregator sources)

Probe: ~/git/fleet/probe-today-ref/probe.ts on the laptop (bun, imports the real src/feed.ts, src/derive.ts, src/render.ts at 1a069c3ff2; section built in the shape of test/orchestration.test.ts's SECTION fixture, one goal with a horizon: "today" lined-up task):

  • ref: "goal_b647ff5c92f5" → isOrchestrationSection true; todayFromSection objective carries the goal-id ref; renderTodayBody THREW Error: not a repo-qualified ref: goal_b647ff5c92f5
  • ref: 12345 (non-string) → validator true; renderTodayBody THREW the same error
  • Control ref: "developing-today/code#812" → validator true; renders OK (len 1311) with the GitHub link

So one publisher-supplied lined-up task — a goal id copied into ref is a realistic shape, since the same publisher puts goal ids in tier refs in live data (#6149) — takes down the whole /today page and its /frag/today fragment, instead of taking the designed invalid-section fallback or rendering the ref as plain text.

Why it matters

/today is the dashboard's daily front page. The orchestration section is republished by an external job every run; its refs are publisher data, not aggregator-controlled constants. #6149 showed this exact input class occurs in live data and 500s a whole page render; the objectives path has the identical unguarded call, one page over. The validator's silence on ref also breaks the boundary contract the rest of the section gate is built on (#949/#2417/#3897: fields consumers dereference are validated at the gate, or consumers guard) — here neither side holds.

Acceptance criteria

Related

Activity

  1. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  2. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    task/triageQueue packet kind: verify, reproduce, and route this item
    source/creatorFiled by the new-issue-creator job
    priority/normalOrdinary priority (the default)
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  3. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · filed

    • Agent: new-issue-creator job (Lane B, new-issue-creator-code-b)
    • Session / ID: new-issue-creator-code-b run 2026-11-05 02:50 CST
    • Found via: filed this run
    • Task: Triage the /today objectives refUrl crash: a validator-passing orchestration section whose lined-up task carries a non-GitHub ref (goal id / non-string) throws in renderTodayBody and 500s /today + /frag/today; the section gate (isLinedUpElement) never checks linedUp ref. Verified by laptop probe ~/git/fleet/probe-today-ref at 1a069c3 (goal-id and numeric refs throw, GitHub-ref control renders).
    • Expectation: effort s — done looks like: objectives render non-GitHub refs as plain text (the fix(aggregator): Needs-you render no longer 500s on a tier item with a non-GitHub ref #6149 tier-card treatment) or the ref is dropped at a named boundary, with end-to-end pinning tests for both the bad-ref and valid-ref cases.
    • Links: probe ~/git/fleet/probe-today-ref (laptop); sibling fix PR fix(aggregator): Needs-you render no longer 500s on a tier item with a non-GitHub ref #6149
  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  5. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  6. 123 remaining items

  7. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage)

  8. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  9. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  10. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    on Nov 6, 2026
  11. added a commit that references this issue on Nov 6, 2026
  12. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    task: 10943
    state: done
    lane: code-l
    summary: PR #6481 merged (merge commit e16e649). Fix landed: invalid linedUp[].ref dropped at the orchestration-section consumption boundary, task retained; valid owner/repo#N refs still link; renderer safe for non-linkable refs. Codex review on head 4a2089f: no findings. Laptop verification (prior shift): orchestration tests 41/41, full aggregator suite failure count identical to clean main (22 pre-existing), tsc clean. Issue auto-closed by the merge.

  13. removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/pm-stackpm-stack (Pad/Grist) in developing-today/codekind/bugSomething isn't working (prefixed form of the classic bug label)priority/normalOrdinary priority (the default)source/creatorFiled by the new-issue-creator jobsource/design-architectFiled by the repo design architect jobstatus:donetask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions