Skip to content

Adopt agent-workflow binstubs (.agents/bin/ + AGENTS.md pointer)#4264

Merged
justin808 merged 18 commits into
mainfrom
agent-workflows/seam-sync
Jul 1, 2026
Merged

Adopt agent-workflow binstubs (.agents/bin/ + AGENTS.md pointer)#4264
justin808 merged 18 commits into
mainfrom
agent-workflows/seam-sync

Conversation

@justin808

@justin808 justin808 commented Jun 28, 2026

Copy link
Copy Markdown
Member

Summary

Converts this repo's inline ## Agent Workflow Configuration seam to the portable
"Scripts to Rule Them All" contract from
shakacode/agent-workflows:

  • .agents/bin/<name> — executable wrappers for the command keys (setup,
    validate, test, lint, build, docs, ci-detect). A skill runs
    .agents/bin/validate instead of knowing bin/ci-local, or .agents/bin/lint
    instead of (cd react_on_rails && bundle exec rake lint). See .agents/bin/README.md.
  • .agents/agent-workflow.yml — the policy/data keys, preserved as YAML
    (hosted-CI +ci-* triggers, secret-redaction list, benchmark labels, merge ledger,
    claude-review gate, coordination backend, ...).
  • AGENTS.md — the seam section becomes a thin pointer; the rest of AGENTS.md
    stays the canonical repo policy source.

