docs: document stoke contribution facts #47

Merged
andres merged 1 commit from build/46-contributing into main 2026-09-01 13:31:31 +00:00

Closes #46

Adds the repository-specific contribution facts that the root and vendored ceremony routers require.

Acceptance criteria

  • Root CONTRIBUTING.md resolves all five existing pointers.
  • Its panel identity set equals .github/labels.conf panel= in both directions.
  • Its scope:* name set equals .github/labels.conf in both directions.
  • Every convention claim is backed by the current tree.
    • CommonJS: checked package.json plus require() / module.exports usage and absence of ESM declarations under src/.
    • Tests: checked node --test, all seven test/*.test.js files importing node:test, and no framework dependency.
    • Node floor: checked engines.node is >=22.12.0.
    • Bash: checked every scripts/*.sh first line is #!/usr/bin/env bash.
  • The drill section states the current no-drill posture with all three facts and takes no position on #27.
  • The single-writer rule appears.
  • git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md is empty.
  • npm test && npm run check:governance passes on the completed tree (130 tests; 4 identities and 5 scopes validated).

Worklog

  • Measure the current panel, scope, drill, release, and code-convention facts.
  • Add the six-section root CONTRIBUTING.md only.
  • Run two-way roster and scope comparisons plus targeted evidence checks.
  • Run the complete test and governance suite after the documentation change.
  • Complete an independent final diff review with no findings.
  • Prepare the complete head for the first-round signal and draft-to-ready handoff.

Test gap

Roster parity with CONTRIBUTING.md has no automated repository guard. The two-way comparison was performed manually for this head; reviewers should repeat the specified negative/manual check.

Round log

Round at 3ea8eb90

Round passed with no written reply.

Closes #46 Adds the repository-specific contribution facts that the root and vendored ceremony routers require. ## Acceptance criteria - [x] Root `CONTRIBUTING.md` resolves all five existing pointers. - [x] Its panel identity set equals `.github/labels.conf` `panel=` in both directions. - [x] Its `scope:*` name set equals `.github/labels.conf` in both directions. - [x] Every convention claim is backed by the current tree. - CommonJS: checked `package.json` plus `require()` / `module.exports` usage and absence of ESM declarations under `src/`. - Tests: checked `node --test`, all seven `test/*.test.js` files importing `node:test`, and no framework dependency. - Node floor: checked `engines.node` is `>=22.12.0`. - Bash: checked every `scripts/*.sh` first line is `#!/usr/bin/env bash`. - [x] The drill section states the current no-drill posture with all three facts and takes no position on #27. - [x] The single-writer rule appears. - [x] `git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md` is empty. - [x] `npm test && npm run check:governance` passes on the completed tree (130 tests; 4 identities and 5 scopes validated). ## Worklog - [x] Measure the current panel, scope, drill, release, and code-convention facts. - [x] Add the six-section root `CONTRIBUTING.md` only. - [x] Run two-way roster and scope comparisons plus targeted evidence checks. - [x] Run the complete test and governance suite after the documentation change. - [x] Complete an independent final diff review with no findings. - [x] Prepare the complete head for the first-round signal and draft-to-ready handoff. ## Test gap Roster parity with `CONTRIBUTING.md` has no automated repository guard. The two-way comparison was performed manually for this head; reviewers should repeat the specified negative/manual check. ## Round log <!-- round:3ea8eb903267dd10f6557bcc5e846772415b83c1 --> **Round at 3ea8eb90** _Round passed with no written reply._
codex-bot-andresmgsl added 1 commit 2026-09-01 12:50:10 +00:00
docs: add stoke contribution facts
All checks were successful
labels / labels (pull_request) Successful in 10s
ci / test (pull_request) Successful in 16s
3ea8eb9032
codex-bot-andresmgsl changed title from docs: document stoke contribution facts to WIP: docs: document stoke contribution facts 2026-09-01 12:50:17 +00:00
forgejo-actions added the
state:building
label 2026-09-01 12:50:27 +00:00
Author
Member

📣 round answered at head 3ea8eb9032

📣 round answered at head 3ea8eb903267dd10f6557bcc5e846772415b83c1
codex-bot-andresmgsl changed title from WIP: docs: document stoke contribution facts to docs: document stoke contribution facts 2026-09-01 12:53:53 +00:00
forgejo-actions added
blocker:unrequested
state:addressing
and removed
state:building
labels 2026-09-01 13:00:18 +00:00
codex-bot-andresmgsl requested review from glm-bot-andresmgsl 2026-09-01 13:00:53 +00:00
codex-bot-andresmgsl requested review from claude-bot-andresmgsl 2026-09-01 13:00:54 +00:00
codex-bot-andresmgsl requested review from kimi-bot-andresmgsl 2026-09-01 13:00:54 +00:00
codex-bot-andresmgsl added the
state:bots-reviewing
label 2026-09-01 13:00:55 +00:00
forgejo-actions removed the
blocker:unrequested
state:addressing
labels 2026-09-01 13:01:14 +00:00

🔎 reviewing head 3ea8eb9032

  • Pointers resolve — CONTRIBUTING.md added at root; the five router pointers (root AGENTS.md L7, .ceremony/{AGENTS,BUILDER,LABELS,REVIEWER}.md) now have a target.
  • Roster two-way set diff vs .github/labels.conf panel= — empty (4 identities).
  • scope:* two-way set diff vs labels.conf rows — empty (5 names).
  • Every convention claim re-derived from the tree at head (CommonJS/no ESM in src/, node:test in all 7 test/*.test.js with no framework dep, engines.node >=22.12.0, #!/usr/bin/env bash on all 3 scripts/*.sh).
  • Drill section — all three facts confirmed (no drills/; tag-driven .forgejo/workflows/release.yml; label 252 blocker:drill-pending carries zero items at state=all). Takes no position on #27.
  • Single-writer rule present.
  • git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md — empty.
  • npm ci && npm test && npm run check:governance — 130/130 pass; governance 4 identities / 5 scopes.
  • Test-plan negative #6 reproduced: injected a fifth roster identity, suite stayed green — the disclosed guard gap is real.

Verdict submitted.

🔎 reviewing head 3ea8eb903267dd10f6557bcc5e846772415b83c1 - [x] Pointers resolve — `CONTRIBUTING.md` added at root; the five router pointers (root `AGENTS.md` L7, `.ceremony/{AGENTS,BUILDER,LABELS,REVIEWER}.md`) now have a target. - [x] Roster two-way set diff vs `.github/labels.conf` `panel=` — empty (4 identities). - [x] `scope:*` two-way set diff vs `labels.conf` rows — empty (5 names). - [x] Every convention claim re-derived from the tree at head (CommonJS/no ESM in `src/`, `node:test` in all 7 `test/*.test.js` with no framework dep, `engines.node >=22.12.0`, `#!/usr/bin/env bash` on all 3 `scripts/*.sh`). - [x] Drill section — all three facts confirmed (no `drills/`; tag-driven `.forgejo/workflows/release.yml`; label 252 `blocker:drill-pending` carries zero items at `state=all`). Takes no position on #27. - [x] Single-writer rule present. - [x] `git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md` — empty. - [x] `npm ci && npm test && npm run check:governance` — 130/130 pass; governance 4 identities / 5 scopes. - [x] Test-plan negative #6 reproduced: injected a fifth roster identity, suite stayed green — the disclosed guard gap is real. Verdict submitted.

🔎 reviewing head 3ea8eb9032

  • verified CONTRIBUTING.md structure, roster/scope parity, drill facts, convention claims
  • verified .ceremony/ + AGENTS.md untouched
  • CI green; local npm/node unavailable — relied on Forgejo Actions status
  • verdict: approve
🔎 reviewing head 3ea8eb903267dd10f6557bcc5e846772415b83c1 - verified CONTRIBUTING.md structure, roster/scope parity, drill facts, convention claims - verified .ceremony/ + AGENTS.md untouched - CI green; local npm/node unavailable — relied on Forgejo Actions status - verdict: approve

🔎 reviewing head 3ea8eb9032

  • queue check: no prior glm review on this PR; review request 13:00:53Z stands
  • read issue #46 acceptance criteria (Closes #46, all criteria pre-merge)
  • detached worktree at head; diff = one new file CONTRIBUTING.md (55 lines); .ceremony/ + AGENTS.md untouched
  • roster + scope two-way set diffs empty (manual — no automated guard exists, as the issue notes)
  • convention claims verified against tree: commonjs, no ESM in src/, 7 node:test files, engines >=22.12.0, bash shebangs
  • drill facts verified: no drills/, tag-driven release.yml, blocker:drill-pending (id 252) zero open items; no position on #27
  • npm test 130/130 pass; npm run check:governance green; CI rollup success
  • verdict: APPROVE submitted and verified at head 3ea8eb9 (13:17:37Z); worktree removed
🔎 reviewing head 3ea8eb903267dd10f6557bcc5e846772415b83c1 - [x] queue check: no prior glm review on this PR; review request 13:00:53Z stands - [x] read issue #46 acceptance criteria (Closes #46, all criteria pre-merge) - [x] detached worktree at head; diff = one new file CONTRIBUTING.md (55 lines); .ceremony/ + AGENTS.md untouched - [x] roster + scope two-way set diffs empty (manual — no automated guard exists, as the issue notes) - [x] convention claims verified against tree: commonjs, no ESM in src/, 7 node:test files, engines >=22.12.0, bash shebangs - [x] drill facts verified: no drills/, tag-driven release.yml, blocker:drill-pending (id 252) zero open items; no position on #27 - [x] npm test 130/130 pass; npm run check:governance green; CI rollup success - [x] verdict: APPROVE submitted and verified at head 3ea8eb9 (13:17:37Z); worktree removed
claude-bot-andresmgsl approved these changes 2026-09-01 13:13:27 +00:00
claude-bot-andresmgsl left a comment
Member

APPROVE — head 3ea8eb903267dd10f6557bcc5e846772415b83c1, reviewed whole in a detached worktree at that SHA.

The PR adds one file, CONTRIBUTING.md (55 lines), and nothing else. That is exactly what #46 asked for.

Acceptance criteria — all met, each measured

criterion result
File exists at root, five pointers resolve CONTRIBUTING.md added; root AGENTS.md L7 and the four .ceremony/ pointers now have a target
Roster set equal to labels.conf panel=, two-way empty diff, 4 identities
scope:* set equal, two-way empty diff, 5 names
Every convention claim backed by the tree at head all four re-derived independently (below)
Drill section: no drill + three facts + no position on #27 all three facts confirmed
Single-writer rule present "Work issue ownership", L52-55
git diff --name-only <base>..<head> -- .ceremony/ AGENTS.md empty empty
CI green 130/130 tests pass; governance clean

What I ran

  • npm ci && npm test# pass 130 # fail 0, rc=0. npm run check:governancegovernance: 4 identities resolved; 5 scope rows valid, rc=0. (The npm ci matters: without it the suite reports phantom failures in a fresh worktree.)
  • Roster two-way diff, scripted rather than eyeballed: panel= split on whitespace vs. the backticked identities in the roster table, both sorted, diff → empty. Same for the scope:* names → empty.
  • Convention claims, each re-derived rather than taken from the PR body: "type": "commonjs" in package.json and grep -rn '^import |^export |export default' src/ → no hits across all four files, including repo-sync.js; all seven test/*.test.js import node:test, "test": "node --test", and the only dependency is commander; engines.node is >=22.12.0; all three scripts/*.sh start with #!/usr/bin/env bash.
  • Drill facts, all three: no drills/ directory in the tree; .forgejo/workflows/release.yml is stoke's own, triggered on: push: tags: v*; label id 252 is blocker:drill-pending on the API and a state=all query for it returns zero issues. The #27 sentence is accurate and neutral — #27 is open, needs-ruling, and does carry the route-A/route-B release question (its finding at L224-239 names the reusable-workflow route); the file says only that route B would update this section.
  • .ceremony/ and AGENTS.md untouched: name-only diff over both paths is empty; the diff is A CONTRIBUTING.md alone.
  • No vendored doctrine restated: scanned each substantive CONTRIBUTING line against the whole .ceremony/ mirror for textual overlap — no hits. The one doctrinal line, the single-writer rule, is the spec's own §6.
  • Test-plan "must fail" #6, actually constructed rather than asserted: I injected a fifth identity (phantom-bot-andresmgsl) into the roster table without touching labels.conf and re-ran the suite — npm test rc=0, check:governance still reported "4 identities". The disclosed gap is real, and grep -rn CONTRIBUTING scripts/ test/ .forgejo/ src/ confirms nothing in the repo reads this file. I then restored the tree (git diff --quiet clean). The roster and scope parity checks in this verdict were therefore performed by hand, as #46's test plan requires; nothing automated guards them. The PR body's "Test gap" section discloses this correctly, which #46 makes part of the deliverable.

What I could not verify

  • CI on the forge. I could not read a Forgejo Actions run for this head; I ran .forgejo/workflows/ci.yml's exact command line (npm ci && npm test && npm run check:governance) locally instead, on node 22, and it is green. The workflow needs a runner advertising docker, which I cannot confirm from here.
  • Rendered-link resolution on the forge web UI. I verified every link target exists in the tree at this head (.ceremony/, .github/labels.conf, .forgejo/workflows/release.yml) rather than fetching the rendered page.

Non-blocking nits (approval is not gated on these)

  1. labels.conf's own scope descriptions have drifted slightly from the tree, and CONTRIBUTING faithfully inherits the drift: scope:cli says "cli.js, api.js, config.js" but src/ also holds repo-sync.js, and scope:docs says "README and docs/" while this new file is a root doc outside both. Restating labels.conf verbatim is the right call for this PR — labels.conf is authoritative and the criterion is set equality, which holds. Correcting the authoritative descriptions is a separate proposal, not this round's work.
  2. No changelog.d/ fragment. Correct for a docs-only change here — the immediately preceding docs PR (#44, 6bffd8a) added none either, and no behavior changed. Noting it only so the omission reads as deliberate.

The file describes and does not legislate, invents no rule, and stops where the mirror takes over. Approved.

**APPROVE** — head `3ea8eb903267dd10f6557bcc5e846772415b83c1`, reviewed whole in a detached worktree at that SHA. The PR adds one file, `CONTRIBUTING.md` (55 lines), and nothing else. That is exactly what #46 asked for. ## Acceptance criteria — all met, each measured | criterion | result | | --- | --- | | File exists at root, five pointers resolve | ✅ `CONTRIBUTING.md` added; root `AGENTS.md` L7 and the four `.ceremony/` pointers now have a target | | Roster set equal to `labels.conf` `panel=`, two-way | ✅ empty diff, 4 identities | | `scope:*` set equal, two-way | ✅ empty diff, 5 names | | Every convention claim backed by the tree at head | ✅ all four re-derived independently (below) | | Drill section: no drill + three facts + no position on #27 | ✅ all three facts confirmed | | Single-writer rule present | ✅ "Work issue ownership", L52-55 | | `git diff --name-only <base>..<head> -- .ceremony/ AGENTS.md` empty | ✅ empty | | CI green | ✅ 130/130 tests pass; governance clean | ## What I ran - `npm ci && npm test` → `# pass 130 # fail 0`, rc=0. `npm run check:governance` → `governance: 4 identities resolved; 5 scope rows valid`, rc=0. (The `npm ci` matters: without it the suite reports phantom failures in a fresh worktree.) - **Roster two-way diff**, scripted rather than eyeballed: `panel=` split on whitespace vs. the backticked identities in the roster table, both sorted, `diff` → empty. Same for the `scope:*` names → empty. - **Convention claims, each re-derived rather than taken from the PR body**: `"type": "commonjs"` in `package.json` and `grep -rn '^import |^export |export default' src/` → no hits across all four files, including `repo-sync.js`; all seven `test/*.test.js` import `node:test`, `"test": "node --test"`, and the only dependency is `commander`; `engines.node` is `>=22.12.0`; all three `scripts/*.sh` start with `#!/usr/bin/env bash`. - **Drill facts, all three**: no `drills/` directory in the tree; `.forgejo/workflows/release.yml` is stoke's own, triggered `on: push: tags: v*`; label id **252** is `blocker:drill-pending` on the API and a `state=all` query for it returns **zero** issues. The `#27` sentence is accurate and neutral — #27 is open, `needs-ruling`, and does carry the route-A/route-B release question (its finding at L224-239 names the reusable-workflow route); the file says only that route B would update this section. - **`.ceremony/` and `AGENTS.md` untouched**: name-only diff over both paths is empty; the diff is `A CONTRIBUTING.md` alone. - **No vendored doctrine restated**: scanned each substantive CONTRIBUTING line against the whole `.ceremony/` mirror for textual overlap — no hits. The one doctrinal line, the single-writer rule, is the spec's own §6. - **Test-plan "must fail" #6, actually constructed rather than asserted**: I injected a fifth identity (`phantom-bot-andresmgsl`) into the roster table without touching `labels.conf` and re-ran the suite — `npm test` rc=0, `check:governance` still reported "4 identities". The disclosed gap is real, and `grep -rn CONTRIBUTING scripts/ test/ .forgejo/ src/` confirms nothing in the repo reads this file. I then restored the tree (`git diff --quiet` clean). **The roster and scope parity checks in this verdict were therefore performed by hand, as #46's test plan requires; nothing automated guards them.** The PR body's "Test gap" section discloses this correctly, which #46 makes part of the deliverable. ## What I could not verify - **CI on the forge.** I could not read a Forgejo Actions run for this head; I ran `.forgejo/workflows/ci.yml`'s exact command line (`npm ci && npm test && npm run check:governance`) locally instead, on node 22, and it is green. The workflow needs a runner advertising `docker`, which I cannot confirm from here. - **Rendered-link resolution on the forge web UI.** I verified every link target exists in the tree at this head (`.ceremony/`, `.github/labels.conf`, `.forgejo/workflows/release.yml`) rather than fetching the rendered page. ## Non-blocking nits (approval is not gated on these) 1. `labels.conf`'s own scope descriptions have drifted slightly from the tree, and CONTRIBUTING faithfully inherits the drift: `scope:cli` says "`cli.js`, `api.js`, `config.js`" but `src/` also holds `repo-sync.js`, and `scope:docs` says "README and docs/" while this new file is a root doc outside both. Restating `labels.conf` verbatim is the right call for *this* PR — `labels.conf` is authoritative and the criterion is set equality, which holds. Correcting the authoritative descriptions is a separate proposal, not this round's work. 2. No `changelog.d/` fragment. Correct for a docs-only change here — the immediately preceding docs PR (#44, `6bffd8a`) added none either, and no behavior changed. Noting it only so the omission reads as deliberate. The file describes and does not legislate, invents no rule, and stops where the mirror takes over. Approved.
kimi-bot-andresmgsl approved these changes 2026-09-01 13:14:27 +00:00
kimi-bot-andresmgsl left a comment
Member

Reviewed at head 3ea8eb9032.

Acceptance criteria:

  • CONTRIBUTING.md exists at the root and resolves the five router pointers.
  • Review panel roster matches .github/labels.conf panel= both ways (4 identities).
  • scope:* set matches .github/labels.conf both ways (cli, packaging, manifests, ci, docs).
  • Drill section states the no-drill posture with all three facts: no drills/ directory, tag-driven .forgejo/workflows/release.yml, and zero open blocker:drill-pending items; it cites #27 without taking a position.
  • Single-writer rule is present.
  • git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md is empty.
  • Code convention claims are backed by the tree: package.json declares "type": "commonjs" and engines.node >=22.12.0; src/ uses require()/module.exports with no top-level ESM import/export; all seven test/*.test.js import node:test and no test framework appears in dependencies; all scripts/*.sh start with #!/usr/bin/env bash.

Verification gap:

  • node/npm are not installed in this box, so I could not run npm test && npm run check:governance locally. I relied on the Forgejo Actions status for this head, which reports ci / test and labels / labels both successful.

Approving.

Reviewed at head 3ea8eb903267dd10f6557bcc5e846772415b83c1. Acceptance criteria: - CONTRIBUTING.md exists at the root and resolves the five router pointers. - Review panel roster matches `.github/labels.conf` `panel=` both ways (4 identities). - `scope:*` set matches `.github/labels.conf` both ways (cli, packaging, manifests, ci, docs). - Drill section states the no-drill posture with all three facts: no `drills/` directory, tag-driven `.forgejo/workflows/release.yml`, and zero open `blocker:drill-pending` items; it cites #27 without taking a position. - Single-writer rule is present. - `git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md` is empty. - Code convention claims are backed by the tree: `package.json` declares `"type": "commonjs"` and `engines.node >=22.12.0`; `src/` uses `require()`/`module.exports` with no top-level ESM import/export; all seven `test/*.test.js` import `node:test` and no test framework appears in dependencies; all `scripts/*.sh` start with `#!/usr/bin/env bash`. Verification gap: - `node`/`npm` are not installed in this box, so I could not run `npm test && npm run check:governance` locally. I relied on the Forgejo Actions status for this head, which reports `ci / test` and `labels / labels` both successful. Approving.
glm-bot-andresmgsl approved these changes 2026-09-01 13:17:42 +00:00
glm-bot-andresmgsl left a comment
Member

Approve — reviewed the whole PR at head 3ea8eb9032 in a detached throwaway worktree, against issue #46's acceptance criteria first, then the repo's load-bearing constraints, then the content itself. Every criterion verified by running, not opining:

  • Diff shape: one commit, one new file — root CONTRIBUTING.md (55 lines, six sections in the spec's order). git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md is empty, so the never-overwritten scaffold and the vendored mirror are untouched, and nothing from the issue's out-of-scope list (intake door, docs-sync CI wiring, AGENTS.md edits) was swept in.
  • Roster parity: two-way set diff of the CONTRIBUTING table against labels.conf panel= is empty in both directions. This is a manual diff — no automated guard exists (issue #46's test plan item 6 names the gap; scripts/check-governance.js validates labels.conf alone and never reads CONTRIBUTING). I performed the hand diff as the issue directs.
  • Scope parity: two-way set diff of the five scope:* table rows against labels.conf rows is empty in both directions.
  • Convention claims, each checked against the head tree: package.json declares "type": "commonjs"; all four src/*.js use require/module.exports with zero ESM declarations; all seven test/*.test.js import node:test, npm test runs node --test, and the only dependency is commander (no test framework); engines.node is >=22.12.0; all three scripts/*.sh open with #!/usr/bin/env bash.
  • Drill section: states the no-drill posture with all three cited facts, each independently verified — no drills/ directory exists; .forgejo/workflows/release.yml is tag-driven (on: push: tags: 'v*') and stoke's own; blocker:drill-pending is label id 252 (confirmed via the labels API) and zero open items carry it (confirmed via the issues API). Takes no position on #27's alternatives.
  • Single-writer rule present as one line; header points at .ceremony/ first; no vendored doctrine restated.
  • Tests: npm ci && npm test → 130/130 pass; npm run check:governance → "4 identities resolved; 5 scope rows valid" — matching the PR body's claims. Forge CI rollup on the head reports success.

Could not verify / relied on instead: nothing material. I did not read the two CI jobs' logs individually (the rollup plus my own full-suite local run at the exact head is the stronger evidence). No changelog entry was added; that is correct here — changelog.d/ records behavior changes (#23/#36/#43) and this PR is docs-only.

Closing keyword: Closes #46 is the intended shape — every acceptance criterion is checkable pre-merge — and no stray closing keyword precedes any other issue number in the PR body.

Non-blocking nits: none.

Approve — reviewed the whole PR at head 3ea8eb903267dd10f6557bcc5e846772415b83c1 in a detached throwaway worktree, against issue #46's acceptance criteria first, then the repo's load-bearing constraints, then the content itself. Every criterion verified by running, not opining: - **Diff shape**: one commit, one new file — root `CONTRIBUTING.md` (55 lines, six sections in the spec's order). `git diff --name-only origin/main...HEAD -- .ceremony/ AGENTS.md` is empty, so the never-overwritten scaffold and the vendored mirror are untouched, and nothing from the issue's out-of-scope list (intake door, docs-sync CI wiring, AGENTS.md edits) was swept in. - **Roster parity**: two-way set diff of the CONTRIBUTING table against `labels.conf` `panel=` is empty in both directions. **This is a manual diff** — no automated guard exists (issue #46's test plan item 6 names the gap; `scripts/check-governance.js` validates `labels.conf` alone and never reads CONTRIBUTING). I performed the hand diff as the issue directs. - **Scope parity**: two-way set diff of the five `scope:*` table rows against `labels.conf` rows is empty in both directions. - **Convention claims, each checked against the head tree**: `package.json` declares `"type": "commonjs"`; all four `src/*.js` use `require`/`module.exports` with zero ESM declarations; all seven `test/*.test.js` import `node:test`, `npm test` runs `node --test`, and the only dependency is `commander` (no test framework); `engines.node` is `>=22.12.0`; all three `scripts/*.sh` open with `#!/usr/bin/env bash`. - **Drill section**: states the no-drill posture with all three cited facts, each independently verified — no `drills/` directory exists; `.forgejo/workflows/release.yml` is tag-driven (`on: push: tags: 'v*'`) and stoke's own; `blocker:drill-pending` is label id 252 (confirmed via the labels API) and zero open items carry it (confirmed via the issues API). Takes no position on #27's alternatives. - **Single-writer rule** present as one line; header points at `.ceremony/` first; no vendored doctrine restated. - **Tests**: `npm ci && npm test` → 130/130 pass; `npm run check:governance` → "4 identities resolved; 5 scope rows valid" — matching the PR body's claims. Forge CI rollup on the head reports success. Could not verify / relied on instead: nothing material. I did not read the two CI jobs' logs individually (the rollup plus my own full-suite local run at the exact head is the stronger evidence). No changelog entry was added; that is correct here — `changelog.d/` records behavior changes (#23/#36/#43) and this PR is docs-only. Closing keyword: `Closes #46` is the intended shape — every acceptance criterion is checkable pre-merge — and no stray closing keyword precedes any other issue number in the PR body. Non-blocking nits: none.
codex-bot-andresmgsl requested review from andres 2026-09-01 13:20:57 +00:00
codex-bot-andresmgsl added the
state:needs-human
label 2026-09-01 13:20:57 +00:00
forgejo-actions removed the
state:bots-reviewing
label 2026-09-01 13:21:15 +00:00
andres merged commit 081e05ca5a into main 2026-09-01 13:31:31 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/stoke#47
No description provided.