Repository navigation
meta: verified-apis.md as the living source of truth, and the _verify.blocked discipline #101
Description
Summary
Working instruction #1 is the project's core discipline:
"Verify before building. Every endpoint, header name, class name and policy
asset id in this document is a hypothesis until confirmed against a live org or
official docs. Nothing ships on an unverified assumption. Where verification
is pending, the code raises a clearNotImplementedErrorwith a message naming
what needs confirming — it does not guess."
docs/verified-apis.md is where that discipline lives, and
donkey_kit.core._verify.blocked() is how it is enforced in code.
Why this works
A stub that raises with a specific message is honest and greppable. A stub that
guesses produces a plausible-looking call that fails in a customer's org, weeks
later, with no indication that it was never verified.
from donkey_kit.core import _verify
async def build_plan(spec: DonkeySpec, donkey: Donkey) -> Plan:
_verify.blocked("MCP Bridge provisioning endpoints (§5, §0.3)")NotImplementedError: blocked on verification: MCP Bridge provisioning endpoints
(§5, §0.3). See docs/verified-apis.md.
Current state
docs/verified-apis.md exists with sections §1–§12 and a mix of VERIFIED,
VERIFIED (plugin) and UNVERIFIED rows. The wins so far are substantial:
- LLM proxy route, auth (
client_id/client_secretheaders, not Bearer), and
the four rejection shapes - Gateway is Flex Gateway v1.13.2,
flexGatewayAPI type - The six real policies on a governed LLM proxy, with exact versions
- Exchange first-class MCP-server and AI-agent asset types; GAV publication
- The
agent-networkCLI provisioning surface, and the REST endpoints behind it
The highest-priority remaining unknowns
| # | Unknown | Gates |
|---|---|---|
| 1 | Business-group attribution header name | every governed call, all nine adapters |
| 2 | Local Mode: can it run LLM Proxy / MCP Bridge | whether simulate() is real or mocked |
| 3 | MCP Bridge provisioning API | whether §5 is an apply engine or a generator |
| 4 | Governed-state signal for an MCP asset | governed=True filtering |
| 5 | Exchange metadata/tags, lifecycle states | digest storage, deprecation, require_lifecycle |
| 6 | Eight framework constructor signatures | 0.1.0 release |
Acceptance criteria
-
docs/verified-apis.mdexists with per-row status -
_verify.blocked()used throughout instead of guessed implementations - Every row carries a date and a source — a
VERIFIEDwith no date decays
into an assumption -
VERIFIED (plugin)distinguished fromVERIFIED (documented)everywhere, and
cross-referenced intodocs/unsupported-boundary.md - A CI check failing if any
_verify.blocked()message cites a section that no
longer has anUNVERIFIEDrow — so stubs cannot outlive their verification - A CI check failing if a new outbound host or header appears in code without a
corresponding row - Each open unknown has a GitHub issue, labelled
blocked-on-verification,
linked from the row - Re-verification cadence documented, since platform APIs move
References
docs/verified-apis.md,python/src/donkey_kit/core/_verify.py- Build plan §0, §11 working instructions 1–2, §12
Activity
amirkhan-ak-sf commentedon Sep 4, 2026
Remapped by the phase-based backlog rebuild.
verified-apis.md as living source of truth and the _verify.blocked discipline is unchanged and still central.