Skip to content

Release ultimate-agent-stack 0.9.0 - #35

Merged
samtay32 merged 16 commits into
mainfrom
codex/release-v090
Aug 1, 2026
Merged

Release ultimate-agent-stack 0.9.0#35
samtay32 merged 16 commits into
mainfrom
codex/release-v090

Conversation

@samtay32

@samtay32 samtay32 commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Release

Prepares ultimate-agent-stack@0.9.0 for release from exact head 80a41594f1d4aeec7328b544cb99dc620e8fbd2d.

What this release does

  • Uses run-autonomous-delivery as the sole required end-to-end controller while keeping phase skills available for explicit phase-specific requests.
  • Accepts rough ideas, detailed outside plans, bounded direct changes, and verified resume state.
  • Records bounded skill-activation evidence and reports routing as k/N by harness, model, skill, and scenario.
  • Gives a plain first-run setup blocker instead of a zero-check verification failure cascade.
  • Enforces Node.js 22+ at CLI startup.
  • Adds a dependency-free evidence export that preserves raw evidence and writes a separate redacted copy.
  • Keeps the package ordinary and portable: no model launcher, background service, install hooks, runtime dependencies, vendor lock-in, or paid-test machinery.

Review findings resolved

  • routing-rate now includes absolute input paths and invocation metadata.
  • evidence activate reports the evidence-graph path and result metadata.
  • Installed skill-path validation accepts equivalent Windows and ./ forms without weakening the allowlist.
  • The evidence sanitizer uses a linear-time scanner; the CodeQL ReDoS finding is resolved.

Exact candidate

  • Head: 80a41594f1d4aeec7328b544cb99dc620e8fbd2d
  • Package: ultimate-agent-stack@0.9.0
  • Behavioral scenarios: 28 across 13 skills
  • Behavior surface: sha256:ce7a1c666d5d6c4881551b21ab997bbfab88239d3d1d085e07ee5cfa5333b7b2
  • Packed install: 116 files

Exact-head validation

  • Node 22 release check: 217/217 tests passed.
  • Packed-install smoke: passed.
  • GitHub CI: Ubuntu Node 22, Windows Node 22, Windows Node 26, and final Node 24 verification all passed.
  • CodeQL JavaScript and Actions analyses passed.
  • Qodo reviewed exact head 80a4159 with no unresolved threads.
  • Protected review receipt passed: https://github.com/samtay32/ultimate-agent-stack/actions/runs/30710099518

Live compatibility evidence

One fresh, uncoached Claude Code 2.1.89 / Claude Sonnet 4.6 session passed against packed candidate 813ba6f774f7d10b51947cb5ac9733ad5fd6df07 (tarball SHA-256 4942951bf085e86846481927da13f425dd76f0b0d8713abfecb497597f625e90).

The session naturally activated run-autonomous-delivery, implemented the bounded task, passed its test and stack verification, recorded one native activation receipt, and made no GitHub or publication changes.

The subsequent exact-head commit 80a4159 changes only CLI evidence metadata, Windows path normalization, focused tests, and deterministic fixture baselines. It does not change the controller skills or routing contract. No second paid model run was used.

Release authority

This PR is ready for review. Merge, protected npm staging, npm 2FA approval, and final registry/GitHub Release synchronization remain separate release steps.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 17 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: ASSERTIVE

Plan: Pro Plus

Run ID: 882dc931-265f-4182-9de4-a5f95bd76621

📥 Commits

Reviewing files that changed from the base of the PR and between 6954433 and 80a4159.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (40)
  • .codex-plugin/plugin.json
  • .markdownlint-cli2.jsonc
  • CHANGELOG.md
  • README.md
  • assets/project-template/.agent-stack/HANDOFF.md
  • assets/project-template/.agent-stack/contracts/evidence-graph.schema.json
  • assets/project-template/.agent-stack/core-policy.json
  • assets/project-template/.agent-stack/evidence-graph.json
  • assets/project-template/.cursor/rules/agent-stack.mdc
  • assets/project-template/AGENTS.md
  • assets/project-template/CLAUDE.md
  • assets/project-template/GEMINI.md
  • bin/ultimate-agent-stack.mjs
  • docs/ARCHITECTURE.md
  • docs/BEHAVIORAL_EVALS.md
  • docs/OPERATING_MANUAL.md
  • docs/RELEASE.md
  • docs/SKILL_STACK.md
  • docs/TRUST.md
  • evals/fixture-baselines.json
  • evals/fixtures.json
  • evals/scenarios.json
  • package.json
  • scripts/packed-smoke.mjs
  • scripts/skill-eval.mjs
  • scripts/skill-fixture.mjs
  • skills/close-review-loop/SKILL.md
  • skills/coordinate-parallel-delivery/SKILL.md
  • skills/coordinate-parallel-delivery/references/delegation-contract.md
  • skills/develop-project-brief/SKILL.md
  • skills/develop-project-brief/references/brief-contract.md
  • skills/run-autonomous-delivery/SKILL.md
  • skills/run-autonomous-delivery/references/delivery-policy.md
  • skills/shape-project/SKILL.md
  • skills/shape-project/references/shaping-contract.md
  • skills/verify-change/SKILL.md
  • test/agent-stack.test.mjs
  • test/maintenance.test.mjs
  • test/skill-eval.test.mjs
  • test/skill-fixture.test.mjs

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

@samtay32

Copy link
Copy Markdown
Owner Author

/review

@qodo-code-review

qodo-code-review Bot commented Jul 30, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 104 rules
✅ Skills: 4 invoked
  verify-change
  maintain-agent-stack
  build-vertical-slice
  secure-launch

Grey Divider


Remediation recommended

1. routing-rate output lacks inputs ✓ Resolved 📘 Rule violation ✧ Quality
Description
The new routing-rate command prints status-like routing summaries (including reliability_ready)
without emitting any repository/filesystem paths (e.g., the run-record file paths) or an
invocation/command field, making the claims harder to verify and reproduce.
Code

scripts/skill-eval.mjs[R1974-1994]

+  if (command === "routing-rate") {
+    const inputs = argumentValues(args, "--input");
+    if (
+      inputs.length === 0 ||
+      inputs.some(
+        (input) =>
+          !existsSync(resolve(input)) || !statSync(resolve(input)).isFile(),
+      )
+    ) {
+      throw new Error(
+        "routing-rate requires one or more --input run-record files",
+      );
+    }
+    const result = summarizeRoutingRates(
+      inputs.map((input) => readJson(resolve(input))),
+    );
+    print(result);
+    if (!result.ok) {
+      process.exitCode = 2;
+    }
+    return;
Relevance

●●● Strong

They accept making tooling outputs more verifiable/structured for callers; including input
paths/metadata fits recent script output improvements.

PR-#29

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The compliance rule requires status claims in tooling output to include a related path plus
command/result evidence. The new routing-rate path prints only the summarized object returned by
summarizeRoutingRates() and that object contains no inputs/path list or invocation metadata,
despite including readiness-like fields such as reliability_ready.

Rule 2407896: Require verifiable evidence for status claims in tests and tooling output
scripts/skill-eval.mjs[1974-1994]
scripts/skill-eval.mjs[1344-1391]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`scripts/skill-eval.mjs routing-rate` outputs routing readiness/accuracy summaries but does not include the input run-record file paths (or any command/invocation metadata) in the printed JSON, making the summary non-verifiable per the compliance rule.

## Issue Context
The compliance checklist requires tooling output that makes status claims to include (1) at least one related path and (2) command/result evidence in the same line or adjacent structured record.

## Fix Focus Areas
- scripts/skill-eval.mjs[1974-1994]
- scripts/skill-eval.mjs[1344-1391]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Skill-path normalization missing ✓ Resolved 🐞 Bug ≡ Correctness
Description
installedSkillFile() rejects --skill-path unless it exactly equals
.agents/skills/<skill>/SKILL.md or .claude/skills/<skill>/SKILL.md, so Windows-style paths using
backslashes (and other normalized equivalents like ./.agents/...) fail even when they point at the
correct installed file. This can make ultimate-agent-stack evidence activate unusable for Windows
callers or scripts that pass path.join()-produced values.
Code

bin/ultimate-agent-stack.mjs[R3788-3795]

+  const allowed = new Set([
+    `.agents/skills/${skill}/SKILL.md`,
+    `.claude/skills/${skill}/SKILL.md`,
+  ]);
+  if (!allowed.has(skillPath)) {
+    throw new StackError(
+      "--skill-path must name the actual installed .agents or .claude SKILL.md for --skill",
+    );
Relevance

●●● Strong

Team recently accepted Windows path-separator hardening in CLI path validation; normalization here
aligns with that precedent.

PR-#27

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new code compares skillPath to two hard-coded forward-slash strings using Set.has(), which
will fail for backslash-separated Windows inputs. Meanwhile, contractProjectPath() explicitly
supports both separators, indicating the CLI otherwise accepts Windows-style project-relative paths.

bin/ultimate-agent-stack.mjs[3784-3800]
bin/ultimate-agent-stack.mjs[2552-2562]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`installedSkillFile()` enforces `--skill-path` by exact string equality against two forward-slash literals. This rejects valid project-relative paths that use OS-native separators (notably `\\` on Windows) and other equivalent spellings (like `./.agents/...`), causing `evidence activate` to fail before any safe filesystem checks run.

### Issue Context
The codebase otherwise treats both `/` and `\\` as path separators for project-relative paths (e.g., `contractProjectPath()` splits on both), so the current exact-string allowlist is inconsistent with existing path handling.

### Fix Focus Areas
- bin/ultimate-agent-stack.mjs[3788-3796]

### What to change
- Normalize `skillPath` into a canonical comparison form before checking membership in `allowed`, e.g.:
 - convert backslashes to forward slashes (`skillPath.replaceAll('\\\\', '/')`)
 - strip a leading `./` if present
 - optionally collapse repeated slashes
- Keep the allowlist semantics (must resolve to exactly the installed `.agents/.../SKILL.md` or `.claude/.../SKILL.md`), but perform the check on the normalized form.

### Suggested regression coverage
- Add a unit/integration test for `evidence activate` that passes `--skill-path` using Windows separators (constructed via `path.join()`), and another that passes `./.agents/skills/<skill>/SKILL.md`, and assert both are accepted when the file exists.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. evidence activate omits graph path ✓ Resolved 📘 Rule violation ✧ Quality
Description
commandEvidenceActivate() returns recorded/already-recorded results without including the
evidence-graph path that was read/written (or any command/invocation metadata), reducing the
verifiability of the activation-recording claim.
Code

bin/ultimate-agent-stack.mjs[R3888-3919]

+    return {
+      ok: true,
+      recorded: false,
+      reason: "already-recorded",
+      activation: existing,
+      boundary:
+        "Agent-recorded evidence is not independent proof of a harness tool call.",
+    };
+  }
+  const activation = {
+    id,
+    recorded_at: utcTimestamp(),
+    ...activationPayload,
+  };
+  graph.skill_activations.push(activation);
+  graph.updated_at = activation.recorded_at;
+  const updatedErrors = validateEvidenceGraph(graph);
+  if (updatedErrors.length > 0) {
+    throw new StackError(
+      "Refusing to write an invalid skill activation.",
+      2,
+      updatedErrors,
+    );
+  }
+  atomicJson(graphFile, graph);
+  return {
+    ok: true,
+    recorded: true,
+    activation,
+    boundary:
+      "Agent-recorded evidence is not independent proof of a harness tool call.",
+  };
Relevance

●●● Strong

Repo tends to include concrete file paths in evidence-related command results for auditability;
adding graphFile path matches that pattern.

PR-#27

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The rule requires tooling status claims to include a related path and command/result evidence. While
commandEvidenceActivate() reads/writes the evidence graph via graphFile, the returned JSON only
includes recorded, reason, and activation fields, and does not include the evidence-graph path
or invocation metadata needed to verify what file was updated.

Rule 2407896: Require verifiable evidence for status claims in tests and tooling output
bin/ultimate-agent-stack.mjs[3810-3920]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new `ultimate-agent-stack evidence activate` flow reports `recorded: true/false` but the emitted JSON does not include the path to the evidence graph that was modified (e.g. `.agent-stack/evidence-graph.json`) or invocation metadata, which makes the status claim less directly verifiable.

## Issue Context
The compliance checklist requires status claims in tooling output to be accompanied by a related path and command/result evidence.

## Fix Focus Areas
- bin/ultimate-agent-stack.mjs[3810-3920]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Previous review results

Review updated until commit 80a4159 ⚖️ Balanced

Results up to commit a43c5c0 ⚖️ Balanced


No changes from previous review

Results up to commit 813ba6f ⚖️ Balanced


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Remediation recommended
1. routing-rate output lacks inputs ✓ Resolved 📘 Rule violation ✧ Quality
Description
The new routing-rate command prints status-like routing summaries (including reliability_ready)
without emitting any repository/filesystem paths (e.g., the run-record file paths) or an
invocation/command field, making the claims harder to verify and reproduce.
Code

scripts/skill-eval.mjs[R1974-1994]

+  if (command === "routing-rate") {
+    const inputs = argumentValues(args, "--input");
+    if (
+      inputs.length === 0 ||
+      inputs.some(
+        (input) =>
+          !existsSync(resolve(input)) || !statSync(resolve(input)).isFile(),
+      )
+    ) {
+      throw new Error(
+        "routing-rate requires one or more --input run-record files",
+      );
+    }
+    const result = summarizeRoutingRates(
+      inputs.map((input) => readJson(resolve(input))),
+    );
+    print(result);
+    if (!result.ok) {
+      process.exitCode = 2;
+    }
+    return;
Relevance

●●● Strong

They accept making tooling outputs more verifiable/structured for callers; including input
paths/metadata fits recent script output improvements.

PR-#29

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The compliance rule requires status claims in tooling output to include a related path plus
command/result evidence. The new routing-rate path prints only the summarized object returned by
summarizeRoutingRates() and that object contains no inputs/path list or invocation metadata,
despite including readiness-like fields such as reliability_ready.

Rule 2407896: Require verifiable evidence for status claims in tests and tooling output
scripts/skill-eval.mjs[1974-1994]
scripts/skill-eval.mjs[1344-1391]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`scripts/skill-eval.mjs routing-rate` outputs routing readiness/accuracy summaries but does not include the input run-record file paths (or any command/invocation metadata) in the printed JSON, making the summary non-verifiable per the compliance rule.

## Issue Context
The compliance checklist requires tooling output that makes status claims to include (1) at least one related path and (2) command/result evidence in the same line or adjacent structured record.

## Fix Focus Areas
- scripts/skill-eval.mjs[1974-1994]
- scripts/skill-eval.mjs[1344-1391]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Skill-path normalization missing ✓ Resolved 🐞 Bug ≡ Correctness
Description
installedSkillFile() rejects --skill-path unless it exactly equals
.agents/skills/<skill>/SKILL.md or .claude/skills/<skill>/SKILL.md, so Windows-style paths using
backslashes (and other normalized equivalents like ./.agents/...) fail even when they point at the
correct installed file. This can make ultimate-agent-stack evidence activate unusable for Windows
callers or scripts that pass path.join()-produced values.
Code

bin/ultimate-agent-stack.mjs[R3788-3795]

+  const allowed = new Set([
+    `.agents/skills/${skill}/SKILL.md`,
+    `.claude/skills/${skill}/SKILL.md`,
+  ]);
+  if (!allowed.has(skillPath)) {
+    throw new StackError(
+      "--skill-path must name the actual installed .agents or .claude SKILL.md for --skill",
+    );
Relevance

●●● Strong

Team recently accepted Windows path-separator hardening in CLI path validation; normalization here
aligns with that precedent.

PR-#27

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new code compares skillPath to two hard-coded forward-slash strings using Set.has(), which
will fail for backslash-separated Windows inputs. Meanwhile, contractProjectPath() explicitly
supports both separators, indicating the CLI otherwise accepts Windows-style project-relative paths.

bin/ultimate-agent-stack.mjs[3784-3800]
bin/ultimate-agent-stack.mjs[2552-2562]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`installedSkillFile()` enforces `--skill-path` by exact string equality against two forward-slash literals. This rejects valid project-relative paths that use OS-native separators (notably `\\` on Windows) and other equivalent spellings (like `./.agents/...`), causing `evidence activate` to fail before any safe filesystem checks run.

### Issue Context
The codebase otherwise treats both `/` and `\\` as path separators for project-relative paths (e.g., `contractProjectPath()` splits on both), so the current exact-string allowlist is inconsistent with existing path handling.

### Fix Focus Areas
- bin/ultimate-agent-stack.mjs[3788-3796]

### What to change
- Normalize `skillPath` into a canonical comparison form before checking membership in `allowed`, e.g.:
 - convert backslashes to forward slashes (`skillPath.replaceAll('\\\\', '/')`)
 - strip a leading `./` if present
 - optionally collapse repeated slashes
- Keep the allowlist semantics (must resolve to exactly the installed `.agents/.../SKILL.md` or `.claude/.../SKILL.md`), but perform the check on the normalized form.

### Suggested regression coverage
- Add a unit/integration test for `evidence activate` that passes `--skill-path` using Windows separators (constructed via `path.join()`), and another that passes `./.agents/skills/<skill>/SKILL.md`, and assert both are accepted when the file exists.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. evidence activate omits graph path ✓ Resolved 📘 Rule violation ✧ Quality
Description
commandEvidenceActivate() returns recorded/already-recorded results without including the
evidence-graph path that was read/written (or any command/invocation metadata), reducing the
verifiability of the activation-recording claim.
Code

bin/ultimate-agent-stack.mjs[R3888-3919]

+    return {
+      ok: true,
+      recorded: false,
+      reason: "already-recorded",
+      activation: existing,
+      boundary:
+        "Agent-recorded evidence is not independent proof of a harness tool call.",
+    };
+  }
+  const activation = {
+    id,
+    recorded_at: utcTimestamp(),
+    ...activationPayload,
+  };
+  graph.skill_activations.push(activation);
+  graph.updated_at = activation.recorded_at;
+  const updatedErrors = validateEvidenceGraph(graph);
+  if (updatedErrors.length > 0) {
+    throw new StackError(
+      "Refusing to write an invalid skill activation.",
+      2,
+      updatedErrors,
+    );
+  }
+  atomicJson(graphFile, graph);
+  return {
+    ok: true,
+    recorded: true,
+    activation,
+    boundary:
+      "Agent-recorded evidence is not independent proof of a harness tool call.",
+  };
Relevance

●●● Strong

Repo tends to include concrete file paths in evidence-related command results for auditability;
adding graphFile path matches that pattern.

PR-#27

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The rule requires tooling status claims to include a related path and command/result evidence. While
commandEvidenceActivate() reads/writes the evidence graph via graphFile, the returned JSON only
includes recorded, reason, and activation fields, and does not include the evidence-graph path
or invocation metadata needed to verify what file was updated.

Rule 2407896: Require verifiable evidence for status claims in tests and tooling output
bin/ultimate-agent-stack.mjs[3810-3920]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new `ultimate-agent-stack evidence activate` flow reports `recorded: true/false` but the emitted JSON does not include the path to the evidence graph that was modified (e.g. `.agent-stack/evidence-graph.json`) or invocation metadata, which makes the status claim less directly verifiable.

## Issue Context
The compliance checklist requires status claims in tooling output to be accompanied by a related path and command/result evidence.

## Fix Focus Areas
- bin/ultimate-agent-stack.mjs[3810-3920]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit 80a4159 ⚖️ Balanced


No changes from previous review

Qodo Logo

Copy link
Copy Markdown
Owner Author

Release-owner remediation design note

This is the durable PR copy of the five-part design note stated before the release-owner remediation edits in this takeover. It does not claim to recover the original PR #34 pre-implementation note, which could not be independently located.

  1. Understanding summary

    • The merged flexible-intake implementation substantially covers RESUME, EXTERNAL, DISCOVER, and DIRECT routing, but the final audit found three release defects: promoted DECISIONS.md and VERIFICATION.md were not in the protected lock selection; documented JSON redirection included npm banners; and the required Milestone 2/3 roadmap had been collapsed.
    • Prior live traces were incomplete or invalid and cannot support a broad compatibility claim.
  2. Assumptions

    • Keep BRIEF.md unlocked as the evolving source/audit record.
    • Preserve the existing three-artifact default for proportionate DIRECT T0/T1 work.
    • Expand the lock only for EXTERNAL/DISCOVER promotion and applicable shaped higher-risk work.
    • Do not alter provider, memory, orchestration, release, or human-authority boundaries.
  3. Proposed public interface and artifact flow

    • Route: RESUME → EXTERNAL → DISCOVER → DIRECT.
    • Promote an approved external/discovery brief into five canonical contracts.
    • Invoke lock with explicit repeated --artifact flags for DELIVERY.md, ARCHITECTURE.md, SECURITY.md, VERIFICATION.md, and DECISIONS.md.
    • Keep the bare lock behavior unchanged for proportionate direct work.
    • Require live evidence from Codex plus another primary supported harness before a broad flexible-intake claim.
  4. Test and behavioral-evaluation plan

    • Add runtime regression coverage for five-artifact locking, decision drift, and unchanged direct defaults.
    • Require the approved-promotion scenario to report all five canonical artifacts as APPROVED/locked.
    • Reject evaluated promotion records where decisions or verification remain unlocked.
    • Prove JSON examples parse after redirection, regenerate fixture baselines, run the complete release gate on supported Node versions, lint Markdown, audit dependencies, and inspect the package.
    • Only after the exact commit is frozen, run all 27 scenarios in two isolated harnesses and evaluate each record separately.
  5. Implementation plan

    • Correct controller/shaping instructions and trust/architecture docs.
    • Correct behavioral expectations and add regression tests.
    • Restore the detailed deferred roadmap and specialist boundary.
    • Regenerate protected fixture baselines and complete deterministic verification.
    • Commit/push one reviewed remediation, archive that exact head read-only, run two live lanes, attach evidence, then mark ready and obtain an exact-head independent receipt.

Current remediation head: 71709d9868ab0893e8f5c86176c88f33a9b0dca3.

Comment thread scripts/skill-eval.mjs Fixed
@samtay32

samtay32 commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

/review

Comment thread scripts/skill-eval.mjs
Comment thread bin/ultimate-agent-stack.mjs
Comment thread bin/ultimate-agent-stack.mjs
@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 813ba6f

@samtay32

samtay32 commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

/review

@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 80a4159

@samtay32
samtay32 marked this pull request as ready for review August 1, 2026 17:27
@samtay32
samtay32 merged commit 4a93056 into main Aug 1, 2026
10 of 11 checks passed
@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 80a4159

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Release ultimate-agent-stack 0.9.0: delivery routing, Node 22 gate, evidence exports

✨ Enhancement 🐞 Bug fix 📝 Documentation 🧪 Tests ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Bumps to ultimate-agent-stack@0.9.0 and makes run-autonomous-delivery the end-to-end
 controller, keeping phase skills as explicit entry points.
• Adds agent-recorded skill activation receipts (evidence activate) plus routing-rate k/N
 summaries by harness/model/skill/scenario.
• Enforces Node.js 22+ at CLI startup and replaces first-run cascades with a setup-required blocker.
• Adds dependency-free evidence export that writes a separate redacted copy using a linear-time
 sanitizer.
• Expands behavioral coverage to 28 scenarios (new reviewer-unavailable case) and refreshes
 fixtures/baselines.
Diagram

graph TD
    USER([User Request]) --> CLI["ultimate-agent-stack CLI"] --> NODECHECK{"Node >= 22?"}
    NODECHECK -- No --> BLOCK["Setup-required blocker"]
    NODECHECK -- Yes --> ROUTER{"Route request"}
    ROUTER -- "end-to-end/vague/plan" --> DELIVERY["run-autonomous-delivery controller"]
    ROUTER -- "phase-specific" --> PHASE["build-vertical-slice / verify-change"]
    DELIVERY --> BRIEF["develop-project-brief intake"]
    DELIVERY --> ACTIVATE["evidence activate command"] --> GRAPH[("evidence-graph.json")]
    DELIVERY --> EXPORT["export-evidence sanitizer"] --> REDACTED["Redacted evidence copy"]
    GRAPH --> ROUTING["routing-rate report (k/N)"]

    subgraph Legend
      direction LR
      _svc(["Process/Skill"]) ~~~ _db[("Data Store")] ~~~ _dec{"Decision"}
    end
Loading
High-Level Assessment

The approach fits the project constraints (portable, dependency-free CLI): make one controller responsible for end-to-end flow, record bounded skill activation trace entries with an explicit trust boundary, and replace regex-heavy redaction with a linear-time scanner to resolve ReDoS risk. Dependency-based redaction libraries or external tracing/telemetry would reduce custom code but would violate portability/dependency goals.

Files changed (41) +3145 / -262

Enhancement (7) +1472 / -54
evidence-graph.schema.jsonAdd 'skill_activations' to evidence-graph schema +76/-0

Add 'skill_activations' to evidence-graph schema

• Extends the schema with a bounded 'skill_activations' array and a strict 'skill_activation' object definition.

assets/project-template/.agent-stack/contracts/evidence-graph.schema.json

CLAUDE.mdAdd Claude Code adapter requiring native controller activation +23/-0

Add Claude Code adapter requiring native controller activation

• New adapter that imports AGENTS.md and requires Claude’s native 'Skill' call to 'run-autonomous-delivery' for end-to-end work, plus receipt recording rules.

assets/project-template/CLAUDE.md

ultimate-agent-stack.mjsEnforce Node 22+, add 'evidence activate', and validate 'skill_activations' +412/-39

Enforce Node 22+, add 'evidence activate', and validate 'skill_activations'

• Adds a Node major-version gate, introduces 'commandEvidenceActivate' to record hash-bound skill activations in the evidence graph, expands evidence-graph validation to include 'skill_activations', hardens Windows/'./' skill-path normalization without weakening the allowlist, and extends evidence reporting to summarize activation counts.

bin/ultimate-agent-stack.mjs

scenarios.jsonAdd 'edge-reviewer-unavailable' and tighten intake/delivery expectations +100/-9

Add 'edge-reviewer-unavailable' and tighten intake/delivery expectations

• Adds a new edge scenario requiring preserved tested work when review is blocked, tightens incomplete-idea constraints, and updates activation expectations (controller-first).

evals/scenarios.json

skill-eval.mjsAdd routing-rate + export-evidence with linear-time redaction +817/-1

Add routing-rate + export-evidence with linear-time redaction

• Adds 'routing-rate' aggregation producing k/N summaries, and a dependency-free 'export-evidence' command that redacts coordinator tokens using a linear-time scanner and fails closed if a recognizable token remains.

scripts/skill-eval.mjs

SKILL.mdMake controller-first routing explicit and expand lock requirements +29/-5

Make controller-first routing explicit and expand lock requirements

• Requires controller-first activation for end-to-end work, documents that the controller owns implementation/verification gates, expands EXTERNAL/DISCOVER lock to five canonical artifacts, and strengthens independent review requirements.

skills/run-autonomous-delivery/SKILL.md

SKILL.mdExpand shaping/lock expectations for promotion routes +15/-0

Expand shaping/lock expectations for promotion routes

• Updates shaping guidance to reflect explicit locking of delivery/architecture/security/verification/decisions for EXTERNAL/DISCOVER promotion.

skills/shape-project/SKILL.md

Bug fix (4) +57 / -8
SKILL.mdHarden independent reviewer requirements +11/-3

Harden independent reviewer requirements

• Tightens the contract so independent review requires an actual distinct worker/reviewer result; failures must block PR-ready claims.

skills/coordinate-parallel-delivery/SKILL.md

delegation-contract.mdClarify delegation/worker trust requirements +12/-0

Clarify delegation/worker trust requirements

• Adds explicit wording about non-empty worker IDs and inspectable results as prerequisites for independent-review claims.

skills/coordinate-parallel-delivery/references/delegation-contract.md

SKILL.mdSeparate DRAFT readiness from approval prompts +21/-5

Separate DRAFT readiness from approval prompts

• Allows gap-free audit/working-brief requests to stop at DRAFT ready for later approval without manufacturing an approval question; preserves approval requirements when promotion is next.

skills/develop-project-brief/SKILL.md

brief-contract.mdCodify readiness/approval boundaries in brief contract +13/-0

Codify readiness/approval boundaries in brief contract

• Updates contract language to distinguish explicit product-owner acceptance from DRAFT-ready completion paths.

skills/develop-project-brief/references/brief-contract.md

Refactor (1) +1 / -0
skill-fixture.mjsAlign fixture tooling with updated scenario catalog +1/-0

Align fixture tooling with updated scenario catalog

• Small change to keep fixture tooling consistent with the expanded scenario set.

scripts/skill-fixture.mjs

Documentation (16) +413 / -121
CHANGELOG.mdAdd 0.9.0 release notes +41/-6

Add 0.9.0 release notes

• Documents 0.9.0 additions/fixes including activation receipts, routing-rate summaries, Node 22 enforcement, and brief gating changes.

CHANGELOG.md

README.mdDocument activation receipts and updated release evidence rules +25/-5

Document activation receipts and updated release evidence rules

• Adds 'evidence activate' usage guidance and updates release evidence language toward the smoke-matrix requirement.

README.md

HANDOFF.mdUpdate handoff template for new routing/evidence flow +4/-1

Update handoff template for new routing/evidence flow

• Refreshes the template guidance to match controller-first routing and evidence practices.

assets/project-template/.agent-stack/HANDOFF.md

agent-stack.mdcAlign Cursor rules with controller-first routing +11/-0

Align Cursor rules with controller-first routing

• Updates editor rules to match updated routing guidance and contracts.

assets/project-template/.cursor/rules/agent-stack.mdc

AGENTS.mdMake delivery controller primary and add activation receipt guidance +38/-12

Make delivery controller primary and add activation receipt guidance

• Routes end-to-end EXTERNAL/DISCOVER through 'run-autonomous-delivery', keeps phase skills explicit-only, and documents recording activations via 'evidence activate'.

assets/project-template/AGENTS.md

GEMINI.mdUpdate Gemini adapter for routing semantics +11/-1

Update Gemini adapter for routing semantics

• Adjusts the Gemini adapter copy to align with controller-first delivery semantics.

assets/project-template/GEMINI.md

ARCHITECTURE.mdClarify controller-owned phases and expanded lock scope +18/-8

Clarify controller-owned phases and expanded lock scope

• Documents that 'run-autonomous-delivery' owns implementation/verification gates, phase skills stay explicit-only, and EXTERNAL/DISCOVER locks include decisions and verification artifacts.

docs/ARCHITECTURE.md

BEHAVIORAL_EVALS.mdAdd routing-rate guidance and evidence export instructions +90/-23

Add routing-rate guidance and evidence export instructions

• Adds 'eval:routing' usage and semantics, documents a smoke matrix for cross-harness claims, and introduces safe evidence export guidance.

docs/BEHAVIORAL_EVALS.md

OPERATING_MANUAL.mdDocument activation receipts and evidence export; expand roadmap section +67/-7

Document activation receipts and evidence export; expand roadmap section

• Adds operator guidance for 'evidence activate' and 'export-evidence' and elaborates future milestones without implementing them.

docs/OPERATING_MANUAL.md

RELEASE.mdShift release evidence to claim-scoped smoke matrix +24/-23

Shift release evidence to claim-scoped smoke matrix

• Replaces prior full-catalog live-run guidance with a claim-scoped smoke matrix requirement, including cross-harness minimums and reporting rules.

docs/RELEASE.md

SKILL_STACK.mdUpdate skill routing table and controller diagram +31/-17

Update skill routing table and controller diagram

• Recasts 'run-autonomous-delivery' as the end-to-end controller, keeps phase skills explicit-only, and updates Claude install guidance to include the new adapter file.

docs/SKILL_STACK.md

TRUST.mdAdd trust boundaries for redaction and agent-recorded activations +35/-17

Add trust boundaries for redaction and agent-recorded activations

• Documents coordinator-token redaction guarantees for exported evidence, clarifies 'agent-recorded' activation receipts as trace evidence, and updates artifact-lock semantics.

docs/TRUST.md

SKILL.mdMinor frontmatter/wording fix +1/-1

Minor frontmatter/wording fix

• Small documentation-level adjustment for skill text consistency.

skills/close-review-loop/SKILL.md

delivery-policy.mdUpdate delivery policy for expanded lock scope +9/-0

Update delivery policy for expanded lock scope

• Aligns delivery policy wording with the five-artifact lock requirement and controller-owned phase gates.

skills/run-autonomous-delivery/references/delivery-policy.md

shaping-contract.mdUpdate shaping contract for five-artifact lock selection +4/-0

Update shaping contract for five-artifact lock selection

• Codifies expanded canonical artifacts for lock selection in EXTERNAL/DISCOVER routes.

skills/shape-project/references/shaping-contract.md

SKILL.mdClarify phase-specific invocation expectations +4/-0

Clarify phase-specific invocation expectations

• Adjusts wording to match the controller-owned verification gates with explicit-only verification skill entry.

skills/verify-change/SKILL.md

Other (13) +1202 / -79
plugin.jsonBump plugin version metadata +1/-1

Bump plugin version metadata

• Updates plugin metadata to align with the 0.9.0 release.

.codex-plugin/plugin.json

.markdownlint-cli2.jsoncAdjust Markdown lint configuration +3/-0

Adjust Markdown lint configuration

• Small markdownlint config tweak to accommodate updated documentation content.

.markdownlint-cli2.jsonc

core-policy.jsonUpdate core policy defaults +3/-0

Update core policy defaults

• Adjusts shipped policy defaults to reflect 0.9.0 routing/evidence expectations.

assets/project-template/.agent-stack/core-policy.json

evidence-graph.jsonUpdate shipped evidence-graph template +2/-1

Update shipped evidence-graph template

• Refreshes the template evidence graph to match the updated contract surface.

assets/project-template/.agent-stack/evidence-graph.json

fixture-baselines.jsonRefresh deterministic fixture baselines for new surface +49/-44

Refresh deterministic fixture baselines for new surface

• Updates baseline commit/tree receipts for multiple scenarios to match the new behavior surface and scenario set.

evals/fixture-baselines.json

fixtures.jsonAdd fixture for reviewer-unavailable edge scenario +21/-0

Add fixture for reviewer-unavailable edge scenario

• Introduces a small existing-project fixture with a status bug and test for the new reviewer-unavailable behavioral case.

evals/fixtures.json

package-lock.jsonUpdate lockfile for 0.9.0 +2/-2

Update lockfile for 0.9.0

• Keeps package-lock metadata consistent with the new release version.

package-lock.json

package.jsonBump version to 0.9.0 and add 'eval:routing' +2/-1

Bump version to 0.9.0 and add 'eval:routing'

• Updates version and adds an npm script for routing-rate summaries.

package.json

packed-smoke.mjsMake packed smoke portable and expect 28 scenarios +17/-8

Make packed smoke portable and expect 28 scenarios

• Adds CLAUDE.md to required packed paths, expects 28 scenarios, and switches to invoking the packed CLI directly (avoids npm exec differences).

scripts/packed-smoke.mjs

agent-stack.test.mjsAdd tests for Node minimum and activation receipts +423/-0

Add tests for Node minimum and activation receipts

• Adds assertions for Node 22 enforcement, promoted lock artifacts behavior, and validation/recording of evidence-graph 'skill_activations'.

test/agent-stack.test.mjs

maintenance.test.mjsExpand maintenance tests for routing/wording safeguards +205/-10

Expand maintenance tests for routing/wording safeguards

• Adds tests ensuring updated skill frontmatter descriptions and documents enforce controller-first routing and fail-closed independent review requirements.

test/maintenance.test.mjs

skill-eval.test.mjsTest routing-rate output and linear-time evidence sanitizer +471/-9

Test routing-rate output and linear-time evidence sanitizer

• Adds extensive tests for coordinator-token redaction (shell/JSON/escaped JSONL), repeated replacement, fail-closed detection, and routing-rate aggregation; updates expected scenario count to 28.

test/skill-eval.test.mjs

skill-fixture.test.mjsAlign fixture tests with updated scenario set +3/-3

Align fixture tests with updated scenario set

• Small assertion updates to reflect the expanded and refreshed fixture catalog.

test/skill-fixture.test.mjs

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.

2 participants