From 51a07f3de30829cfa3a0a35f25597122f345e483 Mon Sep 17 00:00:00 2001 From: Abiorh001 Date: Sun, 2 Aug 2026 15:14:22 +0100 Subject: [PATCH 1/3] docs: replace calendar roadmap with v0.1 capability status --- .../CHUNK_MAP.md | 8 + .../DECISIONS.md | 19 ++ .../DISCOVERY.md | 26 ++ .../INTENT.md | 31 ++ .../PLAN.md | 13 + .../REVIEW.md | 26 ++ .../RISKS.md | 8 + .../STATUS.md | 7 + .../WS-DOCS-001-01-current-v01-entry-path.md | 59 ++++ AGENTS.md | 10 +- CONTRIBUTING.md | 21 ++ README.md | 53 +++- .../workstream_architecture_brief.md | 11 +- .../workstream_architecture_brief.pdf | Bin 2318094 -> 2318029 bytes docs/architecture_system_architecture.md | 6 +- docs/checker_trial_failure_catalog.md | 3 + docs/diagrams/README.md | 8 +- docs/diagrams/backend_v01_components.md | 2 +- docs/diagrams/workstream_v01_container.md | 3 +- docs/historical_planning.md | 30 ++ docs/operations_reviewer_workflow.md | 2 +- docs/product_brief.md | 7 +- docs/roadmap_30_day_master_plan.md | 4 + docs/roadmap_day_by_day_execution_plan.md | 4 + docs/roadmap_implementation_backlog.md | 4 + docs/roadmap_status.md | 300 ++++++++---------- docs/roadmap_week1_backend_plan.md | 4 + docs/spec_chunk_10_checker_trial.md | 3 + ...ec_chunk_5_submission_packet_foundation.md | 3 + docs/spec_chunk_6_checker_contract_records.md | 3 + docs/spec_chunk_7_checker_runner_registry.md | 3 + ...k_8_submission_artifact_policy_checkers.md | 3 + docs/spec_chunk_9_pre_review_gate.md | 3 + docs/spec_week2_checker_framework.md | 4 + 34 files changed, 487 insertions(+), 204 deletions(-) create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/CHUNK_MAP.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DISCOVERY.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/INTENT.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/PLAN.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/REVIEW.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/RISKS.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/STATUS.md create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/chunks/WS-DOCS-001-01-current-v01-entry-path.md create mode 100644 docs/historical_planning.md diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/CHUNK_MAP.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/CHUNK_MAP.md new file mode 100644 index 000000000..e38dedebe --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/CHUNK_MAP.md @@ -0,0 +1,8 @@ +# Chunk Map + +| Chunk | Purpose | State | +| --- | --- | --- | +| `WS-DOCS-001-01` | Modernize the current v0.1 documentation entry path and archive expired calendar framing | In progress | + +This initiative intentionally uses one documentation-only chunk. Splitting the +entry pages would allow contradictory wording to remain between merges. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md new file mode 100644 index 000000000..27cbde74f --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md @@ -0,0 +1,19 @@ +# Decisions + +## Capability-Based Status + +Current status uses implemented, in-progress, remaining, and historical +capability categories. It does not use weeks, days, or completion promises. + +## Preserve History + +Superseded calendar plans and early chunk records remain in place for audit and +design history. Clear notices and a historical index prevent them from being +mistaken for current authority. + +## One Current Entry Path + +`README.md` summarizes the product and v0.1 state, `docs/roadmap_status.md` owns +the detailed capability ledger, `CONTRIBUTING.md` owns the contributor path, +and `AGENTS.md` adds repository-specific agent rules. Other documents link to +these owners instead of duplicating current status. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DISCOVERY.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DISCOVERY.md new file mode 100644 index 000000000..557ab5f3c --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DISCOVERY.md @@ -0,0 +1,26 @@ +# Discovery + +## Findings + +- `README.md` presents expired day/week plans and early chunk specifications as + the active planning package. +- `docs/roadmap_status.md` is an early chronological log, not a reliable view of + current `main`. +- `AGENTS.md` retains a Week 1 implementation rule even though the underlying + backend-contract-first constraint remains valid without a calendar label. +- `CONTRIBUTING.md` correctly uses the simple engineering loop but does not + explain which documents are current authority and which are history. +- Architecture and diagram entry pages use "first 30 days" for the current + v0.1 boundary. +- Historical plans and trial records remain useful evidence and should be + preserved with explicit archive notices. + +## Sources Of Truth + +- Product definition: `README.md`, `docs/glossary.md`. +- Architecture boundary: `docs/architecture_lockdown.md` and accepted ADRs. +- Implemented behavior: code, migrations, tests, and merged commits on `main`. +- Work in progress: open pull requests and their reviewed contracts. +- History: imported files under `docs/reference_specs/` unless explicitly + adopted by a current document, closed initiative records, internal reviews, + and superseded calendar plans. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/INTENT.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/INTENT.md new file mode 100644 index 000000000..b2b8c22a6 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/INTENT.md @@ -0,0 +1,31 @@ +# WS-DOCS-001: Current v0.1 Documentation + +## Intent + +Make the repository entry path describe Workstream's current v0.1 product, +architecture, implementation state, and contribution workflow without using an +expired calendar as the roadmap. + +## Why Now + +The root README still presents a 30-day plan, week plans, and early chunk +specifications as the primary planning package. `docs/roadmap_status.md` still +describes the authorization foundation as the current phase even though later +authorization, artifact, project-guide, and cross-initiative work has merged. +That makes current capability, historical implementation evidence, and future +work difficult to distinguish. + +## Non-Goals + +- No runtime, API, schema, migration, workflow, or CI behavior changes. +- No deletion or rewriting of immutable reference specifications, internal + review evidence, or initiative history. +- No promise of release dates or completion dates. +- No claim that a planned or draft capability is available. + +## Success + +A new contributor can start with `README.md`, `AGENTS.md`, and +`CONTRIBUTING.md`, understand the v0.1 boundary, locate current status, tell +current guidance from history, and contribute through the simple engineering +loop. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/PLAN.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/PLAN.md new file mode 100644 index 000000000..01d0a2e31 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/PLAN.md @@ -0,0 +1,13 @@ +# Plan + +1. Replace the README planning package with a current v0.1 entry path and a + capability-based status summary. +2. Rewrite roadmap status around implemented, in-progress, and remaining + capability milestones. +3. Make `AGENTS.md` and `CONTRIBUTING.md` explicitly route contributors to + current authority and preserve the simple engineering loop. +4. Remove calendar framing from current architecture and diagram entry pages. +5. Label superseded calendar plans and early chunk/trial records as historical + without rewriting their evidence. +6. Run stale-wording, link, and documentation consistency checks, followed by + proportionate internal review. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/REVIEW.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/REVIEW.md new file mode 100644 index 000000000..7997e0fc2 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/REVIEW.md @@ -0,0 +1,26 @@ +# Internal Review + +## Documentation + +Pass. No missing documentation, navigation, historical-labeling, or link +findings. + +## Product and Operations + +Initial findings removed the remaining day-based success metric and corrected +reputation wording so v0.1 preserves authoritative contribution evidence while +runtime reputation projection remains deferred. Re-review passed. + +## Architecture + +Initial low-risk findings removed calendar framing from the product brief and +moved reviewed cross-initiative contracts out of the implemented-capability +list. Re-review passed with no architecture drift. + +## Senior Engineering + +The generated PDF was added explicitly to scope, imported reference inputs were +distinguished from canonical repository specifications, and PDF regeneration +provenance was recorded. Re-review passed. The former schema-v1 +`chunk-scope-json` mechanism was not restored because current repository policy +explicitly retired that runtime and does not require it for pull requests. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/RISKS.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/RISKS.md new file mode 100644 index 000000000..6cacae457 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/RISKS.md @@ -0,0 +1,8 @@ +# Risks + +| Risk | Mitigation | +| --- | --- | +| Documentation claims planned behavior is implemented | Classify capabilities as implemented, in progress, planned, or historical; require merged-code evidence for implemented claims. | +| Current status becomes another chronological log | Organize by durable capability milestones and update the ledger when capability boundaries change. | +| Historical evidence is lost | Preserve old plans and implementation records behind an explicit historical index. | +| Entry pages contradict canonical contracts | Keep terminology aligned with the glossary, architecture lockdown, accepted ADRs, and stale-contract scanners. | diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/STATUS.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/STATUS.md new file mode 100644 index 000000000..093594c28 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/STATUS.md @@ -0,0 +1,7 @@ +# Status + +`WS-DOCS-001-01` is locally complete and ready for pull-request review. + +The entry-path rewrite is complete locally. Deterministic documentation checks +pass, and all valid internal review findings have been resolved. Merge remains +a human decision after GitHub checks and external review. diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/chunks/WS-DOCS-001-01-current-v01-entry-path.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/chunks/WS-DOCS-001-01-current-v01-entry-path.md new file mode 100644 index 000000000..7122efc46 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/chunks/WS-DOCS-001-01-current-v01-entry-path.md @@ -0,0 +1,59 @@ +# WS-DOCS-001-01: Current v0.1 Entry Path + +## Scope + +Update repository-facing product, contributor, status, architecture-navigation, +and historical-plan documentation so current guidance is capability-based. + +## Allowed Files + +- `README.md` +- `AGENTS.md` +- `CONTRIBUTING.md` +- `docs/roadmap_status.md` +- `docs/historical_planning.md` +- `docs/architecture_brief/workstream_architecture_brief.pdf`, as the generated + companion to its changed Markdown source +- existing calendar-plan, early checker/chunk, architecture, product, reviewer, + and diagram Markdown documents touched only to remove current calendar + framing or add a historical notice +- this initiative directory + +## Not Allowed + +- backend or frontend code +- tests, migrations, workflows, or package configuration +- immutable files below `docs/reference_specs/` or `docs/internal_reviews/` +- product behavior changes + +## Acceptance Criteria + +- Root entry pages contain no Week 1/Week 2/30-day roadmap framing. +- Current status is organized by capability and does not overclaim draft work. +- Historical plans remain accessible but cannot be mistaken for current + sequencing or authority. +- Contribution guidance clearly identifies present sources of truth. +- Markdown links and repository stale-wording checks pass. + +## Risk + +L2 documentation risk: broad discoverability impact, no runtime change. + +## Verification + +- `python3 scripts/check_markdown_links.py` +- `python3 scripts/check_stale_workstream_wording.py` +- `python3 scripts/check_stale_authorization_docs.py` +- `python3 scripts/check_stale_artifact_contracts.py` +- `git diff --check` + +The architecture PDF is regenerated from its changed Markdown source with the +Pandoc/WeasyPrint command documented in +`docs/architecture_brief/render_pdf.sh`. Diagram assets are unchanged. + +## Reviewers + +- documentation +- product/operations +- architecture +- senior engineering diff --git a/AGENTS.md b/AGENTS.md index 4785be572..e05a3a4a3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -35,6 +35,12 @@ Workstream is how Flow measures, certifies, and coordinates useful human-agent w - If updating the roadmap, update both local XLSX and CSV exports. - Do not import XLSX into Google Sheets with "replace spreadsheet"; use a temporary sheet and copy only the roadmap tab. - Prefer evidence-backed docs over vague product claims. +- Treat `docs/roadmap_status.md` as the current capability ledger. Calendar + plans, early chunk specifications, imported files under + `docs/reference_specs/`, and internal reviews are historical evidence unless + a current entry page explicitly adopts them. Canonical repository + specifications remain normative. Do not use dates, weeks, or delivery + windows as implementation authority. - For workflow states, persisted tokens, API enum values, roles, and lifecycle names, prefer subsystem- or actor-specific names over vague labels. If the naming has product or security impact and the user is unavailable, run the required internal reviewer tracks before locking it. - Keep v0.1 focused on project guide -> task -> submission -> checks -> review -> revision -> contribution records -> conditional compensation awards/fulfillment -> reputation signals. - Review decision stored values are only accept, needs_revision, or reject. @@ -42,7 +48,9 @@ Workstream is how Flow measures, certifies, and coordinates useful human-agent w - Backend API is locked as Python with FastAPI. - ORM, migrations, and API schemas are locked as SQLAlchemy 2.x async + Alembic + Pydantic schemas. - Workstream verifies external Flow authentication tokens; do not add Workstream-owned login, signup, password reset, password storage, or primary auth sessions. -- Week 1 implementation is backend-first; do not start frontend work until backend contracts and lifecycle guards are stable. +- v0.1 delivery is backend-contract-first. Do not add frontend behavior until + the backing API contracts and lifecycle guards for that surface are stable + and tested. - Execution is async-first; do not document synchronous-first checkers or jobs. - FastAPI background tasks are acceptable for simple local v0.1 jobs; use Celery or equivalent durable workers when retries, scheduling, isolation, or distributed execution are needed. - Postgres is the record database. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 67c71664e..9b0697186 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,27 @@ or higher-risk work, add a short initiative plan and chunk contract under `.agent-loop/initiatives/`. Existing planning artifacts are useful context, not runtime locks. +## Find The Current Contract + +Before implementation, update from current `main` and read: + +1. [README.md](README.md) for the product boundary and current v0.1 summary. +2. [Current v0.1 Status](docs/roadmap_status.md) for implemented, active, and + remaining capabilities. +3. [Architecture Lockdown](docs/architecture_lockdown.md), accepted ADRs, and + the canonical specification for the subsystem being changed. + +Code, migrations, tests, accepted ADRs, and canonical repository specifications +define implemented or required behavior. Open pull requests describe work in +progress. Calendar plans, early chunk specifications, imported files under +`docs/reference_specs/`, internal review records, and closed initiative records +are useful history unless a current document explicitly adopts them; they are +not by themselves current sequencing or proof that behavior is live. + +Roadmaps and status documents must use capability milestones and evidence. Do +not introduce delivery promises such as day plans, numbered weeks, or rolling +time windows as repository authority. + Contributors with GitHub write access may create a branch, implement a bounded change, and open a pull request without a signed start event, administrator dispatch, active-chunk lease, or loop-memory approval. Contributors without diff --git a/README.md b/README.md index 0a91686f1..effe255f9 100644 --- a/README.md +++ b/README.md @@ -61,22 +61,40 @@ Different projects speak different domain languages, but serious task evaluation Workstream turns that operating knowledge into reusable infrastructure. -## Planning Package +## Current v0.1 State + +Workstream is under active v0.1 development. Progress is tracked by proven +capabilities, not by calendar weeks or promised dates. + +Implemented foundations on `main` include external Flow-token verification, +canonical local actors and authorization, project guides and task records, +submission packets, immutable artifact storage, automated checker execution, +and the pre-review gate. Project-guide ingestion now has typed source handling, +bounded extraction, security controls, and persisted sufficiency evidence. + +Active work is connecting those foundations into the remaining production +lifecycle: authoritative guide binding and reads, review and revision, +contribution records, conditional compensation awards and fulfillment, and +reputation projections. Frontend product work follows stable and tested backend +contracts for the surface it consumes. + +The release bar is a verified end-to-end v0.1 lifecycle, not the completion of +an old timeboxed plan. See [Current v0.1 Status](docs/roadmap_status.md) for the +capability ledger and explicit remaining work. + +## Start Here - [Contribution Guide](CONTRIBUTING.md) -- [Codex Agent Loop](.agent-loop/README.md) -- [Repository Engineering Policy](.agent-loop/policies/repository-engineering-policy.md) -- [30-Day Master Plan](docs/roadmap_30_day_master_plan.md) -- [Roadmap Status](docs/roadmap_status.md) -- [Week 1 Backend Plan](docs/roadmap_week1_backend_plan.md) -- [Week 2 Checker Framework Specification](docs/spec_week2_checker_framework.md) -- [Chunk 6 Checker Contract And Records](docs/spec_chunk_6_checker_contract_records.md) -- [Chunk 7 Checker Runner And Registry](docs/spec_chunk_7_checker_runner_registry.md) -- [Chunk 8 Submission Artifact And Policy Checkers](docs/spec_chunk_8_submission_artifact_policy_checkers.md) -- [Chunk 9 Pre-Review Gate](docs/spec_chunk_9_pre_review_gate.md) -- [Chunk 10 Checker Trial](docs/spec_chunk_10_checker_trial.md) -- [Day-by-Day Execution Plan](docs/roadmap_day_by_day_execution_plan.md) -- [Implementation Backlog](docs/roadmap_implementation_backlog.md) +- [Current v0.1 Status](docs/roadmap_status.md) +- [Product Principles](docs/product_principles.md) +- [Product Brief](docs/product_brief.md) +- [Architecture Lockdown](docs/architecture_lockdown.md) +- [System Architecture](docs/architecture_system_architecture.md) +- [Glossary](docs/glossary.md) +- [Historical Planning Index](docs/historical_planning.md) + +## Product And Operations Documentation + - [Product Principles](docs/product_principles.md) - [Product Brief](docs/product_brief.md) - [First User Flows](docs/product_first_user_flows.md) @@ -101,10 +119,13 @@ Workstream turns that operating knowledge into reusable infrastructure. - [Compensation And Reputation](docs/operations_payment_reputation.md) - [Risk Register](docs/risk_register.md) - [Process Pattern Baseline](docs/process_pattern_baseline.md) -- [Architecture Lockdown](docs/architecture_lockdown.md) - [Glossary](docs/glossary.md) -## Review Passes +## Historical Review Records + +These records preserve earlier product, architecture, process, and adversarial +reviews. They are evidence and design history, not current implementation +status. Current changes receive review through [CONTRIBUTING.md](CONTRIBUTING.md). - [Process Baseline Operations Review](docs/review_process_baseline_operations_review.md) - [Final Product Strategy Review](docs/review_final_product_strategy_review.md) diff --git a/docs/architecture_brief/workstream_architecture_brief.md b/docs/architecture_brief/workstream_architecture_brief.md index 9773a141d..62543dc11 100644 --- a/docs/architecture_brief/workstream_architecture_brief.md +++ b/docs/architecture_brief/workstream_architecture_brief.md @@ -12,7 +12,7 @@ records, compensation award and fulfillment state, and reputation signals. Workstream is how Flow measures, certifies, and coordinates useful human-agent work. -

