Skip to content

release: v2.0.0 - #24

Merged
flyingrobots merged 45 commits into
mainfrom
release/v2.0.0
Apr 15, 2026
Merged

flyingrobots merged 45 commits into
mainfrom
release/v2.0.0

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Summary

v2.0.0 release branch — 42 commits, 17 closed cycles, 293 tests passing.

Breaking Changes

  • Flat design docs: docs/design/<LEGEND>_<slug>.md replaces docs/design/<NNNN>-<slug>/<slug>.md
  • Legend-prefixed cycle names: PROCESS_foo replaces 0039-foo
  • number field removed from Cycle type
  • Signposts elevated: docs/method/process.md → docs/PROCESS.md, docs/method/release.md + release-runbook.md → docs/RELEASE.md
  • Retro template changed: "What surprised you?" / "What would you do differently?" replaces Drift/New Debt/Cool Ideas/Backlog Maintenance sections
  • Sponsors section removed from design doc scaffold

New Features

  • method spike command and method_spike MCP tool
  • method doctor --receipt for SHA-locked health attestations
  • method_doctor_receipt MCP tool
  • Three-tier semantic drift matching (exact → semantic normalization → token similarity with stemming)
  • Drift score percentages in near-miss hints
  • Configurable drift thresholds via .method.json
  • Pull-time backlog readiness warnings (missing AC, priority)
  • Human-in-the-loop witness verification gate on method close
  • Conversational retro prompts (--summary, --witness-verified for non-interactive)
  • Auto-regenerate reference docs on pre-commit
  • Type-downgrade protection in updateTypedFrontmatter

Fixes

  • rm -rf dist before tsc (clean builds)
  • MCP input validation for method_pull and method_capture_witness
  • GitHub comment sync uses stable IDs instead of string matching
  • Doctor checks for .gitkeep in required directories
  • Doctor legacy-layout detection narrowed to NNNN-slug pattern
  • Doctor flatten repair matches by slug convention (prevents data loss)
  • Null frontmatter values don't block type-downgrade guard
  • Duplicated legend prefix stripped from backlog filenames

Infrastructure

  • Biome linter with recommended rules
  • CI: audit, lint, build, test, pack verification
  • Pre-commit hook: lint + sync refs
  • Pre-push hook: tests
  • SCAFFOLD_LANES as single source of truth for lane materialization
  • cycle-ops.ts and workspace-utils.ts extracted from Workspace god class

Process Doctrine

  • Human witness verification required before cycle close
  • Matching-perspective playback verification (human verifies human hills)
  • Doctor-clean release gate
  • Witness re-execution and human attestation in release runbook
  • README slimmed to 107-line front door with signpost map
  • GUIDE rewritten with 5 Mermaid diagrams

Backlog

  • 6 bad-code items closed
  • 8 v1.1.0 items retired (already shipped)
  • 30 cool-ideas remain for future work

Test plan

  • 293 tests passing
  • Biome lint clean (0 errors, 0 warnings)
  • TypeScript build clean
  • method doctor zero issues
  • Two rounds of self-code-review (14 + 2 issues found and resolved)
  • PR feat: flat design docs + decoupled reference sync #23 CodeRabbit + Codex feedback addressed (15 issues)
  • CodeRabbit review on this PR
  • Human verification of human playback questions

Replace directory-per-cycle design docs (docs/design/<NNNN-slug>/<slug>.md)
with flat files (docs/design/<LEGEND>_<slug>.md). Cycle names are now
legend-prefixed slugs (e.g. PROCESS_doctor-command) instead of numbered
(0039-doctor-command), removing sequential numbering that doesn't scale
for concurrent users.

- Remove `number` field from CycleSchema
- Design docs are flat files directly in docs/design/
- Retros keep directory layout for witness subdirs
- Release-scoped design docs also flatten
- Doctor detects legacy nested design doc dirs
- Doctor repair flattens legacy dirs and updates frontmatter
- Legacy NNNN-slug layout remains discoverable for backward compat
- Delete extractReleasedCycleNumbers (number-based CHANGELOG detection)
- Update process.md branch naming and path conventions

BREAKING CHANGE: Cycle names no longer use sequential numeric prefixes.
The `number` field has been removed from the Cycle type. Design docs
are now flat files instead of directory-per-cycle.
…c-coupling

- Flatten design doc from legacy nested dir to docs/design/PROCESS_*.md
- Fill in hill, playback questions, and contract sections
- Add 5 new tests matching playback questions (drift clean)
- Close cycle with hill-met outcome and retro summary
Add `rm -rf dist` before `tsc` in the build script so every build
starts from repo truth. Stale artifacts from renamed or deleted source
modules can no longer persist in the published dist/ tree.

Closes cycle PROCESS_dist-output-pruning.
…untime

Audit all MCP tool handlers for schema-vs-runtime validation gaps.
Two tools used type assertions instead of runtime validation:
- method_pull: `args.item as string` → `validateString(args.item, 'item')`
- method_capture_witness: `args.cycle as string` → `validateOptionalString(args.cycle, 'cycle')`

Closes cycle PROCESS_mcp-runtime-input-validation-audit.
updateTypedFrontmatter now rejects writes that would change a field's
type shape (e.g. array to string, boolean to string). Error messages
name the field, expected type, and attempted type.

