docs: correct stale references in canonical specs and permanent docs - #105
Merged
Conversation
An audit of all six canonical specs against the six permanent docs and the
running code found eight places where the written record no longer matched
what ships. None are behavior changes; each aligns text with code that is
already merged.
Canonical specs:
- video-frame-extraction: replaced the placeholder Purpose ("TBD - created by
archiving change add-integration-tests") with a real one that also names
where access control is specified.
- video-frame-extraction: "Processed Files Listing" and "Processed File
Download" still described the pre-Phase-2 contract — every zip in outputs/
listed to everyone, download gated on existence alone. Phase 2 made both
owner-scoped (main.go:416-422, 448-453) and put its delta in
identity-authentication and video-processing-access, leaving this spec
asserting the opposite. Rewritten as amended requirements with new
scenarios rather than patched sentences, including the deliberate
indistinguishability of not-found and not-owned responses.
- ddd-architecture: the "exactly eight phases" scenario asserted docs/roadmap.md
cites openspec/changes/establish-ddd-architecture-foundation/design.md; that
change archived and the file cites openspec/specs/ddd-architecture/spec.md.
Permanent docs:
- domain-model.md: UserID was described as living in pkg/, which does not
exist; it is in internal/identity/domain/user_id.go. Now labelled as target
vs. current state, per ddd-architecture's own rule that unimplemented
components be marked as planned.
- domain-model.md: cited change names implement-videojob-persistence and
implement-notifications, neither of which exists in the Change Backlog.
- architecture.md: docker-compose.yml is no longer a lone PostgreSQL service
(postgres, app, app-test); the workflow list omitted auto-update-pr-branches.yml.
- flows.md: the API compatibility table said GET /api/status "Lists all ZIPs in
outputs/", contradicting architecture.md and README.md, which correctly scope
it to the caller.
docs/roadmap.md: removed the fix-stale-roadmap-link-in-ddd-architecture-spec
Change Backlog row, whose entire scope is done above — leaving it would mark
finished work as not-started.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Corrects stale specifications and documentation to match the current owner-scoped video-processing behavior and repository structure.
Changes:
- Documents owner-scoped status and download behavior.
- Corrects architecture, domain-model, workflow, and roadmap references.
- Removes a completed documentation-hygiene backlog item.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
openspec/specs/video-frame-extraction/spec.md |
Updates purpose and ownership contracts. |
openspec/specs/ddd-architecture/spec.md |
Corrects the canonical roadmap link. |
docs/roadmap.md |
Removes the documentation-hygiene entry. |
docs/flows.md |
Documents owner-scoped endpoints. |
docs/domain-model.md |
Corrects phase and UserID details. |
docs/architecture.md |
Updates Compose and workflow inventory. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The requirement inherited "a Portuguese error message" from its pre-Phase-2 text, but main.go:412 and main.go:419 both return the English `File not found`. Naming the actual body also reinforces the indistinguishability guarantee the same requirement makes. The 400-level upload-validation messages are unaffected — those really are Portuguese (main.go:202). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Audit of all six canonical specs against the six permanent docs and the running code. Eight corrections, no behavior change — every edit aligns text with code that is already merged.
Canonical specs
video-frame-extraction/spec.mdTBD - created by archiving change add-integration-tests. Update Purpose after archive.identity-authentication,video-processing-access)video-frame-extraction/spec.mdProcessed Files Listingsaid/api/statusreturns "the list of zip files currently present inoutputs/";Processed File Downloadgated only on existencemain.go:416-422,main.go:448-453), with new scenariosddd-architecture/spec.mddocs/roadmap.mdcitesopenspec/changes/establish-ddd-architecture-foundation/design.mdopenspec/specs/ddd-architecture/spec.md, which is what the file actually says since that change archivedThe
video-frame-extractionone is the substantive fix. Phase 2 changed/api/statusand/download/:filenamefrom "anyone sees everything" to owner-scoped, wrote its delta into two new specs, and left this older spec asserting the pre-Phase-2 contract. It is written as amended requirements with added scenarios rather than a sentence patch, so the spec doesn't read as though ownership was always specified there.Permanent docs
domain-model.mdUserIDwas described as defined inpkg/.pkg/doesn't exist;UserIDis ininternal/identity/domain/user_id.go:15. Now split into target vs. current state — the section had no phase label, so it read as current, whichddd-architecture:243forbidsdomain-model.mdimplement-videojob-persistenceandimplement-notifications; neither exists in the Change Backlog. Phase 3 is decomposed into five differently-named rows, Phases 4–8 aren't decomposed at allarchitecture.mddocker-compose.ymldescribed as "Local/CI PostgreSQL service for identity persistence tests"; it has three services (postgres,app,app-test)architecture.mdauto-update-pr-branches.ymlflows.mdGET /api/status"Lists all ZIPs inoutputs/", contradictingarchitecture.md:73andREADME.md:73, which correctly scope it to the callerRoadmap
Removed the
fix-stale-roadmap-link-in-ddd-architecture-specChange Backlog row — its entire scope is theddd-architecturefix above. Leaving it would advertise finished work asnot-started.Deliberately not touched
container-image/spec.md:35says the image must "require no environment variables to start". That is currently accurate —setupIdentityreturns a nil module and no error when both identity variables are unset. It only becomes false whenenforce-mandatory-identity-configships, and editing it now would make a canonical spec describe unimplemented behavior. That change'stasks.mdhas nocontainer-imagedelta and needs one — flagging it here rather than pre-emptively breaking the spec.Verification
### Requirement:/#### Scenario:structure and GIVEN/WHEN/THEN shape —video-frame-extractionparses as 8 requirements / 14 scenarios with no incomplete scenario. This matters becauseopenspec validatetargets changes, notopenspec/specs/, so these files get no schema check; the archive/promotion logic parses that structure.git diff --checkclean..go/go.mod/go.sum) in the diff, so the localgo test ./... -vgate does not apply and was not run.🤖 Generated with Claude Code