Scope: v0.1 first 30 days, with future adapter context for identity, task contracts, settlement, and reputation.

+

Scope: bounded v0.1 delivery, with future adapter context for identity, task contracts, settlement, and reputation.

@@ -26,7 +26,7 @@ evidence packet, every valid human decision an immutable Review and reviewer contribution, and every accepted task an immutable FinalAcceptance before the submitter contribution and conditional compensation. -The first 30 days are focused on proving the internal lifecycle: +v0.1 is focused on proving the internal lifecycle: ```text Project Guide -> Task Queue -> Submission Packet -> Checks -> Review @@ -77,7 +77,10 @@ The context diagram shows Workstream as one system inside the broader Flow ecosy ## C2: v0.1 Container View -The container view shows the first 30-day implementation. It is intentionally small: React + Vite for the planned internal operations UI, FastAPI for the backend, Postgres for records, a storage interface for artifacts, and an async checker/job boundary. +The container view shows the bounded v0.1 implementation. It is intentionally +small: React + Vite for the planned internal operations UI, FastAPI for the +backend, Postgres for records, a storage interface for artifacts, and an async +checker/job boundary.
Workstream v0.1 container diagram @@ -175,7 +178,7 @@ Future ERC-8004, ERC-8183, x402, OmniClaw, and USDC integrations do not replace ## Scope Boundary -### Current v0.1 / First 30 Days +### Current v0.1 Boundary - project guide and versioned policy context - task queue and task records diff --git a/docs/architecture_brief/workstream_architecture_brief.pdf b/docs/architecture_brief/workstream_architecture_brief.pdf index 26811596f7424ed7bd59a6f0262776a114256a57..4bab3cb1693a078376c0c0c5c929b0528458a356 100644 GIT binary patch delta 15407 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 diff --git a/docs/architecture_system_architecture.md b/docs/architecture_system_architecture.md index da2d4cf80..f1501853e 100644 --- a/docs/architecture_system_architecture.md +++ b/docs/architecture_system_architecture.md @@ -11,7 +11,11 @@ the REV-13 joint release complete. `docs/spec_review_lifecycle.md` is normative. The architecture stays modular enough to support different project types without becoming abstract to the point that no project can use it. -The visual architecture pack lives in [Architecture Diagrams](diagrams/README.md). It separates the 30-day v0.1 implementation from later adapter boundaries such as ERC-8004 agent identity and reputation, ERC-8183 task contract and escrow, x402 payment requests, OmniClaw settlement orchestration, and USDC settlement. +The visual architecture pack lives in +[Architecture Diagrams](diagrams/README.md). It separates the bounded v0.1 +implementation from later adapter boundaries such as ERC-8004 agent identity +and reputation, ERC-8183 task contract and escrow, x402 payment requests, +OmniClaw settlement orchestration, and USDC settlement. ## High-Level Components diff --git a/docs/checker_trial_failure_catalog.md b/docs/checker_trial_failure_catalog.md index dd17bb782..4774279b6 100644 --- a/docs/checker_trial_failure_catalog.md +++ b/docs/checker_trial_failure_catalog.md @@ -1,5 +1,8 @@ # Checker Trial Failure Catalog +> Historical validation record. It preserves early checker evidence and does +> not define current sequencing or capability status. + ## Purpose This catalog records the Chunk 10 checker trial outcomes. It is the audit note for the first real sample submissions run through the Week 2 checker framework. diff --git a/docs/diagrams/README.md b/docs/diagrams/README.md index a58299132..f84a67fdb 100644 --- a/docs/diagrams/README.md +++ b/docs/diagrams/README.md @@ -2,7 +2,7 @@ This diagram pack explains Workstream at two levels: -- the 30-day v0.1 implementation that is being built now +- the bounded v0.1 implementation that is being built now - the broader Workstream ecosystem that can connect later to external origins, agent identity, task contracts, settlement rails, and portable reputation The architecture diagrams use C4-PlantUML source files so they render with real C4 system, container, component, boundary, and external-system boxes. The task lifecycle sequence remains Mermaid because GitHub renders it directly and the sequence is easier to read in that format. @@ -41,4 +41,8 @@ The rendered SVGs are written to `docs/diagrams/rendered/` and are committed so ## Reading Order -Start with the [System Context](workstream_context.md) to explain what Workstream is and what it does not own. Then use the [v0.1 Container View](workstream_v01_container.md) to show what is actually being implemented in the first 30 days. Use the backend component and lifecycle diagrams when the discussion moves from product architecture into implementation design. +Start with the [System Context](workstream_context.md) to explain what +Workstream is and what it does not own. Then use the +[v0.1 Container View](workstream_v01_container.md) to show the bounded v0.1 +implementation. Use the backend component and lifecycle diagrams when the +discussion moves from product architecture into implementation design. diff --git a/docs/diagrams/backend_v01_components.md b/docs/diagrams/backend_v01_components.md index 1a9b6e7d6..763cf1c69 100644 --- a/docs/diagrams/backend_v01_components.md +++ b/docs/diagrams/backend_v01_components.md @@ -22,7 +22,7 @@ Source: [backend_v01_components.puml](backend_v01_components.puml) ## Current Module Priority -The first 30 days move through the loop in this order: +The v0.1 backend moves through the loop in this dependency order: ```text Projects and guides diff --git a/docs/diagrams/workstream_v01_container.md b/docs/diagrams/workstream_v01_container.md index fdcaed459..26b66ee54 100644 --- a/docs/diagrams/workstream_v01_container.md +++ b/docs/diagrams/workstream_v01_container.md @@ -1,6 +1,7 @@ # Workstream v0.1 Container View -This is the 30-day implementation architecture. It shows the deployable containers and internal runtime boundaries for the current build. +This is the v0.1 implementation architecture. It shows the deployable +containers and internal runtime boundaries for the current build. Future external origins, ERC-8004, ERC-8183, x402, OmniClaw, and USDC settlement are not active v0.1 dependencies. They remain later adapters behind the same records and interfaces. diff --git a/docs/historical_planning.md b/docs/historical_planning.md new file mode 100644 index 000000000..5e8e4fb43 --- /dev/null +++ b/docs/historical_planning.md @@ -0,0 +1,30 @@ +# Historical Planning Index + +These documents record how Workstream's early implementation was planned and +validated. They are preserved for traceability. They do not define current +priority, implementation status, contribution permission, or a delivery +schedule. + +For current work, use [Current v0.1 Status](roadmap_status.md), the code and +tests on `main`, accepted ADRs, and the canonical subsystem specifications. + +## Superseded Calendar Plans + +- [Original 30-Day Master Plan](roadmap_30_day_master_plan.md) +- [Original Day-by-Day Execution Plan](roadmap_day_by_day_execution_plan.md) +- [Original Week 1 Backend Plan](roadmap_week1_backend_plan.md) +- [Original Week 2 Checker Framework Specification](spec_week2_checker_framework.md) +- [Original Implementation Backlog](roadmap_implementation_backlog.md) + +## Early Implementation Records + +- [Submission Packet Foundation](spec_chunk_5_submission_packet_foundation.md) +- [Checker Contract And Records](spec_chunk_6_checker_contract_records.md) +- [Checker Runner And Registry](spec_chunk_7_checker_runner_registry.md) +- [Submission Artifact And Policy Checkers](spec_chunk_8_submission_artifact_policy_checkers.md) +- [Pre-Review Gate](spec_chunk_9_pre_review_gate.md) +- [Checker Trial](spec_chunk_10_checker_trial.md) +- [Checker Trial Failure Catalog](checker_trial_failure_catalog.md) + +Later canonical specifications and initiative records supersede these files +where they describe the same behavior. diff --git a/docs/operations_reviewer_workflow.md b/docs/operations_reviewer_workflow.md index 10259f50d..bde361c6e 100644 --- a/docs/operations_reviewer_workflow.md +++ b/docs/operations_reviewer_workflow.md @@ -214,7 +214,7 @@ create adjudication state, overturn a Review, or mutate immutable history. ## Non-Mutating Quality Sampling -During the first 30 days, audit at least: +For v0.1 operations, audit at least: - 25 percent of accepted submissions - 25 percent of rejected submissions diff --git a/docs/product_brief.md b/docs/product_brief.md index e26f9c571..5eb1ff3f7 100644 --- a/docs/product_brief.md +++ b/docs/product_brief.md @@ -114,7 +114,10 @@ The only v0.1 intake paths are: - manual task creation in the app - import from a controlled markdown or CSV template -External source adapters, origin onboarding, webhook drop notifications, automated routing, owner-agent execution workspace, and on-chain settlement are later work. This keeps the first 30 days focused on proving the lifecycle, not integrating every source. +External source adapters, origin onboarding, webhook drop notifications, +automated routing, owner-agent execution workspace, and on-chain settlement are +later work. This keeps v0.1 focused on proving the internal lifecycle instead +of integrating every possible source or settlement rail. The first version excludes: @@ -144,7 +147,7 @@ Avoid broad gig marketplace positioning until the quality engine is proven. ## Success Metrics -By day 30: +The v0.1 pilot is successful when it demonstrates: - 3 project templates configured - 20 tasks entered diff --git a/docs/roadmap_30_day_master_plan.md b/docs/roadmap_30_day_master_plan.md index 1e8bfeebd..8948f9b9e 100644 --- a/docs/roadmap_30_day_master_plan.md +++ b/docs/roadmap_30_day_master_plan.md @@ -1,5 +1,9 @@ # 30-Day Master Plan +> Historical planning record. This calendar no longer controls current work or +> status. Use [Current v0.1 Status](roadmap_status.md) and the +> [Historical Planning Index](historical_planning.md). + ## Review Lifecycle Status The schedule is planning guidance, not a claim that review/revision routes are diff --git a/docs/roadmap_day_by_day_execution_plan.md b/docs/roadmap_day_by_day_execution_plan.md index 2cd52e78d..be3083b94 100644 --- a/docs/roadmap_day_by_day_execution_plan.md +++ b/docs/roadmap_day_by_day_execution_plan.md @@ -1,5 +1,9 @@ # Day-by-Day Execution Plan +> Historical planning record. This calendar no longer controls current work or +> status. Use [Current v0.1 Status](roadmap_status.md) and the +> [Historical Planning Index](historical_planning.md). + ## Review Lifecycle Status The calendar is sequencing guidance, not implementation status. Review and diff --git a/docs/roadmap_implementation_backlog.md b/docs/roadmap_implementation_backlog.md index 270e729ab..f8c0f0141 100644 --- a/docs/roadmap_implementation_backlog.md +++ b/docs/roadmap_implementation_backlog.md @@ -1,5 +1,9 @@ # Implementation Backlog +> Historical planning record. This backlog no longer controls current priority +> or status. Use [Current v0.1 Status](roadmap_status.md) and the +> [Historical Planning Index](historical_planning.md). + ## Review Lifecycle Status Review/revision entries describe planned, unavailable v0.1 work. They become diff --git a/docs/roadmap_status.md b/docs/roadmap_status.md index 1d94e1ced..239084644 100644 --- a/docs/roadmap_status.md +++ b/docs/roadmap_status.md @@ -1,177 +1,127 @@ -# Workstream Roadmap Status - -Current phase: WS-AUTH-001 authorization foundation before further lifecycle -expansion. - -## Completed - -- Root README. -- Product principles and product brief. -- First user flows. -- 30-day master plan. -- Day-by-day execution plan. -- Implementation backlog. -- Pilot plan. -- System architecture. -- Data model. -- Lifecycle state machine. -- Checker framework. -- Operator workflow. -- Queue policy. -- Reviewer workflow. -- Revision replay. -- Roles and permissions. -- Compensation and reputation. -- Workspace and packet convention. -- Risk register. -- Templates for guides, tasks, submissions, reviews, checkers, revision replay, and prior feedback. -- Decision records. -- Independent review passes. -- Review closure record. -- June 3 architecture proposal preserved and reconciled. -- Architecture lockdown note. -- Week 1 backend chunk plan. -- Chunk 1 backend scaffold. -- Chunk 2 external Flow auth actor boundary. -- Chunk 3 project guide foundation with checker, review, and revision policy - context; compensation is superseded by the independent WS-CON contract. -- Chunk 4 task queue, contributor/reviewer profiles, assignment, claim, start, and task audit events. -- Chunk 5 submission packet foundation with evidence items, versioning, server-stamped locked context, and submission finalization. -- Backend API contract drill through `Project -> Guide -> Task -> Screening -> Ready -> Claim -> Start -> Submit -> automatic pre-review gate`. -- Week 2 checker framework scope specification. -- Chunk 6 checker contract and records specification. -- Chunk 7 checker runner, registry, structural checkers, durable checker records, and API tests. -- Chunk 8 evidence, policy, forbidden-file, confidentiality, and generated-artifact checkers. -- Chunk 9 automatic pre-review gate with pre-submit intake blocking, internal `task_setup_blocked`, trusted checker retry, and contributor redaction. -- Chunk 10 checker trial with the expanded real API sample matrix, failure catalog, false-positive notes, missing-checker notes, and internal verifier evidence. -- Week 2 real HTTP API drill through Flow-token auth, project/guide/task/submission lifecycle, pre-submit checks, automatic checker runs, `pre_submission_checker_failed` intake failures, contributor redaction, internal `task_setup_blocked`, and trusted checker retry. -- Chunk 11 actor identity/profile registry for verified Flow actors. -- Chunk 12 project setup-run and project policy visibility APIs for setup runs, sufficiency reports, submission artifact policies, effective policy, and compiled project pre-submit checker policy. -- Chunk 13 task work-context, contributor submission-requirements, and operator-only locked-context APIs. -- Chunk 14 submission finalization, system actor pre-review gate audit semantics, scoped operator visibility, and HTTP-visible Terminal Benchmark proof. -- Chunk 15 agent-derivation hardening after the accepted no-DB Terminal Benchmark drill exposed a required/forbidden self-conflict. -- Chunk 16 Terminal Benchmark live API drill with privacy-scrubbed evidence and - professional PDF report proving the current lifecycle through HTTP-visible - APIs without database inspection. -- WS-POL-002 post-submit checker foundation planning, including project-scoped - `PostSubmitCheckerPolicy` setup, trusted compiler boundaries, deterministic - runtime separation, and implementation chunk contracts. -- WS-AUTH-001 planning and post-merge memory through PRs #91 and #92, including - the adopted external-auth/local-authorization boundary and 16 bounded chunks. - -## Current Priority - -- `WS-AUTH-001-01` adopts ADR 0012, canonical `/api/v1` authorization - documentation, operational ownership, and deterministic stale-doc gates. -- Token roles and typed workflow profiles are not the target product authority; - later chunks introduce canonical actors, links, grants, permissions, - revocation, and authority evidence before resource-family cutover. -- WS-POL-002-03 is handled separately by PR #90. No WS-POL-002-04 or human - review implementation starts automatically while authorization has priority. - -## Review Tracks Closed - -- Product strategy. -- Architecture. -- Systems architecture. -- Operations and review workflow. -- Process-pattern baseline. -- Adversarial quality. -- Chunk 9 pre-review gate internal verifier pass. -- Chunk 10 checker trial internal verifier pass. - -## Preserved For Later Review Work - -- Review queue scope starts only after the required authorization foundation; - it will consume `review_pending` tasks that already passed internal checkers. -- Reviewer access must be object-level and tied to assigned review work; broad reviewer checker-run access is still intentionally deferred. -- Week 3 must keep review decisions canonical: `accept`, `needs_revision`, and `reject`. -- `needs_revision` from human review must carry `outcome_source = human_review` and a review decision id; checker-caused `needs_revision` keeps `outcome_source = auto_checker`. -- Review findings, revision replay, and reviewer-quality metrics remain later - backend contracts after authorization proof. -- `WS-POL-001-15` hardened the agent-derived submission artifact policy - contract after the accepted no-DB Terminal Benchmark drill exposed a - required/forbidden self-conflict; the drill now passes after hardening. -- `WS-POL-001-16` completed a human-visible Terminal Benchmark live API drill - without database inspection as lifecycle proof and merged through PR #84. -- `WS-POL-002` planning and chunks 01/02 are merged. Chunk 03 is handled in PR - #90; chunk 04 remains inactive while authorization has priority. - -## Pending Before Pilot - -- Create the first pilot project guide from the template. -- Create the first 5 pilot task records. -- Confirm who owns product, engineering, review, operations, and compensation - fulfillment reconciliation during the first build cycle. -- Confirm the first v0.1 project guide uses the locked guide fields, task contract fields, evidence IDs, and contribution record flow. - -## Backend API Contract Drill - -Run from the backend directory against local Postgres: - -```bash -WORKSTREAM_DATABASE_URL= .venv/bin/python scripts/api_contract_e2e.py +# Current Workstream v0.1 Status + +This is the capability ledger for current v0.1 development. It records what is +implemented on `main`, what is being integrated, and what remains before the +v0.1 lifecycle is proven. It intentionally contains no delivery calendar. + +Implementation claims must be supported by code, migrations, tests, and merged +history. A plan, contract, draft pull request, or historical specification is +not evidence that behavior is live. + +## v0.1 Release Boundary + +The target remains: + +```text +Project Guide +-> Task +-> Submission Packet +-> Automated Checks +-> Human Review +-> Revision when required +-> Contribution Records +-> Conditional Compensation Award / Fulfillment +-> Reputation Signals ``` -The script runs migrations forward and exercises project policy visibility plus task context APIs across the following flow: - -`Project -> Guide -> Task -> Screening -> Ready -> Work context -> Submission requirements -> Locked context -> Claim -> Start -> Submit -> automatic pre-review gate` - -## Week 2 Real API Drill - -Run from the backend directory against local Postgres: - -```bash -WORKSTREAM_DATABASE_URL= .venv/bin/python scripts/week2_api_e2e.py -``` - -The script starts a real local API server, issues local Flow-compatible tokens, -runs migrations forward, and exercises: - -`Project -> Guide -> Task -> Screening -> Ready -> Claim -> Start -> Pre-submit checks -> pre_submission_checker_failed | Submit -> automatic lock -> evaluation_pending -> review_pending | checker_caused_revision -> needs_revision -> fixed_resubmission -> evaluation_pending -> review_pending | internal task_setup_blocked -> trusted checker retry` - -It also proves older submissions remain immutable, non-owning contributor calls create -no task-side effects, malicious internal fields are rejected before persistence, -and checker-caused `needs_revision` creates no human review decision. - -## Deterministic Week 2 Closeout Gate - -The Week 2 closeout gate is deterministic and must fail on contract drift. - -Required invariants: - -- Real API drills run only against local `postgresql+asyncpg://` test databases named `workstream_test` or `test_workstream` unless an explicit write-risk override is supplied. -- Pre-submit checker responses are non-authoritative preflight feedback; submission creation is the authoritative intake gate and must not create submissions, checker runs, or lifecycle transitions when blocking failures exist. -- Missing or unexpected pre-submit checker names fail the drill. -- Missing or unexpected durable checker names fail the drill. -- Submission creation returns `finalized_at`, stamps evidence rows, and the - repair-only finalize endpoint is idempotent. -- Automatic checker-run creation, checker terminal status, and task-status transitions are polled because execution is async-first. -- Checker-run list visibility is checked for project manager, assigned contributor, unassigned contributor, and reviewer denial while broad reviewer checker-run access remains deferred. -- Trusted checker retry proves attempt ordering, supersession, and current-run flags. -- API-visible invariants are checked after the real API flows for locked guide/policy context, evidence finalization, checker results, checker counters, current-run uniqueness, and gate audit events. The legacy Week 2 regression script still includes direct database assertions; the accepted no-DB proof is the API contract drill plus the Terminal Benchmark API drill. - -Week 2 closeout validation is not only this script. The full gate is: - -```bash -.venv/bin/python -m ruff check app tests scripts -WORKSTREAM_DATABASE_URL= .venv/bin/python scripts/api_contract_e2e.py -WORKSTREAM_DATABASE_URL= .venv/bin/python scripts/week2_api_e2e.py -WORKSTREAM_DATABASE_URL= .venv/bin/python -m pytest tests/test_checkers.py tests/test_tasks.py -q -WORKSTREAM_DATABASE_URL= .venv/bin/python -m pytest -q -.venv/bin/docstr-coverage --config .docstr.yaml -``` - -The closeout also requires stale wording scan, Markdown link check, and internal verifier evidence before PR. - -## Operating Rule - -No roadmap item is considered closed until it is represented in one of: - -- product spec -- architecture spec -- operation workflow -- template -- checker rule -- decision record -- review closure +The release bar is one secured, observable, end-to-end lifecycle using the +locked backend and storage architecture. Marketplace expansion, blockchain +settlement, external source adapters, automated routing, and agent workspaces +remain outside v0.1. + +## Implemented On `main` + +### Platform foundation + +- FastAPI backend, SQLAlchemy async persistence, Alembic migrations, and + PostgreSQL record storage. +- Async checker and project-setup execution with Celery and Redis where durable + retries and isolation are required. +- Provider-neutral immutable artifact storage with MinIO protocol proof for + local development and CI, plus bounded private processing scratch. +- External integrations composed through the typed ADR 0014 adapter boundary. + +### Identity and authorization + +- External Flow-token verification with issuer boundaries and request context. +- Canonical actors, identity links, actor lifecycle controls, and human lineage. +- Closed permission/action catalogues, deny-by-default authorization, bootstrap + administrator grants, fixed-service identities, and runtime admission. +- Project-role grants, administrative APIs, authority evidence, idempotency, + and PostgreSQL-backed rate controls. +- Project setup and project mutation/read authorization foundations used by the + current guide integration work. + +### Project, task, submission, and checker foundations + +- Project guides, task queue records, task lifecycle guards, work context, and + contributor submission requirements. +- Versioned submission packets with evidence references, locked context, + finalization, and contributor privacy boundaries. +- Typed checker contracts, registry and runner behavior, durable checker + records, pre-submit checks, and the automatic pre-review gate. +- Trusted retry, supersession, audit evidence, and real API contract drills for + the implemented lifecycle. + +### Guide-source and artifact processing + +- Immutable source snapshots, source-media classification, typed extraction + boundaries, and persisted extraction results. +- PDF, DOCX, and XLSX extraction with bounded input handling and OOXML security + controls. +- Image metadata handling and persisted guide-sufficiency evidence. +- Guide materialization from persisted artifact-processing evidence. + +## Integration In Progress + +The following areas have merged planning, contracts, or partial foundations, +but are not all complete as one production path: + +- authoritative project-guide binding and read activation across ART and AUTH; +- reviewed cross-initiative contracts connecting artifact custody with + authorization-owned project guide reads; +- review-policy persistence and activation across REV and AUTH; +- review queue, reviewer assignment/claim, immutable decisions, and revision + replay on the canonical authorization boundary; +- atomic review-to-contribution and conditional compensation integration. + +Open pull requests are the authoritative view of the exact code currently under +review. Their presence does not change the implemented-on-`main` list above. + +## Remaining v0.1 Capability Milestones + +1. Complete the production guide binding/read path and prove its authorization, + custody, lineage, and stale-generation behavior. +2. Complete review and revision persistence, queueing, access, decisions, + findings, replay, and operational recovery. +3. Create immutable contributor and reviewer contribution records from the + accepted review lifecycle. +4. Complete contribution-policy evaluation, conditional compensation awards, + fulfillment, idempotency, reconciliation, and audit behavior without making + settlement a prerequisite. +5. Preserve authoritative contribution evidence for future reputation + projections; reputation projection remains deferred from the v0.1 runtime. +6. Prove the complete v0.1 lifecycle through real API, database, durable-job, + storage, security, and operational recovery tests. +7. Add the React/Vite/TypeScript product surfaces only against stable and tested + backend contracts. +8. Run a real internal pilot and close findings without weakening lifecycle, + authorization, storage, or evidence guarantees. + +These are dependency-ordered capability milestones, not a schedule. Distinct +initiatives may proceed concurrently when their contracts and integration +boundaries do not conflict. + +## How To Read Repository Status + +- **Implemented:** code and required evidence are merged on `main`. +- **In progress:** a bounded branch or pull request exists; behavior is not yet + part of `main`. +- **Planned:** an accepted specification or initiative describes future work; + behavior is unavailable until implemented and merged. +- **Historical:** the document records prior intent or evidence and does not + control current work. + +Use [CONTRIBUTING.md](../CONTRIBUTING.md) to start work and the +[Historical Planning Index](historical_planning.md) when investigating earlier +decisions. diff --git a/docs/roadmap_week1_backend_plan.md b/docs/roadmap_week1_backend_plan.md index 77fd288fe..e1dd3174f 100644 --- a/docs/roadmap_week1_backend_plan.md +++ b/docs/roadmap_week1_backend_plan.md @@ -1,5 +1,9 @@ # Week 1 Backend Plan +> Historical planning record. This calendar no longer controls current work or +> status. Use [Current v0.1 Status](roadmap_status.md) and the +> [Historical Planning Index](historical_planning.md). + ## Purpose This is the implementation plan for the June 2-5 foundation work. diff --git a/docs/spec_chunk_10_checker_trial.md b/docs/spec_chunk_10_checker_trial.md index 14455f8cd..89a7b65a7 100644 --- a/docs/spec_chunk_10_checker_trial.md +++ b/docs/spec_chunk_10_checker_trial.md @@ -1,5 +1,8 @@ # Chunk 10 Checker Trial +> Historical validation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose Chunk 10 proves the Week 2 checker framework against real sample submission flows. diff --git a/docs/spec_chunk_5_submission_packet_foundation.md b/docs/spec_chunk_5_submission_packet_foundation.md index 7bb07008f..4951bfea0 100644 --- a/docs/spec_chunk_5_submission_packet_foundation.md +++ b/docs/spec_chunk_5_submission_packet_foundation.md @@ -1,5 +1,8 @@ # Chunk 5: Submission Packet Foundation +> Historical implementation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose This chunk adds the backend record for Contributor submission packets. A diff --git a/docs/spec_chunk_6_checker_contract_records.md b/docs/spec_chunk_6_checker_contract_records.md index 84e19b057..da2f1c21e 100644 --- a/docs/spec_chunk_6_checker_contract_records.md +++ b/docs/spec_chunk_6_checker_contract_records.md @@ -1,5 +1,8 @@ # Chunk 6: Checker Contract And Records +> Historical implementation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose Chunk 6 creates the durable checker run and checker result contract for Week 2. diff --git a/docs/spec_chunk_7_checker_runner_registry.md b/docs/spec_chunk_7_checker_runner_registry.md index def207a26..7541b40c5 100644 --- a/docs/spec_chunk_7_checker_runner_registry.md +++ b/docs/spec_chunk_7_checker_runner_registry.md @@ -1,5 +1,8 @@ # Chunk 7: Checker Runner And Registry +> Historical implementation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose Chunk 7 turns the checker contract into a working backend slice. diff --git a/docs/spec_chunk_8_submission_artifact_policy_checkers.md b/docs/spec_chunk_8_submission_artifact_policy_checkers.md index b119f8738..f9b11d344 100644 --- a/docs/spec_chunk_8_submission_artifact_policy_checkers.md +++ b/docs/spec_chunk_8_submission_artifact_policy_checkers.md @@ -1,5 +1,8 @@ # Chunk 8: Submission Artifact And Policy Checkers +> Historical implementation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose Chunk 8 expands the checker registry from the first structural runner into the first policy-aware submission artifact gate. diff --git a/docs/spec_chunk_9_pre_review_gate.md b/docs/spec_chunk_9_pre_review_gate.md index d16c5eb8f..9aa23f36b 100644 --- a/docs/spec_chunk_9_pre_review_gate.md +++ b/docs/spec_chunk_9_pre_review_gate.md @@ -1,5 +1,8 @@ # Chunk 9 Pre-Review Gate +> Historical implementation record. It does not define current sequencing or +> status; later canonical specifications and merged behavior take precedence. + ## Purpose Chunk 9 makes internal post-submit checks automatic. diff --git a/docs/spec_week2_checker_framework.md b/docs/spec_week2_checker_framework.md index f3a9608ff..8bdfac7bf 100644 --- a/docs/spec_week2_checker_framework.md +++ b/docs/spec_week2_checker_framework.md @@ -1,5 +1,9 @@ # Week 2 Checker Framework Specification +> Historical implementation specification. It is preserved as evidence of the +> early checker build, not as current sequencing or status. Use +> [Current v0.1 Status](roadmap_status.md) and canonical subsystem documents. + ## Purpose Week 2 adds the automated checker boundary between locked submissions and human review. From c2f67572e8ac9fee4d90aa788852bd638b559848 Mon Sep 17 00:00:00 2001 From: Abiorh001 Date: Sun, 2 Aug 2026 15:53:26 +0100 Subject: [PATCH 2/3] docs: address capability ledger review --- .../DECISIONS.md | 2 +- ...WS-DOCS-001-01-external-review-response.md | 36 +++++++++++++++++++ docs/checker_trial_failure_catalog.md | 7 +++- docs/diagrams/backend_v01_components.md | 3 +- docs/historical_planning.md | 5 +-- docs/roadmap_status.md | 2 +- 6 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 .agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md index 27cbde74f..2490a4418 100644 --- a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/DECISIONS.md @@ -2,7 +2,7 @@ ## Capability-Based Status -Current status uses implemented, in-progress, remaining, and historical +Current status uses Implemented, In progress, Planned, and Historical capability categories. It does not use weeks, days, or completion promises. ## Preserve History diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md new file mode 100644 index 000000000..0d4087475 --- /dev/null +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md @@ -0,0 +1,36 @@ +# WS-DOCS-001-01 External Review Response + +## Comments Addressed + +1. Aligned the decision record with the capability ledger's exact + `Implemented`, `In progress`, `Planned`, and `Historical` labels. +2. Removed the historical checker trial's claim that it proves current backend + behavior and routed current claims to the capability ledger and merged + evidence. +3. Named the Workstream product lifecycle explicitly in the backend component + diagram text so it cannot be confused with the engineering loop. +4. Routed readers of the historical planning index through `CONTRIBUTING.md`. +5. Clarified that v0.1 preserves contribution evidence for a future reputation + projection; runtime reputation projection remains deferred. + +## Comments Deferred + +None. + +## Human Decisions Needed + +None. + +## Commands Rerun + +- `python3 scripts/check_markdown_links.py` +- `python3 scripts/check_stale_workstream_wording.py` +- `python3 scripts/check_stale_authorization_docs.py` +- `python3 scripts/check_stale_artifact_contracts.py` +- `git diff --check` + +## Remaining Risks + +Historical checker records intentionally retain their original scenario and +result vocabulary. Their archive notice and current-evidence link prevent them +from being used as current implementation authority. diff --git a/docs/checker_trial_failure_catalog.md b/docs/checker_trial_failure_catalog.md index 4774279b6..8d1013817 100644 --- a/docs/checker_trial_failure_catalog.md +++ b/docs/checker_trial_failure_catalog.md @@ -7,7 +7,12 @@ This catalog records the Chunk 10 checker trial outcomes. It is the audit note for the first real sample submissions run through the Week 2 checker framework. -The trial does not add a lifecycle state, a review decision, or a frontend surface. It proves the current backend contracts for clean submissions, worker-fixable checker failures, internal task setup failures, and trusted checker retry. +The trial does not add a lifecycle state, a review decision, or a frontend +surface. It records early checker-trial evidence for clean submissions, +contributor-fixable checker failures, internal task setup failures, and trusted +checker retry. It does not establish current backend behavior; use +[Current v0.1 Status](roadmap_status.md) and merged code and tests for current +capabilities. ## Trial Results diff --git a/docs/diagrams/backend_v01_components.md b/docs/diagrams/backend_v01_components.md index 763cf1c69..d9beed7b3 100644 --- a/docs/diagrams/backend_v01_components.md +++ b/docs/diagrams/backend_v01_components.md @@ -22,7 +22,8 @@ Source: [backend_v01_components.puml](backend_v01_components.puml) ## Current Module Priority -The v0.1 backend moves through the loop in this dependency order: +The v0.1 backend follows the Workstream product lifecycle in this dependency +order: ```text Projects and guides diff --git a/docs/historical_planning.md b/docs/historical_planning.md index 5e8e4fb43..458c05055 100644 --- a/docs/historical_planning.md +++ b/docs/historical_planning.md @@ -5,8 +5,9 @@ validated. They are preserved for traceability. They do not define current priority, implementation status, contribution permission, or a delivery schedule. -For current work, use [Current v0.1 Status](roadmap_status.md), the code and -tests on `main`, accepted ADRs, and the canonical subsystem specifications. +For current work, start with [CONTRIBUTING.md](../CONTRIBUTING.md) and follow its +engineering loop. Then use [Current v0.1 Status](roadmap_status.md), the code +and tests on `main`, accepted ADRs, and the canonical subsystem specifications. ## Superseded Calendar Plans diff --git a/docs/roadmap_status.md b/docs/roadmap_status.md index 239084644..715c4834a 100644 --- a/docs/roadmap_status.md +++ b/docs/roadmap_status.md @@ -21,7 +21,7 @@ Project Guide -> Revision when required -> Contribution Records -> Conditional Compensation Award / Fulfillment --> Reputation Signals +-> Contribution Evidence For Future Reputation Projection ``` The release bar is one secured, observable, end-to-end lifecycle using the From bba3c561a7d2e6bda9941dd2e29171c0d106d480 Mon Sep 17 00:00:00 2001 From: Abiorh001 Date: Sun, 2 Aug 2026 16:48:59 +0100 Subject: [PATCH 3/3] docs: clarify residual historical-record risk --- .../reviews/WS-DOCS-001-01-external-review-response.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md index 0d4087475..c08837859 100644 --- a/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md +++ b/.agent-loop/initiatives/WS-DOCS-001-current-v01-documentation/reviews/WS-DOCS-001-01-external-review-response.md @@ -12,6 +12,8 @@ 4. Routed readers of the historical planning index through `CONTRIBUTING.md`. 5. Clarified that v0.1 preserves contribution evidence for a future reputation projection; runtime reputation projection remains deferred. +6. Reworded the residual historical-document risk as mitigation rather than an + absolute guarantee that archive notices prevent misuse. ## Comments Deferred @@ -32,5 +34,5 @@ None. ## Remaining Risks Historical checker records intentionally retain their original scenario and -result vocabulary. Their archive notice and current-evidence link prevent them -from being used as current implementation authority. +result vocabulary. Their archive notice and current-evidence link reduce the +risk that they are used as current implementation authority.