readTypedFrontmatter already preserves YAML-native types (arrays,
booleans, numbers). Legacy string-only callers are unaffected.

Closes cycle PROCESS_typed-frontmatter-access.
…D_LANES

Add SCAFFOLD_LANES as single source of truth for which lane directories
init creates. Document the contract: individual lane dirs may be absent
when empty without making the workspace unhealthy.

Closes cycle PROCESS_backlog-lane-materialization-contract.
Extract cycle path resolution, discovery, and shared utilities into
focused modules:
- src/cycle-ops.ts: CYCLE_NAME_PATTERN, readCycleFromDoc, resolveCyclePacketPaths, readCycleRelease, path helpers
- src/workspace-utils.ts: fileStem, slugify, normalizeRepoPath, collectMarkdownFiles, assertWorkspacePath, normalizeOptionalString

Reduces src/index.ts from ~2207 to ~1975 lines. Workspace class
remains the public facade with unchanged API.

Closes cycle PROCESS_workspace-operation-split.
…ll sync

Replace the simple `localBody.includes('## GitHub Comments')` duplicate
check with stable GitHub comment ID tracking. Comment IDs are stored in
`github_synced_comment_ids` frontmatter and used to detect which
comments are new vs already synced. Repeated pulls only append genuinely
new comments.

Closes cycle PROCESS_github-comment-sync-identity.
7 items already implemented prior to v2.0.0:
- backlog-authoring-command (method backlog add)
- backlog-move-command (method backlog move)
- doctor-repair-command (method repair)
- retire-command (method retire)
- signpost-helper-commands (method signpost status/init)
- structured-repair-hints (DoctorRepairHintSchema)
- task-dependency-dag (method backlog deps)

1 item replaced:
- feedback-command → replaced by method inbox with --source,
  --captured-at, and --body-file flags
Replace the brittle exact-string-only drift matcher with three tiers:

1. Exact normalized match (lowercase, collapse whitespace)
2. Semantic normalization (also strips backticks, question-word prefixes
   like Does/Is/Can, trailing punctuation)
3. Token similarity with stemming (Jaccard on stemmed tokens,
   >= 0.85 = auto-match, 0.65-0.85 = near-miss hint)

This fixes the common brittleness where "Does `X`?" in a playback
question failed to match "X." in a test description. No LLM or network
dependency — purely deterministic.

Closes cycle PROCESS_semantic-drift-detector.
Near-miss hints now display the Jaccard similarity percentage:
`Near miss (71%): "..."` so operators can judge relevance at a glance.

Closes cycle PROCESS_drift-score-visibility.
Add `drift_thresholds.semantic_match` (default 0.85) and
`drift_thresholds.near_miss` (default 0.65) to ConfigSchema. The drift
detector reads these from workspace config so repos can tune matching
tolerance without code changes.

Closes cycle PROCESS_drift-threshold-config.
New `method spike <goal>` command and `method_spike` MCP tool for
capturing behavior spikes as first-class backlog items. Creates
SPIKE-prefixed items with structured scaffolding (goal, stack
constraints, expected outcome) matching the behavior-spike convention
in process.md.

Closes cycle PROCESS_spike-command.
- Install Biome with recommended rules, add `npm run lint` script
- CI now runs: audit, lint, build, test, pack --dry-run
- Pre-commit hook enforces lint; pre-push hook enforces tests
- Zero lint violations on the current codebase
- Auto-fixed formatting across 31 files via Biome

Closes cycle PROCESS_ci-hardening.
…r priority

pullItem now validates backlog readiness before pulling. Missing
acceptance_criteria, priority, or legend emit warnings (advisory,
not blocking). Warnings are returned in the Cycle result and surfaced
by both CLI (stderr) and MCP (structured content).

Also defines the backlog readiness contract in a JSDoc comment on
validateBacklogReadiness.

Closes cycle PROCESS_validate-command.
Human playback questions must be verified by a human operator, and
Agent playback questions must be verified by an agent. Neither seat
can unilaterally sign off on the other's hill.
- Run `method doctor --repair` to flatten all 38 legacy NNNN-* design
  doc directories to flat LEGEND_slug.md files
- Rename corresponding retro directories to match new cycle names
- Add release invariant: `method doctor` must pass with zero issues
  before any release (process.md rule + release.md sequence step)