Review Closeout

  • Updated .agents/bin/agent-workflow-seam-doctor to validate the new two-file
    contract: AGENTS pointer text, required executable binstubs, parseable YAML, required
    YAML keys, and literal follow_up_prefix: "Follow-up:".
  • Tightened wrappers per review: setup delegates to bin/setup and forwards args;
    lint includes Pro RuboCop, root JS lint, and Prettier while accumulating failures;
    test uses the runnable run_rspec:all_but_examples task without duplicating the
    JS tests that task already runs.
  • Clarified that this repo's listed .agents/bin/* wrappers are required by the seam
    doctor, while capabilities without a listed script are n/a here.
  • Kept .agents/bin/build scoped to build/type-check/RBS. Workflow linting
    (actionlint, yamllint .github/) remains part of the PR-processing path for
    .github/** changes rather than the generic build entrypoint.
  • Kept Playwright E2E as an explicit targeted command, not part of the default
    .agents/bin/test wrapper.
  • Added an AGENTS.md compatibility map for older repo-local skills that still
    reference the former inline key names.

Validation

  • .agents/bin/build
  • .agents/bin/lint
  • ruby .agents/bin/agent-workflow-seam-doctor-test.rb (68 runs, 202 assertions)
  • .agents/bin/agent-workflow-seam-doctor
  • bash -n .agents/bin/lint
  • bash -n .agents/bin/test
  • pnpm start format.listDifferent
  • bundle exec rubocop .agents/bin/agent-workflow-seam-doctor .agents/bin/agent-workflow-seam-doctor-test.rb
  • cd react_on_rails && bundle exec rake -n run_rspec:all_but_examples
  • script/ci-changes-detector origin/main => documentation-only changes; recommended CI jobs: none
  • Pre-commit hooks passed on changed files; pre-push hooks passed branch RuboCop and online lychee.
  • Rebased onto origin/main (a1f571176) and pushed head 86f28bd73.

Generated with Claude Code and Codex.

Summary by CodeRabbit

  • Documentation

    • Updated Agent Workflow Configuration docs to explain portable shared skills (commands via available .agents/bin/* scripts; policy/config via .agents/agent-workflow.yml).
  • New Features

    • Added standard portable entry-point scripts (setup, validate, test, lint, build, docs, ci-detect) with consistent repo-root execution and stricter behavior.
  • Tests

    • Enhanced workflow seam validation to use the YAML config when present, with added/expanded unit tests for configuration and failure cases.

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds .agents/agent-workflow.yml, .agents/bin/README.md, and .agents/bin/* entry points for setup, validation, build, test, lint, docs, and CI detection. AGENTS.md now points to the command/policy split, and seam-doctor validation was expanded for the YAML-backed workflow contract.

Changes

Agent Workflow Configuration

Layer / File(s) Summary
Policy config and AGENTS.md update
.agents/agent-workflow.yml, .agents/bin/README.md, AGENTS.md
Adds the workflow policy YAML, rewrites the AGENTS.md agent-workflow section to reference .agents/bin/<name> and .agents/agent-workflow.yml, and documents the standard bin entry points and their command mappings.
Bin entry-point scripts
.agents/bin/setup, .agents/bin/validate, .agents/bin/build, .agents/bin/test, .agents/bin/lint, .agents/bin/docs, .agents/bin/ci-detect
Adds executable Bash scripts with strict shell settings that route to existing repo commands for setup, validation, build, testing, linting, docs checks, and CI detection.
Seam doctor checks and tests
.agents/bin/agent-workflow-seam-doctor, .agents/bin/agent-workflow-seam-doctor-test.rb
Updates the seam doctor to validate the YAML-backed portable contract, required scripts, and config keys, and adds test helpers and cases for the new checks.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Possibly related PRs

  • shakacode/react_on_rails#4121: Both PRs touch the same follow-up-prefix seam; this PR validates follow_up_prefix in .agents/agent-workflow.yml, while the other updates follow-up issue title handling from repo config.
  • shakacode/react_on_rails#4220: Both PRs center on the workflow-policy seam around CI parity and secret redaction, with this PR moving those rules into .agents/agent-workflow.yml.

Suggested labels

documentation, enhancement

Suggested reviewers

  • alexeyr-ci2
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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 clearly matches the main change: adopting .agents/bin wrappers and updating the AGENTS.md pointer.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent-workflows/seam-sync

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.

@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: 4869c814dd

ℹ️ 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 AGENTS.md
Comment thread .agents/bin/setup Outdated
@greptile-apps

greptile-apps Bot commented Jun 28, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adopts the portable agent workflow contract. The main changes are:

  • Adds .agents/bin/* command wrappers for shared skills.
  • Moves non-command workflow policy into .agents/agent-workflow.yml.
  • Replaces the inline AGENTS.md seam with pointers to the new files.

Confidence Score: 4/5

The portable command contract can skip checks that the old seam exposed.

  • The build wrapper omits RBS and workflow lint checks from the removed build/type-check entry.
  • The lint wrapper omits formatting and link checks from the removed lint/format entry.
  • The YAML policy migration is mostly direct, with one machine-readable prefix value that should be tightened.

.agents/bin/build, .agents/bin/lint, .agents/agent-workflow.yml

Important Files Changed

Filename Overview
.agents/agent-workflow.yml Adds machine-readable workflow policy; the follow-up prefix value now mixes data with guidance.
.agents/bin/build Adds the build wrapper, but it does not preserve all checks from the previous build/type-check seam.
.agents/bin/lint Adds the lint wrapper, but it no longer covers the formatting and link checks from the previous lint seam.
.agents/bin/test Adds a test wrapper for Ruby specs and JS tests.
.agents/bin/validate Adds a validate wrapper that delegates to bin/ci-local with arguments forwarded.
.agents/bin/docs Adds a docs wrapper for sidebar and link checks.
.agents/bin/ci-detect Adds a CI detector wrapper with an origin/main default.
AGENTS.md Replaces the inline workflow configuration with pointers to the new command and policy files.

Reviews (1): Last reviewed commit: "Adopt agent-workflow binstubs; convert i..." | Re-trigger Greptile

Comment thread .agents/bin/build Outdated
Comment thread .agents/bin/lint Outdated
Comment thread .agents/agent-workflow.yml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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 @.agents/bin/lint:
- Around line 2-4: The lint wrapper only runs the Ruby task and misses the
JavaScript workspace, so update the script to invoke the root JS lint command
from package.json as well as the existing react_on_rails Ruby lint path. Use the
existing lint entrypoint in .agents/bin/lint and add the JavaScript check with
pnpm so ESLint failures are surfaced through this wrapper too.

In @.agents/bin/setup:
- Around line 2-4: The setup wrapper currently only delegates to
script/bootstrap, so it skips installing the JavaScript dependencies needed by
the new build and test entrypoints. Update the .agents/bin/setup flow to include
the repo’s JS install step in addition to the existing bootstrap call, using the
same wrapper script entrypoint so a clean checkout ends up with pnpm packages
installed before later commands run.
🪄 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: CHILL

Plan: Pro

Run ID: 97a9eb26-8565-45db-92a2-7605b783116f

📥 Commits

Reviewing files that changed from the base of the PR and between df69a26 and 4869c81.

📒 Files selected for processing (10)
  • .agents/agent-workflow.yml
  • .agents/bin/README.md
  • .agents/bin/build
  • .agents/bin/ci-detect
  • .agents/bin/docs
  • .agents/bin/lint
  • .agents/bin/setup
  • .agents/bin/test
  • .agents/bin/validate
  • AGENTS.md

Comment thread .agents/bin/lint Outdated
Comment thread .agents/bin/setup Outdated
Comment thread AGENTS.md
@claude

claude Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Code Review

This PR converts the inline ## Agent Workflow Configuration seam in AGENTS.md into portable binstubs (.agents/bin/) plus a YAML config (.agents/agent-workflow.yml), reducing AGENTS.md by 57 lines. The structural direction is sound, but the migration is incomplete in several ways that leave the repo in a broken state: the seam-doctor validator that agents are required to run as preflight will fail on this repo's own AGENTS.md, several binstubs silently omit checks (Prettier, RBS validation, E2E tests) that the old contract included, and skills in .agents/workflows/ still reference the deleted key format.


🔴 Blocker — Seam-doctor permanently broken

.agents/bin/agent-workflow-seam-doctor defines a REQUIRED_KEYS array (lines 12–30) and validates that 17 - **Key**: value bullets exist under ## Agent Workflow Configuration in AGENTS.md. This PR removes all of them. After merge, the doctor will exit 1 with 17 "missing Agent Workflow Configuration key" errors every time it runs.

AGENTS.md line 125 makes this a mandatory agent preflight: "After fetching, verify the seam before relying on installed/shared skills for issue, PR, or batch work: .agents/bin/agent-workflow-seam-doctor". The PR description notes the doctor is not run in CI, but a mandatory preflight tool that always fails is worse than no tool — it blocks agents and erodes trust in the validator.

Also: .agents/bin/agent-workflow-seam-doctor-test.rb synthesizes the old bullet format via write_agents in every test. Tests stay green while the live tool fails against the real repo. The doctor and its test suite must be updated together.


🔴 Blocker — Skills reference deleted key names

.agents/workflows/tdd.md (lines 21, 41–48) and .agents/skills/run-ci/SKILL.md (line 21) still instruct agents to resolve commands by looking up named keys — e.g. "AGENTS.md → Agent Workflow Configuration, Tests key" and "Pre-push local validation command" — that no longer exist in AGENTS.md. Any agent running the tdd or run-ci skills will fail to resolve the concrete commands. These files need to be updated in the same change.


🟡 Binstubs omit checks that were in their contracts

Three binstubs are narrower than the definitions they replaced:

Binstub Missing check Where it's still required
.agents/bin/lint pnpm start format.listDifferent (Prettier) AGENTS.md line 230; bin/ci-local line 339
.agents/bin/build bundle exec rake rbs:validate, actionlint, yamllint .github/ Old "Build / type checks" entry; still in AGENTS.md Commands section
.agents/bin/test (cd react_on_rails/spec/dummy && pnpm test:e2e) Old "Tests" entry; covers SSR regressions unit tests miss

Agents using these binstubs as their gate get false-clean results.


🟡 setup wraps the wrong script

.agents/bin/setup calls exec script/bootstrap, not bin/setup. script/bootstrap is Mac-biased (Homebrew guard on Darwin), uses a deprecated bundle install --path vendor/gems flag, and does nothing for Node/pnpm. bin/setup is the comprehensive monorepo entry point (all subprojects, pnpm, dummy apps, build artifacts). An agent running .agents/bin/setup on a Linux CI runner gets an incomplete environment.


🟡 ci-detect bypasses PR-aware base detection

bin/ci-local has a detect_base_ref() function (lines 69–94) that queries gh pr view --json baseRefName before falling back to origin/main. .agents/bin/ci-detect passes "${1:-origin/main}" unconditionally. On a PR targeting a release branch, change detection diffs against the wrong base and routes the wrong CI suites.


ℹ️ follow_up_prefix embeds advisory prose into the prefix value

agent-workflow.yml line 9 stores "Follow-up: (default to no new issue; see the Maintainer Attention Contract)" as the prefix. A skill using this verbatim produces malformed issue titles. The advisory clause belongs in a comment or a separate follow_up_policy key.


🤖 Generated by Claude Code

Comment thread .agents/bin/setup Outdated
Comment thread .agents/bin/lint Outdated
Comment thread .agents/bin/build Outdated
Comment thread .agents/bin/test Outdated
Comment thread .agents/bin/ci-detect
Comment thread .agents/agent-workflow.yml Outdated
@justin808

Copy link
Copy Markdown
Member Author

Addressed the review:

  • cwd-independence: every .agents/bin/* wrapper now cds to the repo root.
  • Build coverage (greptile P1 / coderabbit): .agents/bin/build now also runs bundle exec rake rbs:validate. Note validate = bin/ci-local remains the comprehensive pre-push gate (lint, prettier, actionlint, yamllint, JS, …); the granular build/lint/test wrappers are convenience subsets.
  • The repo-local .agents/bin/agent-workflow-seam-doctor still validates the old inline layout (not run in CI); it will be updated for the binstub contract via the shakacode/agent-workflows rework (codex P2).

Waived (advisory): follow_up_prefix includes brief guidance text by design.

@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: 29af7a6ed2

ℹ️ 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 .agents/bin/test Outdated
Comment thread .agents/bin/lint Outdated
Comment thread .agents/bin/README.md Outdated
@claude

claude Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review: Adopt agent-workflow binstubs

This PR moves the ## Agent Workflow Configuration seam from inline AGENTS.md key-value pairs to executable binstubs in .agents/bin/ and a YAML policy file. The overall direction is clean — the scripts are well-structured with set -euo pipefail and a correct repo-root cd idiom. Two issues worth fixing before merge, one structural concern acknowledged in the PR description:

1. .agents/bin/lint is missing the Prettier check

bin/ci-local runs pnpm start format.listDifferent as a distinct "Prettier Check" step (line 339). rake lint covers eslint, rubocop, and stylelint only — Prettier is not included. Any agent that calls .agents/bin/lint to verify formatting will get a green result even when files have Prettier violations, which then surface as a CI failure. Fix: add pnpm start format.listDifferent to the binstub (inline comment on .agents/bin/lint:5).

2. Seam-doctor breaks on the new layout — will block agents following AGENTS.md instructions

AGENTS.md lines 121–125 explicitly instruct every agent to run .agents/bin/agent-workflow-seam-doctor before relying on installed skills for issue/PR/batch work. The seam-doctor reads AGENTS.md looking for - **Key**: value entries; the new ## Agent Workflow Configuration section has none. All ~17 required keys will be reported missing and the doctor exits 1, blocking agent sessions.

The PR description notes the seam-doctor is not invoked by CI and promises a follow-up update. Any agent that follows the AGENTS.md preflight from the moment this merges until that follow-up lands will be blocked. A minimal guard: add a comment to the ## Agent Workflow Configuration section noting the seam-doctor is temporarily out of sync and can be skipped.

3. README ci-detect row hides optional base-ref argument (minor)

The script accepts ${1:-origin/main} but the README table shows the base ref hardcoded, implying no argument is accepted. Inline comment on .agents/bin/README.md:16.

@justin808

Copy link
Copy Markdown
Member Author

@coderabbitai the .agents/bin/lint wrapper invokes exactly this repo's prior lint command — (cd react_on_rails && bundle exec rake lint) — verbatim from the previous ## Agent Workflow Configuration seam. This PR only moves that same command behind a standard entry point, so lint coverage is unchanged from main, not reduced.

The comprehensive pre-push gate is .agents/bin/validatebin/ci-local, which runs the full lint/test/build matrix (the granular lint/build/test wrappers are convenience subsets). Could you re-review the current head?

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

@justin808 Thanks for the clarification — agreed, my earlier lint-coverage concern doesn’t apply here since .agents/bin/lint preserves the existing main behavior, and .agents/bin/validate remains the comprehensive pre-push gate. I’ll re-review the current head.


✏️ Learnings added
Learnt from: justin808
URL: https://github.com/shakacode/react_on_rails/pull/4264

Timestamp: 2026-06-28T07:50:39.929Z
Learning: In the `shakacode/react_on_rails` repository, `.agents/bin/lint` intentionally preserves the prior inline seam behavior by running the existing repo lint command `(cd react_on_rails && bundle exec rake lint)`, so its coverage is unchanged from `main`.

Learnt from: justin808
URL: https://github.com/shakacode/react_on_rails/pull/4264

Timestamp: 2026-06-28T07:50:39.929Z
Learning: In the `shakacode/react_on_rails` repository, `.agents/bin/validate` delegates to `bin/ci-local` and is the comprehensive pre-push gate for the full lint/test/build matrix, while `.agents/bin/lint`, `.agents/bin/build`, and `.agents/bin/test` are convenience subsets.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

✅ Action performed

Review finished.

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

justin808 and others added 3 commits June 27, 2026 22:45
Move the ## Agent Workflow Configuration command values into .agents/bin/
executable wrappers (Scripts to Rule Them All) and the policy/data values into
.agents/agent-workflow.yml; the AGENTS.md section becomes a thin pointer. No
policy is lost. Wraps existing commands (bin/ci-local, rake lint/run_rspec, pnpm
build/test); nothing executable changes. The repo-local seam-doctor still
validates the old inline layout (not run in CI) and will be updated for this
contract via the shakacode/agent-workflows rework.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address review: wrappers cd to the repo root; .agents/bin/build runs
bundle exec rake rbs:validate (validate=bin/ci-local remains the full gate).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@justin808 justin808 force-pushed the agent-workflows/seam-sync branch from 2026e6c to 0868ba9 Compare June 28, 2026 08:47

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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 @.agents/bin/agent-workflow-seam-doctor:
- Around line 175-177: The literal validation for follow_up_prefix is being
applied too early in the workflow config check. Update the validation logic
around the follow_up_prefix branch so the "expected Follow-up:" error is only
added after the key has been confirmed present and resolved, and not when the
value is missing or nil. Use the existing config["follow_up_prefix"] checks in
the agent-workflow-seam-doctor flow to gate the strict string comparison behind
the earlier unresolved/missing handling.
- Around line 114-121: The portable-mode branch in the workflow doctor currently
depends on `.agents/agent-workflow.yml` existing, which causes `check` to
misclassify AGENTS.md pointer-format setups when the YAML file is missing.
Update the mode detection in the main check flow to decide from the AGENTS.md
section contents first, then always let `yaml_config_issues` surface the
missing-file error instead of falling back to `parse_config`; use the
surrounding check path and helpers like `portable_contract_issues`,
`command_script_issues`, and `yaml_config_issues` to locate the logic. Add a
regression test covering AGENTS.md in pointer format with no
`.agents/agent-workflow.yml`, asserting the missing YAML error is reported.

In @.agents/bin/README.md:
- Line 14: The build command documentation is out of sync with the actual
`.agents/bin/build` behavior; update the `build` row in the README to match the
script and PR description by documenting `bundle exec rake rbs:validate` instead
of the bare `rake rbs:validate`. Keep the change localized to the build command
entry so the README remains the source of truth for the `build` script and its
`pnpm run build` / `pnpm run type-check` / `rbs:validate` steps.
🪄 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: CHILL

Plan: Pro

Run ID: 88c65f7a-3c5b-4e37-b171-bbc6c9a4e549

📥 Commits

Reviewing files that changed from the base of the PR and between 29af7a6 and 2026e6c.

📒 Files selected for processing (7)
  • .agents/agent-workflow.yml
  • .agents/bin/README.md
  • .agents/bin/agent-workflow-seam-doctor
  • .agents/bin/agent-workflow-seam-doctor-test.rb
  • .agents/bin/lint
  • .agents/bin/setup
  • .agents/bin/test
🚧 Files skipped from review as they are similar to previous changes (2)
  • .agents/bin/test
  • .agents/agent-workflow.yml

Comment thread .agents/bin/agent-workflow-seam-doctor Outdated
Comment thread .agents/bin/agent-workflow-seam-doctor Outdated
Comment thread .agents/bin/README.md Outdated
@claude

claude Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review: Adopt agent-workflow binstubs

This PR restructures the agent workflow configuration from an inline AGENTS.md key-value list to a split contract: executable binstubs in .agents/bin/<name> and a YAML policy file at .agents/agent-workflow.yml. The AGENTS.md section becomes a thin pointer. The seam-doctor validator is extended to validate both the new portable-contract layout and the legacy inline layout, with branching determined by whether .agents/agent-workflow.yml exists.

The overall structure is clean and the binstubs are idiomatic. Three issues worth fixing before merge:


Bug: follow_up_prefix: nil emits two conflicting errors

In yaml_config_issues (lines 166-177 of agent-workflow-seam-doctor), when follow_up_prefix is absent from the YAML, the filter_map block already emits "missing agent workflow config key: follow_up_prefix". Then the unconditioned equality check at line 175 also fires (nil != "Follow-up:" is true), appending a second conflicting "invalid agent workflow config value for key: follow_up_prefix (expected \"Follow-up:\")" for the same key.

The same double-firing occurs when the value is an unresolved template placeholder — filter_map emits "unresolved", then line 175 also fires with "invalid".

Fix: Guard the line-175 check so it only fires when the key is present and resolved:

if config.key?("follow_up_prefix") && !unresolved_yaml_value?(config["follow_up_prefix"]) &&
    config["follow_up_prefix"] != "Follow-up:"

Bug: Test masks the duplicate-error defect

test_portable_contract_missing_yaml_key_fails (test file, line 143) only asserts that the output includes "missing agent workflow config key: follow_up_prefix". It never checks that the spurious "invalid agent workflow config value for key: follow_up_prefix" message is absent. Adding refute_includes out, "invalid agent workflow config value for key: follow_up_prefix" would expose the bug and prevent regressions.


Nit: docs binstub bails out before running bin/check-links on sidebar failure

.agents/bin/docs runs script/check-docs-sidebar then bin/check-links under set -euo pipefail. These two checks are independent reporters, unlike the semantically coupled sub-commands in lint or build. When the sidebar check fails, the links check is silently skipped. Consider accumulating exit status instead:

rc=0
script/check-docs-sidebar || rc=1
bin/check-links || rc=1
exit "$rc"

Minor: Errno::ENOENT rescue in load_yaml_config is dead code

load_yaml_config rescues Errno::ENOENT (line 196), but yaml_config_issues is only called from the branch gated by File.file?(CONFIG_RELATIVE_PATH), so the file is guaranteed to exist at that point. The rescue can never fire and could be removed to avoid giving false confidence.

@claude

claude Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Code Review

Clean structural PR — the three-artifact contract (binstubs + YAML + AGENTS.md pointer) is a meaningful improvement over the large inline seam. Tests are solid. One correctness bug and a few minor notes below.

Bug: double-emission when follow_up_prefix is nil

In yaml_config_issues, the filter_map block already adds "missing agent workflow config key: follow_up_prefix" when the value is nil. Immediately after, the unconditional guard

if config["follow_up_prefix"] != "Follow-up:"

also fires (nil != "Follow-up:" is true), appending the invalid message on top of the missing one. A single absent key produces two diagnostics.

Fix: guard on presence before checking the value:

if !config["follow_up_prefix"].nil? && config["follow_up_prefix"] != "Follow-up:"
  issues << 'invalid agent workflow config value for key: follow_up_prefix (expected "Follow-up:")'
end

The test test_portable_contract_missing_yaml_key_fails passes today because it only asserts the missing message is present and does not assert-exclude the invalid one, so the test doesn't catch this.

Minor: load_yaml_config uses File.read while AGENTS.md parsing uses binread + force_encoding

The AGENTS.md reading path defensively uses File.binread(agents_path).force_encoding("UTF-8").scrub to survive C-locale runs. load_yaml_config uses plain File.read, which can raise an encoding error under LANG=C if the YAML comments contain non-ASCII bytes. Low risk with the current YAML content, but inconsistent with the established pattern elsewhere in the same file.

Minor: no failing-path test for bad AGENTS.md pointer text

The new portable_contract_issues path is exercised by the pass test, but there is no test for when the AGENTS.md section is missing the .agents/bin/<name> or .agents/agent-workflow.yml pointer. Adding one would close the coverage gap.

Minor: trusted_github_actor_boundary absent from REQUIRED_CONFIG_KEYS

The production .agents/agent-workflow.yml includes trusted_github_actor_boundary, but it is not in REQUIRED_CONFIG_KEYS. This looks intentional (optional key for adopters), but a brief comment near the constant would make the intent explicit.

Comment thread .agents/bin/agent-workflow-seam-doctor
Comment thread .agents/bin/agent-workflow-seam-doctor Outdated
Comment thread .agents/bin/agent-workflow-seam-doctor-test.rb
Comment thread AGENTS.md Outdated

- **Commands** — run `.agents/bin/<name>` (`setup`, `validate`, `test`, `lint`,
`build`, `docs`, `ci-detect`); see [`.agents/bin/README.md`](.agents/bin/README.md).
A missing script means that capability is n/a here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This sentence contradicts the seam doctor's enforcement.

"A missing script means that capability is n/a here" directly follows the list of the 7 required scripts (setup, validate, test, lint, build, docs, ci-detect). Read in isolation, an agent/skill consuming only AGENTS.md would reasonably conclude that if, say, .agents/bin/docs is absent, the docs capability simply doesn't apply here and can be silently skipped.

But agent-workflow-seam-doctor's command_script_issues (this same PR, .agents/bin/agent-workflow-seam-doctor:154-165) hard-fails when any of those exact 7 scripts is missing or non-executable — REQUIRED_COMMAND_SCRIPTS has no notion of "n/a." .agents/bin/README.md is actually consistent ("scripts listed below are required... capabilities without a listed script are n/a" — i.e. n/a applies only to capabilities outside the table), but this AGENTS.md sentence reads as applying to the 7 named scripts themselves.

Failure scenario: a repo accidentally loses .agents/bin/build (e.g. a bad merge). A skill following only the AGENTS.md wording treats build/type-check as "n/a" and skips it silently, while agent-workflow-seam-doctor would (correctly) FAIL. Two consumers of the same doc disagree on whether the missing script is a problem.

Suggest either dropping this sentence (since the table already covers the n/a/non-applicable case via README) or rewording to clarify it refers to commands not in the listed set of 7.

@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review

This PR converts the inline AGENTS.md "Agent Workflow Configuration" seam into a portable two-file contract — .agents/bin/<name> executable wrappers plus .agents/agent-workflow.yml policy data — and extends agent-workflow-seam-doctor to validate both. The mechanics check out: the new YAML validation logic (yaml_config_issues/load_yaml_config/unresolved_yaml_value?) was traced against its test cases and is correct, and the AGENTS.md rewrite still references the required pointer strings the doctor checks for. I dispatched 8 finder passes (correctness, removed-behavior, cross-file, reuse, simplification, efficiency, altitude, conventions) and verified the surviving candidates against the actual repo state. Two items worth a look, plus a few lower-priority cleanup notes:

1. .agents/bin/docs:6 — hardcoded base ref diverges from this repo's release-branch workflow
script/check-docs-sidebar is called with no base-ref argument, so it defaults to origin/main (via git_diff_base_normalize_base_ref's ${1:-origin/main} fallback). But bin/ci-local's detect_base_ref() (which .agents/bin/validate delegates to) auto-detects the actual PR base via gh pr view --json baseRefName, falling back to origin/main only when that's unavailable. AGENTS.md documents an active release-train workflow where PRs target ephemeral release/X.Y.Z branches, not just main. A docs-only PR raised against release/X.Y.Z would have .agents/bin/docs diff against origin/main instead of the actual release branch, producing spurious sidebar-coverage pass/fail results. Since .agents/bin/ci-detect has the same hardcoded-default shape, it's worth deciding once whether these portable wrappers should auto-detect the base ref the way validate does, rather than fixing docs in isolation.

2. .agents/bin/test vs .agents/bin/validate — possible duplicate full-suite runs
.agents/bin/test unconditionally runs bundle exec rake run_rspec:all_but_examples (full dummy-app RSpec + the full JS suite via rake dependency, per the in-file comment). .agents/bin/validate wraps bin/ci-local, which already runs equivalent RSpec/JS jobs (gated by script/ci-changes-detector). Given the README frames test as "run tests" and validate as the pre-push gate, a skill that runs both in sequence (a plausible workflow — test while iterating, then validate before push) would pay for the slowest local suites twice with no new coverage. Worth a one-line note in .agents/bin/README.md clarifying that validate already runs (a superset of) what test runs, if that's the intent.

Lower-priority cleanup notes (not blocking):

  • All 7 new .agents/bin/* scripts duplicate the same cd "$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)" root-resolution snippet, while other scripts in bin/ already use git rev-parse --show-toplevel for the same purpose. A shared one-liner (or sourcing the existing convention) would avoid 7x drift if the directory depth ever changes.
  • agent-workflow-seam-doctor:13-54 now carries two required-key lists that must be kept manually in sync: the legacy REQUIRED_KEYS (17 markdown-bullet labels) and the new REQUIRED_CONFIG_KEYS/REQUIRED_COMMAND_SCRIPTS (12 + 7 YAML/script keys). They already differ in non-obvious ways (e.g. trusted_github_actor_boundary has no legacy equivalent), which is fine today but is an easy thing to forget to update in only one place going forward.
  • load_yaml_config (agent-workflow-seam-doctor:198-208) returns either an Array (error strings) or a Hash (parsed config), and the caller infers success/failure via config.is_a?(Array). It's correctly handled today, but an explicit [issues, config] tuple or a raised/rescued error would be less surprising to a future reader than branching on return type.

Nice find on relocating actionlint/yamllint/Playwright E2E scoping — those are still documented in AGENTS.md's Commands/Testing sections and were a deliberate, called-out decision in the PR description, so that's not a gap.

@justin808

Copy link
Copy Markdown
Member Author

+ci-run-hosted

@github-actions github-actions Bot added the ready-for-hosted-ci Run optimized hosted GitHub CI for this PR label Jul 1, 2026
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Hosted CI Requested

Triggered 9 workflow(s) for 5fb707326120.
Mode: optimized hosted CI (path-selected by script/ci-changes-detector).
Added ready-for-hosted-ci, so future commits will keep running optimized hosted CI until +ci-stop-hosted is used.

View progress in the Actions tab.

Comment thread script/ci-changes-detector
@claude

claude Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review Summary

Reviewed the migration from the inline ## Agent Workflow Configuration seam to the portable .agents/bin/* + .agents/agent-workflow.yml contract. Overall the implementation is solid: the seam-doctor's two-branch dispatch (legacy markdown vs. new YAML+binstub contract) is cleanly separated, the YAML validation correctly uses safe_load with an empty permitted_classes/permitted_symbols (blocking Date/Symbol coercion attacks while still allowing the base scalar types), and the new Minitest coverage (68 runs / 202 assertions per the PR description) closely tracks the new code paths I checked, including the follow_up_prefix literal-match and the missing-vs-unresolved-vs-invalid tri-state for optional keys.

One finding worth addressing before merge (posted inline on script/ci-changes-detector:282):

Everything else (the .agents/bin/* wrapper scripts, the agent-workflow.yml key set matching REQUIRED_CONFIG_KEYS, the AGENTS.md pointer/compat map, and the rbs:validate/run_rspec:all_but_examples task references) checked out against the actual Rakefile tasks and bin/ci-local conventions (e.g. the Pro RuboCop BUNDLE_GEMFILE=../Gemfile matches the existing $ROOT_GEMFILE pattern in bin/ci-local, so that's not a bug).

@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: 5fb7073261

ℹ️ 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 script/ci-changes-detector
Comment thread AGENTS.md
Comment thread .agents/bin/agent-workflow-seam-doctor
@claude

claude Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review

This PR converts the inline `## Agent Workflow Configuration` section in AGENTS.md into a portable two-file contract (`.agents/bin/` binstubs + `.agents/agent-workflow.yml`), with `agent-workflow-seam-doctor` updated to validate the new contract (required scripts present/executable, YAML keys present/resolved) while preserving a legacy markdown-parsing fallback for repos that haven't migrated. The change is well-tested (68 seam-doctor test runs, new ci-changes-detector cases) and I traced all consumers of the changed scripts (bin/ci-local, GitHub workflows, the seam doctor's own CLI) without finding a broken call site or a case-statement ordering bug in script/ci-changes-detector.

Two things worth a look before merge (posted as inline comments):

  1. AGENTS.md:165 — The migration silently drops the link to internal/contributor-info/local-ci-contract.md and its "don't pass a base-ref to the validate script" caveat. That file is now unreferenced anywhere in the repo (verified via grep), and bin/ci-local hard-fails (Unknown argument, exit 2) if an agent passes a base ref the way it naturally would for .agents/bin/ci-detect. Low risk, but worth re-linking so the caveat stays discoverable.
  2. .agents/bin/agent-workflow-seam-doctor:122parse_config re-runs extract_section on the same text that check() already extracted a few lines above, so the legacy (non-YAML) validation path parses the AGENTS.md section twice per run. Minor, but easy to avoid by passing the already-extracted section through.

Nothing else surfaced that met the bar for a confirmed bug — the YAML validation logic (yaml_config_issues, unresolved_yaml_value?, the follow_up_prefix exact-match check), the new bash binstubs (path resolution, set -euo pipefail + rc=1 exit handling, the BUNDLE_GEMFILE=../Gemfile relative path for Pro RuboCop), and the new ci-changes-detector case arms all checked out correctly against their tests and existing conventions.

…sync

* origin/main:
  Add Rails response type generation (#4259)
  Remove stale Pro RSpec encoding workaround (#4291)
  [Pro] Fix Gemfile loader source encoding under C locale (#4281)

@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: 36f9f02840

ℹ️ 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 .agents/bin/lint
@claude

claude Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review

This PR replaces the inline "Agent Workflow Configuration" markdown seam in AGENTS.md with a portable two-file contract (.agents/bin/<name> command binstubs + .agents/agent-workflow.yml policy), extends agent-workflow-seam-doctor to validate the new contract, and teaches script/ci-changes-detector to classify .agents/bin/* and .agents/agent-workflow.yml as CI-infra rather than docs-only. The Ruby/bash logic itself is solid — I read agent-workflow-seam-doctor in full and traced the new YAML/branch/case-arm logic; nothing crashes or misclassifies for the states this repo is actually in. The findings below are a cross-file consistency gap, a validator-coverage gap, stale docs, and a few minor cleanup opportunities.

  1. .github/workflows/ci-commands.yml:222-239+ci-status's docs-only heuristic now diverges from script/ci-changes-detector. isDocsOnlyPath() still treats any .agents/-prefixed path as docs-only, and the +ci-status comment text explicitly claims this heuristic "matches ci-changes-detector metadata paths" (line 459). After this PR, script/ci-changes-detector classifies .agents/bin/* (non-.md) and .agents/agent-workflow.yml as CI-infra (docs_only: false), so a PR touching only .agents/bin/validate will now show "Docs-only heuristic: yes" in the +ci-status comment while the actual detector says otherwise — misleading a maintainer who trusts that comment to gauge whether hosted CI will run.

  2. .agents/bin/agent-workflow-seam-doctor:118-126 — presence of .agents/agent-workflow.yml unconditionally switches validation mode, so the old placeholder/missing-value checks (parse_config, missing_key_issues, unresolved_extra_key_issues) never run once the yml file exists, even if AGENTS.md's section still contains stale/placeholder inline bullets. portable_contract_issues only checks 3 fixed substrings; it never parses the "Compatibility for older repo-local skills" bullet list this PR adds to AGENTS.md (lines 162-181), which reuses the same - **Key** → value shape the old parser used to validate. Not currently triggered in this repo (the compat bullets all resolve to fixed pointers), but there's no test combining old-style bullets with a coexisting yml file, so a future edit that reintroduces a stale/placeholder bullet in that list would pass the doctor silently.

  3. Stale adoption docs: both internal/contributor-info/agent-workflow-adoption.md:64-88 and .agents/docs/adoption.md:61-91 ("The Seam Template") still instruct new adopters to copy the old inline colon-bullet AGENTS.md format, not the .agents/bin/<name> + .agents/agent-workflow.yml contract this PR just adopted for this repo. Since these are the canonical instructions for exactly the migration this PR performs, they're worth updating in this PR or a fast follow-up.

  4. Reuse — .agents/bin/{setup,validate,test,lint,build,docs,ci-detect} each repeat an identical repo-root cd line (cd "$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)"), rather than reusing either idiom the repo already has: bin/ci-local/bin/ci-rerun-failures use git rev-parse --show-toplevel, and script/check-docs-sidebar/script/ci-changes-detector use a SCRIPT_DIR= pattern (there's even a precedent for a shared sourced helper: script/lib/git-diff-base). A future fix to root-resolution needs identical edits in 7 places.

  5. Reuse — REQUIRED_KEYS (legacy markdown headers), REQUIRED_CONFIG_KEYS (yaml keys), and REQUIRED_COMMAND_SCRIPTS (agent-workflow-seam-doctor:13-54) hand-encode the same policy contract three times with no cross-check test. They've already drifted: trusted_github_actor_boundary exists in REQUIRED_CONFIG_KEYS but has no counterpart in REQUIRED_KEYS. Likely fine as a deliberate transitional shim, but worth a comment on the intended removal point or a test tying the lists together.

  6. Simplificationportable_contract_issues (agent-workflow-seam-doctor:137-152) is three near-identical unless section.include?(...) blocks; could collapse to a loop over [substring, message] pairs.

  7. Efficiency.agents/bin/lint runs OSS rubocop, Pro rubocop, pnpm run lint, and pnpm start format.listDifferent strictly sequentially with || rc=1. Continue-on-failure is the right call here (independent, non-overlapping error sources), but the four independent toolchains could run in parallel to cut wall-clock time.

Nothing above blocks merge; #1 is the one I'd fix before merge since it makes a maintainer-facing PR comment actively wrong.

@claude

claude Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review

Reviewed the diff (config/tooling refactor: .agents/bin/* wrappers + .agents/agent-workflow.yml seam, agent-workflow-seam-doctor updates, ci-changes-detector case-arm additions). Verified all wrapper scripts reference real, existing repo commands (bin/setup, bin/ci-local, bin/check-links, rake rbs:validate in both rakelib/rbs.rake files, rake run_rspec:all_but_examples, nps format.listDifferent), and confirmed the new ci-changes-detector case-arm ordering (bin *.md docs-only arm before the agent-workflow.yml/bin/* CI-infra arms, before the generic .agents/** catch-all) is correct and matches the added tests.

One finding worth a look:

.agents/bin/agent-workflow-seam-doctor:167 (yaml_config_issues) — reuses the markdown-placeholder regex (SEAM_PLACEHOLDER/CI_PARITY_SEAM_PLACEHOLDER) against free-form YAML prose values, which can produce false-positive "unresolved" failures on legitimate config text.

unresolved_yaml_value?unresolved_template_value? was originally written to catch unfilled AGENTS.md bullet-list placeholders like <benchmark labels>. It now also validates the free-text YAML values in .agents/agent-workflow.yml (e.g. ci_parity_environment, secret_redaction_patterns, trusted_github_actor_boundary, review_gate), which are intentionally long prose per the config actually shipped in this PR. The regex matches anywhere inside the string (not just a whole-value placeholder), so a future legitimate value such as:

review_gate: "PR requires 2 approvals; see <internal wiki: review gate SLA>"

contains "review gate" inside an unescaped <...> span and would be flagged as "unresolved agent workflow config value for key: review_gate" even though the value is fully filled in — failing the seam doctor / CI on a correct config. This also recurses into nested Array/Hash values (lines 210-223), so it can trip on list/nested-map entries too.

This doesn't break the config shipped in this PR today (no <...> substrings currently present), so it's not blocking, but it's a latent false-positive trap in exactly the free-text fields this PR introduces. Might be worth anchoring the placeholder check to whole-value matches (e.g. \A<...>\z after .strip) rather than substring search when applied to YAML values.

@claude

claude Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review

Went through the diff carefully: the seam-doctor Ruby changes, the new .agents/bin/* wrappers, the YAML config, the AGENTS.md rewrite, and the ci-changes-detector case-arm additions.

What I verified:

  • Every binstub (setup, validate, test, lint, build, docs, ci-detect) delegates to a command that actually exists and is executable at the path it references (bin/setup, bin/ci-local, bin/check-links, script/check-docs-sidebar, script/ci-changes-detector).
  • .agents/bin/test's claim that run_rspec:all_but_examples already runs JS tests is accurate — confirmed in react_on_rails/rakelib/run_rspec.rake:143 (all_but_examples depends on js_tests, which runs pnpm run test).
  • .agents/agent-workflow.yml contains all 12 keys REQUIRED_CONFIG_KEYS expects, follow_up_prefix matches the literal "Follow-up:" the doctor requires, and no value trips the unresolved-placeholder regex.
  • The new AGENTS.md "Agent Workflow Configuration" section itself satisfies the doctor's own portable_contract_issues checks (contains .agents/bin/README.md, .agents/bin/<name>, and .agents/agent-workflow.yml) — the repo passes its own gate.
  • script/ci-changes-detector's new case arms are ordered correctly: the .agents/bin/*.md docs arm comes before the broader .agents/bin/* CI-infra arm, and both come before the generic .agents/* docs catch-all, so README-only edits stay docs-only while binstub/config edits correctly force CI_INFRA_CHANGED.
  • Removed content (actionlint/yamllint, Playwright E2E, full Tests/Build command lists) isn't orphaned — it's still documented in the Commands and Boundaries sections of AGENTS.md, matching what the PR description states was an intentional scoping decision.
  • Cross-checked several .agents/skills/*.md files that reference the old inline key names (e.g. "Pre-push local validation", "CI change detector") — these are prose references for an LLM reader, not programmatic parsing, so the new compatibility map in AGENTS.md resolves them correctly.
  • YAML.safe_load is called with permitted_classes: [], permitted_symbols: [], aliases: false — good defensive choice (blocks arbitrary object instantiation and alias-amplification/"billion laughs" style payloads) if this config is ever machine-editable.
  • Test coverage is thorough: 202 assertions in agent-workflow-seam-doctor-test.rb cover the new portable-contract paths (missing/non-executable scripts, invalid/non-mapping YAML, missing/unresolved/extra keys, the follow_up_prefix literal check), and ci-changes-detector-test.bash adds targeted regression tests for the three new case arms.

Minor nit (not worth blocking): .agents/bin/lint line 4 uses CDPATH='' while every other binstub uses CDPATH= (unquoted empty assignment). Functionally identical, just a stylistic inconsistency across the new scripts.

I wasn't able to execute the Ruby/bash test suites directly in this sandbox (tool execution was gated), so this is a static/manual review — but line-by-line tracing through the doctor logic, the YAML config, and the detector case arms didn't surface any correctness, security, or performance issues. Nice work on the test coverage for a validation script like this.

@justin808 justin808 added this pull request to the merge queue Jul 1, 2026
Merged via the queue into main with commit 6be59fa Jul 1, 2026
50 checks passed
@justin808 justin808 deleted the agent-workflows/seam-sync branch July 1, 2026 07:35
justin808 added a commit that referenced this pull request Jul 1, 2026
…st-surface-4274

* origin/main:
  Adopt agent-workflow binstubs (.agents/bin/ + AGENTS.md pointer) (#4264)
  [codex] Wire release harnesses into CI (#4266)
  Document bounded coordination audit fallback (#4283)
justin808 added a commit that referenced this pull request Jul 1, 2026
…ered-rsc-rendering

* origin/main:
  Adopt agent-workflow binstubs (.agents/bin/ + AGENTS.md pointer) (#4264)
  [codex] Wire release harnesses into CI (#4266)
  Document bounded coordination audit fallback (#4283)
  Docs: frame Redux as legacy shared-store guidance (#4278)
  Hide legacy Redux install generator path (#4277)
  Add typed Rails action helper (#4260)
  Add Rails response type generation (#4259)
  Remove stale Pro RSpec encoding workaround (#4291)
  [Pro] Fix Gemfile loader source encoding under C locale (#4281)
  Fail fast for RSC on Rspack v1 (#4289)
  [codex] Document agent workflow trust boundary (#4288)
  Fix precompile hook forcing UTF-8 onto non-UTF-8 (national) locales (#4244)
  Regenerate Pro llms bundle (#4280)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-hosted-ci Run optimized hosted GitHub CI for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant