Skip to content

design(pm-stack): one identity across the stack — SSO propagation from the public entry into every layer, roles replace asserted authorship #1253

Open

Description

@dezren39

Part of epic #1184 (PM stack coherence — ideal-system design series, 2026-10-26).

Why

Today authorship on dashboard writes is caller-asserted (tracked in #941) and each layer (aggregator, Kaneo, Pad, Grist) has its own account story, so 'who did this' is unenforceable and per-person permissions don't exist. The ideal system has one identity: the Cloudflare Access identity at the public entry (#1182) propagates through every layer, and roles (owner / orchestrator / agent / read-only) are checked server-side on every write.

Design questions to answer

  • Identity propagation mechanism per layer: Access JWT validation in the aggregator, and what Kaneo/Pad/Grist can accept (header trust behind the entry point, native SSO, or API-token-per-role)?
  • Role model: which roles exist, what each may do (comment kinds, triage actions, dispatches, admin), and where the role mapping lives?
  • Agent identity: how do fleet agents authenticate as themselves (not as Drew), and how are their actions attributed in the audit trail?
  • Migration: how do existing dashboard comments/registry records map to real identities, and what happens to anonymous reads?
  • Break-glass: what still works when Access or the IdP is down, without reopening asserted authorship?

Acceptance

Acceptance criteria

  • A design note is landed in the repo doc/ answering the design questions above: per-layer identity propagation, the role model and where the role mapping lives, agent identity/attribution, migration of existing records, and the break-glass posture.
  • Implementation issues are filed and linked as sub-issues of epic(dashboard): PM stack coherence - single-URL, fresh data, triage-able, hierarchical #1184.
  • Open questions needing Drew are named explicitly in the design note.
  • The design preserves an honest break-glass path that does not reopen caller-asserted authorship.

Activity

  1. added
    kind/featureNew feature or capability request
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    on Oct 27, 2026
  2. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  3. added
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    source/humanFiled directly by a human
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 28, 2026
  4. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: epic #1184 (parent) · #1182 (the Cloudflare Access entry whose identity this design propagates) · #941 (caller-asserted comment authorship — the concrete weakness this replaces) · #1255 (conversational layer, inherits this identity model).

    Notes: Still live — verified this run: no merged PR implements SSO propagation; merged-PR searches return only unrelated number coincidences. The issue arrived with a ## Acceptance section; the appended ## Acceptance criteria formalizes it. effort/l: four systems (aggregator, Kaneo, Pad, Grist) with different auth stories.

    Risks / suggested approach: Design-only deliverable in this issue: the acceptance bar is the landed design note plus filed, linked implementation issues — per the standing rule, a design with no implementation link is not finished work. The per-layer mechanism survey (what Kaneo/Pad/Grist can actually accept) is the long pole — do that verification before committing the design to a propagation mechanism.

    — repo-fleet-monitor intake pass, 2026-10-28T03:55Z

  5. added
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    and removed on Nov 1, 2026
  6. 34 remaining items

  7. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · PR opened (task 4964 complete as pr_opened)

  8. chatgpt-codex-connector commented on Nov 3, 2026

    @chatgpt-codex-connector

    You have reached your Codex usage limits. You can see your limits in the Codex usage dashboard.

  9. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    work/assignedQueue worker lifecycle state
    on Nov 3, 2026
  10. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  11. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · triaged (live design task; one implementation slice already in flight)

    What the issue actually asks for

    A design note in doc/, not code: per-layer identity propagation (aggregator, Kaneo, Pad, Grist), the role model (owner / orchestrator / agent / read-only) and where role mapping lives, agent identity and attribution, migration of existing comments/registry records, and an honest break-glass path that does not reopen caller-asserted authorship. Acceptance is that note plus implementation issues filed as sub-issues of #1184, with Drew-only questions named explicitly.

    Verdict: live, and partially in flight — do not start the design blind

    Ordering and blockers (recorded per the packet acceptance)

    1. The design note must adjudicate fix(aggregator): verify privileged comment authors (#941) #4832 vs feat(pm-stack): derive authors from Access JWT (#1253) #4882 rather than design a third mechanism: either Access JWT is the identity source of truth (operator token remains a non-Access fallback/break-glass credential) or the reverse. That verdict belongs in the note, and the losing PR should be reconciled, not merged alongside.
    2. Write the note after one of the two authorship PRs lands (otherwise the note describes an unverified mechanism), and cite the settled design(pm-stack): one public URL for the dashboard behind Cloudflare Access (settled access model, not yet implemented) #1182 access model plus the identity conventions in doc/2026-10-30T22-45-00Z_design_hosted_provisioning_sso_binding.md (sub as the stable key, sign-in not equal to binding) so the PM-stack layer design and the hosted-ID design do not diverge.
    3. Implementation issues (role model, Kaneo/Pad/Grist propagation, migration, break-glass) can be filed from the note immediately; their build order is blocked by design(pm-stack): one public URL for the dashboard behind Cloudflare Access (settled access model, not yet implemented) #1182's go.

    Disposition

  12. added
    status/triagedTriaged and routed (see agent note)
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 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/codeeffort/lLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a humanstatus/triagedTriaged and routed (see agent note)task/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