Skip to content

I3146 — A closed session record says whether it is complete, and one that changed the tree without saying what it served is not

Derive a completeness verdict for every closed record (complete, incomplete with named reasons, legacy-unverifiable) and for the calling provider session's open episode; report it on doctor, check and finish; keep episode_closed, task_completed, verified and accepted as four distinct facts.

BLOCKED wave 3 · p1 · implementation profile · parallel safe

Part of the-session-domain-is-written-once — The session lifecycle is written by the typed domain, and the shell only parses and renders.

Blocked. This issue cannot start until I3142 is done. The status is derived from that, not declared.

Objective

Derive a completeness verdict for every closed record (complete, incomplete with named reasons, legacy-unverifiable) and for the calling provider session's open episode; report it on doctor, check and finish; keep episode_closed, task_completed, verified and accepted as four distinct facts.

Why

On 2026-09-11 the owner asked why a record had no progress or description and why that was not enforced. The body is now composed (sessions/README.md), but the validator still checks shape only, and session/v1 leaves tasks, issues and milestones as arrays with no constraint (share/schemas/majordomus/session-record/session-record.v1.schema.json). Proposed in ADR 0182 (A closed session record is judged by what it can attribute, not only by its schema) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c116#0, chatgpt-majordomus:c116#3.

Current state

Records with changed_files or commits and empty tasks/issues validate clean; an interrupted record with no handover validates clean.

Desired state

The verdict is derived, never stored as authored text; a record from before the verdict existed is legacy-unverifiable, not invalid.

Scope

  • apps/majordomus-cli/src/session
  • lib/session.sh
  • lib/doctor.sh
  • lib/finish.sh
  • docs/CONTINUITY.md

Out of scope

  • Rewriting existing records
  • A session/v2 schema
  • Changing session-record.v1 (a declared reason lives in the ledger)

Dependencies

What waits on this

Acceptance criteria

  • Changed files plus empty attribution and no declared reason is incomplete
  • Interrupted with neither handover nor continuation reason is incomplete
  • doctor, check and finish name the verdict and its reasons
  • The verdict distinguishes closed, completed, verified and accepted
  • Each new case named here takes its number from `scripts/case-numbers next` and is announced on the board before the file is written (ADR 0053); a case number written in this record before that is provisional

Validation

  • bash test/run.sh --no-skips 63_session_records 61_session_envelope
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test session_domain

Evidence required

  • case_record_states_completeness

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3146.yaml. Read it back with majordomus plan show I3146.

Searches the titles and descriptions of every page this site publishes.