You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Board has no single closed local observation model that can represent session, work, run, role, provider, repository/worktree, lifecycle, freshness, and next-actor evidence without importing private provider state or inventing activity.
Scope
Define a versioned provider-neutral Board observation/read-model contract and offline adversarial fixtures. Reuse the lifecycle state/reason/action vocabulary and safe public_projection semantics from #906. Define validated opaque correlation keys, exact repository and resolved-worktree binding, event time versus observation time, per-source freshness/coverage, observed versus provider-reported state, safe work stages, waiting/attention reasons, next-actor precedence, PR/head association, heartbeat evidence, and explicit unavailable/null measurement semantics.
This issue defines the local Board contract and fixtures only. It does not change presentation, add producers, create a second lifecycle state machine, widen public_projection, add cloud events/fields, or map Slack-specific data.
Schema and fixtures cover assigned, dispatched, observed running, provider-reported progress, waiting for user, waiting for approval, implementation complete, failed, cancelled, reviewed, ready, merged, stale, source unavailable, unlinked, and no-work states.
One work item can carry multiple ordered reasons but yields one deterministic primary next actor/action from a closed table.
Freshness and coverage are per source; failed refresh preserves a dated last observation and cannot become a live claim.
A lease proves coordination ownership only, labels prove requests only, process presence without binding stays unlinked, and a publisher workflow is distinct from the authoritative gate verdict.
Missing time, cost, quality, productivity, or provenance remains explicit null/unavailable and cannot serialize as zero or success.
Session objective/title is allowed only through an explicitly authorized bounded display label.
Contract and fixtures contain no source, diff, task/issue body, prompt, transcript, message, context packet, graph content, credentials, raw provider output, personal path, PID-derived identity, or secret.
Unknown enum/field, identity mismatch, worktree mismatch, cross-session join, invalid timestamp, and oversized value fail closed.
Initial ownership
Provider-neutral session/events track. Planned builder: Code Mower Codex. This contract must be reviewed before dependent producer or presentation merges.
Code Mower delivery
Produce one independently reviewable PR for this issue. Record the named Code Mower builder, keep one writer on the branch, obtain an independent audit against the exact current head, resolve every P0/P1/P2 finding, and pass focused tests, relevant full tests, privacy checks, normal CI, and code-mower/gate. Upload only allowlisted metadata. No umbrella PR.
Existing PR and refreshed completion gate
Continue existing PR #956; do not create a duplicate implementation PR. It is draft and behind main. Refresh #956 first, then #957, preserving one writer per source area. Re-run the independent exact-head audit, focused/relevant tests, CI, and authoritative gate on every changed head; historical passing evidence is retained only for its original head. Contract/fixture implementation may merge after those checks without waiting for the Graphify tag. Board release #952 remains ordered after #915's release or explicit deferral.
#935 is complete through #973 and its resolver must be reused. Role/contributor/evidence integrations remain #975/#963/#976 and their consuming children; no new provider state machine or cloud fields are added here.
Part of #945 and roadmap #900.
Problem
Board has no single closed local observation model that can represent session, work, run, role, provider, repository/worktree, lifecycle, freshness, and next-actor evidence without importing private provider state or inventing activity.
Scope
Define a versioned provider-neutral Board observation/read-model contract and offline adversarial fixtures. Reuse the lifecycle state/reason/action vocabulary and safe
public_projectionsemantics from #906. Define validated opaque correlation keys, exact repository and resolved-worktree binding, event time versus observation time, per-source freshness/coverage, observed versus provider-reported state, safe work stages, waiting/attention reasons, next-actor precedence, PR/head association, heartbeat evidence, and explicit unavailable/null measurement semantics.This issue defines the local Board contract and fixtures only. It does not change presentation, add producers, create a second lifecycle state machine, widen
public_projection, add cloud events/fields, or map Slack-specific data.Coordination and dependencies
Acceptance criteria
Initial ownership
Provider-neutral session/events track. Planned builder: Code Mower Codex. This contract must be reviewed before dependent producer or presentation merges.
Code Mower delivery
Produce one independently reviewable PR for this issue. Record the named Code Mower builder, keep one writer on the branch, obtain an independent audit against the exact current head, resolve every P0/P1/P2 finding, and pass focused tests, relevant full tests, privacy checks, normal CI, and
code-mower/gate. Upload only allowlisted metadata. No umbrella PR.Existing PR and refreshed completion gate
Continue existing PR #956; do not create a duplicate implementation PR. It is draft and behind main. Refresh #956 first, then #957, preserving one writer per source area. Re-run the independent exact-head audit, focused/relevant tests, CI, and authoritative gate on every changed head; historical passing evidence is retained only for its original head. Contract/fixture implementation may merge after those checks without waiting for the Graphify tag. Board release #952 remains ordered after #915's release or explicit deferral.
#935 is complete through #973 and its resolver must be reused. Role/contributor/evidence integrations remain #975/#963/#976 and their consuming children; no new provider state machine or cloud fields are added here.