- Fix VISION.md witness_ref and test paths broken by the rename
Doctor now warns when required directories are missing .gitkeep files
(they'd vanish on clone). initWorkspace creates .gitkeep in all
scaffolded directories. Repair supports create-gitkeep kind.

Also adds release gate: method doctor must pass with zero issues
before any release. This repo must practice what it preaches.
…ess scaffold

The witness scaffold now includes a Human Verification section with
clone, setup, build, test, and drift-check commands so reviewers can
reproduce the verification independently in a sandbox.

Also documents this requirement in process.md step 5.
… gates

Release gates now require:
- All cycle witnesses re-executed and green at the release commit
- Human operator attestation for every human playback question
- Agent cannot unilaterally confirm human hills

Added Phase 3 (Witness and human verification) to the release runbook
between versioning and technical validation. Updated process.md rules
and release.md sequence to match.
…l retro

method close now:
- Requires human witness verification before writing the retro
  (interactive prompt or --witness-verified flag)
- Prompts for retro content (summary, drift, debt, ideas) so retro
  docs ship with real content instead of TBD skeletons
- Supports --summary flag to skip interactive prompts for tests/MCP

closeCycle() accepts optional retroContent parameter. renderRetroDoc
uses provided content instead of TBD placeholders.

Closes cycle PROCESS_retro-conversational-closeout.
- Move docs/method/process.md → docs/PROCESS.md (signpost)
- Merge docs/method/release.md + docs/method/release-runbook.md → docs/RELEASE.md (signpost)
- Remove docs/method/release-runbook.md (content merged into RELEASE.md)
- Update scaffold, doctor, ensureInitialized, and all test references
- Update README, GUIDE, VISION cross-references

BREAKING CHANGE: docs/method/process.md, docs/method/release.md, and
docs/method/release-runbook.md no longer exist. Use docs/PROCESS.md
and docs/RELEASE.md instead.
…ent move

The README was slimmed from 561 to 107 lines with deep content moving
to docs/PROCESS.md. Updated 13 failing tests in docs.test.ts and
repo-discipline.test.ts to point assertions at their new locations:

- Structure assertions now check Principles/Structure/The loop/Documentation
- Cycle closeout, branch naming, RED step, abstract seats assertions -> PROCESS.md
- Forge-agnostic distinction assertions -> PROCESS.md
- Legend listing assertions simplified (README no longer enumerates each legend)
- CI gate and drift detector assertions decoupled from README tooling section
- CLI/MCP command listing assertions trimmed (README now just links to references)
- Release-note surface assertions simplified for slim README
- Open-cycle-packet-on-main assertions -> PROCESS.md only
Honest assessment of METHOD's friction points after a full session:
- Right-sized cycle ceremony (t-shirt sizing S/M/L)
- Optional posture sections in design doc template
- Meaningful retros over template retros
- Sponsors field is pure boilerplate
- Drift detector rewards string-matching over meaningful tests
- Signpost count scales with overhead not complexity
- Maintenance track for sub-cycle work
- Auto-regenerate reference docs instead of manual sync
Pre-commit hook now runs sync refs after lint, staging any changes
to ARCHITECTURE.md, docs/CLI.md, docs/MCP.md, docs/GUIDE.md. No
more stale generated docs.

Closes cycle PROCESS_auto-regenerate-reference-docs-instead-of-manual-sync.
…tion prompts

Retro template now has 3 focused sections instead of 6 hollow ones:
- "What surprised you?" (replaces Drift + New Debt)
- "What would you do differently?" (replaces Cool Ideas)
- "Follow-up items" (replaces Backlog Maintenance checklist)

CLI close prompts updated to match. Two honest sentences beat five
empty sections.

Closes cycle PROCESS_meaningful-retros-over-template-retros.
…mplate

Every design doc said "Human: Backlog operator, Agent: Implementation
agent" — pure boilerplate that never varied and communicated nothing.
The Human/Agent distinction is already carried by the playback question
split. Removed the Sponsors section and the "abstract roles" paragraph
from the scaffold.

Closes cycle PROCESS_sponsors-field-is-pure-boilerplate.
When a title like "DX-022 — Layout Inspector Overlay" is captured with
legend=DX, createBacklogItem now strips the leading "dx-" from the
slug to avoid producing "DX_dx-022-layout-inspector-overlay.md".
Result: "DX_022-layout-inspector-overlay.md".

Closes cycle PROCESS_backlog-helper-generates-malformed-note-filenames.
`method doctor --receipt` produces a JSON receipt anchored to the
current commit SHA, including timestamp, status, counts, and checks.
Release gates can now verify the doctor pass matches the exact state
being shipped.

Also exposed via MCP as `method_doctor_receipt`.

Closes cycle PROCESS_doctor-sha-locked-health-receipts.
…kthrough

- Cycle lifecycle flowchart
- Backlog flow diagram
- Git branch lifecycle (gitGraph)
- File lifecycle diagram
- Release flow diagram
- Common commands quick reference table
- Getting started section
- Practical advice (capture ideas, single intake path)
CRITICAL:
- Remove committed flyingrobots-method-1.0.0.tgz, add *.tgz to .gitignore

HIGH:
- Fix ghost "method doctor --repair" → "method repair --apply" in fix text
- Bump MCP server version from 0.3.0 to 2.0.0
- Narrow catch(error: any) to catch(error: unknown) with type guard

MEDIUM:
- Add unicode flag to LEGEND_PATTERN, CYCLE_NAME_PATTERN, LEGACY_CYCLE_PATTERN
- Enable noExplicitAny in biome.json (5 test usages annotated with biome-ignore)
- Document up-next as legacy lane in orderedBacklogLaneNames

LOW:
- Dedupe collectMarkdownFiles (doctor.ts delegates to workspace-utils.ts)
- Pre-commit hook warns on sync refs failure instead of silently swallowing
- Use path.resolve() instead of string concatenation in workspace-utils.ts

NIT:
- Import resolve in workspace-utils.ts
- Hoist 5 regex constants to module scope in drift.ts
- frontmatter.ts: assertNoTypeDowngrade now allows any type to replace
  a null value (typeof null === "object" was causing false downgrades)
- doctor.ts: flatten-design-doc repair now matches by slug convention
  before falling back to first .md file, preventing data loss when
  legacy dirs contain multiple .md files (e.g. README.md alongside
  the actual design doc)
- Added test for null-field type-downgrade edge case
- Tighten grammar in sponsor-abstractness invariant doc
- Narrow legacy-layout detection to NNNN-slug pattern only (prevents
  false positives on non-cycle subdirectories)
- Add defensive comment explaining repair snapshot idempotency
- Add test proving CycleSchema strips legacy `number` field
- Remove hardcoded backlog path in ship-sync test
@coderabbitai

coderabbitai Bot commented Apr 14, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 285 files, which is 135 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9b553675-2286-44b8-a82b-84f111046cea

📥 Commits

Reviewing files that changed from the base of the PR and between cb5eaf8 and 6dfef6f.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (285)
  • .github/workflows/ci.yml
  • .gitignore
  • ARCHITECTURE.md
  • README.md
  • biome.json
  • docs/CLI.md
  • docs/GUIDE.md
  • docs/MCP.md
  • docs/PROCESS.md
  • docs/RELEASE.md
  • docs/VISION.md
  • docs/design/.gitkeep
  • docs/design/0002-playback-witness-convention/witness-artifacts.md
  • docs/design/PROCESS_async-exec-refactor.md
  • docs/design/PROCESS_auto-regenerate-reference-docs-instead-of-manual-sync.md
  • docs/design/PROCESS_backlog-helper-generates-malformed-note-filenames.md
  • docs/design/PROCESS_backlog-lane-materialization-contract.md
  • docs/design/PROCESS_backlog-metadata-single-source-of-truth.md
  • docs/design/PROCESS_bad-code-cleanup.md
  • docs/design/PROCESS_bearing-truthfulness.md
  • docs/design/PROCESS_behavior-spike-convention.md
  • docs/design/PROCESS_ci-gates.md
  • docs/design/PROCESS_ci-hardening.md
  • docs/design/PROCESS_cli-module-split.md
  • docs/design/PROCESS_config-management.md
  • docs/design/PROCESS_configurable-workspace-paths.md
  • docs/design/PROCESS_dist-output-pruning.md
  • docs/design/PROCESS_doctor-command.md
  • docs/design/PROCESS_doctor-sha-locked-health-receipts.md
  • docs/design/PROCESS_drift-detector.md
  • docs/design/PROCESS_drift-near-miss-hints.md
  • docs/design/PROCESS_drift-score-visibility.md
  • docs/design/PROCESS_drift-threshold-config.md
  • docs/design/PROCESS_generated-doc-scaffold-contract.md
  • docs/design/PROCESS_generated-reference-signposts.md
  • docs/design/PROCESS_generated-reference-sync-coupling.md
  • docs/design/PROCESS_git-branch-workflow-policy.md
  • docs/design/PROCESS_github-comment-sync-identity.md
  • docs/design/PROCESS_github-issue-adapter.md
  • docs/design/PROCESS_hybrid-signpost-generation.md
  • docs/design/PROCESS_library-api-surface.md
  • docs/design/PROCESS_mcp-runtime-input-validation-audit.md
  • docs/design/PROCESS_mcp-server.md
  • docs/design/PROCESS_mcp-tool-result-contract.md
  • docs/design/PROCESS_meaningful-retros-over-template-retros.md
  • docs/design/PROCESS_method-consistency-fixes.md
  • docs/design/PROCESS_method-repo-self-discipline.md
  • docs/design/PROCESS_oss-release-scaffolding.md
  • docs/design/PROCESS_release-shaping-and-user-migration-docs.md
  • docs/design/PROCESS_retro-conversational-closeout.md
  • docs/design/PROCESS_review-state-query.md
  • docs/design/PROCESS_semantic-drift-detector.md
  • docs/design/PROCESS_ship-sync-automation.md
  • docs/design/PROCESS_spike-command.md
  • docs/design/PROCESS_sponsors-field-is-pure-boilerplate.md
  • docs/design/PROCESS_system-style-javascript-adoption.md
  • docs/design/PROCESS_test-taxonomy-and-fixture-drift.md
  • docs/design/PROCESS_two-way-github-sync.md
  • docs/design/PROCESS_typed-frontmatter-access.md
  • docs/design/PROCESS_validate-command.md
  • docs/design/PROCESS_witness-drift-output-capture.md
  • docs/design/PROCESS_workspace-operation-split.md
  • docs/design/PROCESS_yaml-frontmatter-schema.md
  • docs/design/SYNTH_automated-witness-capture.md
  • docs/design/SYNTH_executive-summary-protocol.md
  • docs/design/SYNTH_generated-signpost-provenance.md
  • docs/design/SYNTH_readme-and-vision-refresh.md
  • docs/design/method-cli.md
  • docs/design/playback-witness-convention.md
  • docs/design/readme-revision.md
  • docs/invariants/sponsor-abstractness.md
  • docs/method/backlog/.gitkeep
  • docs/method/backlog/bad-code/PROCESS_backlog-lane-materialization-contract.md
  • docs/method/backlog/bad-code/PROCESS_dist-output-pruning.md
  • docs/method/backlog/bad-code/PROCESS_generated-reference-sync-coupling.md
  • docs/method/backlog/bad-code/PROCESS_github-comment-sync-identity.md
  • docs/method/backlog/bad-code/PROCESS_mcp-runtime-input-validation-audit.md
  • docs/method/backlog/bad-code/PROCESS_typed-frontmatter-access.md
  • docs/method/backlog/bad-code/PROCESS_workspace-operation-split.md
  • docs/method/backlog/cool-ideas/PROCESS_ci-hardening.md
  • docs/method/backlog/cool-ideas/PROCESS_doctor-strict-mode-for-release-gates.md
  • docs/method/backlog/cool-ideas/PROCESS_drift-detector-rewards-string-matching-over-meaningful-tests.md
  • docs/method/backlog/cool-ideas/PROCESS_drift-score-visibility.md
  • docs/method/backlog/cool-ideas/PROCESS_drift-threshold-config.md
  • docs/method/backlog/cool-ideas/PROCESS_flatten-repair-should-preview-destructive-operations.md
  • docs/method/backlog/cool-ideas/PROCESS_i18n-string-extraction.md
  • docs/method/backlog/cool-ideas/PROCESS_interactive-scaffolder.md
  • docs/method/backlog/cool-ideas/PROCESS_maintenance-track-for-sub-cycle-work.md
  • docs/method/backlog/cool-ideas/PROCESS_multi-forge-adapter.md
  • docs/method/backlog/cool-ideas/PROCESS_optional-posture-sections-in-design-doc-template.md
  • docs/method/backlog/cool-ideas/PROCESS_retro-conversational-closeout.md
  • docs/method/backlog/cool-ideas/PROCESS_right-sized-cycle-ceremony-t-shirt-sizing.md
  • docs/method/backlog/cool-ideas/PROCESS_signpost-count-scales-with-overhead-not-complexity.md
  • docs/method/backlog/cool-ideas/PROCESS_spike-command.md
  • docs/method/backlog/cool-ideas/PROCESS_validate-command.md
  • docs/method/backlog/inbox/PROCESS_semantic-drift-detector.md
  • docs/method/feedback/README.md
  • docs/method/feedback/archive/2026-04-11-missing-api-surfaces.md
  • docs/method/graveyard/.gitkeep
  • docs/method/graveyard/PROCESS_backlog-authoring-command.md
  • docs/method/graveyard/PROCESS_backlog-move-command.md
  • docs/method/graveyard/PROCESS_doctor-repair-command.md
  • docs/method/graveyard/PROCESS_executable-witness-verification-instructions.md
  • docs/method/graveyard/PROCESS_feedback-command.md
  • docs/method/graveyard/PROCESS_retire-command.md
  • docs/method/graveyard/PROCESS_signpost-helper-commands.md
  • docs/method/graveyard/PROCESS_structured-repair-hints.md
  • docs/method/graveyard/PROCESS_task-dependency-dag.md
  • docs/method/graveyard/SPIKE_embeddings-drift-spike.md
  • docs/method/legends/.gitkeep
  • docs/method/release-runbook.md
  • docs/method/release.md
  • docs/method/releases/.gitkeep
  • docs/method/retro/.gitkeep
  • docs/method/retro/PROCESS_async-exec-refactor/PROCESS_async-exec-refactor.md
  • docs/method/retro/PROCESS_async-exec-refactor/witness/verification.md
  • docs/method/retro/PROCESS_auto-regenerate-reference-docs-instead-of-manual-sync/PROCESS_auto-regenerate-reference-docs-instead-of-manual-sync.md
  • docs/method/retro/PROCESS_auto-regenerate-reference-docs-instead-of-manual-sync/witness/verification.md
  • docs/method/retro/PROCESS_backlog-helper-generates-malformed-note-filenames/PROCESS_backlog-helper-generates-malformed-note-filenames.md
  • docs/method/retro/PROCESS_backlog-helper-generates-malformed-note-filenames/witness/verification.md
  • docs/method/retro/PROCESS_backlog-lane-materialization-contract/PROCESS_backlog-lane-materialization-contract.md
  • docs/method/retro/PROCESS_backlog-lane-materialization-contract/witness/verification.md
  • docs/method/retro/PROCESS_backlog-metadata-single-source-of-truth/PROCESS_backlog-metadata-single-source-of-truth.md
  • docs/method/retro/PROCESS_backlog-metadata-single-source-of-truth/witness/verification.md
  • docs/method/retro/PROCESS_bad-code-cleanup/PROCESS_bad-code-cleanup.md
  • docs/method/retro/PROCESS_bad-code-cleanup/witness/verification.md
  • docs/method/retro/PROCESS_bearing-truthfulness/PROCESS_bearing-truthfulness.md
  • docs/method/retro/PROCESS_bearing-truthfulness/witness/verification.md
  • docs/method/retro/PROCESS_behavior-spike-convention/PROCESS_behavior-spike-convention.md
  • docs/method/retro/PROCESS_behavior-spike-convention/witness/verification.md
  • docs/method/retro/PROCESS_ci-gates/PROCESS_ci-gates.md
  • docs/method/retro/PROCESS_ci-gates/witness/README.md
  • docs/method/retro/PROCESS_ci-gates/witness/playback.md
  • docs/method/retro/PROCESS_ci-gates/witness/verification.md
  • docs/method/retro/PROCESS_ci-hardening/PROCESS_ci-hardening.md
  • docs/method/retro/PROCESS_ci-hardening/witness/verification.md
  • docs/method/retro/PROCESS_cli-module-split/PROCESS_cli-module-split.md
  • docs/method/retro/PROCESS_cli-module-split/witness/README.md
  • docs/method/retro/PROCESS_cli-module-split/witness/playback.md
  • docs/method/retro/PROCESS_cli-module-split/witness/verification.md
  • docs/method/retro/PROCESS_config-management/PROCESS_config-management.md
  • docs/method/retro/PROCESS_config-management/witness/verification.md
  • docs/method/retro/PROCESS_configurable-workspace-paths/PROCESS_configurable-workspace-paths.md
  • docs/method/retro/PROCESS_configurable-workspace-paths/witness/verification.md
  • docs/method/retro/PROCESS_dist-output-pruning/PROCESS_dist-output-pruning.md
  • docs/method/retro/PROCESS_dist-output-pruning/witness/verification.md
  • docs/method/retro/PROCESS_doctor-command/PROCESS_doctor-command.md
  • docs/method/retro/PROCESS_doctor-command/witness/verification.md
  • docs/method/retro/PROCESS_doctor-sha-locked-health-receipts/PROCESS_doctor-sha-locked-health-receipts.md
  • docs/method/retro/PROCESS_doctor-sha-locked-health-receipts/witness/verification.md
  • docs/method/retro/PROCESS_drift-detector/PROCESS_drift-detector.md
  • docs/method/retro/PROCESS_drift-detector/witness/README.md
  • docs/method/retro/PROCESS_drift-detector/witness/playback.md
  • docs/method/retro/PROCESS_drift-detector/witness/verification.md
  • docs/method/retro/PROCESS_drift-near-miss-hints/PROCESS_drift-near-miss-hints.md
  • docs/method/retro/PROCESS_drift-near-miss-hints/witness/verification.md
  • docs/method/retro/PROCESS_drift-score-visibility/PROCESS_drift-score-visibility.md
  • docs/method/retro/PROCESS_drift-score-visibility/witness/verification.md
  • docs/method/retro/PROCESS_drift-threshold-config/PROCESS_drift-threshold-config.md
  • docs/method/retro/PROCESS_drift-threshold-config/witness/verification.md
  • docs/method/retro/PROCESS_generated-doc-scaffold-contract/PROCESS_generated-doc-scaffold-contract.md
  • docs/method/retro/PROCESS_generated-doc-scaffold-contract/witness/verification.md
  • docs/method/retro/PROCESS_generated-reference-signposts/PROCESS_generated-reference-signposts.md
  • docs/method/retro/PROCESS_generated-reference-signposts/witness/verification.md
  • docs/method/retro/PROCESS_generated-reference-sync-coupling/PROCESS_generated-reference-sync-coupling.md
  • docs/method/retro/PROCESS_generated-reference-sync-coupling/witness/verification.md
  • docs/method/retro/PROCESS_git-branch-workflow-policy/PROCESS_git-branch-workflow-policy.md
  • docs/method/retro/PROCESS_git-branch-workflow-policy/witness/verification.md
  • docs/method/retro/PROCESS_github-comment-sync-identity/PROCESS_github-comment-sync-identity.md
  • docs/method/retro/PROCESS_github-comment-sync-identity/witness/verification.md
  • docs/method/retro/PROCESS_github-issue-adapter/PROCESS_github-issue-adapter.md
  • docs/method/retro/PROCESS_github-issue-adapter/witness/verification.md
  • docs/method/retro/PROCESS_hybrid-signpost-generation/PROCESS_hybrid-signpost-generation.md
  • docs/method/retro/PROCESS_hybrid-signpost-generation/witness/verification.md
  • docs/method/retro/PROCESS_library-api-surface/PROCESS_library-api-surface.md
  • docs/method/retro/PROCESS_library-api-surface/witness/verification.md
  • docs/method/retro/PROCESS_mcp-runtime-input-validation-audit/PROCESS_mcp-runtime-input-validation-audit.md
  • docs/method/retro/PROCESS_mcp-runtime-input-validation-audit/witness/verification.md
  • docs/method/retro/PROCESS_mcp-server/PROCESS_mcp-server.md
  • docs/method/retro/PROCESS_mcp-server/witness/verification.md
  • docs/method/retro/PROCESS_mcp-tool-result-contract/PROCESS_mcp-tool-result-contract.md
  • docs/method/retro/PROCESS_mcp-tool-result-contract/witness/verification.md
  • docs/method/retro/PROCESS_meaningful-retros-over-template-retros/PROCESS_meaningful-retros-over-template-retros.md
  • docs/method/retro/PROCESS_meaningful-retros-over-template-retros/witness/verification.md
  • docs/method/retro/PROCESS_method-consistency-fixes/PROCESS_method-consistency-fixes.md
  • docs/method/retro/PROCESS_method-consistency-fixes/witness/verification.md
  • docs/method/retro/PROCESS_method-repo-self-discipline/PROCESS_method-repo-self-discipline.md
  • docs/method/retro/PROCESS_method-repo-self-discipline/witness/verification.md
  • docs/method/retro/PROCESS_oss-release-scaffolding/PROCESS_oss-release-scaffolding.md
  • docs/method/retro/PROCESS_oss-release-scaffolding/witness/verification.md
  • docs/method/retro/PROCESS_release-shaping-and-user-migration-docs/PROCESS_release-shaping-and-user-migration-docs.md
  • docs/method/retro/PROCESS_release-shaping-and-user-migration-docs/witness/README.md
  • docs/method/retro/PROCESS_release-shaping-and-user-migration-docs/witness/playback.md
  • docs/method/retro/PROCESS_release-shaping-and-user-migration-docs/witness/verification.md
  • docs/method/retro/PROCESS_retro-conversational-closeout/PROCESS_retro-conversational-closeout.md
  • docs/method/retro/PROCESS_retro-conversational-closeout/witness/verification.md
  • docs/method/retro/PROCESS_review-state-query/PROCESS_review-state-query.md
  • docs/method/retro/PROCESS_review-state-query/witness/verification.md
  • docs/method/retro/PROCESS_semantic-drift-detector/PROCESS_semantic-drift-detector.md
  • docs/method/retro/PROCESS_semantic-drift-detector/witness/verification.md
  • docs/method/retro/PROCESS_ship-sync-automation/PROCESS_ship-sync-automation.md
  • docs/method/retro/PROCESS_ship-sync-automation/witness/verification.md
  • docs/method/retro/PROCESS_spike-command/PROCESS_spike-command.md
  • docs/method/retro/PROCESS_spike-command/witness/verification.md
  • docs/method/retro/PROCESS_sponsors-field-is-pure-boilerplate/PROCESS_sponsors-field-is-pure-boilerplate.md
  • docs/method/retro/PROCESS_sponsors-field-is-pure-boilerplate/witness/verification.md
  • docs/method/retro/PROCESS_system-style-javascript-adoption/PROCESS_system-style-javascript-adoption.md
  • docs/method/retro/PROCESS_system-style-javascript-adoption/witness/verification.md
  • docs/method/retro/PROCESS_test-taxonomy-and-fixture-drift/PROCESS_test-taxonomy-and-fixture-drift.md
  • docs/method/retro/PROCESS_test-taxonomy-and-fixture-drift/witness/verification.md
  • docs/method/retro/PROCESS_two-way-github-sync/PROCESS_two-way-github-sync.md
  • docs/method/retro/PROCESS_two-way-github-sync/witness/verification.md
  • docs/method/retro/PROCESS_typed-frontmatter-access/PROCESS_typed-frontmatter-access.md
  • docs/method/retro/PROCESS_typed-frontmatter-access/witness/verification.md
  • docs/method/retro/PROCESS_validate-command/PROCESS_validate-command.md
  • docs/method/retro/PROCESS_validate-command/witness/verification.md
  • docs/method/retro/PROCESS_witness-drift-output-capture/PROCESS_witness-drift-output-capture.md
  • docs/method/retro/PROCESS_witness-drift-output-capture/witness/verification.md
  • docs/method/retro/PROCESS_workspace-operation-split/PROCESS_workspace-operation-split.md
  • docs/method/retro/PROCESS_workspace-operation-split/witness/verification.md
  • docs/method/retro/PROCESS_yaml-frontmatter-schema/PROCESS_yaml-frontmatter-schema.md
  • docs/method/retro/PROCESS_yaml-frontmatter-schema/witness/verification.md
  • docs/method/retro/SYNTH_automated-witness-capture/SYNTH_automated-witness-capture.md
  • docs/method/retro/SYNTH_automated-witness-capture/witness/verification.md
  • docs/method/retro/SYNTH_executive-summary-protocol/SYNTH_executive-summary-protocol.md
  • docs/method/retro/SYNTH_executive-summary-protocol/witness/verification.md
  • docs/method/retro/SYNTH_generated-signpost-provenance/SYNTH_generated-signpost-provenance.md
  • docs/method/retro/SYNTH_generated-signpost-provenance/witness/verification.md
  • docs/method/retro/SYNTH_readme-and-vision-refresh/SYNTH_readme-and-vision-refresh.md
  • docs/method/retro/SYNTH_readme-and-vision-refresh/witness/README.md
  • docs/method/retro/SYNTH_readme-and-vision-refresh/witness/playback.md
  • docs/method/retro/SYNTH_readme-and-vision-refresh/witness/verification.md
  • docs/method/retro/method-cli/method-cli.md
  • docs/method/retro/method-cli/witness/playback.md
  • docs/method/retro/method-cli/witness/verification.md
  • docs/method/retro/playback-witness-convention/playback-witness-convention.md
  • docs/method/retro/playback-witness-convention/witness/README.md
  • docs/method/retro/playback-witness-convention/witness/playback.md
  • docs/method/retro/playback-witness-convention/witness/verification.md
  • docs/method/retro/readme-revision/readme-revision.md
  • docs/method/retro/readme-revision/witness/README.md
  • docs/method/retro/readme-revision/witness/playback.md
  • docs/method/retro/readme-revision/witness/verification.md
  • docs/releases/.gitkeep
  • package.json
  • scripts/hooks/pre-commit
  • scripts/hooks/pre-push
  • src/adapters/github.ts
  • src/cli-args.ts
  • src/cli-renderer.ts
  • src/cli.ts
  • src/config.ts
  • src/cycle-ops.ts
  • src/doctor.ts
  • src/domain.ts
  • src/drift.ts
  • src/feedback-surface.ts
  • src/frontmatter.ts
  • src/generate.ts
  • src/index.ts
  • src/mcp.ts
  • src/renderers.ts
  • src/review-state.ts
  • src/workspace-utils.ts
  • tests/api.test.ts
  • tests/build.test.ts
  • tests/ci.test.ts
  • tests/cli.test.ts
  • tests/docs.test.ts
  • tests/doctor.test.ts
  • tests/domain.test.ts
  • tests/drift.test.ts
  • tests/exec.test.ts
  • tests/frontmatter.test.ts
  • tests/generate.test.ts
  • tests/github-adapter.test.ts
  • tests/lane-contract.test.ts
  • tests/mcp.test.ts
  • tests/package.test.ts
  • tests/repo-discipline.test.ts
  • tests/review-state-exec.test.ts
  • tests/review-state.test.ts
  • tests/ship-sync.test.ts
  • tests/witness.test.ts
  • tests/workspace-split.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v2.0.0

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@coderabbitai review please 🥕

@coderabbitai

coderabbitai Bot commented Apr 14, 2026

Copy link
Copy Markdown

@flyingrobots: On it! Spinning up a full review of v2.0.0 now. 🐇🥕

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c1529cda13

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/cli-args.ts
Comment on lines +1292 to +1294
if (value !== undefined) {
positionals.push(value);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject unrecognized options in method spike

The spike parser currently treats any unknown token (including values that start with -) as part of the goal text, so typos like --constraint silently succeed instead of failing fast. This can create malformed spike entries and hide operator mistakes that every other command parser reports as unknown options.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Addressed in 7a8a785. parseSpikeArgs now rejects unrecognized --options with an error message, matching every other command parser.

Comment thread src/doctor.ts Outdated
Comment on lines +809 to +810
// Remove the old directory (all files should be the single md)
rmSync(target, { recursive: true });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Avoid deleting non-cycle files during flatten repair

The flatten-design-doc repair removes the entire legacy directory after copying a single selected Markdown file to the flat path. If that directory contains extra Markdown files or attachments, those files are irreversibly deleted during method repair --apply, which turns a “safe bounded repair” into data loss for real workspaces.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Addressed in 7a8a785. Flatten repair now only deletes the source .md file and removes the directory only if empty. Non-cycle files (attachments, READMEs) are preserved.

Comment thread src/mcp.ts Outdated
cycle: relativizeCycle(workspace, cycle),
},
);
const cycle = await workspace.closeCycle(cycleName, driftCheck, outcome);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Enforce witness verification in MCP close flow

