Skip to content

Refactor governance around version milestones - #766

Open
flyingrobots wants to merge 16 commits into
mainfrom
refactor/governance-version-milestones
Open

Refactor governance around version milestones#766
flyingrobots wants to merge 16 commits into
mainfrom
refactor/governance-version-milestones

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Linked Issue

Closes #742

Summary

Replace Wesley's split goalpost/version-label scheduling model with plain semantic-version GitHub milestones as the sole scheduling authority.

  • Scheduled open issues use exactly one plain vX.Y.Z milestone.
  • Unscheduled open issues use exactly one triage:* label and no milestone.
  • Release gates live in the same version milestone as implementation work.
  • Project fields retain priority and workflow status.
  • legend:*, pkg:*, work:*, and ordinary type labels retain classification.

Why

PR #741 and issue #740 exposed an ambiguity in the existing model: a concrete release-relevant slice could plausibly fit several slogan goalposts, while the separate vX.Y.Z label already carried the actual scheduling decision. The duplicated axes added subjective classification and could block otherwise green work without adding release information.

This change makes the tracker model deterministic and gives release guards one authoritative query surface.

Changes

  • Rewrite the authoritative hierarchy in AGENTS.md, docs/BEARING.md, and docs/METHOD.md.
  • Align contributor, triage, labels, documentation, release policy, release checklist, and runbook guidance.
  • Update issue and pull-request templates for the new scheduling invariant.
  • Update .continuum/release.yml to declare version milestones as the only scheduling axis.
  • Make the Rust release guard resolve an exact plain version milestone and fail closed on missing, duplicate, closed, malformed, or inaccessible milestone state.
  • Remove the redundant release-workflow label query and update deterministic governance fixtures.
  • Preserve historical packets and closed milestone/label evidence.

Live Migration Boundary

This PR changes repository doctrine, validation, templates, and release behavior only.

It does not mutate the live GitHub tracker. After this PR is approved and merged, the operator migration is:

  1. Rename open Release: vX.Y.Z milestones to plain vX.Y.Z.
  2. Assign every scheduled open issue to the milestone selected by its existing unique version label.
  3. Verify each assignment, then remove the redundant version label.
  4. Leave triage:* issues without milestones.
  5. Move feat(examples): add IR-to-Brainfuck extension generator #740 and refactor(governance): replace goalposts with version milestones #742 into v0.3.0.
  6. Close the remaining open slogan goalposts after their open issue counts reach zero.
  7. Update release-gate bodies to describe milestone membership.

The migration must be read-only dry-run audited before any live mutation and verified afterward.

Validation

  • git diff --check origin/main...HEAD — passed.
  • cargo test --locked -p xtask — 67 passed.
  • bats -t test/release-governance.bats test/ci-workflows.bats — 63 passed.
  • pnpm run preflight — passed.
  • Pre-push Rust product preflight — passed.
  • Pre-push repository Bats smoke suite — passed.

Risk

The principal risk is divergence between merged repository doctrine and live tracker metadata during the transition. The explicit post-merge migration sequence, fail-closed release queries, and deterministic dry run bound that risk.

No live issue, milestone, label, project, or release state is changed by this PR.

Backout

Revert the merge commit before performing the live tracker migration. If the migration has already begun, stop and restore the recorded pre-migration issue/milestone assignments through ordinary forward mutations; do not rewrite Git history.

Merge Strategy

Merge commit only. No rebase and no force push.

Summary by CodeRabbit

  • Release Management

    • Standardized release scheduling around a single plain vX.Y.Z milestone.
    • Strengthened pre-tag validation, release-gate checks, signed-tag sequencing, and failure recovery rules.
    • Improved safeguards against publishing or modifying an already-published release.
  • Documentation

    • Updated contributor, triage, issue-template, and release guidance to reflect the new scheduling model.
    • Clarified the distinction between unscheduled intake and scheduled release work.
  • Validation

    • Added broader governance checks covering issue metadata, release workflows, and tag safety.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0a339e49-fa22-4206-93f4-72f4d678a2aa

📥 Commits

Reviewing files that changed from the base of the PR and between db87ccf and 412210b.

