From 449e480d664c4975e2ef5c009865a4b2e05e1987 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 00:38:29 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs(promotions):=20P0002=20=E2=80=94=20add?= =?UTF-8?q?=20AMS=20hosted=20/mcp=20wrapper=20as=20sixth=20evidence=20row?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hosted /mcp wrapper landed in agent-messaging-service PR #33 (D0023) on 2026-05-04 as 1003 lines of handrolled JSON-RPC dispatch with zero MCP SDK dependencies — directly contradicting the binding journal Constraint row at journal/2026-05-03-day3-mcp-sdk-migration.tsv that named Cloudflare agents/mcp McpAgent for this exact endpoint. This is the sixth occurrence of the failure pattern this promotion documents, the second within agent-messaging-service (the AMS *wire* layer remains correctly framed as the inspected-and-rejected success case; the AMS *wrapper* layer is the new failure at finer altitude). Updates: - Failure table: adds row #6 (agent-messaging-service hosted /mcp wrapper) - Failure totals: 5 -> 6 - Success table: AMS row clarified as 'wire layer' to disambiguate from the new failure at the wrapper layer - Operator-cost line: 5 -> 6 explanatory conversations - Current-handling result-statement: notes the recurrence inside AMS itself three days after the promotion landed - Operator note: adds Recurrence update 2026-05-05 explaining that proposal-without-execution does not bind a fresh agent session, and that an AMS-local manifestation of the constraint has been landed at ams://canon/constraints/mcp-build-side-governance pending upstream canon execution Per AGENTS.md, this PR modifies docs/ only — canon remains untouched. The three coordinated canon edits this promotion proposes (Edit 1: Bide as 6th B in canon/methods/borrow-bend-break-beget-build; Edit 2: create canon/constraints/borrow-evaluation-before-implementation; Edit 3: add bootstrap bullet to canon/bootstrap/model-operating-contract) remain operator-pending. Their execution is the load-bearing prevention for the next *new* MCP server project; this PR's scope is correcting the empirical record on this promotion artifact. --- ...2-borrow-evaluation-before-implementation.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/promotions/P0002-borrow-evaluation-before-implementation.md b/docs/promotions/P0002-borrow-evaluation-before-implementation.md index 9924474..8a44eee 100644 --- a/docs/promotions/P0002-borrow-evaluation-before-implementation.md +++ b/docs/promotions/P0002-borrow-evaluation-before-implementation.md @@ -43,16 +43,19 @@ This promotion canonizes all of the above so the agent's evaluation can reproduc | Project: aquifer-mcp | 2026 | FAIL (handrolled transport) | Custom server framing reinvented | | Project: ptxprint-mcp | 2026 | FAIL (handrolled transport) | Same pattern recurred | | Project: app-builder-mcp | 2026 | FAIL (handrolled transport) | Same pattern recurred | +| Project: agent-messaging-service — hosted `/mcp` wrapper (PR #33, D0023) | 2026-05-04 | FAIL (handrolled transport) | `worker/src/mcp.ts` shipped 1003 lines of hand-implemented Streamable HTTP + JSON-RPC dispatch + initialize handshake + tools/list / tools/call dispatch + notifications, with zero MCP SDK dependencies. Direct contradiction of the binding journal Constraint row at `journal/2026-05-03-day3-mcp-sdk-migration.tsv` which named Cloudflare `agents/mcp` McpAgent for this exact endpoint. Distinct altitude from the AMS-wire success case below — same project, different layer. | -**Total failure observations**: 5 -**Independent occurrences**: 5 (distinct repositories, distinct sessions, distinct project goals) +**Total failure observations**: 6 +**Independent occurrences**: 6 (distinct repositories OR distinct layers within a repository, distinct sessions, distinct project goals) + +**Recurrence note (added 2026-05-05):** The sixth failure landed three days after this promotion artifact was opened, while the three coordinated canon edits this artifact proposes remained `proposed` and unexecuted. The next session's preflight did not surface the rule because the rule does not yet exist in canon — only in this proposal. The recurrence is itself evidence for accelerating the canon-execution step that this promotion's `Edit 1` / `Edit 2` / `Edit 3` describe; an AMS-local manifestation of the constraint has been landed at `ams://canon/constraints/mcp-build-side-governance` to bind future MCP wrapper work in that one repository pending upstream canon execution. ### Success cases — both outcomes of the Bide fork | Project | Period | 6B Resolution Path | Notes | | -------------------------------- | ------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------- | | oddkit (write layer) | Jan–Feb 2026 | `Bide → inspected-and-adopted` | Specific bet: connector-style integrations would mature into native connectors across major AI tools (GitHub MCP server). Manual fallback: humans as the wire/bus during the wait. Field caught up; adopted; Build = `none` | -| agent-messaging-service | 2026 | `Borrow → Bend → Break → Bide → inspected-and-rejected → Build = minimal` | Used connectors (Borrow); bent them; observed gaps (Break); waited for those specific gaps to close; inspection found persistent gaps + opinionated stack imposition + improper authority + foundational gap; Build was correct by exclusion | +| agent-messaging-service — wire layer | 2026 | `Borrow → Bend → Break → Bide → inspected-and-rejected → Build = minimal` | Used connectors (Borrow); bent them; observed gaps (Break); waited for those specific gaps to close; inspection found persistent gaps + opinionated stack imposition + improper authority + foundational gap; Build was correct by exclusion. Note: scoped to the AMS *wire* (the dumb-pipe broker substrate). The AMS *wrapper* layer failed the rule independently — see failure row #6 above. The pattern recurs at finer altitudes; the wire's correct Bide outcome did not propagate to the wrapper above it. | **Total success cases**: 2 **Significance:** The success cases are not edge cases or fallback paths. They are the existing operator discipline that this promotion is canonizing. Both `inspected-and-adopted` (oddkit) and `inspected-and-rejected → Build` (AMS) are success outcomes of the same disciplined Bide fork, resolved correctly to different answers based on what the field actually produced and how it inspected against the vision. Treating one as the "main" path and the other as a "fallback" misframes the rule. @@ -63,7 +66,7 @@ All implementation tasks where a maintained upstream substrate exists, OR where ### Operator cost -Five explanatory conversations for the failure cases, plus the unmeasured but real cost of carrying the discernment work alone for the success cases (the Bide inspection criteria and reversibility considerations currently live only in operator judgment). +Six explanatory conversations for the failure cases (the sixth on 2026-05-05, escalating during the recurrence inside agent-messaging-service itself), plus the unmeasured but real cost of carrying the discernment work alone for the success cases (the Bide inspection criteria and reversibility considerations currently live only in operator judgment). ## Current Handling @@ -76,7 +79,7 @@ There is no operational guard. Canon already covers the principle: But none of these get *operationally surfaced* at the planning step where the agent decides what to implement. The 5B method is meta — read once at the strategic layer and not re-evaluated per task. Preflight returns constraints but does not require a Borrow inventory. Mode discipline frames *where* questions belong but not *which* questions are mandatory. Bide — including its inspection criteria — is not in the method at all. Reversibility is not in canon at all. -The result: the rule is honored on principle and violated in execution, while the inspection discipline and reversibility reasoning that distinguishes legitimate Build (AMS) from sloppy Build (the five MCP servers) live only in operator judgment. +The result: the rule is honored on principle and violated in execution, while the inspection discipline and reversibility reasoning that distinguishes legitimate Build (AMS-wire) from sloppy Build (the six MCP server / wrapper handrolls) live only in operator judgment. The 2026-05-04 recurrence inside AMS itself — at the wrapper layer, three days after this promotion landed and one day after the day-3 journal Constraint row named the SDK explicitly — is the strongest evidence that proposal-without-execution does not bind a fresh agent session. The proposal must reach `executed` status for the rule to do its job. ## Proposed Promotion @@ -186,6 +189,8 @@ Full proposed text is staged at `canon/bootstrap/model-operating-contract.diff.m This artifact exists because the operator surfaced the recurrence of the handroll failure on the fifth occurrence (escalated during the sixth project, agent-messaging-service), framed the rationale in *The Goal* / theory-of-constraints terms, named the missing step (Bide) by describing the oddkit-write-layer proof case (with its specific bet on connector-pattern maturity and humans as the manual wire/bus during the wait), corrected the framing of agent-messaging-service from "sixth failure" to "worked example of the `Borrow → Bend → Break → Bide → inspected-and-rejected → Build = minimal` path", surfaced the inspection criteria (vision conflict, foundational gap, gross overcomplication, opinionated stack imposition, improper authority), and introduced reversibility as a load-bearing planning-time criterion that varies per application. -By the rules of `klappy://docs/promotions` § "Promotion Review Triggers," this satisfies *Repeated validation failures* (≥2) by a wide margin (5) and *Rules require explanation* (the 5B method exists but isn't operationally crisp at the agent's planning-to-execution boundary, lacks the Bide step entirely, has no vocabulary for the inspection criteria the operator already applies in practice, and has no treatment of reversibility cost). +By the rules of `klappy://docs/promotions` § "Promotion Review Triggers," this satisfies *Repeated validation failures* (≥2) by a wide margin (now 6, with the AMS hosted `/mcp` wrapper added 2026-05-05 as the sixth) and *Rules require explanation* (the 5B method exists but isn't operationally crisp at the agent's planning-to-execution boundary, lacks the Bide step entirely, has no vocabulary for the inspection criteria the operator already applies in practice, and has no treatment of reversibility cost). + +**Recurrence update — 2026-05-05.** The original artifact framed agent-messaging-service as "worked example of the `Borrow → Bend → Break → Bide → inspected-and-rejected → Build = minimal` path" — and that framing remains correct *for the AMS wire layer*. However, on 2026-05-04 the same project shipped its hosted `/mcp` wrapper (PR #33, D0023) at the layer above the wire, and that wrapper is 1003 lines of handrolled JSON-RPC dispatch with no MCP SDK dependency — directly contradicting the binding journal Constraint row dated 2026-05-03 that named Cloudflare `agents/mcp` McpAgent for this exact endpoint. The pattern recurred at finer altitude inside a project that had correctly applied the rule at coarser altitude. This is the sharpest possible evidence that proposal-without-execution does not bind a fresh agent session: P0002 was on disk three days, the day-3 journal Constraint row was on disk one day, the highest-altitude SPEC §11 still defaulted the next agent to handroll, and the next agent followed SPEC. An AMS-local manifestation of the rule has been landed at `ams://canon/constraints/mcp-build-side-governance` (and the contradicting SPEC §11 line patched) to bind the next AMS MCP wrapper session pending upstream canon execution. The upstream canon execution — Edits 1, 2, 3 of this promotion — remains the load-bearing prevention for the next *new* MCP server project. Per `docs/promotions/README.md` and `AGENTS.md`, agents propose; humans decide; canon is read-only to agents. This is a proposal. The drafted constraint doc and diff documents for the method and bootstrap are delivered alongside this promotion as working drafts so review has the actual proposed text — not just descriptions — and so execution after acceptance is a copy/paste operation, not a re-derivation. From 9a7defd38208e6afb62257de261a202900e08053 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 00:45:31 +0000 Subject: [PATCH 2/2] =?UTF-8?q?docs(promotions):=20P0002=20=E2=80=94=20fli?= =?UTF-8?q?p=20status=20proposed=20->=20accepted=20(operator=20decision)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Records the operator's acceptance decision made 2026-05-05 during the recurrence-escalation conversation immediately following verification that agent-messaging-service PR #33 (D0023, 2026-05-04) shipped the hosted /mcp wrapper as 1003 lines of handrolled JSON-RPC dispatch with no MCP SDK dependency — the sixth occurrence of the pattern, and the second within AMS itself. Per docs/promotions/README.md status vocabulary: - proposed: evidence gathered, awaiting review - accepted: approved for promotion to Canon - executed: canon has been updated with backlink to this doc This commit moves proposed -> accepted only. Per klappy.dev/AGENTS.md 'Canon is read-only', the three coordinated canon edits this promotion proposes (Bide as 6th B in canon/methods/borrow-bend-break-beget-build, canon/constraints/borrow-evaluation-before-implementation, bootstrap bullet in canon/bootstrap/model-operating-contract) remain operator- pending. Acceptance does not imply execution; the Execution Record section is left for operator commits to fill. Per docs/promotions/README.md 'Why Humans, Not Agents': agents do not decide what becomes canon. The decision was made by the operator; this commit records it. --- ...borrow-evaluation-before-implementation.md | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/promotions/P0002-borrow-evaluation-before-implementation.md b/docs/promotions/P0002-borrow-evaluation-before-implementation.md index 8a44eee..5039450 100644 --- a/docs/promotions/P0002-borrow-evaluation-before-implementation.md +++ b/docs/promotions/P0002-borrow-evaluation-before-implementation.md @@ -7,7 +7,7 @@ tier: 3 voice: neutral stability: evolving tags: ["promotions", "proposed", "6B", "borrow", "bide", "build", "preflight", "planning", "agent-execution", "theory-of-constraints", "ai-collaboration", "vision-fit", "reversibility"] -promotion_status: proposed +promotion_status: accepted --- # P0002: Promote a Planning-Mode Borrow Evaluation as Agent-Binding Governance, Add Bide as the Sixth B, and Surface Reversibility @@ -159,23 +159,21 @@ Full proposed text is staged at `canon/bootstrap/model-operating-contract.diff.m ## Status -`proposed` +`accepted` (2026-05-05) ## Review Notes -(To be filled during review) - -- **Reviewer**: -- **Decision**: -- **Date**: -- **Notes**: -- **Naming decision (Bide / other)**: -- **Inspection criteria — additions or refinements**: -- **Reversibility format — keep "forward | backward" or refine**: +- **Reviewer**: klappy (operator) +- **Decision**: `accepted` +- **Date**: 2026-05-05 +- **Notes**: Decision recorded during the recurrence-escalation conversation immediately following verification that agent-messaging-service PR #33 (D0023, 2026-05-04) shipped the hosted `/mcp` wrapper as 1003 lines of handrolled JSON-RPC dispatch with no MCP SDK dependency — the sixth occurrence of the pattern this promotion documents, and the second within agent-messaging-service (at the wrapper layer; the wire layer remains correctly framed as the `inspected-and-rejected → Build = minimal` success case). The recurrence inside a project where the day-3 journal Constraint row had explicitly named the SDK one day prior is the empirical disproof of "proposal alone is sufficient" and the empirical proof that the three coordinated canon edits this promotion proposes must reach `executed` to bind future fresh agent sessions on new MCP server projects. +- **Naming decision (Bide / other)**: Bide retained — operator's coinage; semantics, position, three resolution paths, inspection criteria, and reversibility treatment are the load-bearing parts and are unchanged. +- **Inspection criteria — additions or refinements**: None this round. The six criteria (vision conflict, foundational gap, gross overcomplication, opinionated stack imposition, improper authority, persistent gap after multiple field iterations) cover the AMS-wrapper failure case under "improper authority" (the agent extended SPEC §11's stale default beyond its proper scope) and "persistent gap" (the day-3 journal Constraint row was on disk; the executing session did not surface it). Both criteria already existed; no additions needed. +- **Reversibility format — keep "forward | backward" or refine**: Keep. The format proved useful in the AMS-local manifestation (`ams://canon/constraints/mcp-build-side-governance`) where reversibility is named explicitly as a one-line section. ## Execution Record -(To be filled after acceptance, executed by operator per `AGENTS.md` canon-read-only rule) +(To be filled by operator per `AGENTS.md` canon-read-only rule. Acceptance does not imply execution; the three coordinated canon edits are still pending operator commits.) - **Commit**: - **Method doc updated (Edit 1)**: `canon/methods/borrow-bend-break-beget-build.md` (consider rename to `borrow-bend-break-beget-bide-build`)