Persist the Outpost config baseline, and let a run be told not to publish - #56
Merged
Conversation
…lish **#41.** Deployment config was captured in memory only, so a run that died before release left its damage in place and the *next* acquire adopted the broken value as pristine. On 21 August an agent configuring operator events sent 21 PATCH /config requests and left TOPICS empty; every seed afterwards failed with 422 invalid topics — nineteen of twenty-four cells — and the original value was unrecoverable, already overwritten before anyone read it. Deployment config is worse than a leaked tenant twice over: it is global, so it breaks scenarios that never touch config, and it has no natural baseline, so "pristine" silently becomes whatever the last crash left. It is now recorded on first acquire in `.outpost-pristine-config.json`, the same way `.hookdeck-pristine.json` already works for the project. Redacted values are not recorded, so a mask can never be restored as the setting. Verified against the exact failure: before : orders,retries,order.created,... after wipe : "" (agent wipes TOPICS, run dies without releasing) after next : orders,retries,order.created,... **#51.** Publishing was gated on the matrix succeeding and nothing else, so a run against a main we already knew was wrong would publish anyway. On 24 August the cron fired with the addendum defect still on main and was cancelled by hand at roughly 47 of 72 cells, minutes ahead of the publish job. The fixes existed, reviewed, on an open PR; the cron could neither know that nor be told, and cancelling needed somebody watching at the right moment. `EVALS_PUBLISH=false` now holds publication while the matrix still runs and still uploads artifacts — a held run is still worth running, because the transcripts are where every finding has come from. A variable rather than a secret: it is configuration, and someone reading a skipped publish should be able to see why without repository admin. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nt2Zgjw7STjrnFXYKRRVAA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The two harness failures that actually bit us this week, rather than hypothetical ones.
#41 — a crashed run made its config damage permanent
Deployment config was captured in memory only, so a run that died before release left its damage in place and the next acquire adopted the broken value as pristine.
On 21 August an agent configuring operator events sent 21
PATCH /configrequests and leftTOPICSempty. Every seed afterwards failed with422 invalid topics— nineteen of twenty-four cells — and the original value was unrecoverable, already overwritten before anyone read it. The project had to be repaired by hand with a guessed superset.Deployment config is worse than a leaked tenant twice over: it is global, so it breaks scenarios that never touch config, and it has no natural baseline, so "pristine" silently becomes whatever the last crash left.
Now recorded on first acquire in
.outpost-pristine-config.json, the same way.hookdeck-pristine.jsonalready works for the project itself. Redacted values are not recorded, so a mask can never be restored as though it were the setting.Verified against the exact failure:
#51 — no way to say "run, but don't publish"
Publishing was gated on the matrix succeeding and nothing else, so a run against a
mainwe already knew was wrong would publish anyway.On 24 August the cron fired at 06:14 with the addendum defect still on
main— the one that made twelve baseline cells fail for a reason that was ours — and was cancelled by hand at roughly 47 of 72 cells, minutes ahead of the publish job. The fixes existed, reviewed, on an open PR. The cron could neither know that nor be told, and cancelling required somebody to be watching at the right moment. Nobody was; it came up in conversation by luck.The matrix still runs and still uploads artifacts. A held run is still worth running — the transcripts are where every product finding has come from, and the scoreboard has produced none.
A variable rather than a secret: it is configuration, it should be visible in the run log, and someone reading a skipped publish should be able to see why without repository admin.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Nt2Zgjw7STjrnFXYKRRVAA