Files
interactive-story/planning/PROJECT-SOURCES.md
T
JesseMarkowitzandClaude Opus 5 279a871a77 Planning: add the M4 implementation review report and rotate M3's
Reporting pass only. No application code, no test, and no product
requirement changes.

Result: PASS WITH CORRECTIVE WORK REQUIRED.

M4's Definition of Done is met and demonstrated at the API level, including
across a real two-process restart. The load-bearing constraint holds under
inspection rather than assertion: the only head-field assignment M4 added
anywhere in the backend is one line in head.py, and an exhaustive grep of the
diff finds no second mechanism that forks, prunes memories, reconstructs
state, filters the transcript or recomputes Redo.

Three corrective items, all M4's own, none in the head model:

- GET /checkpoints is an N+1 fetching whole Action rows including prose --
  measured at 53 SELECTs for 25 Save Points against 4 for the branch panel,
  in a codebase that keeps test_egress.py for this exact class of mistake;
- deleting a branch silently deletes Save Points naming it, and the branch
  panel's confirmation does not say so. M4 added the consequence to an
  existing destructive action without updating its warning;
- the shipped D11/L03 tests restart a client, not a process, so the suite is
  weaker than the acceptance items it is named for. Both pass here only
  because the report re-ran them across a real process boundary by hand.

The browser smoke test is NOT PERFORMED, for M4 and still for M3. Firefox is
a snap that hangs past 90s on a trivial headless screenshot; there is no
Xvfb, no display, no driver library. Two consecutive milestones now carry an
unperformed browser requirement, which the report raises as a standing
acceptance risk rather than a defect in either milestone's code.

Evidence recorded: 680 backend tests pass (42 M4, 130 M3 invariants, 93
security/local-only), frontend lint and build clean, Docker build clean,
migration 80 verified against a representative pre-M4 database with both
cascades and zero possible orphans, and I04 verified through a real round
trip with branch ids remapped 1->3 and 2->4.

M4 is NOT accepted by this report, and M5 is NOT authorized. That decision
belongs to whoever reviews this.

Rotation: planning/reports/M3-IMPLEMENTATION-REPORT.md moves to
planning/archive/milestone-reports/ as a pure rename, contents unedited
(git reports 100% similarity, 0 insertions, 0 deletions). Six path
references in five active documents are updated because the path changed
and for no other reason -- no status claim, no wording change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PWU4gTfLYY6Qq9U7aa9Qw2
2026-09-03 19:15:53 -04:00

122 lines
4.4 KiB
Markdown

# ChatGPT Project Sources — what to upload
This file exists for one purpose: to tell the repository owner which files
belong in the **InteractiveStory** ChatGPT project's Sources. It is not a
documentation index — `planning/README.md` is that.
`planning/project-sources.txt` is the same list as bare paths, one per line, for
gathering the files.
The rule behind the list: **upload what is authoritative now.** A project source
is treated as current fact by whatever reads it, so a superseded document
uploaded alongside a current one does not add context — it manufactures a
conflict.
Refresh the Sources whenever the planning package is revised (`VERSION.md`
records each revision) and whenever a milestone completes.
## REQUIRED PROJECT SOURCES
Twenty-eight files.
**Repository orientation**
```text
README.md
DEVELOPMENT.md
PROVENANCE.md
```
**The planning index and its version**
```text
planning/README.md
planning/VERSION.md
```
**Product requirements and design**
```text
planning/SPECIFICATION.md
planning/TECHNICAL-DESIGN.md
planning/DATA-MODEL.md
planning/STORY-BRANCH-SEMANTICS.md
planning/CONTEXT-AND-MEMORY.md
planning/IMPORTED-KNOWLEDGE-DESIGN.md
planning/SECURITY-THREAT-MODEL.md
planning/MEDIA-EXTENSION-CONTRACT.md
planning/BROWSER-UX-SPEC.md
```
**Implementation plan and acceptance contract**
```text
planning/BUILD-MILESTONES.md
planning/V1-ACCEPTANCE-TESTS.md
planning/TEST-CAMPAIGN-FIXTURE.md
```
**The active ADRs** — all eleven. They are short, and each one closes a question
that will otherwise be reopened.
```text
planning/DECISIONS/001-browser-first.md
planning/DECISIONS/002-ollama-only-v1.md
planning/DECISIONS/003-authoritative-local-state.md
planning/DECISIONS/004-local-only-production.md
planning/DECISIONS/005-branch-preserving-history.md
planning/DECISIONS/006-genre-agnostic-core.md
planning/DECISIONS/007-future-media-extension.md
planning/DECISIONS/009-ai-dnd-production-base.md
planning/DECISIONS/010-explicit-typed-narrative-state-events.md
planning/DECISIONS/011-local-inference-endpoint-policy.md
planning/DECISIONS/012-active-head-non-destructive-history.md
```
ADR **008** is deliberately absent: it was the process gate requiring Phase 0 to
close before production work began, Phase 0 closed on 2026-09-01, and it is now
in `planning/archive/decisions/`.
## CURRENT-MILESTONE SOURCE
One file, and it changes as development progresses:
```text
planning/reports/M4-IMPLEMENTATION-REPORT.md
```
M3 is the most recently completed milestone, and M4 is the next to be briefed.
This report is M3's review *and* its primary evidence record — no separate M3
baseline report was produced — so it is the only place some of what M3 left
behind is written down, including the browser smoke test M3 still owes.
**Replace it, do not accumulate.** When M4's report lands, remove this one from
the project Sources and upload M4's instead. The repository does the same thing:
`planning/reports/` holds the current milestone's report and
`planning/archive/milestone-reports/` holds the rest.
## DO NOT UPLOAD AS PROJECT SOURCES
Not because these are worthless — because a source is read as current fact, and
these are not current.
- **Everything under `planning/archive/`.** The Phase 0 research reports, the
Phase 0B recommendation and spikes, the completed M1 and M2 milestone reports,
and archived ADR 008. Every conclusion they reached that still matters has
already been applied to the active documents; what is left is superseded
reasoning that will contradict the current package if uploaded beside it.
- **Older milestone reports**, once their successor exists. Uploading M1, M2 and
M3 together produces three descriptions of the same subsystem at three
different stages.
- **Source code.** `backend/`, `frontend/`, tests, migrations. The planning
package describes the system; the code is read in the repository, where it can
be searched and run.
- **Inherited upstream documentation.** Upstream AI-DnD's `plan/` build log and
`docs/` guides, generated HTML and screenshots were deleted from this
repository on 2026-09-03 for exactly this reason: they describe a hosted,
scripted, multi-user product this fork removed. Do not re-upload them from
upstream or from Git history.
- **Generated HTML, images and screenshots.** They add tokens, not facts.
- **`repo-inventory.txt` or any other local scratch output.** Not tracked, not
authoritative, stale the moment it is written.