Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
225 changes: 225 additions & 0 deletions .dev/features/pipeline-performance-audit/GRILL.md

Large diffs are not rendered by default.

238 changes: 238 additions & 0 deletions .dev/features/pipeline-performance-audit/PLAN.md

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions .dev/features/pipeline-performance-audit/REGRESSION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# REGRESSION — pipeline-performance-audit

This is the second run, after the GATE-2 fix build (the maintainer chose "Fix, then PR"). The first run was also
`no-regressions`.

- **Base:** `c9737b4486bc47759bd36f43f3430cf86bc068b4` (`HEAD`; a working-tree build, so `git status --porcelain` was
non-empty and the base auto-resolved to `HEAD`).
- **Inside (changed since base, plus untracked):** 11 paths.
- The four files the plan declares: `PLAN.md` and `audit.mjs` in `.dev/features/pipeline-performance-audit/`,
`.dev/measurements/pipeline-performance-audit-2026-09-29.md`, and `CHANGELOG.md`.
- This feature's stage artifacts, which `scope` exempts (7 in `escape_exempt`).

`scope` found no escape (`escaped: []`).

- **Outside gates:**
- `tests`: all 130 tracked `*.test.mjs` / `*.test.cjs` files, the same set as the first run, run with the pinned
`xargs node --test` form;
- `validate`;
- `structural:pharn/pharn-review/trust-fence/evals/expected/expected-injection-comment.json`.

The style gates were skipped: no shared style config is inside.

- **Baseline: REUSED from the first run, not re-executed.**
- The base map comes from this feature's first regress run. That run used a detached worktree at the same base SHA,
removed after it.
- The base commit, the outside gate set and the install decision (none) are all unchanged, so the base side's input
is identical. This is the BASE-reuse rule 6.33.0 applies in the product pipeline, applied here by hand and stated.
- Only the HEAD side re-ran: 130 test files, `validate` and the structural pair, on the fixed tree.

| gate | base (reused) | head |
| ------------------------------------------------------------------------------------------ | ------------: | ---: |
| `tests` | 0 | 0 |
| `validate` | 0 | 0 |
| `structural:pharn/pharn-review/trust-fence/evals/expected/expected-injection-comment.json` | 0 | 0 |

- `regressions[]`: none
- `pre_existing[]`: none

**REGRESSIONS: none — no deterministically-detectable breakage outside the feature** (`check-regress.mjs verdict`,
exit 0, `"verdict": "no-regressions"`).

This catches exactly what the suite catches, nothing more: a regression that no test, eval or rule covers is invisible
here.
319 changes: 319 additions & 0 deletions .dev/features/pipeline-performance-audit/REVIEW.md

Large diffs are not rendered by default.

87 changes: 87 additions & 0 deletions .dev/features/pipeline-performance-audit/SHIP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# SHIP — pipeline-performance-audit

A `/pharn-dev-ship` roll-up. It records that the chain ran and the floor verdicts it read. It is not an approval.

## Where the run ended

**GATE 2, twice.**

- **The first GATE 2.** The maintainer chose **"Fix, then PR"** (2026-09-29, an interactive form). That is the
maintainer's decision, not the model's.
- **The fix pass.** One fix build inside the plan's `## Files`, then regress, verify and a fresh re-review.
- **Then a PR, as the maintainer asked.**

### First pass

1. **`/pharn-dev-plan`.** Written in the orchestrator's context (opus). GATE 1: the maintainer approved the plan as
written, and chose Q1 option (1), "Audit now" (recorded in `PLAN.md`, "Resolved at GATE 1").
2. **`/pharn-dev-grill`.** A fresh opus subagent. Step 1b, `check-plan-lessons.mjs`: **exit 0** → proceed. It raised
15 advisory concerns (0 blocking): `GRILL.md`.
3. **`/pharn-dev-build`.** Run inline, in the orchestrator's context (opus). `pharn.config.json` routes `build` to
sonnet; running it inline was the orchestrator's choice, because the build needed the discovery already in that
context. It was not a config routing. The build wrote:
- `audit.mjs`;
- the report `.dev/measurements/pipeline-performance-audit-2026-09-29.md`;
- the `CHANGELOG.md` entry.

It addressed the grill's findings inside the plan's files, and disclosed the rule gaps without amending the frozen
rule. Floor: **`validate.mjs` exit 0** → proceed.

4. **`/pharn-dev-regress`.** Inline. `.verdict` **`no-regressions`** → proceed.
5. **`/pharn-dev-verify`.** Inline. `.verdict` **`PASS`** (7 gates, `reconcile` CLEAN) → proceed.
6. **`/pharn-dev-review`.** A fresh opus subagent. 0 floor-gate findings and 10 advisory findings (F1–F10) in
`REVIEW.md`.

### Fix pass (after the maintainer's "Fix, then PR")

1. **Fix build.** Inline, under a fresh `--from-plan` scope and a new reconcile epoch. It fixed F1–F10 in `audit.mjs`
(25 self-tests), the report and the `CHANGELOG.md` entry. Floor: **`validate.mjs` exit 0**.
2. **`/pharn-dev-regress`.** `.verdict` **`no-regressions`**. The HEAD side re-ran. The BASE map was reused from the
first run, because the base SHA, the outside gate set and the install decision were all unchanged. This is
disclosed in `REGRESSION.md`.
3. **`/pharn-dev-verify`.** `.verdict` **`PASS`** (7 gates, `reconcile` CLEAN).
4. **Re-review.** A fresh opus subagent. Floor GREEN; F1–F10 **all fixed**; 3 new minor advisory findings (R1–R3,
`REVIEW.md` "Re-review").
5. **R1–R3 fixed**, as report and CHANGELOG prose, under a fresh `--from-plan` scope and epoch. **Not** re-run after
this fix: `npm test`, `regress` and a third review. Instead the gates the change can move were run:
- `format:check` 0, `lint:md` 0, `lint` 0, `check:changelog` 0, `check:changelog-entry` 0;
- `validate` 0;
- the two CHANGELOG test files 0;
- `audit.mjs --self-test` 0;
- `reconcile` CLEAN (2 paths, no escapes).

CI runs the full suite on the pull request.

## Structural verdicts read, verbatim

| stage | read | first pass | fix pass |
| -------------------- | ----------------------------- | ------------------ | ------------------ |
| `/pharn-dev-grill` | `check-plan-lessons.mjs` exit | `0` | (not re-run) |
| `/pharn-dev-build` | `validate.mjs` exit | `0` | `0` |
| `/pharn-dev-regress` | `.verdict` | `"no-regressions"` | `"no-regressions"` |
| `/pharn-dev-verify` | `.verdict` | `"PASS"` | `"PASS"` |

## Pointers

- Review and re-review: `.dev/features/pipeline-performance-audit/REVIEW.md` (advisory).
- Grill: `.dev/features/pipeline-performance-audit/GRILL.md` (advisory).

## Recorded lines

changelog-entry: exit 0

lesson: none — the nearest candidate (REVIEW F6: an orchestrator/agent split read from `sidechain` misreads an
orchestrator that itself runs inside an agent) is a first occurrence with no consumer yet. The remaining findings are
instances of existing lessons (L6 structured location, L40 attribution, L43 agreement). So nothing clears L20's bar.

deferred: none

## Notes for the human

- **A local-only housekeeping step.** The git-ignored `.pharn/pr-body.md` (the merged PR #298's body, from an earlier
session) was renamed in place to `.pharn/pr-body.md.bak`, so that the whole-repo `lint:md` gate measured this
increment rather than that file (L61). Nothing was deleted.
- **The commit, branch and PR are made at the maintainer's GATE-2 choice.** No merge and no seal.

Chain ran; the named floor verdicts are as shown. This is NOT a judgment that the increment is good or wise; that is
the human's call at the post-review gate.
28 changes: 28 additions & 0 deletions .dev/features/pipeline-performance-audit/VERIFY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# VERIFY — pipeline-performance-audit

This is the second run, after the GATE-2 fix build (the maintainer chose "Fix, then PR"). The first run was also
`PASS`. The gates ran at HEAD, on the working tree with the fixed increment present.

| gate | exit |
| ------------------------------------------------------------------------------------------ | ---: |
| `test` (`npm test`) | 0 |
| `validate` (`pharn/floor/validate.mjs .`) | 0 |
| `lint` | 0 |
| `format:check` | 0 |
| `lint:md` | 0 |
| `structural:pharn/pharn-review/trust-fence/evals/expected/expected-injection-comment.json` | 0 |
| `reconcile` (`check-bash-reconcile.mjs --require-baseline`) | 0 |

**VERIFIED: floor gates PASS** (`check-verify.mjs`, exit 0, `failing_gates: []`).

- **`reconcile`:** `CLEAN`. The epoch was re-anchored by the fix build (`pharn-dev-build`) at 2026-09-29T07:37:23Z.
It reconciled 3 paths and found no escapes.
- **`lint:md`, a local note.** Before the first run, a git-ignored `.pharn/pr-body.md` sat in the checkout. It was left
by an earlier session and held the body of already-merged PR #298, and it would have turned the whole-repo `lint:md`
red. It is not this increment's file and CI never sees it (L61). Following L61's precedent, it was moved aside in
place, to `.pharn/pr-body.md.bak`, and not deleted.
- **Verifiers:** none registered (`count-verifiers.mjs` → `{"registered":0}`), so these are the floor gates only.

"Verified" means the named gates passed. It is not a guarantee of correctness beyond what those gates check. In
particular, no gate checks this increment's report for accuracy: its figures are advisory, and `/pharn-dev-review`
is the stage that reads them.
Loading
Loading