# Documentation Policy And Structure Implementation Plan ## Status Proposed. ## Objective Implement the target documentation model defined in [Documentation Policy And Structure Alignment](documentation.md). This is a documentation-only effort: do not change Go code, runtime behavior, configuration schemas, generated assets, or application features while following this plan. Complete the stages below in order. Treat each stage as an independently reviewable change boundary and run its stated checks before proceeding. Preserve the technical intent of the feature roadmap and the existing current-behavior documentation unless repository evidence shows that it is stale. ## Governing Decisions - Use `../notarius/docs/policy/documentation.md` as the structural and policy baseline for Narratio's documentation policy, adapting project names, canonical paths, and Narratio-specific document types. - Keep architecture, documentation, and testing under `docs/policy/`. - Move contributor orientation from `docs/policy/development.md` to `docs/development.md`. - Rename `docs/internal/README.md` to `docs/internal/overview.md`. - Replace the root `AGENTS.md` with the exact two-line content specified in Stage 4. - Keep `docs/troubleshooting.md` as a Narratio-specific canonical owner even though the current Notarius ownership table has no corresponding row. - Add `docs/integrations/whisperx.md`; WhisperX is an implemented external HTTP boundary and is the only current first-class integration missing a focused integration contract. - Keep directory index filenames not otherwise selected by this plan unchanged. In particular, do not rename `docs/integrations/README.md`. - Do not create `docs/adr/` until Narratio has an ADR to record. Do not create placeholder API or consumer documentation. - Do not copy Notarius product or runtime contracts. Use Notarius only as the policy and information-architecture model. - Outside `docs/roadmap/`, describe implemented behavior only. Roadmaps may describe proposed behavior but must not be cited as current contracts. - When documentation and implementation disagree, inspect the implementation and tests and make current-behavior documentation accurate. Do not alter code in this effort. Record a genuine runtime defect or unresolved ambiguity for separate work rather than silently documenting desired behavior as current. - Do not add a documentation tool dependency solely for this migration. Use repository scripts only if they already exist; otherwise use the validation procedure in Stage 8. ## Stage 1: Replace The Documentation Policy ### Goal Make `docs/policy/documentation.md` the authoritative Narratio documentation ownership and lifecycle policy before changing the rest of the documentation. ### Work 1. Read the complete current files: - `../notarius/docs/policy/documentation.md`; - `docs/roadmap/documentation.md`; - `docs/policy/documentation.md`; and - the current Narratio documentation tree. 2. Replace `docs/policy/documentation.md` with a Narratio-adapted version of the current Notarius policy. Preserve the Notarius section model: - Purpose; - Core Rules; - Canonical Ownership; - Boundary Rules; - Architecture Decision Records; and - Maintenance. 3. Make these Narratio-specific adaptations: - use Narratio rather than Notarius throughout; - set the contributor owner to `docs/development.md`; - set architecture, documentation, and testing owners to their files under `docs/policy/`; - set the implemented component inventory to `docs/internal/overview.md`; - retain the Notarius conditional rows for public HTTP and consumer documentation; - add a troubleshooting row assigning symptom-driven diagnosis and safe remedies to `docs/troubleshooting.md` while keeping commands, configuration, and operational procedures with their existing owners; - retain `docs/integrations/` as the owner of external and durable contracts; and - retain the rule that nonexistent interface-specific documents are not required until the interface exists. 4. In the boundary rules, explicitly separate: - README orientation, contributor routing, normative architecture, and the implemented internal inventory; - CLI invocation, configuration meaning, operations, and troubleshooting; - integration contracts and internal implementation; and - documentation security rules, application security invariants, credential-supply mechanisms, operational handling, and internal mechanisms. 5. Preserve the lightweight Nygard ADR format and supersession rules from the Notarius policy. Do not create an ADR directory in this stage. 6. Remove the old documentation profiles, prescribed per-document outlines, and obsolete paths rather than appending the new policy beneath them. ### Checks - Search the finished policy for `Notarius`, `docs/architecture.md`, `docs/policy/development.md`, and `docs/internal/README.md`; none should remain. - Confirm every canonical owner in the feature roadmap appears consistently in the policy. - Run `git diff --check -- docs/policy/documentation.md`. ### Completion Criteria - The policy closely follows the current Notarius policy while expressing the Narratio-specific ownership model. - It describes target canonical paths even when a later stage will perform the physical rename. - It contains no implementation sequence or future runtime claim. ## Stage 2: Refocus The Architecture Policy ### Goal Make `docs/policy/architecture.md` the concise normative owner of Narratio's current system shape, dependency boundaries, invariants, safety properties, and non-goals. ### Work 1. Review the current architecture policy, the feature roadmap, the new documentation policy, `../notarius/docs/policy/architecture.md`, and the current internal overview and focused internal documents. 2. Rewrite or reorganize `docs/policy/architecture.md` using the Notarius architecture policy as a style and ownership reference, not as a source of Narratio runtime facts. 3. Preserve and clearly state Narratio's existing normative decisions: - a small, explicit, stage-driven orchestrator rather than a generic DAG or workflow engine; - Narratio ownership of orchestration, configuration resolution, run and session state, artifact and path modeling, manifests, resume, and publish; - isolation of WhisperX, Seriatim, Audita, Scriptorium, notification, and object-storage details behind adapters; - strict, centralized configuration and narrow templating; - centralized local and remote path construction and confined writes; - manifest-driven stage progress and transactional stage completion; - the remote publish commit boundary in which `current/run_id.txt` is written last; - private campaign-data and secret-handling invariants; - deterministic ordering and repeatable orchestration where practical; and - the existing architectural non-goals. 4. Keep package names and concrete component inventories out of architecture except where a name is essential to express a boundary. Route concrete ownership to `../internal/overview.md` and focused internal docs. 5. Replace the general testing inventory with a short architectural testing expectation and a link to `testing.md`. Package- or subsystem-specific test details belong in internal docs when useful. 6. Replace documentation-rule duplication with a short requirement and a link to `documentation.md`. 7. Link operational layout and lifecycle statements to `../operations.md` and external contract statements to `../integrations/` where useful. Do not duplicate their complete contracts. 8. Remove all obsolete references, especially `docs/documentation/policy.md` and `docs/architecture.md`. 9. Do not invent ADR links. Mention `docs/adr/` only as the future home of significant decision history. ### Checks - Search the file for `docs/documentation/policy.md`, `docs/architecture.md`, and `docs/internal/README.md`; none should remain. - Confirm links resolve relative to `docs/policy/`. - Compare every retained invariant with the existing architecture policy and relevant current internal documentation; no invariant may be weakened by omission merely to shorten the document. - Run `git diff --check -- docs/policy/architecture.md`. ### Completion Criteria - Architecture owns normative system rules but not the package inventory, general testing policy, documentation policy, CLI reference, configuration reference, or operational procedures. - Existing Narratio safety and publish invariants remain explicit. ## Stage 3: Move And Rewrite The Contributor Guide ### Goal Create the canonical first-read contributor landing page at `docs/development.md` and remove its obsolete policy location. ### Work 1. Move `docs/policy/development.md` to `docs/development.md` using a normal repository rename so history remains recognizable. 2. Rewrite it as a concise, table-of-contents-adjacent landing page modeled on `../notarius/docs/development.md`, adapted entirely to Narratio. 3. Begin with a short orientation stating that Narratio is a stage-driven Go orchestrator and route readers to: - `README.md` for product context; - `policy/architecture.md` for normative system boundaries; and - `internal/overview.md` for implemented component ownership. 4. Add a `What To Read` table with task-specific routes for at least: - locating current component ownership; - architecture, boundaries, invariants, or safety changes; - documentation changes; - adding, reviewing, rewriting, or deleting tests; - CLI behavior; - configuration loading or user-visible configuration; - session workflow, restore, status, cleanup, and object storage; - stage behavior and pipeline sequencing; - adapters and external contracts; - manifests, artifacts, workspace paths, and publish behavior; - examples; and - proposed or unimplemented behavior. 5. For each row, link both the internal implementation guide and public or external contract when those have distinct ownership. Do not restate their rules in the table. 6. End with concise validation guidance: - use focused package tests while iterating; - run `go test ./...`; - run `go vet ./...`; and - run `go build ./cmd/narratio` for repository-wide changes. 7. Remove the old repository-layout inventory, detailed change playbooks, dependency policy, and duplicated coding conventions. Route those topics to architecture, internal documentation, public contracts, examples, and the testing or documentation policy instead. 8. Update direct references to the contributor guide in files already changed in Stages 1 and 2 if any transitional link remains. Broader navigation is handled in Stage 5. ### Checks - Confirm `docs/development.md` exists and `docs/policy/development.md` does not. - Confirm all links in the new file resolve relative to `docs/`. - Confirm the guide contains no package inventory or second definition of a public contract. - Run `git diff --check -- docs/development.md`. ### Completion Criteria - A new maintainer or coding agent can choose the correct canonical reading path from one short document. - The contributor guide is navigational rather than a fourth normative policy. ## Stage 4: Replace The Repository Agent Instruction ### Goal Make `AGENTS.md` a stable pointer to the task-specific contributor guide. ### Work Replace the entire root `AGENTS.md` contents with exactly these two lines, including the line break and final period: ```text Please review `docs/development.md` for initial orientation in this repository and follow its task-specific reading guide. ``` Do not retain the previous instruction, add headings, add generated markers, or append repository policy details. ### Checks - Run `git diff --check -- AGENTS.md`. - Verify exact content with: ```sh diff -u <(printf '%s\n' 'Please review `docs/development.md` for initial orientation in this repository' 'and follow its task-specific reading guide.') AGENTS.md ``` ### Completion Criteria - The comparison is empty and `AGENTS.md` contains no other text. ## Stage 5: Align Structural Entry Points And Navigation ### Goal Complete the selected structural parity changes and make every primary entry point use the new canonical paths. ### Work 1. Rename `docs/internal/README.md` to `docs/internal/overview.md`. 2. Refocus the renamed file as the implemented component inventory: - state its boundary against architecture and public/operator contracts; - show the high-level execution path from `cmd/narratio` through `internal/app`, configuration and composition, stages and adapters, manifests and artifacts, and durable outputs; - provide a compact component table for the executable, app orchestration, configuration, stages, adapters, manifests, artifacts/path safety, previous-session cache, logging, and artifact policy; and - retain links to every focused internal document. 3. Keep the canonical stage order in the internal overview only as an implemented inventory summary. Link to stage documents for mechanics and to CLI/operations for user-visible execution semantics. 4. Update `README.md` while keeping it short: - preserve Narratio's product description and minimal successful command; - link to `docs/development.md` and `docs/internal/overview.md`; - include the documentation, architecture, and testing policies in a maintainer-oriented portion of the link list without turning the README into contributor guidance; and - retain user links to CLI, configuration, operations, troubleshooting, integrations, and examples. 5. Update all references throughout `README.md`, `docs/`, and roadmap files from `docs/policy/development.md` to `docs/development.md`, and from `docs/internal/README.md` to `docs/internal/overview.md`. Fix relative links according to the referencing file's directory rather than performing a blind textual replacement. 6. Correct other obsolete structural references already known in `docs/roadmap/notarius-extract-stage.md`, including `docs/architecture.md`, so it points to `docs/policy/architecture.md` and the now-existing `docs/development.md`. Do not change that roadmap's feature design or claim that extraction is implemented. 7. Keep `docs/integrations/README.md` as the integrations index for now; update its links and ownership language as necessary, but do not rename it. ### Checks - Search the repository documentation, excluding this implementation plan and its feature roadmap, for `docs/policy/development.md`, `docs/internal/README.md`, `docs/architecture.md`, and `docs/documentation/policy.md`; none should remain. The two planning documents may name old paths when specifying the required migrations. - Confirm `README.md`, `docs/development.md`, and `docs/internal/overview.md` form a coherent orientation chain. - Run `git diff --check` for all changed Markdown files. ### Completion Criteria - The physical file layout matches the canonical ownership table. - All primary entry points and known inbound links use the new locations. - No compatibility stub is left at either old path. ## Stage 6: Audit User, Operator, And Integration Contracts ### Goal Give volatile public and external facts one canonical owner while preserving useful task-oriented guidance. ### Work 1. Review `docs/cli.md`, `docs/config.md`, `docs/operations.md`, `docs/troubleshooting.md`, every file under `docs/integrations/`, maintained examples, and the corresponding Go implementations and tests. 2. For code discovery, follow repository instructions: use the codebase knowledge graph first, then use text search for literal commands, fields, defaults, paths, messages, Markdown, YAML, and other non-code content. 3. Make ownership conform to policy: - CLI owns commands, arguments, flags, invocation semantics, output conventions, and exits; - configuration owns discovery, precedence, fields, defaults, environment overrides, and validation; - operations owns runtime workflows, physical local and remote layout, resume, cleanup, permissions, recovery, and operational limits; - troubleshooting owns symptom-led diagnosis and safe fixes, linking rather than redefining other contracts; and - integrations own external protocols, file formats, request/result shapes, logical durable outputs, and compatibility behavior. 4. Preserve concise cross-cutting workflows in the document whose audience owns the task. Replace repeated volatile definitions with stable summaries and direct links. 5. Create `docs/integrations/whisperx.md`. Derive its current contract from `internal/adapters/whisperx`, `internal/stage/transcribe.go`, configuration, and tests. Cover only: - Narratio's purpose for the integration; - the HTTP adapter boundary; - request and response expectations; - retry, timeout, cancellation, validation, and failure semantics; - deterministic or concurrency behavior that is externally relevant; and - links to configuration for operator-selected values and to internal docs for implementation mechanics. Do not duplicate the configuration field table or physical workspace paths. 6. Add WhisperX to `docs/integrations/README.md` and correct the index's description: integration contracts are externally observable boundaries, not merely implementation-level references. 7. Review the Audita, Scriptorium, and Seriatim documents for the same boundary. Keep their protocol and data contracts; move or replace configuration field definitions and internal runner wiring with links when duplicated. 8. Verify every documented command, flag, field, default, environment override, exit behavior, path, and integration guarantee against code or a focused test. If a current fact cannot be verified, remove unsupported specificity or record the issue for separate follow-up. ### Checks - Compare CLI command and flag inventories with `internal/app` command parsing and its tests. - Compare configuration tables with `internal/config` structs, defaults, normalization, loading, validation, and tests. - Compare operational path and lifecycle claims with `internal/artifacts`, `internal/manifest`, `internal/app`, `internal/stage`, and their tests. - Compare each integration contract with its adapter and stage boundary tests. - Confirm troubleshooting entries use symptom, likely cause, diagnostic step, safe fix, and relevant links. - Run focused tests only when needed to verify a disputed contract; no code changes are authorized. - Run `git diff --check` for changed documentation. ### Completion Criteria - Each volatile user, operator, and integration fact has one authoritative definition. - The new WhisperX contract is discoverable and implementation-accurate. - Task-oriented workflows remain usable without maintaining parallel reference tables. ## Stage 7: Audit Internal Documentation And Examples ### Goal Make internal documents explain implementation without redefining architecture, public contracts, external contracts, or future work, and confirm maintained examples remain canonical. ### Work 1. Review every focused file under `docs/internal/` against its current package implementation and focused tests. 2. For each internal document, retain or establish: - purpose and implemented owner; - internal collaborators and execution flow; - inputs, outputs, and state transitions expressed at the internal boundary; - package-local guarantees, failures, and safety invariants; - links to relevant tests or test areas when they materially help a maintainer; and - links to public, operator, configuration, or integration contracts rather than duplicate definitions. 3. Audit the highest-drift topics explicitly: - canonical stage order, prerequisites, invalidation, skip, force, resume, and failure behavior; - session and run manifest states and transitions; - artifact identities, resolution rules, checksums, and current-state pointers; - workspace, cache, spool, logs, reports, and object-storage keys; - restore discovery, planning, conflict handling, execution, and reporting; - publish upload ordering and commit semantics; - adapter composition and subprocess behavior; and - path confinement, deletion, and cleanup safety. 4. Where the same internal fact appears in several focused documents, select the component that owns it and use links from consumers. Do not over-prune a short invariant when repeating it is necessary to prevent an unsafe local change; in that case, state the invariant briefly and link to its normative owner. 5. Review all complete YAML and input artifacts under `examples/`: - keep complete copyable files there rather than in prose; - ensure documentation links to them rather than maintaining full duplicate examples; - confirm they contain no credentials or private campaign content; and - verify they load and validate through existing tests where such coverage already exists. 6. Do not modify application code or invent new test infrastructure. A missing example test may be recorded for later code work; it is not in scope for this documentation-only implementation. ### Checks - Search internal docs for duplicated configuration field/default tables, CLI flag tables, complete external schemas, and physical operations procedures; replace inappropriate copies with links. - Compare the stage inventory in `docs/internal/overview.md` with the implemented stage registry. - Run the existing example/config validation tests identified in `docs/development.md` or the current test suite. - Run `git diff --check` for changed documentation and examples. ### Completion Criteria - Internal documentation is an accurate component-level implementation guide. - Architecture and public/external contracts remain authoritative at their respective boundaries. - Complete examples are centralized, valid, discoverable, and secret-free. ## Stage 8: Perform Repository-Wide Validation And Close The Roadmap ### Goal Verify the migrated documentation as a coherent whole and record completion only after every acceptance criterion is satisfied. ### Work 1. Review `README.md`, `AGENTS.md`, `docs/development.md`, all policy files, all user/operator references, all integration and internal documents, all roadmaps, and all maintained examples as one navigation system. 2. Search for obsolete paths and project-name leakage: ```sh rg -n 'docs/policy/development\.md|docs/internal/README\.md|docs/architecture\.md|docs/documentation/policy\.md' README.md AGENTS.md docs --glob '!docs/roadmap/implementation.md' --glob '!docs/roadmap/documentation.md' rg -n 'Notarius' README.md AGENTS.md docs --glob '!docs/roadmap/notarius-extract-stage.md' ``` The first search must return no matches. Review every match from the second; Narratio may legitimately mention the Notarius product or integration, but copied Notarius policy language must not remain. 3. Validate local Markdown file and directory links with a reproducible script that scans `README.md`, `AGENTS.md`, and `docs/**/*.md`, resolves relative targets from each source file, strips anchors and query fragments, ignores external URLs and pure anchors, and fails for missing local targets. Use an existing repository checker if present. Otherwise run a temporary script without adding it or a new dependency to the repository. 4. Manually inspect anchor links and directory links because a basic local-path checker may not validate them fully. 5. Check formatting and whitespace: ```sh git diff --check ``` 6. Run the complete existing validation suite: ```sh go test ./... go vet ./... go build ./cmd/narratio ``` 7. Review the feature roadmap acceptance criteria one by one. Confirm that: - canonical ownership is explicit and reflected by actual content; - current behavior and future roadmap work are separated; - examples and commands match implementation; - no sensitive data was introduced; - no obsolete path or compatibility stub remains; and - this effort changed documentation only. 8. If all criteria and checks pass, change the status in `docs/roadmap/documentation.md` from `Proposed.` to `Completed.` and change this plan's status from `Proposed.` to `Completed.`. Do not mark either complete while required work or an unexplained validation failure remains. 9. If a validation failure predates this work and is demonstrably unrelated, record the exact command, failure, and evidence in the implementation handoff rather than changing application code. Documentation-link or content failures introduced or exposed by this migration must be fixed before completion. ### Completion Criteria - All Stage 8 searches and documentation checks pass. - `go test ./...`, `go vet ./...`, and `go build ./cmd/narratio` pass, or a precisely evidenced unrelated pre-existing failure is reported. - Both roadmap documents are marked `Completed.` only after the intended final state is present. - The final handoff lists changed documents, validation commands and results, and any explicitly out-of-scope follow-up without claiming unperformed work.