mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-06 22:49:16 +00:00
6b0d7d66dd4b00d00984331d0040e56d8fbcb464
5
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
cf7a9cc4fc |
fix(process): reconcile canon and hints with the pipeline after #707–#730 (#748)
Five places still described the pipeline as it was before code that is already in dev: - the S3 hint of the task packet told the author to push the branch, while the spec lives in the issue body (§2.3, #517) and nothing is pushed before S5 (§11.8); - process-gate printed «FAIL п.9 Gates: light» for a trailer nobody writes or reads, while §10.2 item 9 is the unimplemented release:prerelease verdict check. The check is removed; a contract test ties every RULES key to an implemented item of §10.2 and every finding number to a RULES key; - §10.4 item 4 demanded a heredoc in run:, while #723/#730 and their tests demand the opposite: commit messages echo line by line into a file, comment and summary texts come from code; - the ship merge comment, AUTHOR.md, REVIEWER.md and AGENTS.md named only the pre-beta document, though since #727 the night reads ship code first; - the nightly publication committed «docs: ship review for nightly … перед бетой» with the beta step's Issue: #696. It now has its own subject (the document name), body and Issue: #727; the beta message is unchanged. The browser-guard inventory note still said growth above 200 fails mutation-gate --check; since #699 it is a guideline and --check warns. Its counts now match the inventory: 205, lifecycle 90. Issue: #748 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd |
||
|
|
f5a6b47b39 |
feat(process): the pipeline records model usage in the review document's machine block (#737)
The weekly process metrics weigh tracks and the nightly ship review in the order quality, speed, tokens (#707), but the third axis had no source: the claude-code-action step hides usage from the Actions log on purpose, nothing read its execution_file, and the #728 reader printed "no data" every week. scripts/model-usage.mjs is the single module that builds and parses the line: `<!-- hp:usage input_tokens=N output_tokens=N cache_creation_input_tokens=N cache_read_input_tokens=N num_turns=N -->` (sums over every model in the last `result` message, `result.usage` when modelUsage is absent) or `<!-- hp:usage-none reason=<code> -->`. Only the result message is read; the rest of the file holds tool results, and no byte of it is printed. A new step right after Review in both model_review jobs (always(), continue-on-error) hands the line out as the job output `usage`. Usage is a reporting figure like the stage duration, so it travels as a job output and not through the sealed artifact: REQUIRED_FILES and the #556 gate are unchanged. Publication treats the line as untrusted input and writes the normalized form as the last line of the anchor block (review-doc-guard --anchor --usage=) or right after the SHIP-REVIEW block; empty becomes reason=missing, anything off-format reason=invalid. The #728 reader now takes the line only from the machine block: a reviewer quoting the previous round in prose no longer doubles its usage, and "no data" is counted as missing, never as zero. PROCESS.md §10.4 documents the source, the format and why it is a job output. Issue: #737 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd |
||
|
|
562313944f |
fix(process): ship review and beta-derived pushes tell a GitHub refusal from a moved dev (#730)
After #705 and #723 two more workflow bodies still treated every failed push as a moved dev: the SHIP-REVIEW publication (_ship-review.yml) retried three times with "dev went ahead", and the derived-artifacts bot commit (_beta-derived.yml) told the release manager to rerun the workflow. A refusal by GitHub itself - a token without the workflow right, a branch rule, a hook - is cured by neither, and neither step said what GitHub answered. Both pushes now keep stderr and hand it to the #705 classifier through the same CLI (merge-candidate.mjs --push-refusal). A stale lease keeps the old behaviour: another attempt for the ship review, the rerun advice for the derived artifacts. Any other outcome stops the step at once: the log gets the git answer and the step summary gets the reason and the git answer without secrets (--summary, refusalSummary with the new ship-review and beta-derived labels). The classifier comes from dev, as for the other steps of these bodies: both jobs check out dev, and the ship review resets to origin/dev before every attempt. The ship review commit message is built line by line into a file instead of a heredoc, as in #723. The thin callers ship-review.yml and beta-derived.yml are untouched. The rebase guard in _process.yml also writes the refusal reason to its step summary now (--summary, label "rebase"); a stale lease writes none. test/publish-push-refusal.test.mjs runs both steps as they are with real bash and real git in temporary repositories (moved dev = a real neighbour push, GitHub refusal = recorded stderr with a token, a credential URL and an Authorization header); on the old bodies 10 of its 12 new tests fail. The #705 execution tests of the rebase guard in rebase-generated.test.mjs now also read the step summary. PROCESS.md names the two steps next to the Issue: #730 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd |
||
|
|
e58d7d06f8 |
feat(process): nightly ship batch review, reused by the beta gate by patch set (#727)
Ship tasks merge without a model review and their code was first read by the batch review right before a beta: one session over the whole range, ten to forty-five minutes on the release path, days after the merge. The gate also knew a single document (SHIP-REVIEW-<tag>.md) and covered tasks by number only, so a commit that landed after the review under the same trailer still counted as read. - scripts/ship-review.mjs: the patch set of a task is the sorted `git patch-id --stable` of its range commits, without `Release:` commits (the beta candidate carries every Issue: of the line) and commits touching only docs/reviews/**; the diff options are explicit so a local git config cannot change it. shipCoverage rates every ship task from the documents of the same base (candidate and origin/dev, latest publication wins): clean, high, stale, none; documents without `patches` cover by number. `tag=nightly` is a reserved mode: the candidate is required, the document is SHIP-REVIEW-<base>-dev-<sha12>.md, only none/stale tasks are read and nothing runs when nothing is uncovered. The beta reads the same delta (force=true reads everything, as before); the brief names what the night already read. The gate refuses none/stale with the command and keeps the High refusal with force=true; all clean passes without a tag document. The machine block gains `mode` and `patches` at its end. comment-high writes one line per task of a nightly document with High, once per document (hp:ship-review-high). - _ship-review.yml: prepare refuses nightly without a candidate before defaulting to the dev tip, computes the document from base and SHA and no longer reads a prepare failure behind `| tee` as "no ship tasks"; publish takes mode and patches from prepare, never from the model result; a new step comments High at night with HP_PROCESS_TOKEN. - _nightly.yml: the Validate run SHA is a separate step output before the wait; a new job dispatches ship-review.yml -f tag=nightly on it whatever Validate's outcome, waits only for the run to appear and never colours the night. Thin files in main are unchanged. - reviews-index/reviews-archive: the nightly name is a ship document with nightly: true; a beta base archives with its line, a stable base with the nearest archived line newer than the base, or stays. - PROCESS.md §11.7, §10.4 and REVIEWER.md describe the nightly mode, patch set, coverage and beta delta; the digest test pins the key rule. Tests run the prepare, publish and comment steps and the nightly steps on real bash with real git in temporary repositories; only push transport and gh are faked. Issue: #727 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd |
||
|
|
d11ad9c1c2 |
ci: register ship-review and beta-derived as thin callers in main (#716)
`workflow_dispatch` runs the file from the chosen ref, but GitHub lists a workflow and accepts a dispatch (button, `gh workflow run`, API) only when its file exists on the default branch. `ship-review.yml` (#696) and `beta-derived.yml` (#697) lived only in `dev`, so neither could be started at all, and the comment "the file runs from `--ref dev`, no mirror in `main` needed" was wrong. Both beta steps are needed before the next promotion would bring them to `main`. They now follow the #623 layout instead of a full copy in `main`: a thin caller (trigger, dispatch inputs, run-name, permission ceiling, concurrency) calls `_ship-review.yml` / `_beta-derived.yml` at `@dev` with `secrets: inherit`. A full copy would either need a mirror on every edit or drift silently, and a dispatch from `main` (the button's default) would run the stale copy; the thin caller runs the dev body from any ref. The caller ceiling is the union of the body jobs' permissions (#556): ship-review `contents: read` + `issues: read`, beta-derived `contents: read` + `actions: read`; writes to `dev` stay with HP_PROCESS_TOKEN as before. `workflow_sync` in validate.yml now compares eight files, and test/default-branch-workflows.test.mjs lists the two dispatch-only files explicitly with the reason checked (only `workflow_dispatch`). Workflow tests and the #697 provenance mutant read the bodies. PROCESS.md §10.4, §8 and §11.7 say how these are run and that a new thin file is mirrored into `main` before it is merged into `dev`. Issue: #716 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd |