Skip to content

docs(board): close the 2026-08-25/26 remediation loops - #233

Merged
sshlg merged 3 commits into
mainfrom
docs/close-the-2026-08-25-loops
Aug 26, 2026
Merged

docs(board): close the 2026-08-25/26 remediation loops#233
sshlg merged 3 commits into
mainfrom
docs/close-the-2026-08-25-loops

Conversation

@sshlg

@sshlg sshlg commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

Records the programme where this project already keeps its record, rather than starting a second board beside it — a fourth copy of the truth nobody maintains is worse than none.

Four struck, and none of them were in the audit that started this

Row What it was
CB-CI1 A stacked PR ran zero checks. ci.yml filtered pull requests by base branch, so #218 was never measured over its whole life — which is how three raw conflict markers survived review. Nothing looked, and the PR page showed no red (#223)
CB-COV1 Coverage stopped tracing at the first database await. 1 065 statements project-wide ran and were counted untested. Two decisions had already been taken on the wrong number: an audit finding of "chat.py 35%", and a fail_under gate ten points below reality (#228, #229)
CB-SEN1 extra and contexts were reached by neither scrubbing layer, and the default denylist carries neither dsn nor database_url. Urgent from the moment SENTRY_DSN was set in production (#230)
CB-SEN2 HEROKU_SLUG_COMMIT is present-but-empty on the container stack, so the Sentry release would have been blank and attribution would have silently done nothing. Enabling runtime-dyno-metadata was necessary and not sufficient (#231)

Two opened, because they are gaps rather than finished work

  • CB-UX1 — 102 scenarios still carry a verification older than 30 days. Ordered and computable (--backlog); the ceiling may fall, never rise.
  • CB-OPS1 — worker peak memory is unverified at full load. R14/R15 went 170/2 → 0/0, and the 02:00 CEST daily sync completed all four runs with zero reaps. But the 1 143 MB peak came from a graph rebuild over 25 421 symbols, and no run since has done one — the index has been incremental. The quota is 1 024 MB, so the question is open.

The report is committed

Three CHANGELOG entries cite "the 2026-08-23 audit". A citation to a document the repository does not hold is an assertion, so the report is now in docs/reports/ and linked from the board — including the part that says two of its own numbers were measurement artefacts.

Board tally re-derived: 33 open F-, 76 struck, 5 open CB- = 38, matching the severity table. The tally ratchet from #218 verified it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XtEZboEDbEXLYrLf1owRXB

Records the programme where this project already keeps its record, rather than starting a
second board beside it. Four rows struck, two opened, the tally re-derived.

Struck — none of these four were in the audit that started the programme; all were found
while closing it:

- CB-CI1  a stacked PR ran zero checks, which is how three conflict markers survived
          review. Nothing looked; the PR page showed no red (#223)
- CB-COV1 coverage stopped tracing at the first database `await`. 1 065 statements
          project-wide ran and were counted untested. TWO decisions had already been
          taken on the wrong number — an audit finding of "chat.py 35%", and a gate ten
          points below reality (#228, #229)
- CB-SEN1 `extra` and `contexts` were reached by neither scrubbing layer, and the
          default denylist carries neither `dsn` nor `database_url`. Urgent from the
          moment SENTRY_DSN was set in production (#230)
- CB-SEN2 HEROKU_SLUG_COMMIT is present-but-EMPTY on the container stack, so the Sentry
          release would have been blank and attribution would have silently done
          nothing. Enabling runtime-dyno-metadata was necessary and not sufficient (#231)

Opened, because both are honest gaps rather than finished work:

- CB-UX1  102 scenarios still carry a verification older than 30 days. Ordered and
          computable via `--backlog`; the ceiling may fall but not rise
- CB-OPS1 worker peak memory is unverified at full load. R14/R15 went 170/2 → 0/0 and
          the 02:00 CEST daily sync completed all four runs, but the 1 143 MB peak came
          from a graph rebuild and no run since has done one. The quota is 1 024 MB

The audit report itself is committed. Three CHANGELOG claims cite "the 2026-08-23 audit",
and a citation to a document the repository does not hold is an assertion.

Board: 33 open F-, 76 struck, 5 open CB- = 38, matching the severity table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XtEZboEDbEXLYrLf1owRXB
@sshlg sshlg closed this Aug 26, 2026
@sshlg sshlg reopened this Aug 26, 2026
NGHTBOY and others added 2 commits August 26, 2026 18:45
Two artefacts from the mechanical pass (`2026-08-26-audit.html` / `.json`) plus the
reading it could not do (`2026-08-26-cold-audit.html`). The sidecar is committed because
it exists so the NEXT audit can say what moved — this run reported "no earlier sidecar to
compare against", and that is only true once.

The mechanical pass found 29 findings. 28 are false and 1 is wrong, and its own profile
says why: it detected `monorepo: true` and then read manifests only at the root, which has
none — so `languages`, `managers` and `telemetry` all came back empty while
`backend/pyproject.toml` and `frontend/package.json` sat unopened. Two probes declared
themselves blind; three more were blind silently, one of them returning a finding.

The 28 criticals are "a private key block is committed". Verified: 17 of 20 tree hits are
test fixtures, 3 are a textarea placeholder and a `secretHint` string, and under a strict
PEM test — matching END of the same kind, rejecting spans that contain code — exactly one
candidate survives in the tree and none in history. `ssh-keygen -y` calls that one
"invalid format". It is high-entropy filler used by `test_ssh_key_not_in_response` to
prove the API never echoes a submitted key back.

The reading found one thing worth acting on, and it is the shape this programme fixed
yesterday: BILLING_ENABLED is set, STRIPE_SECRET_KEY is unset, and /pricing is a publicly
indexable page selling plans the deployment cannot charge for. Checkout degrades honestly
to 400 but shows a customer "Stripe is not configured (STRIPE_SECRET_KEY missing)".
`capability_report.py` makes three claims and this is not one of them.

Board rows are proposed in the report, not written. This audit is read-only.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XtEZboEDbEXLYrLf1owRXB
A-6 — `main` is not protected (`branches/main/protection` → 404). #223 made CI run on
every pull request; nothing makes the result binding, so a PR can merge with failing or
absent checks, as every merge in this programme did. A gate that runs and cannot block is
a gate an operator believes in.

A-7 — GitHub has dispatched no workflow for 16 hours and this PR gets none: 0 check-runs
across `opened`, `reopened` and `synchronize`, while Actions is enabled, the workflow is
active, and the same file dispatched correctly hours earlier. Not diagnosed and stopped
deliberately — the hypothesis that fits is an org Actions limit, and reading that needs a
scope this session does not have.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XtEZboEDbEXLYrLf1owRXB
@sshlg
sshlg merged commit ab8a7ef into main Aug 26, 2026
2 checks passed
@sshlg
sshlg deleted the docs/close-the-2026-08-25-loops branch August 26, 2026 23:08
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.

1 participant