From cefb56defef4ae092f9c9ddb86d3064a007349f5 Mon Sep 17 00:00:00 2001 From: Mayakovsky Date: Sat, 22 Aug 2026 14:34:07 -0400 Subject: [PATCH] docs(mech-adapter): e3-g4 scoping finding -- buildMechListing() is already correct for Gnosis (BION-DIRECTIVE-122) Real scoping pass, not assumed: checked EvaluationKitEntry's real type (@grey/schemas/evaluationKit/types.ts) directly -- it carries no chain/address/network field at all, by design ("no hand-authored per-platform metadata", every channel listing renders from this one projection). MECH_OFFERING_SLUGS/mechPriceUsdFor don't vary by chain either (D-106/107's own explicit decision to reuse Base's real tool/ pricing content for Gnosis). buildMechListing() itself has zero Base-specific logic already. Same real conclusion D-63 already reached for e3-b3 itself: "already done, not a pending activation." Documented this finding directly in both files rather than writing new code that isn't needed -- any real per-chain distinction (which mech address a buyer actually pays) lives entirely in config.ts's own chain-scoped constants and the real on-chain registration, never in this render. tsc --noEmit clean, vitest run 91 passed unchanged (doc/title-only change, no behavior touched). --- adapters/mech-adapter/src/listing.ts | 11 +++++++++++ adapters/mech-adapter/test/listing.test.ts | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/adapters/mech-adapter/src/listing.ts b/adapters/mech-adapter/src/listing.ts index c552dbd..4e3db43 100644 --- a/adapters/mech-adapter/src/listing.ts +++ b/adapters/mech-adapter/src/listing.ts @@ -5,6 +5,17 @@ // EvaluationKit projection itself, so this file has to apply it, same as every channel's own // listing renderer would for its own multiplier). // +// BION-DIRECTIVE-122 (e3-g4) — real scoping finding, checked directly rather than assumed: this +// function is already chain-agnostic and already correct for Gnosis, with no changes needed. +// `MechListingEntry`/`EvaluationKitEntry` (@grey/schemas/evaluationKit/types.ts) carry no +// chain/address/network field at all — by design, the same single projection every channel +// listing (Bazaar, Kite, Olas, MCP) renders from. `MECH_OFFERING_SLUGS`/`mechPriceUsdFor` don't +// vary by chain either (D-106/107's own explicit decision: Gnosis reuses Base's real tool/pricing +// content). Same real conclusion D-63 already reached for e3-b3 itself ("already done, not a +// pending activation") — any real per-chain distinction (which mech address a buyer actually +// pays) lives entirely in config.ts's own chain-scoped constants and the real on-chain +// registration, never in this render. +// // Scope note (read before wiring this into an actual on-chain publish step): this produces the // EvaluationKit-shaped listing data — branding, schemas, sample, mech-resolved price. It does NOT // publish anything on-chain. Research during e3-b1/b3 found the Mech Marketplace's off-chain diff --git a/adapters/mech-adapter/test/listing.test.ts b/adapters/mech-adapter/test/listing.test.ts index 1dbafee..af6f88a 100644 --- a/adapters/mech-adapter/test/listing.test.ts +++ b/adapters/mech-adapter/test/listing.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect } from 'vitest'; import { buildMechListing } from '../src/listing.js'; import { MECH_OFFERING_SLUGS } from '../src/prices.js'; -describe('buildMechListing — e3-b3 EvaluationKit render (Base)', () => { +describe('buildMechListing — e3-b3/e3-g4 EvaluationKit render (chain-agnostic — no Base/Gnosis-specific data anywhere in this render, see listing.ts\'s own file header)', () => { const listing = buildMechListing(); it('renders exactly the two real mech offerings, in MECH_OFFERING_SLUGS order (BION-DIRECTIVE-62: daily_tech_brief excluded)', () => {