The MCP method_close path closes cycles as soon as driftCheck and outcome validate, but unlike the CLI close flow it never requires an explicit witness-verification acknowledgement. That lets automated MCP callers bypass the human verification gate and close cycles without the process control introduced in this release.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Addressed in 7a8a785. MCP method_close now requires witnessVerified: true as a required field. If false, the call is rejected with an error message. Matches the CLI's human-in-the-loop gate.

…CP witness gate)

- cli-args.ts: parseSpikeArgs now rejects unrecognized --options
- doctor.ts: flatten repair only deletes the source .md file, removes
  dir only if empty (prevents data loss for dirs with extra files)
- mcp.ts: method_close now requires witnessVerified=true, matching
  the CLI's human-in-the-loop gate
@flyingrobots

Copy link
Copy Markdown
Owner Author

PR #24 Review Feedback — Resolution Summary

# Severity File Issue Commit
1 P2 src/cli-args.ts Spike parser accepts unknown --options as goal text 7a8a785
2 P1 src/doctor.ts Flatten repair deletes non-cycle files via recursive rmSync 7a8a785
3 P2 src/mcp.ts MCP close bypasses witness verification gate 7a8a785

All 3 issues resolved. CI fix for git identity in 9b3e821.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@coderabbitai full review please 🥕

@coderabbitai

coderabbitai Bot commented Apr 14, 2026

Copy link
Copy Markdown

@flyingrobots Acknowledged! Kicking off a full review of PR #24 — I'll scrutinize every line of the v2.0.0 changes with zero mercy. All three prior fixes (flatten repair safety, spike parser unknown options, MCP witness gate bypass) will be verified in context as well. Standby. 🐇🥕

✅ Actions performed

Full review triggered.

@flyingrobots
flyingrobots merged commit af7dab8 into main Apr 15, 2026
3 checks passed
@flyingrobots
flyingrobots deleted the release/v2.0.0 branch April 15, 2026 17:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant