Skip to content

OSS Release Scaffolding (Cycle 0026) - #13

Merged
flyingrobots merged 4 commits into
mainfrom
cycles/0026-oss-release-scaffolding
Apr 7, 2026
Merged

flyingrobots merged 4 commits into
mainfrom
cycles/0026-oss-release-scaffolding

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Summary

Adds standard GitHub community files and reference docs for the v0.3.0 release:

  • LICENSE — Apache 2.0
  • NOTICE — copyright attribution
  • SECURITY.md — vulnerability reporting policy
  • CONTRIBUTING.md — how to participate, code style, commit conventions
  • ARCHITECTURE.md — source layout, key modules, CLI commands, MCP tools reference
  • README.md — added method mcp, sync github, sync ship to command table; added MCP tools section

Test plan

  • 122 tests pass (119 prior + 3 new)
  • Build clean
  • Cycle closed with retro and witness

Add standard GitHub OSS files (LICENSE, CONTRIBUTING, SECURITY, NOTICE),
ARCHITECTURE.md, and CLI/MCP reference documentation.
- LICENSE, CONTRIBUTING, SECURITY, NOTICE must exist
- ARCHITECTURE.md must describe source layout
- README must reference all CLI commands and MCP tools
- LICENSE: Apache 2.0
- NOTICE: copyright attribution
- SECURITY.md: vulnerability reporting policy
- CONTRIBUTING.md: how to participate, code style, commit conventions
- ARCHITECTURE.md: source layout, key modules, CLI commands, MCP tools
- README.md: added method mcp, sync github, sync ship to command table;
  added MCP tools reference section

122 tests pass (119 prior + 3 new).
Hill met. LICENSE, CONTRIBUTING, SECURITY, NOTICE, ARCHITECTURE.md,
CLI/MCP reference in README. 122 tests pass. No drift. No new debt.
@coderabbitai

coderabbitai Bot commented Apr 7, 2026 •

Copy link
Copy Markdown

Summary by CodeRabbit

Release Notes

  • Documentation
    • Added comprehensive project documentation including architecture guide, contribution guidelines, and security policy
    • Expanded README with new CLI commands (method mcp, method sync github, method sync ship) and MCP tools interface documentation
    • Added standard open-source community files: LICENSE (Apache 2.0), CONTRIBUTING, SECURITY, and NOTICE

Walkthrough

This PR establishes foundational open-source project governance and reference documentation: adding standard repository files (LICENSE, CONTRIBUTING.md, SECURITY.md, NOTICE), architecture documentation, design cycle artifacts, and test assertions verifying the presence and content of these governance and documentation files.

Changes

Cohort / File(s) Summary
Governance & Legal
LICENSE, NOTICE, CONTRIBUTING.md, SECURITY.md
Standard OSS repository files: Apache 2.0 license text, copyright notices, contribution guidelines (design→tests→implement→retro workflow, conventional commits, strict TypeScript linting, no execSync), and security vulnerability reporting process (email or GitHub private advisory; 72-hour response SLA; .method.json token handling).
Architecture & Reference Documentation
ARCHITECTURE.md, README.md
Hexagonal architecture specification documenting core Workspace domain, key modules (domain.ts, config.ts, drift.ts, cli.ts, mcp.ts, adapters/github.ts), CLI commands with parameters, MCP tools and their required workspace path parameter, and Vitest testing strategy. README updated with new method mcp, method sync github, method sync ship commands and MCP tools reference section.
Design & Retro Cycle Documentation
docs/design/0026-oss-release-scaffolding/..., docs/method/retro/0026-oss-release-scaffolding/...
Cycle 26 design document specifying OSS release readiness criteria (repository files, ARCHITECTURE.md sections, CLI/MCP documentation completeness) with human and agent checklists. Retro document recording completion of governance file additions, README updates, and linking verification witness with drift check results (11 test files, 122 passing tests).
Testing
tests/docs.test.ts
Added three new test assertions: (1) verify LICENSE, CONTRIBUTING.md, SECURITY.md, NOTICE presence with key content (Apache 2.0, James Robey copyright); (2) ARCHITECTURE.md contains core sections and expected source file paths; (3) README.md enumerates all CLI commands and MCP tool identifiers using regex pattern matching.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Possibly related PRs


