Examples
This site is built with Agent Codeyard. These are real runs of this repository, ordered by risk, followed from the Issue to the merged pull request with the records each step left.
The examples by risk
The levels as each run recorded them. Risk-proportionate workflow.
The risk level of a feature decides which model writes it and what the review rounds require. This repository runs the shipped risk policy, without a profile line, so every feature is medium or high.
| level | example | why this level | rounds | run | merge approval |
|---|---|---|---|---|---|
| high | #217, PR #222 | It changes the reviewer's contract, the review schema and gate scripts | 5 | 1 h 30 min | required |
| medium | #241, PR #249 | Website pages that no class of the policy names: the default | 3 | 13 min | not required |
| low | – | Exists only under profile: light, which this repository does not use | – | – | – |
Under the shipped policy, medium and high run the same rounds: full verification, full review and full triage. What the level changed between these two runs is the model of the fixes and the owner's approval of the merge.
High risk, end to end: #217
Issue #217, PR #222. One unattended run of run-feature.sh, 28 October 2026.
The feature that gave every later review round the decisions of the earlier ones. It came out of Codeyard's analysis of its own runs, and it is followed here from its requirements to the merge.
Requirements
The run analysis of 28 October 2026 found that in five runs the reviewer raised a finding again as unresolved after it had been fixed, and that in one feature it raised findings again that the triage had accepted. The Issue asks that every review after round 1 receives the decisions of all earlier rounds, that a finding names the one it continues (unresolved or worsened), and that the stored review is checked against the recorded decisions. It has six acceptance criteria; the last one reads “No gate is weakened: a FIX_NOW finding that is really unresolved is still reported and still blocks.” Out of scope: the triage rules, the round limit, and the owner-exception mechanism.
Risk level and agents
- risk
- high: the feature changes
.agents/prompts/reviewer.mdand.agents/schemas/feature-review.schema.json, existing contract files;scripts/lib/review-data.shandscripts/review-feature.sh, listed as high inrisk.conf; and four existing test files. The reviewer also classified the impact on the architecture as major. - implementer
claude opus. The first session started before there was a diff, so the level was still the default, medium. That gap became #227: you can now raise the level before the first session (PR #229).- fixes
claude fable, selected by the linetriage-implementer@high- review
codex gpt-6-luna, read-only- triage
claude sonnet, read-only
Implementation and tests
The change adds the earlier decisions to the reviewer's context in scripts/review-feature.sh, the optional previous field to the finding schema, and the validation in review_artifact_errors of scripts/lib/review-data.sh. A new test file, tests/review-data-test.sh, covers each invalid case; existing tests only gained blocks, no assertion was changed. Each re-raise becomes a finding event in the run record, and report-runs.sh counts them per feature.
Independent review and triage
| round | reviewed | verdict | finding | decision |
|---|---|---|---|---|
| 1 | complete feature | CHANGES REQUIRED | M1, major: earlier approved decisions can disappear when a newer triage is invalid | FIX_NOW |
| 2 | the fixes | no findings | – | – |
| 3 | complete feature | CHANGES REQUIRED | M1, major: predecessor validation allows re-raises to weaken a FIX_NOW gate | FIX_NOW |
| 4 | the fixes | no findings | – | – |
| 5 | complete feature | PASS WITH MINOR FINDINGS | MIN1, minor: the review schema makes previous required | ACCEPT |
Round 3 is the review doing its job: the fix of round 1 was correct, but the new rule could still let a re-raised finding lower its severity, which would have weakened the very gate the Issue protects. Round 5 found one minor point, and the triage accepted it with a rationale, quoted below.
github.com/taspinar/agent-codeyard/issues/217 · round 5 · triage, excerpt### MIN1. The review schema makes `previous` required
- Severity: minor
- Rationale: Listing `previous` in `required` while allowing null
is deliberate. It follows the strict structured-output
convention, where every property is required and optionality
is expressed as nullable. [...] The runtime validators accept
artifacts that omit it, so old artifacts stay valid [...]
The mismatch is cosmetic and blocks nothing.Verification evidence
The full verification ran three times, once after each writing session: 1046, 1049 and 1118 seconds. Eight more times a step required a verification and reused the recorded pass, because the content had not changed since. Every review report names the reviewed tree and the verification that passed for it.
The run
- Issue created21:37 UTC
From the run analysis, with six acceptance criteria.
- Implementation21:38 – 22:22
claude opus, unattended; verification 1046 s; completion record: complete.
- Round 1 and triage22:22
M1 major, FIX_NOW.
- Fixes22:22 – 22:42
claude fable; verification 1049 s.
- Rounds 2 and 3, triage22:43
Round 2: no findings. Round 3: M1 major, FIX_NOW.
- Fixes22:43 – 23:07
claude fable; verification 1118 s.
- Rounds 4 and 5, triage23:07 – 23:08
Round 4: no findings. Round 5: PASS WITH MINOR FINDINGS, MIN1 accepted.
- Commit and pull request23:08
The completion gate passed;
finish-feature.shcommitted andpublish-feature.shopened PR #222. - Merge by the owner29 October, 01:14 UTC
The pull request said “Merge approval: required from the project owner, for exactly this commit”.
The pull request
The description of PR #222 carries the completion record with evidence for all six criteria, the verification, the review line, the risk level with its reasons, and the merge approval block. The home page shows it annotated.
github.com/taspinar/agent-codeyard/pull/222 · excerptReview: round 5, PASS WITH MINOR FINDINGS, by codex (gpt-6-luna); triage published on #217
Merge approval:
- required from the project owner, for exactly this commit
[...]
- scripts/review-feature.sh: the file defines or carries out the workflow and its gate
- the independent review classified the impact on the architecture as major: [...]
[...]
- approval request: .agents/approval-requests/217.json (asks and records; grants nothing)High risk, more runs
From the run record of each feature and the description of its pull request. Sources.
Four more features of the audit's candidate list. All four changed the workflow and its gate, so all were high risk: the full triage applied, and each pull request said that the merge needed the owner's approval.
| issue | change | rounds | findings | full verifications (s) | run | result |
|---|---|---|---|---|---|---|
| #189 | Compute the risk level of a feature from one policy | 3 | none | 556, 575, 572 | four runs; the implementer resumed by hand | PR #194 |
| #193 | Treat performance budgets as measurements | 4 | 1 major, re-raised once; 1 minor; all fixed | 761, 762, 761 | 1 h 18 min | PR #199 |
| #204 | Show the reviewer no change in paths the fingerprint leaves out | 1 | none | 909 | 38 min | PR #205 |
| #16 | Add the feature clarification gate | 1 | none | 849 | 26 min | PR #213 |
High risk, the owner in the loop: #189
Issue #189, PR #194, 27 October 2026.
The feature that introduced the risk level. The owner sharpened its scope in a comment, and caught a defect before the merge.
- A comment as a decision. After the first run, the owner's comment set two rules from experience with another project: an escalation reads only changed or removed lines of existing files, and a feature already in progress is not refused.
- A resumed session. The owner resumed the implementer by hand, which the run record notes as an intervention. The record also shows the comment passed on to the resumed implementer and to each later review.
- A correction before the merge. The owner found that a failed listing of the changed files fell back to the default level. The fix makes it high, with a test that fails against the earlier commit and passes with the fix, as the completion record in the pull request states.
- Three rounds, no findings. Review by
codex gpt-6-luna, ten of ten criteria met; full verifications of 556, 575 and 572 seconds.
Source files changed by PR #194: scripts/lib/risk.sh, scripts/check-risk.sh, scripts/finish-feature.sh, scripts/publish-feature.sh, tests/risk-test.sh.
High risk, a fix that did not hold: #193
Issue #193, PR #199, 27 October 2026.
The feature that made budget checks measurements. In round 1 the reviewer found that a failing timeout utility was reported as an exceeded budget (major) and that a budget's output was cut short (minor); the triage decided to fix both. In round 2 the reviewer raised the major finding again, as “Unresolved M1”: the fix now treated exit status 128 as a failure of the call, though a measurement can return it. A second fix round resolved it, and rounds 3 and 4 passed. Each round's report and triage is on the Issue.
Source files changed by PR #199: scripts/verify.sh, scripts/lib/verification.sh, scripts/run-feature.sh, tests/verify-test.sh.
High risk, the short path: #204 and #16
Most features do not need several rounds. #204 ran from run-feature.sh to the pull request in 38 minutes: one implementation session, one verification of 909 seconds reused twice, one review that passed. #16, the clarification gate itself, took 26 minutes: the implementer received the owner's two comments with the Issue, which settled the design, and the single review passed.
Source files changed by #204 in PR #205: scripts/review-feature.sh, .agents/prompts/reviewer.md, tests/review-feature-test.sh.
Source files changed by #16 in PR #213: scripts/run-feature.sh, .agents/prompts/implementer.md, scripts/lib/completion.sh, tests/run-feature-test.sh.
Medium risk: #241
Issue #241, PR #249. One unattended run of run-feature.sh, 30 October 2026.
The feature that wrote the first Features, Examples and About pages of this site. It changed website pages only, and it is followed here with the same records as #217.
Requirements
The Issue asks for the three pages from real repository evidence, with six acceptance criteria; the first reads “Every statement links to or matches its source; no invented figure or testimonial”, and the Examples criterion asks for examples linked to their Issues, pull requests and source files.
Risk level and agents
- risk
- medium: the four changed files, three pages and the style sheet, are named by no class of
risk.conf, so each gets the default. No escalation applied, the reviewer classified the impact on the architecture as minor, and the triage was full, the default. - implementer
claude opus, the plain lineimplementer- fixes
claude opus, the plain linetriage-implementer; at high, as in #217,claude fable- review
codex gpt-6-luna, read-only- triage
claude sonnet, read-only
Independent review and triage
| round | reviewed | verdict | finding | decision |
|---|---|---|---|---|
| 1 | complete feature | CHANGES REQUIRED | M1, major: examples do not link each candidate to its source files | FIX_NOW |
| 2 | the fixes | no findings | – | – |
| 3 | complete feature | PASS | – | – |
A medium feature gets the same review as a high one under the shipped policy, and round 1 shows why: the pages linked the source files of only one example, which the Issue asked for every example. A major finding is always fixed; the fix added the source files of the other four, the same lists this page shows under High risk, more runs.
Verification evidence
The full verification ran twice, after the implementation and after the fix: 14 and 15 seconds, of which 13 were the check of this site. The workflow's own self-tests in verify-workflow.conf run only when a workflow file changes. #217 changed several, so its verifications of 1046 to 1118 seconds included that suite, which the file's header records at 915 seconds when its budget was set; #241 changed none. Five more times a step reused the recorded pass.
The run
- Implementation19:27 – 19:38 UTC
claude opus, unattended, 642 s; completion record: complete, six of six criteria met.
- Round 1 and triage19:38
M1 major, FIX_NOW.
- Fix19:38 – 19:40
claude opus, 85 s; verification 15 s.
- Rounds 2 and 319:40
Round 2: no findings. Round 3, the complete feature: PASS.
- Commit and pull request19:40
finish-feature.shcommitted andpublish-feature.shopened PR #249. - Merge by the owner20:09 UTC
No approval was required; no script merges, so the owner merged it.
github.com/taspinar/agent-codeyard/pull/249 · excerptReview: round 3, PASS, by codex (gpt-6-luna); triage published on #241
Merge approval:
- not required
- the independent review classified the impact on the architecture as minor, and no protected path is changed
[...]
Risk: medium
[...]
- profile: noneWhat is not shown
risk.conf of this repository; Issue #170.
- A low-risk run. A low level exists only under
profile: light, or with alow:class inrisk.conf. This repository has neither, so none of its features was low, and this page does not invent one. Under the light profile a low feature may be committed without a review; the commit and the pull request say so, and the merge then needs your approval. - Onboarding an existing repository. Codeyard starts new projects from the template with
gh repo create --template. Bringing an existing repository into the workflow is planned in #170 and not built, so there is no run of it to show.
Where the figures come from
Each figure on this page has one of three sources:
| source | what it holds | where |
|---|---|---|
| Issue comments | The review report and the triage of every round with findings, published by triage-review.sh | GitHub, linked above |
| Pull request | Completion record, verification, review line, risk level and merge approval, written by finish-feature.sh and publish-feature.sh | GitHub, linked above |
| Run record | Times, agents, models and levels, verification seconds and reuses, interventions, comments passed on | .agents/records/feature-<n>.jsonl, on the maintainer's machine |
The run records are local by design and not published; the figures from them are copied here as recorded. Durations depend on the machine and the size of the test suite and are not benchmarks.