📒 Files selected for processing (24)
  • .continuum/release.yml
  • .github/actions/install-bats/action.yml
  • .github/pull_request_template.md
  • .github/workflows/install-bats.yml
  • AGENTS.md
  • CHANGELOG.md
  • CONTRIBUTING.md
  • docs/BEARING.md
  • docs/CRATES_IO_RELEASE.md
  • docs/METHOD.md
  • docs/architecture/hosts.md
  • docs/ci.md
  • docs/governance/RELEASE_CHECKLIST.md
  • docs/governance/RELEASE_POLICY.md
  • docs/method/release-runbook.md
  • docs/method/release.md
  • docs/topics/contributing/first-pr.md
  • docs/topics/contributing/triage.md
  • docs/topics/releases.md
  • test/README.md
  • test/ci-workflows.bats
  • test/docs-planning-boundary.bats
  • test/release-governance.bats
  • xtask/src/main.rs
📝 Walkthrough

Walkthrough

The PR replaces goalpost and version-label scheduling with plain vX.Y.Z milestones, updates release preparation and tagging procedures, refactors release tracker guards, and adds governance validation to CI and local test runs.

Changes

Release governance migration

Layer / File(s) Summary
Scheduling contracts and intake rules
.continuum/release.yml, .github/ISSUE_TEMPLATE/*, AGENTS.md, CONTRIBUTING.md, docs/governance/*, docs/topics/contributing/triage.md
Unscheduled issues use one triage:* label without a milestone; scheduled issues use one plain version milestone without triage or concrete-version scheduling labels.
Release preparation and publication procedure
RELEASE.md, docs/method/release*.md, docs/topics/releases.md, docs/CRATES_IO_RELEASE.md, docs/governance/RELEASE_*.md
Release instructions require exact milestone checks, synced-main validation, gate closure before tagging, tag-specific guards, and preserved publication evidence.
Release tracker guard implementation
xtask/src/main.rs, xtask/Cargo.toml
Release guards query open issues through the exact milestone, normalize GitHub command failures, validate repository remotes, and update supporting tests.
Governance validation wiring
.github/workflows/*, scripts/*, test/*
Release-governance Bats tests are included in CI, pre-push, and local checks; workflow tests verify unconditional execution and release-guard delegation.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: enhancement

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 49.15% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the governance refactor around version milestones.
Description check ✅ Passed The PR description covers the key template sections and clearly explains the summary, rationale, changes, risks, validation, and backout.
Linked Issues check ✅ Passed The changes match #742 by making plain vX.Y.Z milestones the scheduling authority and updating docs, templates, guards, tests, and migration rules.
Out of Scope Changes check ✅ Passed The diff stays focused on governance, release workflow, documentation, and tests; no unrelated feature work stands out.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/governance-version-milestones

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.

@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

🔍 The Case of Pull Request #766

Schema Sets

  • ecommerce
  • reference

Schema Set ecommerce

Plain-English Readout

  • Holmes (evidence investigation): The Holmes report is unavailable because the workflow finished without a readable holmes-report.json artifact.
  • Watson (independent verification): The Watson report is unavailable because the workflow finished without a readable watson-report.json artifact.
  • Moriarty (trend forecast): The Moriarty forecast is unavailable because the workflow finished without a readable moriarty-report.json artifact.

Suggested next actions

  1. Regenerate the HOLMES artifacts and make sure holmes-report.json is uploaded before trusting this PR summary.
  2. Regenerate the WATSON artifacts and make sure watson-report.json is uploaded before trusting this PR summary.
  3. Regenerate the MORIARTY artifacts and make sure moriarty-report.json is uploaded before trusting this PR summary.
🕵️ SHA-lock HOLMES full report for ecommerce (click to expand)

Report unavailable for holmes: readable holmes-report.md artifact not found.

🩺 Dr. WATSON full report for ecommerce (click to expand)

Report unavailable for watson: readable watson-report.md artifact not found.

🔮 Professor MORIARTY full report for ecommerce (click to expand)

Report unavailable for moriarty: readable moriarty-report.md artifact not found.


Schema Set reference

Plain-English Readout

  • Holmes (evidence investigation): The Holmes report is unavailable because the workflow finished without a readable holmes-report.json artifact.
  • Watson (independent verification): The Watson report is unavailable because the workflow finished without a readable watson-report.json artifact.
  • Moriarty (trend forecast): The Moriarty forecast is unavailable because the workflow finished without a readable moriarty-report.json artifact.

Suggested next actions

  1. Regenerate the HOLMES artifacts and make sure holmes-report.json is uploaded before trusting this PR summary.
  2. Regenerate the WATSON artifacts and make sure watson-report.json is uploaded before trusting this PR summary.
  3. Regenerate the MORIARTY artifacts and make sure moriarty-report.json is uploaded before trusting this PR summary.
🕵️ SHA-lock HOLMES full report for reference (click to expand)

Report unavailable for holmes: readable holmes-report.md artifact not found.

🩺 Dr. WATSON full report for reference (click to expand)

Report unavailable for watson: readable watson-report.md artifact not found.

🔮 Professor MORIARTY full report for reference (click to expand)

Report unavailable for moriarty: readable moriarty-report.md artifact not found.


📚 Glossary (what the Holmes terms mean)
  • HOLMES: Wesley’s main evidence investigation. It decides whether the cited proof is strong enough to justify shipping this commit.
  • WATSON: An independent verification pass. It checks Holmes’s citations and score math instead of trusting them blindly.
  • MORIARTY: A readiness forecast over time. It is advisory trend analysis, not the release gate itself.
  • Schema coverage score (SCS): How much of the schema has direct supporting evidence across generated artifacts and cited proof.
  • Test confidence index (TCI): How much test evidence exists for constraints, policies, relationships, and operations.
  • Migration risk index (MRI): How risky the schema change is to roll out. Lower is better.
  • Evidence trust: Whether the report is backed by exact citations, whole-file citations, or coarse references. Weak trust means the claim may be directionally right but not specific enough to trust blindly.
  • Citation quality: A count of exact line-span citations versus whole-file or coarse references.
  • ELEMENTARY: Ready to ship based on the current evidence.
  • REQUIRES INVESTIGATION: More work or review is needed before shipping.
  • YOU SHALL NOT PASS: Do not ship this change in its current state.

Machine-readable reports are grouped by schema set in workflow artifacts.


Filed at 221B Repository Street

@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: db87ccff1f

ℹ️ 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 xtask/src/main.rs Outdated

@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: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/smoke/repo-bats-prepush.sh (1)

28-34: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Pre-push run inherits the same 3-minute cargo build risk.

test/release-governance.bats invokes cargo test --locked -p xtask; on a cold target directory this can exceed timeout 3m and fail the push for reasons unrelated to governance.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/smoke/repo-bats-prepush.sh` around lines 28 - 34, Increase or
otherwise adjust the timeout applied in the loop running the Bats files so
test/release-governance.bats can complete its cold cargo test --locked -p xtask
build without premature termination, while preserving the existing timeout
enforcement and invocation behavior for the other files.
🧹 Nitpick comments (2)
xtask/src/main.rs (1)

2042-2051: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

GITHUB_REPOSITORY vs origin comparison is case-sensitive.

GitHub owner/repo names are case-insensitive, so a remote URL whose casing differs from the canonical GITHUB_REPOSITORY value (or vice versa) fails the guard and blocks a release for no real reason. Consider comparing case-insensitively while still returning the origin-derived value.

♻️ Suggested comparison tweak
-        if repository != origin_repository {
+        if !repository.eq_ignore_ascii_case(&origin_repository) {
             return Err(format!(
                 "GITHUB_REPOSITORY `{repository}` does not match origin fetch and push repository `{origin_repository}`"
             ));
         }

The same applies to the fetch-vs-push comparison on Line 2035.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@xtask/src/main.rs` around lines 2042 - 2051, Update the repository
comparisons in the ambient GITHUB_REPOSITORY guard and the fetch-vs-push
validation to compare owner/repository paths case-insensitively. Preserve the
existing origin-derived repository value and error messages, changing only the
equality checks around parse_github_repository_path and the fetch/push
comparison.
test/release-governance.bats (1)

126-131: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Shell suite now drives a Rust test build.

Wrapping cargo test -p xtask in a Bats case couples the governance suite to Rust compilation (and drives the timeout risk noted in .github/workflows/ci.yml). Since cargo xtask preflight/cargo test already runs the same assertion, consider dropping this case and letting the Rust suite own it, or asserting the YAML invariants directly with grep/rg as the neighbouring tests do.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/release-governance.bats` around lines 126 - 131, The Bats case “release
governance YAML is structurally valid” unnecessarily invokes the Rust build via
cargo test. Remove this test and rely on the existing Rust suite, or replace its
cargo invocation with direct YAML invariant checks using the grep/rg pattern
used by neighboring tests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.continuum/release.yml:
- Line 123: Update classification_axis in .continuum/release.yml at lines
123-123 to explicitly distinguish label axes from the project fields priority
and status. In docs/topics/contributing/triage.md at lines 79-86, remove
priority:* from the topic-label list; retain status as a project field and leave
other label categories unchanged.
- Around line 120-122: Apply one exhaustive scheduling predicate across all
listed governance surfaces: scheduled state must prohibit every retired lane:*
label, triage:* label, concrete version label, and extra milestone while
retaining exactly one v{version} milestone; unscheduled state must require
exactly one triage:* label, no milestone, and no retired or concrete version
labels. Update .continuum/release.yml lines 120-122,
.github/pull_request_template.md line 31, both AGENTS.md ranges 37-40 and 63-65,
and docs/topics/contributing/first-pr.md lines 46 and 91-95 with the
corresponding prohibition.

In `@docs/architecture/hosts.md`:
- Around line 41-44: Update the documentation text describing live planning
state so Issues, Milestones, and Projects are the planning surfaces, with plain
vX.Y.Z milestones as the release-scheduling authority. Describe classification
labels separately as work-classification metadata, not as scheduling or
planning-state surfaces.

In `@docs/CRATES_IO_RELEASE.md`:
- Around line 274-282: Fix the ordered-list numbering in the affected continued
lists, including the sections around the release steps and lines 302–318, so
they satisfy MD029 across fenced code blocks. Either restart numbering where
markdownlint detects a new list or indent the intervening code fences to keep
each block within its preceding list item; preserve the documented step order.

In `@docs/METHOD.md`:
- Around line 39-47: Scope all scheduling and release invariants to current open
work, explicitly preserving historical closed milestones, issues, and labels.
Update the Scheduled Slice and Release rules in docs/METHOD.md, queue states in
CONTRIBUTING.md, hierarchy language in docs/BEARING.md, release contract in
docs/governance/RELEASE_POLICY.md, guard preconditions in
docs/method/release-runbook.md, migration wording in
docs/governance/RELEASE_CHECKLIST.md, doctrine in docs/method/release.md, and
release-shape rule in docs/topics/releases.md; each site requires this
qualification.

In `@docs/topics/contributing/triage.md`:
- Around line 88-131: Rewrite the “One-Time Live Cutover” procedure so
governance PR merge occurs before any live GitHub mutation: perform a
post-merge, read-only audit and record the complete mapping first, then execute
the live migration, followed by verification. Keep the existing migration rules
and failure handling, but ensure failed audits or migrations do not leave
enforcement unmerged with partially changed tracker state.

In `@test/README.md`:
- Line 60: Update the CI gating sentence immediately above the test suite list
in test/README.md to state that the suites run unconditionally, matching the
current workflow and test/ci-workflows.bats assertion; leave the suite list
unchanged.

In `@test/release-governance.bats`:
- Around line 273-286: Require every marker variable to be non-zero before
evaluating the ordering chain in both awk assertions:
test/release-governance.bats lines 273-286 must validate preflight, gate, prep,
refresh, unchanged, tag, tagged, push, and workflow; lines 332-345 must validate
sync, record, preflight, gate, clear, refresh, unchanged, synced, and tag.
Preserve the existing ordering checks after these presence validations.
- Around line 126-131: The Bats test’s nested cargo invocation can exceed
per-file timeouts on a cold Rust build. In test/release-governance.bats lines
126-131, remove the release_governance_yaml_is_structurally_valid case or
replace it with direct grep/rg YAML invariant checks; no direct change is
required in .github/workflows/ci.yml lines 60-65 or
scripts/smoke/repo-bats-prepush.sh lines 28-34 if the case is removed.

---

Outside diff comments:
In `@scripts/smoke/repo-bats-prepush.sh`:
- Around line 28-34: Increase or otherwise adjust the timeout applied in the
loop running the Bats files so test/release-governance.bats can complete its
cold cargo test --locked -p xtask build without premature termination, while
preserving the existing timeout enforcement and invocation behavior for the
other files.

---

Nitpick comments:
In `@test/release-governance.bats`:
- Around line 126-131: The Bats case “release governance YAML is structurally
valid” unnecessarily invokes the Rust build via cargo test. Remove this test and
rely on the existing Rust suite, or replace its cargo invocation with direct
YAML invariant checks using the grep/rg pattern used by neighboring tests.

In `@xtask/src/main.rs`:
- Around line 2042-2051: Update the repository comparisons in the ambient
GITHUB_REPOSITORY guard and the fetch-vs-push validation to compare
owner/repository paths case-insensitively. Preserve the existing origin-derived
repository value and error messages, changing only the equality checks around
parse_github_repository_path and the fetch/push comparison.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6aa021f4-45df-4e94-82f9-773c4d697221

📥 Commits

Reviewing files that changed from the base of the PR and between 4891a63 and db87ccf.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (42)
  • .continuum/release.yml
  • .github/ISSUE_TEMPLATE/bug.yml
  • .github/ISSUE_TEMPLATE/chore.yml
  • .github/ISSUE_TEMPLATE/feature.yml
  • .github/ISSUE_TEMPLATE/rfc.yml
  • .github/pull_request_template.md
  • .github/workflows/ci.yml
  • .github/workflows/release-crates.yml
  • AGENTS.md
  • CHANGELOG.md
  • CONTRIBUTING.md
  • RELEASE.md
  • docs/BEARING.md
  • docs/CRATES_IO_RELEASE.md
  • docs/JEDIT_CAPABILITY_EVIDENCE.md
  • docs/METHOD.md
  • docs/README.md
  • docs/architecture/hosts.md
  • docs/design/0019-weslaw-semantic-law-ir/weslaw-semantic-law-ir.md
  • docs/design/0020-holmes-weslaw-assurance-prd-test-plan/holmes-weslaw-assurance-prd-test-plan.md
  • docs/design/README.md
  • docs/design/TEMPLATE.md
  • docs/governance/DOCUMENTATION_STANDARD.md
  • docs/governance/RELEASE_CHECKLIST.md
  • docs/governance/RELEASE_POLICY.md
  • docs/governance/labels.md
  • docs/method/guide.md
  • docs/method/process.md
  • docs/method/release-runbook.md
  • docs/method/release.md
  • docs/site/roadmap.md
  • docs/topics/README.md
  • docs/topics/contributing/first-pr.md
  • docs/topics/contributing/triage.md
  • docs/topics/releases.md
  • scripts/smoke/repo-bats-prepush.sh
  • scripts/test-ci-locally.sh
  • test/README.md
  • test/ci-workflows.bats
  • test/release-governance.bats
  • xtask/Cargo.toml
  • xtask/src/main.rs
💤 Files with no reviewable changes (1)
  • .github/workflows/release-crates.yml

Comment thread .continuum/release.yml Outdated
Comment thread .continuum/release.yml Outdated
Comment thread docs/architecture/hosts.md Outdated
Comment thread docs/CRATES_IO_RELEASE.md
Comment thread docs/METHOD.md
Comment thread docs/topics/contributing/triage.md Outdated
Comment thread test/README.md
Comment thread test/release-governance.bats Outdated
Comment thread test/release-governance.bats

Copy link
Copy Markdown
Owner Author

Code Lawyer self-audit findings

ID Severity File(s) Finding Evidence
SELF-1 P1 High test/ci-workflows.bats:404-408, scripts/prepare-shipme-cert-fixture.mjs:10 SHIPME fixture test is not isolated from ambient GITHUB_SHA. GitHub CI run 30140978400 reached the repaired Bats suite, generated scores with the runner SHA, then failed the hard-coded fallback-SHA assertion.
SELF-2 P2 Medium docs/ci.md:21-65 CI documentation still claims repo Bats are change-gated and publishes the deleted RUN_BATS implementation. .github/workflows/ci.yml:45-65 now runs the suite unconditionally; test/ci-workflows.bats explicitly enforces that invariant.
SELF-3 P3 Low .github/workflows/install-bats.yml:17-20, .github/actions/install-bats/action.yml:1-11, docs/ci.md:21-31 The two Bats installers have drifted: the composite action installs ripgrep, but the reusable workflow advertised in docs still installs only Bats and jq. Any consumer following the documented reusable path can reproduce the original rg: command not found failure.

These are additive to the 10 unresolved inline threads and the unique global case-insensitive repository-comparison finding. I will process the merged queue one issue at a time with deterministic regression evidence and one commit per issue.

Cc: @codex

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

  • Isolated the SHIPME certificate fixture test from the runner’s ambient GITHUB_SHA. The regression test now injects a conflicting runner SHA and explicitly removes it before fixture generation, ensuring the deterministic fallback SHA is tested. test/ci-workflows.batsL403-L409
  • Committed the change as 4f97f3f (test(ci): isolate SHIPME fixture SHA).
  • Prepared the follow-up PR “Test SHIPME fixture independently of runner SHA”, referencing issue #742.

Testing

  • env GITHUB_SHA=ambient-runner-sha env -u GITHUB_SHA node /workspace/wesley/scripts/prepare-shipme-cert-fixture.mjs
  • grep -F '"commit": "abcdef1234567890abcdef1234567890abcdef12"' .wesley-cache/scores.json
  • git diff --check
  • ⚠️ bats -f 'shipme certificate fixture' test/ci-workflows.bats (the bats executable is not installed in the container)
  • ⚠️ pnpm run preflight (all checks reached the workspace tests, but the generated Rust crate test could not download serde because crates.io access returned HTTP 403)

View task →

@flyingrobots

Copy link
Copy Markdown
Owner Author

Code Lawyer self-audit addendum

ID Severity File Finding Required repair
SELF-4 P2 .github/workflows/install-bats.yml; docs/ci.md The unused reusable workflow runs on a separate runner, so it cannot provision Bats dependencies into a caller job; the guide also invokes that workflow with invalid step-level syntax. Retire the duplicate workflow and document the checked-in composite action as the sole installer authority.

Cc: @codex for second opinion.

@flyingrobots

Copy link
Copy Markdown
Owner Author

Code Lawyer Activity Summary

# Severity Source File / area Commit Outcome
0 P2 Self Bats installer prerequisite 234bc452 Added ripgrep to the composite installer; pushed.
1 P1 Self test/ci-workflows.bats ec656a88 Isolated the SHIPME fixture from ambient GITHUB_SHA; hostile-environment regression green.
2 P1 PR xtask/src/main.rs 7f3017e7, 0b33c624 Duplicate exact release milestones now fail closed; thread resolved. The formatter hook required a non-amended follow-up commit under repository Git rules.
3 P1 PR scheduling surfaces f2f9964b Scheduling predicates now reject every retired state; thread resolved.
4 P1 PR governance doctrine 518460d5 Scoped scheduling rules to current open work and preserved historical evidence; thread resolved.
5 P1 PR live tracker cutover e8b5c373 Ordered governance merge before live mutation with patch-forward recovery; thread resolved.
6 P2 PR release profile and triage 92936668 Kept priority and workflow status in Project fields; thread resolved.
7 P2 PR/global Bats/Rust test boundary cd0dfd07 Removed nested Cargo build from Bats while retaining the Rust structural test; thread resolved.
8 P2 PR release ordering tests ce6cb704 Required every AWK marker before order comparisons; thread resolved.
9 P2 Global repository identity guard a0eb7aa0 Compared GitHub owner/repository paths case-insensitively while preserving origin output.
10 P3 PR docs/architecture/hosts.md 0e333085 Separated planning surfaces from classification metadata; thread resolved.
11 P3 PR docs/CRATES_IO_RELEASE.md 0c955bd4 Preserved 1-to-13 procedure semantics and reduced pinned MD029 errors from 22 to 0; thread resolved.
12 P3 PR/Self docs/ci.md, test/README.md b5404a6b Documented unconditional repository Bats execution and removed obsolete gating instructions; thread resolved.
13 P2 Self Bats installer authority 412210b0 Retired the non-provisioning duplicate workflow; documented and test-protected the composite action as sole authority. Covers SELF-3 and SELF-4.

Verification

  • GraphQL unresolved review threads: 0
  • Worktree: clean
  • pnpm run preflight: pass
  • pnpm lint: pass
  • pnpm test: pass, 83/83
  • Repository Bats pre-push suites: pass
  • Targeted Markdownlint/Prettier checks on changed files: pass
  • pnpm format:check: locked — 81 repository-baseline files are not Prettier-clean

Phase IV merge judgment remains pending live CI, approvals, CodeRabbit cooldown, and the full local format gate.

@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: b5404a6b10

ℹ️ 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".

- name: install bats, jq, and ripgrep
shell: bash
run: sudo apt-get install -y bats jq
run: sudo apt-get install -y bats jq ripgrep

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 Retire the unusable reusable Bats workflow

When a job follows docs/ci.md:22-29, GitHub rejects the advertised snippet because reusable workflows must be invoked at jobs.<job_id>.uses, not as a step; invoking it correctly as a job still runs .github/workflows/install-bats.yml:9-20 on a separate runner, so its packages are unavailable to the caller job. Checked .github/workflows/ci.yml:31-33, which already uses the checked-in composite action, and this new ripgrep dependency also makes the duplicate workflow diverge because it installs only Bats and jq. Remove the reusable workflow and document ./.github/actions/install-bats as the sole installer.

Useful? React with 👍 / 👎.

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.

refactor(governance): replace goalposts with version milestones

1 participant