Poem

🏛️ From chaos springs order, from silence comes voice—
Governance scrolls now protect the coder's choice.
With LICENSE and NOTICE, we anchor our ship,
Architecture revealed, no secrets to skip.
The METHOD unfolds, tested at every step! 📋✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'OSS Release Scaffolding (Cycle 0026)' directly and accurately summarizes the primary change: adding standard OSS community files and documentation scaffolding for release v0.3.0.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, enumerating all added files (LICENSE, NOTICE, SECURITY.md, CONTRIBUTING.md, ARCHITECTURE.md) and README updates, plus providing a test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cycles/0026-oss-release-scaffolding

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
flyingrobots merged commit 3d018a3 into main Apr 7, 2026
2 of 3 checks passed

@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: 3301ac2639

ℹ️ 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 SECURITY.md
Comment on lines +27 to +28
METHOD uses OS-native keychains for secrets management via
`@git-stunts/vault` when available. GitHub tokens in `.method.json`

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 Remove unsupported keychain secret-management claim

This statement says METHOD stores secrets in OS keychains via @git-stunts/vault, but the current code path reads credentials directly from .method.json and GITHUB_TOKEN/GITHUB_REPO env vars (src/config.ts), and there is no vault integration in the repo. That mismatch is a security-documentation regression: users may assume stronger secret handling than actually exists and keep sensitive tokens in plaintext config files based on incorrect guidance.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai 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.

Actionable comments posted: 10

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CONTRIBUTING.md`:
- Around line 44-50: The markdown code fence for the commit messages in
CONTRIBUTING.md is missing a language specifier which triggers markdownlint
MD040; update the triple-backtick fence to include a language identifier (e.g.,
change ``` to ```text) around the commit-message block so the fence becomes
```text and the linter stops flagging it; locate the commit-message block in
CONTRIBUTING.md (the triple-backtick fenced block containing lines like "feat:
add near-miss hints to drift detector") and add the language token.

In `@docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md`:
- Around line 51-54: The "Non-goals" section currently uses checkbox markdown
which creates semantic confusion; update the "Non-goals" under the "Non-goals"
header to use plain bullet points (e.g., "- Comprehensive API reference
(JSDoc/typedoc level)." and "- Tutorial or getting-started guide (that's a
separate cycle).") to match the README.md template's non-checkbox format, or
alternatively add a single sentence explicitly defining the checkbox semantics
for non-goals if you prefer to keep checkboxes; edit the "Non-goals" header and
its two items accordingly to remove ambiguity.
- Around line 34-36: The acceptance criteria for ARCHITECTURE.md are ambiguous;
update the doc and tests/docs.test.ts to make the requirement binary: either (A)
enumerate an exhaustive list of required sections (e.g., "Overview", "Source
layout", "Key modules", "Dependencies", "Deployment", etc.) and change the line
to "ARCHITECTURE.md MUST contain the following sections: <list>", or (B) state
these three are the minimum required and add "At minimum, ARCHITECTURE.md MUST
contain: Overview, Source layout, Key modules" and allow additional sections;
then adjust tests/docs.test.ts to assert the exact behavior you choose (check
for the exhaustive list if you pick A, or check only for the three minimum
headers if you pick B).
- Around line 29-30: Update the two checklist items "- [ ] The CLI commands are
documented with usage, flags, and examples." and "- [ ] The MCP tools are
documented with parameters and descriptions." to specify the exact target files
(e.g., "README.md", "ARCHITECTURE.md", or both) where the documentation must
exist, and rephrase the playback questions so they reference those specific
documents and can be answered unambiguously with yes/no (for example: "Are CLI
commands documented in README.md with usage, flags, and examples?"). Ensure
references to the target documents are explicit and consistent so the checks are
deterministic.
- Line 10: The document contains a redundant "Legend: PROCESS" prose declaration
that duplicates the YAML front-matter legend; in the file's content remove the
repeated prose legend (the "Legend: PROCESS" line) so the YAML front-matter
remains the single source of truth, or alternatively update the
YAML/front-matter convention and the prose to intentionally differ if
duplication is required—make the change near the prose legend occurrence
referenced by the comment to eliminate the DRY violation.

In `@docs/method/retro/0026-oss-release-scaffolding/witness/verification.md`:
- Line 12: Two fenced code blocks are untyped which triggers markdownlint MD040;
update each untyped triple-backtick fence that contains the lines starting with
"method@0.2.0 test" and the block starting with "Playback-question drift found."
to include a language tag (e.g., use ```text) so both blocks read as fenced with
a language and satisfy the linter.

In `@README.md`:
- Around line 471-480: The MCP tool table entries are too vague—update each row
to match the implementations in src/mcp.ts: replace method_status with a
description like "Return workspace state (backlog lanes, active cycles, legend
health) as structured JSON"; change method_pull to "Promote a backlog item into
the next numbered cycle"; change method_drift to "Check active cycle playback
questions against tests to detect drift"; change method_sync_ship to "Perform
ship sync and update CHANGELOG.md and BEARING.md"; and change
method_capture_witness to "Automate terminal evidence capture for a cycle
(verification witness)"; ensure each tool name (method_status, method_pull,
method_drift, method_sync_ship, method_capture_witness) is referenced exactly as
in src/mcp.ts so the README matches the code.
- Line 468: Update the README's description for the workspace parameter to match
the implementation: replace "absolute path to the workspace root" with the exact
phrasing used by the implementation for the workspace parameter—"Absolute path
to the METHOD workspace root directory"—so the README's `workspace` parameter
text matches the definition in mcp.ts.
- Line 462: Update the README table row so the command cell clearly indicates
the actual lowercase CLI token while the Purpose cell keeps the branded
capitalization: leave the command display as `method sync github` but append a
short parenthetical like "(command uses lowercase 'github')" next to it, and
ensure the Purpose remains "Sync backlog with GitHub Issues"; update the table
header or add a brief note if you prefer to document syntax-vs-brand rules
consistently across the commands list.

In `@SECURITY.md`:
- Around line 27-30: Remove the false claim about OS-native keychain support via
`@git-stunts/vault` from SECURITY.md and replace it with an accurate statement
that no keychain/vault integration exists in the codebase (no
`@git-stunts/vault` dependency and no vault code in src/), explicitly note that
the GitHub adapter stores tokens as private properties and sends them as Bearer
tokens, and instruct users to treat `.method.json` as sensitive (add it to
`.gitignore` if it contains credentials) and to use an external OS keychain or
secrets manager if they need true secret storage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8b38f5df-7f3f-4d6e-af8d-75ca4c97ee71

📥 Commits

Reviewing files that changed from the base of the PR and between a39cc07 and 3301ac2.

📒 Files selected for processing (10)
  • ARCHITECTURE.md
  • CONTRIBUTING.md
  • LICENSE
  • NOTICE
  • README.md
  • SECURITY.md
  • docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md
  • docs/method/retro/0026-oss-release-scaffolding/oss-release-scaffolding.md
  • docs/method/retro/0026-oss-release-scaffolding/witness/verification.md
  • tests/docs.test.ts

Comment thread CONTRIBUTING.md
Comment on lines +44 to +50
```
feat: add near-miss hints to drift detector
fix: resolve symlink in CLI entry point guard
test: RED — failing tests for async exec refactor
chore: ship sync for cycles 0022-0025
docs: update VISION.md for cycles 0001-0025
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Specify the language for the commit-message code fence.

This currently triggers markdownlint MD040.

Suggested patch
-```
+```text
 feat: add near-miss hints to drift detector
 fix: resolve symlink in CLI entry point guard
 test: RED — failing tests for async exec refactor
 chore: ship sync for cycles 0022-0025
 docs: update VISION.md for cycles 0001-0025
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.0)</summary>

[warning] 44-44: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @CONTRIBUTING.md around lines 44 - 50, The markdown code fence for the commit
messages in CONTRIBUTING.md is missing a language specifier which triggers
markdownlint MD040; update the triple-backtick fence to include a language
identifier (e.g., change totext) around the commit-message block so the
fence becomes ```text and the linter stops flagging it; locate the
commit-message block in CONTRIBUTING.md (the triple-backtick fenced block
containing lines like "feat: add near-miss hints to drift detector") and add the
language token.


</details>

<!-- fingerprinting:phantom:poseidon:hawk -->

<!-- This is an auto-generated comment by CodeRabbit -->


Source: dogfood discovery — missing standard GitHub OSS files and
reference documentation for CLI and MCP.
Legend: PROCESS

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Redundant legend declaration.

Line 10 repeats the legend already declared in the YAML front-matter at line 3. This violates DRY. Either remove the prose legend declaration or establish a convention that justifies the duplication.

♻️ Proposed fix to remove redundancy
 Source: dogfood discovery — missing standard GitHub OSS files and
 reference documentation for CLI and MCP.
-Legend: PROCESS
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md` at line
10, The document contains a redundant "Legend: PROCESS" prose declaration that
duplicates the YAML front-matter legend; in the file's content remove the
repeated prose legend (the "Legend: PROCESS" line) so the YAML front-matter
remains the single source of truth, or alternatively update the
YAML/front-matter convention and the prose to intentionally differ if
duplication is required—make the change near the prose legend occurrence
referenced by the comment to eliminate the DRY violation.

Comment on lines +29 to +30
- [ ] The CLI commands are documented with usage, flags, and examples.
- [ ] The MCP tools are documented with parameters and descriptions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Playback questions lack precision about documentation location.

Lines 29-30 state that "CLI commands are documented" and "MCP tools are documented" but fail to specify WHERE. Playback questions must be precise enough to answer with definitive yes/no. Without specifying the target documents (README.md, ARCHITECTURE.md, or both), these questions allow ambiguous interpretation.

✨ Proposed fix to add location specificity
-- [ ] The CLI commands are documented with usage, flags, and examples.
-- [ ] The MCP tools are documented with parameters and descriptions.
+- [ ] The CLI commands are documented in README.md with usage, flags, and examples.
+- [ ] The MCP tools are documented in README.md and ARCHITECTURE.md with parameters and descriptions.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- [ ] The CLI commands are documented with usage, flags, and examples.
- [ ] The MCP tools are documented with parameters and descriptions.
- [ ] The CLI commands are documented in README.md with usage, flags, and examples.
- [ ] The MCP tools are documented in README.md and ARCHITECTURE.md with parameters and descriptions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md` around
lines 29 - 30, Update the two checklist items "- [ ] The CLI commands are
documented with usage, flags, and examples." and "- [ ] The MCP tools are
documented with parameters and descriptions." to specify the exact target files
(e.g., "README.md", "ARCHITECTURE.md", or both) where the documentation must
exist, and rephrase the playback questions so they reference those specific
documents and can be answered unambiguously with yes/no (for example: "Are CLI
commands documented in README.md with usage, flags, and examples?"). Ensure
references to the target documents are explicit and consistent so the checks are
deterministic.

Comment on lines +34 to +36
- [ ] `tests/docs.test.ts` proves the required OSS files exist.
- [ ] `tests/docs.test.ts` proves ARCHITECTURE.md contains expected
sections (overview, source layout, key modules).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Ambiguous acceptance criteria for ARCHITECTURE.md sections.

Line 35-36 states that tests must prove "ARCHITECTURE.md contains expected sections (overview, source layout, key modules)" but the parenthetical is ambiguous—are these examples or the complete list? Playback questions must be binary. Either enumerate the exhaustive list of required sections or state that these are minimum examples with additional sections allowed.

🎯 Proposed fix for clarity
-- [ ] `tests/docs.test.ts` proves ARCHITECTURE.md contains expected
-  sections (overview, source layout, key modules).
+- [ ] `tests/docs.test.ts` proves ARCHITECTURE.md contains at minimum:
+  overview, source layout, and key modules sections.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- [ ] `tests/docs.test.ts` proves the required OSS files exist.
- [ ] `tests/docs.test.ts` proves ARCHITECTURE.md contains expected
sections (overview, source layout, key modules).
- [ ] `tests/docs.test.ts` proves the required OSS files exist.
- [ ] `tests/docs.test.ts` proves ARCHITECTURE.md contains at minimum:
overview, source layout, and key modules sections.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md` around
lines 34 - 36, The acceptance criteria for ARCHITECTURE.md are ambiguous; update
the doc and tests/docs.test.ts to make the requirement binary: either (A)
enumerate an exhaustive list of required sections (e.g., "Overview", "Source
layout", "Key modules", "Dependencies", "Deployment", etc.) and change the line
to "ARCHITECTURE.md MUST contain the following sections: <list>", or (B) state
these three are the minimum required and add "At minimum, ARCHITECTURE.md MUST
contain: Overview, Source layout, Key modules" and allow additional sections;
then adjust tests/docs.test.ts to assert the exact behavior you choose (check
for the exhaustive list if you pick A, or check only for the three minimum
headers if you pick B).

Comment on lines +51 to +54
## Non-goals

- [ ] Comprehensive API reference (JSDoc/typedoc level).
- [ ] Tutorial or getting-started guide (that's a separate cycle).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Checkboxes in Non-goals section create semantic confusion.

Lines 53-54 format non-goals as checkboxes. What does checking or unchecking a non-goal checkbox mean? The README.md template (lines 262-271) shows "Non-goals" as a section without checkbox formatting. Use prose bullets or explicitly define the checkbox semantics for non-goals.

📝 Proposed fix to remove checkbox ambiguity
 ## Non-goals
 
-- [ ] Comprehensive API reference (JSDoc/typedoc level).
-- [ ] Tutorial or getting-started guide (that's a separate cycle).
+- Comprehensive API reference (JSDoc/typedoc level).
+- Tutorial or getting-started guide (that's a separate cycle).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Non-goals
- [ ] Comprehensive API reference (JSDoc/typedoc level).
- [ ] Tutorial or getting-started guide (that's a separate cycle).
## Non-goals
- Comprehensive API reference (JSDoc/typedoc level).
- Tutorial or getting-started guide (that's a separate cycle).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/design/0026-oss-release-scaffolding/oss-release-scaffolding.md` around
lines 51 - 54, The "Non-goals" section currently uses checkbox markdown which
creates semantic confusion; update the "Non-goals" under the "Non-goals" header
to use plain bullet points (e.g., "- Comprehensive API reference (JSDoc/typedoc
level)." and "- Tutorial or getting-started guide (that's a separate cycle).")
to match the README.md template's non-checkbox format, or alternatively add a
single sentence explicitly defining the checkbox semantics for non-goals if you
prefer to keep checkboxes; edit the "Non-goals" header and its two items
accordingly to remove ambiguity.


## Test Results

```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add fence languages to satisfy markdownlint.

Both fenced blocks are untyped, which triggers MD040 and can fail strict docs linting.

Suggested patch
-```
+```text
 > method@0.2.0 test
 > vitest run --config vitest.config.ts
@@
-```
+```
@@
-```
+```text
 Playback-question drift found.
 Scanned 1 active cycle, 7 playback questions, 135 test descriptions.
@@
-```
+```

Also applies to: 28-28

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 12-12: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/method/retro/0026-oss-release-scaffolding/witness/verification.md` at
line 12, Two fenced code blocks are untyped which triggers markdownlint MD040;
update each untyped triple-backtick fence that contains the lines starting with
"method@0.2.0 test" and the block starting with "Playback-question drift found."
to include a language tag (e.g., use ```text) so both blocks read as fenced with
a language and satisfy the linter.

Comment thread README.md
| `method drift [cycle]` | Check active cycle playback questions against test descriptions. |
| `method status` | Summarize backlog lanes, active cycles, and legend load. |
| `method mcp` | Start the MCP server over stdio. |
| `method sync github [--push] [--pull]` | Sync backlog with GitHub Issues. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Inconsistent GitHub capitalization.

Line 462 uses lowercase "github" in the command method sync github. While the command itself may use lowercase, the Purpose column should maintain proper capitalization: "Sync backlog with GitHub Issues" (which you already do correctly). However, consider whether the command name display should reflect the proper brand capitalization for clarity.

As per static analysis hints, the official platform name is "GitHub" with a capital H.

📝 Proposed fix for brand consistency

If you want to clarify that the command uses lowercase while referencing the proper brand:

-| `method sync github [--push] [--pull]` | Sync backlog with GitHub Issues. |
+| `method sync github [--push] [--pull]` | Sync backlog with GitHub Issues. (command uses lowercase) |

Or update command table header to indicate command syntax vs brand names are different things.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| `method sync github [--push] [--pull]` | Sync backlog with GitHub Issues. |
| `method sync github [--push] [--pull]` | Sync backlog with GitHub Issues. (command uses lowercase) |
🧰 Tools
🪛 LanguageTool

[uncategorized] ~462-~462: The official name of this software platform is spelled with a capital “H”.
Context: ... | Start the MCP server over stdio. | | method sync github [--push] [--pull] | Sync backlog with ...

(GITHUB)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 462, Update the README table row so the command cell
clearly indicates the actual lowercase CLI token while the Purpose cell keeps
the branded capitalization: leave the command display as `method sync github`
but append a short parenthetical like "(command uses lowercase 'github')" next
to it, and ensure the Purpose remains "Sync backlog with GitHub Issues"; update
the table header or add a brief note if you prefer to document syntax-vs-brand
rules consistently across the commands list.

Comment thread README.md
### MCP Tools

The MCP server exposes METHOD operations for agent integration. Every
tool requires a `workspace` parameter (absolute path to the workspace

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Minor wording mismatch with implementation.

Line 468 describes the workspace parameter as "absolute path to the workspace root" but src/mcp.ts:1 defines it more precisely as "Absolute path to the METHOD workspace root directory". Consider using the exact wording from the implementation for consistency.

♻️ Proposed alignment with src/mcp.ts
-tool requires a `workspace` parameter (absolute path to the workspace
-root). See `ARCHITECTURE.md` for the full tool reference.
+tool requires a `workspace` parameter (absolute path to the METHOD
+workspace root directory). See `ARCHITECTURE.md` for the full tool reference.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 468, Update the README's description for the workspace
parameter to match the implementation: replace "absolute path to the workspace
root" with the exact phrasing used by the implementation for the workspace
parameter—"Absolute path to the METHOD workspace root directory"—so the README's
`workspace` parameter text matches the definition in mcp.ts.

Comment thread README.md
Comment on lines +471 to +480
| Tool | Purpose |
|------|---------|
| `method_status` | Get workspace status as JSON. |
| `method_inbox` | Capture an idea into the inbox. |
| `method_pull` | Promote a backlog item into a cycle. |
| `method_drift` | Check playback-question drift. |
| `method_close` | Close a cycle with retro and witness. |
| `method_sync_ship` | Perform ship sync. |
| `method_sync_github` | Sync backlog with GitHub Issues. |
| `method_capture_witness` | Capture verification witness. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

MCP tool descriptions are imprecise and lose critical implementation details.

Comparing the table to src/mcp.ts:1-120:

  1. Line 473 (method_status): Says "Get workspace status as JSON" but the implementation describes richer output: "backlog lanes, active cycles, legend health". The JSON format is an implementation detail, not the semantic purpose.

  2. Line 475 (method_pull): Says "Promote a backlog item into a cycle" but implementation specifies "into the next numbered cycle" - the sequencing is important.

  3. Line 476 (method_drift): Says "Check playback-question drift" but implementation says "Check active cycle playback questions against tests" - the verification mechanism matters.

  4. Line 478 (method_sync_ship): Says "Perform ship sync" but implementation provides critical detail: "update CHANGELOG.md and BEARING.md". Users need to know what ship sync actually does.

  5. Line 480 (method_capture_witness): Says "Capture verification witness" but implementation says "Automate terminal evidence capture for a cycle" - these are semantically different concepts.

🔧 Proposed fixes to restore precision
 | Tool | Purpose |
 |------|---------|
-| `method_status` | Get workspace status as JSON. |
+| `method_status` | Get workspace status (backlog lanes, active cycles, legend health). |
 | `method_inbox` | Capture an idea into the inbox. |
-| `method_pull` | Promote a backlog item into a cycle. |
+| `method_pull` | Promote a backlog item into the next numbered cycle. |
-| `method_drift` | Check playback-question drift. |
+| `method_drift` | Check active cycle playback questions against tests. |
 | `method_close` | Close a cycle with retro and witness. |
-| `method_sync_ship` | Perform ship sync. |
+| `method_sync_ship` | Update CHANGELOG.md and BEARING.md (ship sync). |
-| `method_sync_github` | Sync backlog with GitHub Issues. |
+| `method_sync_github` | Synchronize backlog with GitHub Issues. |
-| `method_capture_witness` | Capture verification witness. |
+| `method_capture_witness` | Automate terminal evidence capture for a cycle. |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Tool | Purpose |
|------|---------|
| `method_status` | Get workspace status as JSON. |
| `method_inbox` | Capture an idea into the inbox. |
| `method_pull` | Promote a backlog item into a cycle. |
| `method_drift` | Check playback-question drift. |
| `method_close` | Close a cycle with retro and witness. |
| `method_sync_ship` | Perform ship sync. |
| `method_sync_github` | Sync backlog with GitHub Issues. |
| `method_capture_witness` | Capture verification witness. |
| Tool | Purpose |
|------|---------|
| `method_status` | Get workspace status (backlog lanes, active cycles, legend health). |
| `method_inbox` | Capture an idea into the inbox. |
| `method_pull` | Promote a backlog item into the next numbered cycle. |
| `method_drift` | Check active cycle playback questions against tests. |
| `method_close` | Close a cycle with retro and witness. |
| `method_sync_ship` | Update CHANGELOG.md and BEARING.md (ship sync). |
| `method_sync_github` | Synchronize backlog with GitHub Issues. |
| `method_capture_witness` | Automate terminal evidence capture for a cycle. |
🧰 Tools
🪛 LanguageTool

[uncategorized] ~479-~479: The official name of this software platform is spelled with a capital “H”.
Context: ...hod_sync_ship| Perform ship sync. | |method_sync_github` | Sync backlog with GitHub Issues. | |...

(GITHUB)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 471 - 480, The MCP tool table entries are too
vague—update each row to match the implementations in src/mcp.ts: replace
method_status with a description like "Return workspace state (backlog lanes,
active cycles, legend health) as structured JSON"; change method_pull to
"Promote a backlog item into the next numbered cycle"; change method_drift to
"Check active cycle playback questions against tests to detect drift"; change
method_sync_ship to "Perform ship sync and update CHANGELOG.md and BEARING.md";
and change method_capture_witness to "Automate terminal evidence capture for a
cycle (verification witness)"; ensure each tool name (method_status,
method_pull, method_drift, method_sync_ship, method_capture_witness) is
referenced exactly as in src/mcp.ts so the README matches the code.

Comment thread SECURITY.md
Comment on lines +27 to +30
METHOD uses OS-native keychains for secrets management via
`@git-stunts/vault` when available. GitHub tokens in `.method.json`
should be treated as sensitive — ensure `.method.json` is in
`.gitignore` if it contains credentials.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Verify whether vault/keychain integration exists =="
rg -n -C2 '@git-stunts/vault|keychain|credential store|secret store' SECURITY.md package.json src

echo
echo "== Verify implemented token sources =="
rg -n -C3 'GITHUB_TOKEN|github_token|\\.method\\.json' src/config.ts

echo
echo "== Verify token handling in GitHub adapter =="
rg -n -C3 'private readonly token|Authorization: `Bearer \\$\\{this\\.token\\}`' src/adapters/github.ts

Repository: flyingrobots/method

Length of output: 1325


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Check if `@git-stunts/vault` is in dependencies =="
rg -n '@git-stunts/vault' package.json package-lock.json 2>/dev/null || echo "Not found in package.json/lock"

echo
echo "== Search for vault-related imports or usage in src =="
rg -n 'vault|Vault' src/ 2>/dev/null || echo "No vault references in src/"

echo
echo "== Check GitHub adapter token handling (direct search) =="
rg -n 'Authorization.*Bearer|private.*token|this\.token' src/adapters/github.ts || echo "Pattern not found"

echo
echo "== Show GitHub adapter implementation =="
head -50 src/adapters/github.ts

Repository: flyingrobots/method

Length of output: 1645


SECURITY.md falsely claims a nonexistent secret-management capability that doesn't exist anywhere in this codebase.

Lines 27-29 claim keychain support via @git-stunts/vault, but verification reveals:

  • @git-stunts/vault is not a dependency (absent from package.json/package-lock.json)
  • Zero vault/keychain code exists in src/
  • GitHub adapter stores tokens directly as private properties and passes them as plain Bearer tokens in Authorization headers

This is a documentation-reality mismatch with security posture implications—users may trust a non-existent security mechanism. Update the documentation to reflect the actual implementation.

Suggested correction
- METHOD uses OS-native keychains for secrets management via
- `@git-stunts/vault` when available. GitHub tokens in `.method.json`
- should be treated as sensitive — ensure `.method.json` is in
- `.gitignore` if it contains credentials.
+ METHOD reads GitHub credentials from `.method.json` and environment
+ variables (GITHUB_TOKEN). Tokens are handled as plain secrets and NOT
+ encrypted. Treat `.method.json` as sensitive and ensure it is in
+ `.gitignore` when credentials are present.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
METHOD uses OS-native keychains for secrets management via
`@git-stunts/vault` when available. GitHub tokens in `.method.json`
should be treated as sensitive — ensure `.method.json` is in
`.gitignore` if it contains credentials.
METHOD reads GitHub credentials from `.method.json` and environment
variables (GITHUB_TOKEN). Tokens are handled as plain secrets and NOT
encrypted. Treat `.method.json` as sensitive and ensure it is in
`.gitignore` when credentials are present.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@SECURITY.md` around lines 27 - 30, Remove the false claim about OS-native
keychain support via `@git-stunts/vault` from SECURITY.md and replace it with an
accurate statement that no keychain/vault integration exists in the codebase (no
`@git-stunts/vault` dependency and no vault code in src/), explicitly note that
the GitHub adapter stores tokens as private properties and sends them as Bearer
tokens, and instruct users to treat `.method.json` as sensitive (add it to
`.gitignore` if it contains credentials) and to use an external OS keychain or
secrets manager if they need true secret storage.

@flyingrobots
flyingrobots deleted the cycles/0026-oss-release-scaffolding branch April 7, 2026 07:08
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