Skip to content

feat(core): GT-654 one /health shape, GT-655 three orphan operations bound - #433

Merged
beyondnetPeru merged 3 commits into
developfrom
feat/gt-654-655-health-envelope-and-bindings
Aug 4, 2026
Merged

feat(core): GT-654 one /health shape, GT-655 three orphan operations bound#433
beyondnetPeru merged 3 commits into
developfrom
feat/gt-654-655-health-envelope-and-bindings

Conversation

@beyondnetPeru

Copy link
Copy Markdown
Contributor

GT-654 — the decision collapsed under measurement

The row was registered as "a decision before it is work", with the caution that /health is what a Kubernetes probe reads and those are configured against today's shape.

That caution was wrong. Nothing reads the body:

Consumer What it checks
Helm livenessProbe/readinessProbe httpGet — status code only
Dockerfile HEALTHCHECK curl -f — non-2xx only
k6 smoke + average profiles r.status === 200
RoboSoft hr.ok

So all three adopt 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. 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-topology now carry bindings:

before after
Operations executed 48 51
Surface invocations 66 75
uncoveredTriangleOps 4 1

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 I had 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 — the fourth time in this wave that a reported divergence belonged to the measuring instrument rather than the product.

satellite-create stays unbound on purpose, with the reason in bindings.ts 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.

Guard Result
62-validate-health-envelope + tests ✅ 3 surfaces · 8/8
mcp-server.service jest ✅ 38/38
08-validate-tracking ✅ 653 gaps · 629/629 sections · 621 closure records
42 / 43 ✅ 75 classified · 51/51 red on the empty fixture
46-validate-derived-artifact-order ✅ fixed point
ci-runner.mjs governance ✅ 17 scripts
gitleaks dir . ✅ exit 0

🤖 Generated with Claude Code

beyondnetPeru and others added 2 commits August 4, 2026 17:20
…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>
@beyondnetPeru
beyondnetPeru requested a review from a team as a code owner August 4, 2026 22:22
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

📊 Bilingual Coverage Impact

PR Changes

  • Paired EN/ES files modified: 4
  • New EN files needing ES translation: 0

Repository Coverage

Metric Value
Total EN files 527
Total ES files 501
Paired files 0
Coverage 0%

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>
@beyondnetPeru
beyondnetPeru merged commit f793b17 into develop Aug 4, 2026
34 checks passed
@beyondnetPeru
beyondnetPeru deleted the feat/gt-654-655-health-envelope-and-bindings branch August 4, 2026 22:34
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