feat(core): GT-654 one /health shape, GT-655 three orphan operations bound - #433
Merged
beyondnetPeru merged 3 commits intoAug 4, 2026
Merged
Conversation
…han operations get bound GT-654. The three services of one product answered /health in three shapes, and the verdict literal differed in case as well. The row was registered as a decision — and measuring it collapsed the decision: NOTHING reads the body. Helm probes use httpGet, the Dockerfiles use `curl -f`, k6 checks `r.status === 200`, RoboSoft checks `hr.ok`. The caution the row carried, "the probes are configured against a shape", was wrong. All three now emit the ADR-0073 envelope with `OK`. mcp routes its three probes through `success()` from `common/envelopes` — the helper every tool result on that surface already used, with only health outside it. agent-runtime builds the envelope in its controller. core-api was already enveloped by its global interceptor. Guard 62 keeps a fourth shape from landing, with 8 unit tests, watched failing on a bare object, a missing schemaVersion, and a lowercase verdict inside an otherwise correct envelope. Its first version scanned raw text and flagged the handler's own header, which documents the shape it replaced — the second time this wave a guard fired on its own documentation, so comments are stripped and a test pins it. GT-655. `pattern-list`, `pattern-get` and `pattern-list-by-topology` are declared on all three surfaces and were invoked by nothing; they now carry bindings. Executed operations 48 -> 51, surface invocations 66 -> 75, and `uncoveredTriangleOps` drops from four entries to one. Binding them reported two divergences and BOTH were the instrument: the first run had `pattern-get` failing on all three surfaces with three different error codes and `pattern-list-by-topology` disagreeing with MCP. Both were defects in the bindings just written — `cqrs` is not a pattern id (they are `PAT-0001`…) and the MCP tool takes `topology`, not `topologyId`. Corrected against the real catalog and the real tool schema, the suite reports zero findings. Fourth time in this wave that a reported divergence belonged to the measuring instrument. `satellite-create` stays unbound ON PURPOSE, with the reason where the next reader looks: it provisions a live GitHub repository and writes the local registry, so binding it as-is would have CI create real repositories on every run — a test that damages the world it measures. `uncoveredTriangleOps` keeps listing it rather than the exemption being silent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Closure records stamped with the commit that carries the change, plus the derived chain regenerated: maturity reconciled, executive summary at a fixed point, and the E2E scenario board re-rendered — it now shows one uncovered operation instead of four, and zero findings. Both rows carry what the wave taught rather than only what it did: GT-654 records that the caution it was registered with was wrong. Measuring who reads /health turned an open decision into a forced one — nothing reads the body, so unifying on the envelope broke no consumer. GT-655 records that binding three orphan operations produced two divergences that were both defects in the bindings themselves, and that `satellite-create` stays exempt with its reason in `bindings.ts` rather than silently absent. Board 637 -> 639 done, 6 -> 4 pending, both languages. Guards: 08 (653 gaps, 629/629 sections, 621 closure records), 42 (75 classified), 43 (51/51 red on the empty fixture), 46 fixed point, governance 17/17. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
✅ Good: All EN changes have ES counterparts. Generated by GitHub Actions |
…e path that cannot resolve Two failures, both mine, both the kind a local green cannot show. The claim "nothing reads the /health body" was checked against the Helm probes, the Dockerfiles, k6 and RoboSoft — and missed `src/sdk/cli/examples/mcp-test.js`, which asserted a bare `body.status === 'ok'`. CI failed with exactly that: `/health: body.status was undefined`. The decision stands, because a test asserting a shape is what gets updated when the shape changes deliberately, and it now asserts `data.status === 'OK'` plus `success === true`. What does not stand is the strength of the claim, so the catalog now says "almost nothing" and names both consumers, including the one this survey missed. GT-655's closure listed `src/tests/exploration/.out/coverage.json` as evidence. That path is GITIGNORED — it exists on this laptop and in no clean checkout, so `08-validate-tracking` failed on a fresh runner while passing here. Evidence is now the tracked `bindings.ts` and the parity matrix; the coverage numbers stay checkable because the validationCommand regenerates the file and then asserts 51 executed and one uncovered. That is the second time this session a local green came from gitignored state, and it is written in this repository's own feedback that it would. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
GT-654 — the decision collapsed under measurement
The row was registered as "a decision before it is work", with the caution that
/healthis what a Kubernetes probe reads and those are configured against today's shape.That caution was wrong. Nothing reads the body:
livenessProbe/readinessProbehttpGet— status code onlyHEALTHCHECKcurl -f— non-2xx onlyr.status === 200hr.okSo all three adopt the ADR-0073 envelope with
OK.mcproutes its three probes throughsuccess()fromcommon/envelopes— the helper every tool result on that surface already used, with only health outside it.agent-runtimebuilds the envelope in its controller.core-apiwas already enveloped by its global interceptor.Guard 62 keeps a fourth shape from landing. 8 unit tests, watched failing on a bare object, on a missing
schemaVersion, and on a lowercase verdict inside an otherwise correct envelope. Its first version scanned raw text and flagged the handler's own header — the second time this wave a guard fired on its own documentation, so comments are stripped and a test pins it.GT-655 — three bound, one exempt with its reason
pattern-list,pattern-get,pattern-list-by-topologynow carry bindings:uncoveredTriangleOpsBinding them reported two divergences and both were the instrument. The first run had
pattern-getfailing on all three surfaces with three different error codes, andpattern-list-by-topologydisagreeing with MCP. Both were defects in the bindings I had just written:cqrsis not a pattern id (they arePAT-0001…) and the MCP tool takestopology, nottopologyId. Corrected against the real catalog and the real tool schema, the suite reports zero findings — the fourth time in this wave that a reported divergence belonged to the measuring instrument rather than the product.satellite-createstays unbound on purpose, with the reason inbindings.tswhere the next reader looks: it provisions a live GitHub repository and writes the local registry, so binding it as-is would have CI create real repositories on every run — a test that damages the world it measures.uncoveredTriangleOpskeeps listing it rather than the exemption being silent.62-validate-health-envelope+ testsmcp-server.servicejest08-validate-tracking42/4346-validate-derived-artifact-orderci-runner.mjs governancegitleaks dir .🤖 Generated with Claude Code