Repository navigation
Description
Relocated from dezren39/darwin-nix#145 on 2026-10-28 (placement audit): mcpx's single source lives in developing-today/code (pkgs/mcpx); re-home tracked at #309. Original body below; issue references inside it are historical (dezren39/nix numbering).
Parent: #96
Summary
Implement the generated reference as #144 recommends (Approach C). Existing commands gain markdown formats. The renderers sit next to the renderers that already exist (Describe, JSON, OpenAPI, ManPage). Tables that live in committed docs are regenerated in place between markers and guarded by a golden test. Site-only pages are generated at build and never committed.
This issue was added by the architect. The user's notes have no "generated reference" bullet. It exists so the pages the notes ask for ("env vars", "cli arguments", "cli commands", "mcp compatibility", "/v1") and the compendium's reference sections cannot drift from the binary. #144 records that docs/parity.md has already drifted: 27 of 60 ops have no row.
If #144 picks a different approach, rewrite this issue before starting.
Original notes
- documentation
- make a book using whatever is the most common and simple modern choice
- 3 main things, not book sections jsut like levels of detail-
- the 'ok i just installed this thing what even is it' layer
- a page or section in a page for
- env vars
- cli
- cli arguments
- cli commands
- mcp
- mcp compatibility
- /v1
- the compendium
- basically everything that is built can be described here in as much detail as you want. you don't need to hold back it's an encyclopedia
Current state
See #144 "Current state" for the full inventory with file references. In short, from pkgs/mcpx/ on main (line numbers re-cited at 05c78b2 in the 2026-09-30 issues pass):
- Settings. The "Every setting" table in
docs/configuration.md:149-474was produced by a generator that is not in the tree.internal/settings/docs_test.go:19-48checks only that each path andMCPX_*name appears. - Commands.
internal/cli/manual.go:33Commands()has 32 entries. Dispatch (cmd/mcpx/main.go:119-162) also hasserve,adapter,registry,openapi,api,manandcompletion.- Top-level help is a hand-written const (
internal/cli/root.go:549-611). - Global flags are a
switch(main.go:62-104). - 130 per-command flags are hand-declared (118
x := fs.*plus 12fs.Var), all throughnewFlagSet(root.go:34) and thenparseFlags(root.go:52).
- /v1.
api.Ops()(60 ops) →api.OpenAPI(internal/api/openapi.go:18).GET /v1/openapi.jsonadds live upstream tool paths (internal/daemon/ops.go:498-535). - Parity.
internal/api/parity_test.gochecks code only and never readsdocs/parity.md. - Protocol.
internal/mcpserver/revisions.go:292-316(Features,FeatureMatrix),server.go:778(Supported),server.go:1389(capabilities(version, conn), a method on*Server; since Phase 2: delegated Manage cannot add members #171 it depends on whether the connection can push, and no longer declareslogging). - Man page. It stamps
time.Now()(manual.go:335). - Nix build.
package.nix:88-94writes the man page and completions.checkPhase(package.nix:73-81) does not include./internal/api/or./internal/cli/.
Plan
The steps are ordered, and each can be its own commit. File paths are relative to pkgs/mcpx/.
0. Prerequisites: bug candidates from #144, land these first
These are not docs work, but publishing before they land publishes the bugs.
- Complete the command table. Move the dispatch map from
cmd/mcpx/main.go:119-162intointernal/cli, either as aRunfield onCommandor as aHandlers(*App)map. Add a test that every dispatched name is aCommands()name or alias. Declarelogsas an alias oflog. - Generate top-level help from
Commands(). Replace the constusage(root.go:549-611), keeping its intro paragraph and the CONCURRENCY and EXAMPLES blocks as text. The CONCURRENCY block (:597-604) teaches the removedmodekey and a nonexistentpooledvalue, so rewrite it tosharing/scoperather than keep it verbatim (Root flake check fails on nixosConfigurations due to missing clan-core.clanModules #159 item 2). Choose one set of groups (🎨 Palette: Improve accessibility of editor search panel #144 open question 6). - Make global flags data. Add
GlobalFlags() []GlobalFlaginmanual.go, and parse them in acli.ParseGlobal(app, args)thatmain.gocalls, so the parser, help and docs read one list. - Settle the acronym names before first publication:
daemon.leaseTTL,proto.askTTL,proto.serveMCPandproto.stateTTL(configuration.md:216,:403,:407,:409). Eitherdashed()(internal/settings/schema.go:227-243) treats a capital run as one word, or those four get explicitFlag/Envvalues with the current spellings kept asFlagAliases/EnvAliasesso nothing breaks. - Deterministic man date. Use
SOURCE_DATE_EPOCHwhen set (manual.go:335). nixpkgs stdenv sets it (1980-01-01 unless the source provides one), so the Nix man page will show that date. A release-stamped date from amd host fails at evaluation: no outputHashes for p2panda-core-0.7.1 #158 / 🎨 Palette: Add ARIA labels and live regions to search panel #150 is the better long-term answer.
1. A markdown helper package
internal/refdoc/md.go is a leaf package with no mcpx imports. It provides:
Table(headers []string, rows [][]string) string, escaping|and newlines in cellsCode(s), with backtick-safe fencingRegion(name, body), which wraps a body in<!-- ANCHOR: name -->…<!-- ANCHOR_END: name -->
mdBook strips any line containing ANCHOR: from an include, and GitHub hides HTML comments. So one file serves {{#include settings.md:daemon}} and still reads cleanly raw (#117, #120). The output must contain no generator syntax.
2. Settings
- Renderer.
func (s *Schema) Markdown(opts MarkdownOptions) stringininternal/settings/file.go, next toDescribe(:175) andJSON(:219).- One
### <section>per top-level key, each wrapped inrefdoc.Region(section, ...). - Keep today's columns (setting, kind, default, scope, hot, flag, variable, governs), so the first regeneration's diff shows only real drift. Render an empty default always as
*(empty)*;configuration.md:166currently renders it inconsistently. - Mark plumbing rows
*(plumbing)*as today. List enum values. opts.Longadds a definition list under each table with each setting'sLongparagraph, for the site page. The committed table stays compact.
- One
- Schema JSON. Add
scopeandhottoSchema.JSON(file.go:219-252).docs/configuration.md:152already claimsconfig --schemaprints the same thing. - Command.
mcpx config --schemagains--format text|json|markdown(CmdConfig,root.go:296-379), with--jsonkept as--format json.
3. Commands and global flags
-
Capturing hand-declared flags.
parseFlags(root.go:52-67) gets a describe mode. While a package-leveldescribing *flagCatalogis non-nil, it:- binds the registry flags as today;
- records
fs.VisitAllinto the catalog underflagSetCommand[fs]; - returns
errDescribedbefore any work.
ManualMarkdowncalls every handler with describe mode on and empty args. This works because every command already builds its flags throughnewFlagSetbefore side effects. Commands without flags (help,completion) record nothing.- Guard: a test that every handler returns
errDescribed(or no flag set at all) within a short timeout and without touching the network or the daemon. A command that does work beforeparseFlagsfails that test and must be reordered. - Subcommands:
settingsbuilds four flag sets all named"settings", andserverstwo named"servers". They need distinct names, such as"settings set", matchinglog sqlandlog record, which already do this. They also need describe-mode entry, either through aSub []CommandonCommand(🎨 Palette: Improve accessibility of editor search panel #144 open question 4) or by calling each handler with each subcommand name asargs[0].
-
Flag rows. Each row has name and aliases, value type, default (
fs.Lookup(name).DefValue) and usage. The source column says either "settingx.y(scope, hot)", linking to the settings page, or "this command". A hand-written flag that shadows a registry alias (mcpx daemon --log-level,root.go:105) is shown as the command's own, so the page states what actually happens. -
Renderer.
internal/cli/manual_md.go:ManualMarkdown(version string) map[string]string, mapping a relative path to its content. It writes:Path Content cli/index.mdThe commands grouped with the man page's titles ( manual.go:354-360, lifted to a shared var)cli/global-flags.mdThe global flags cli/<name>.mdOne page per command: usage, summary, aliases, detail, examples, flags settings.mdFrom Schema.MarkdownwithLongapi.md,mcp-tools.md,protocol.md,parity.mdSteps 4-7 SUMMARY.mdA fragment listing the pages above, which the docs build splices into the book's SUMMARY.md. mdBook renders only pages listed there. -
Command.
mcpx man(CmdMan,root.go:255-276) gains--format roff|markdown(defaultroff) and-o DIR. With--format markdown -o DIRit writes the tree. With--format markdownand no-oit prints every page concatenated inSUMMARYorder. That servesmcpx man --format markdown | lessand thellms-full.txtinput for Update module github.com/jackc/pgx/v5 to v5.9.2 [SECURITY] #120.No new command is added.
manis "the manual", and the markdown form is the whole reference, of which roff is the terminal subset.
4. /v1
- Renderer.
func Markdown(version string) stringininternal/api/openapi.go, next toOpenAPI. It works fromOps()directly, not from the OpenAPI map, so thatToolName()/CoveredBy,Admin,Mutating,Destructive,StreamsandTextsurvive. - Layout.
- Group ops by the first path segment after
/v1/.Ophas no group field; if the result reads badly, add aTag. - Per op: a
### METHOD /pathheading, summary, description, a parameters table (name, in, type, required, enum, description) and a flags line (admin, mutating, destructive, streams). - State that responses are untyped (all
{"type":"object"},openapi.go:110) rather than implying a schema.
- Group ops by the first path segment after
- Raw specs. Publish both, statically. The static
api.OpenAPI(version)goes on the site asreference/v1-openapi.json, emitted byManualMarkdownor bymcpx openapi --surface daemonif 🎨 Palette: Improve accessibility of editor search panel #144 wants that flag.mcpx openapioutput goes asreference/serve-openapi.json. Never fetchGET /v1/openapi.jsonfrom a running daemon: it carries the builder's configured tools (daemon/ops.go:498-535).
5. MCP tools mcpx serves
In manual_md.go: mcpserver.New(nil, "mcpx", version).WithExtras(mcpserver.OpTools(nil)).Tools(), the construction parity_test.go:90 already uses. Each tool gets name, description, annotations (readOnlyHint, destructiveHint) and a parameter table from the top level of InputSchema. Proxied tools link to their /v1 op.
6. Protocol tables
- Extract
capabilities(mcpserver/server.go:1389-1420) into a pureDeclaredCapabilities(version string, push bool) map[string]any. The method then calls it withs.Notify != nil && c != nil && c.canPush(), the per-connection condition Phase 2: delegated Manage cannot add members #171 introduced. func ProtocolMarkdown() stringininternal/mcpserver/revisions.gorenders two regions:features: theFeatures×Supportedtable fromFeatureMatrix(). This is new; it is what the code consults.capabilities:DeclaredCapabilities(v, true)perSupportedversion, replacingdocs/protocol.md§2.2. A footnote states the push condition: the connection must be able to push, which HTTP connections cannot. The committed §2.2 still listslogging, which Phase 2: delegated Manage cannot add members #171 withdrew (Root flake check fails on nixosConfigurations due to missing clan-core.clanModules #159 item 18), so the first regeneration fixes a real error.docs/protocol.mdis PROTOCOL's file; coordinate the marker migration with whoever owns it then.
- §1 (the revisions, eras and upstream defaults) and §2.1 (methods) stay hand-written, because the switch at
server.go:504-765is not data. Add a presence test that everySupportedversion has a §1 row and everycasemethod string inserver.gohas a §2.1 row, using the same source-regex technique asparity_test.go:21.
7. Parity table
-
Add two fields to
api.Op, next to each op's declaration:CLI []string: the commands that reach it, e.g.{"status"}or{"elicit answer"}.Plugin string: theDaemonClientmethod name, e.g.alive.
Tests check that every
CLIentry resolves inCommands()(after step 0.1) and that everyPluginname matches^\s*(async\s+)?<name>\(inplugin/opencode/mcpx/daemon.ts. This is the column Update Rust crate clap to 4.5.4 - autoclosed #76 wants to generate from as well. -
The renderer produces the
/v1table: Operation, Route, CLI, MCP tool, Plugin, and Notes derived fromStreams/Admin/CoveredBy. -
The "CLI commands" table (
parity.md:71-111) and "Known gaps" stay hand-written for now. The CLI table can be generated later by invertingOp.CLI, but its local-only rows (init,runof a named script) need a reason field. -
The 27 missing ops get rows on the first regeneration. Each needs
CLI/Pluginfilled in, or explicitly empty. SURFACES is changingdocs/parity.mdfor Update Rust crate clap to 4.5.4 - autoclosed #76 now; whatever rows it adds by hand are replaced by the generated region when this lands. -
Owns Phase 3: sync, blob gate, and relays #181 collision 18: an absent row is a failure, not a gap. Today
docs/parity.mdcannot tell a known gap from a missing row, because its## Known gapsprose covers only the 33 documented ops. The rule here:- The generated region has exactly one row per
Ops()entry, so a row cannot be absent without the golden comparison (step 8) failing. A separate presence assertion names the missing op in the failure, rather than printing only a byte diff. - A known gap is always a row with an explicit value: an empty
CLIrenders as—plus a reason taken from aCLIGap stringfield (or equivalent) on the op, never as a missing row. An op with an emptyCLIand no reason fails the test. - The hand-written
## Known gapsprose may only name ops that have a row. A test checks each backticked op name in that section againstOps().
The page's content (which reasons, which columns) belongs to whoever regenerates it (Update Rust crate clap to 4.5.4 - autoclosed #76, 🎨 Palette: Improve accessibility of editor search panel #144). This issue owns the check.
- The generated region has exactly one row per
8. Committed docs: marker regions and the golden test
-
Marker format. Each generated region in a committed file is bracketed like this:
<!-- mcpx:generated settings (go test ./internal/refdoc -update) --> ... <!-- /mcpx:generated -->Everything outside the markers stays hand-written.
-
Regions.
File Generated Stays hand-written docs/configuration.mdThe section tables, :160to the endThe prose ( :1-148) and the "Every setting" intro (:151-158). Fix the intro's claim to match what is now true.docs/parity.mdThe /v1table (:29-63)docs/protocol.mdThe §2.2 table ( :98-106), plus the new features table after §1 -
Golden test.
internal/refdoc/regions_test.go(packagerefdoc_test, which importssettings,api,mcpserverandcli, so there is no import cycle):- For each (file, region, renderer): read the file, extract the region, render, and compare.
- On mismatch it prints a short diff and
go test ./internal/refdoc -update. - With
-updateit rewrites only the bytes between the markers. - It fails on a missing or duplicated marker, so a region cannot be deleted silently.
- Also add a
//go:generate go test -run TestGeneratedRegions -update .directive ininternal/refdoc/doc.go, sogo generate ./...works too.
-
internal/settings/docs_test.go.- Delete
TestTheDocumentationListsEverySetting(:19-48). Byte equality of the region implies presence and also covers kind, default, scope, hot, flags, aliases and description. - Keep
TestTheDocumentationDescribesTheScopes(:52-65). It checks prose outside the region, which the golden test does not cover.
- Delete
-
Determinism. A test renders
ManualMarkdowntwice and requires identical output, and requires the same output withMCPX_*variables set. The emitters read declarations, never resolved values. Map iteration anywhere in a renderer must be sorted.
9. Build wiring
package.nix.checkPhase(:73-81): add./internal/refdoc/and./internal/api/, sonix build .#mcpxenforces the goldens and parity, not only CI'sgo test ./...(.github/workflows/mcpx.yml:65). Confirm that neither spawns runtimes or binds sockets: the sandbox cannot, as the comment atpackage.nix:69-71says.postInstall(:84-94): after the man page, add$out/bin/mcpx man --format markdown -o $out/share/doc/mcpx/reference, and copy the two OpenAPI JSON files there. Nix users then get offline docs, and the docs derivation can use them without rebuilding mcpx.- Man date as in step 0.5.
- Docs derivation (fix(deps): update github.com/charmbracelet/ssh digest to ebfa259 - autoclosed #118).
.#mcpx-docscopies${mcpx}/share/doc/mcpx/referenceinto the book'ssrc/reference/, splicesreference/SUMMARY.mdinto the book summary, and runsmdbook build. The generated pages are never committed. - Prose includes. Hand-written pages (🎨 Palette: Add aria-labels to search and goto-line inputs #146 configuration, ⚡ Bolt: Optimize hash calculation for cursor colors #147 CLI and
/v1) and compendium entries (docs(id): design plan, research, and n0 relay default #152) use{{#include ../reference/settings.md:daemon}}and the like, pointing at the generated directory, not at the committed marker copies. - Agent twin (Update module github.com/jackc/pgx/v5 to v5.9.2 [SECURITY] #120). The generated pages are already plain markdown, and
mcpx man --format markdown(concatenated) is a readyllms-full.txtsection for the reference.
Docs checks run in CI; see the testing trackers under #91 (CI pipeline #95, integration/environments #97).
Verification
go test ./internal/refdoc ./internal/settings ./internal/api ./internal/mcpserver, unit only. The e2e suite is not needed for this. It no longer leaks daemons (chore(deps): bump build/buck/preludes/buck2-prelude fromd956689toe7457f6#52, fixed in Phase 5: tag event bodies must travel with the event #182), but it is slow and tests nothing here.- Break it on purpose: edit one
Shortininternal/settings/registry.go→ the golden test fails and names-update;-update→ only that row changes. Delete one/v1row fromdocs/parity.mdby hand → the test fails and names the missing op (collision 18). nix build .#mcpx, then check thatresult/share/doc/mcpx/reference/cli/serve.mdexists (step 0.1) and that two builds produce identicalresult/share/man/man1/mcpx.1.mcpx man --format markdown -o "$d"on any machine produces the same bytes as the Nix output of the same commit.- In the built site, every page in
reference/SUMMARY.mdrenders, and every{{#include ...:anchor}}resolves (mdBook fails on a missing anchor).
Acceptance
- Every setting, command, command flag, global flag,
/v1op and served MCP tool appears in a generated page, from code, with no hand edit. docs/configuration.md,docs/parity.mdanddocs/protocol.mdhave marker regions that CI fails on when stale.parity.mdlists all ops, and an absent row fails the check even when the rest of the table is correct (Phase 3: sync, blob gate, and relays #181 collision 18).mcpx config --schema --format markdownand the settings page are the same bytes.- No page lists a flag that its command does not read. This is Update Rust crate petgraph to 0.6.4 - autoclosed #74's walk: Update Rust crate proc-macro2 to 1.0.81 - autoclosed #75 built it for exec's flags, and Add
omasnapupstream repository to flake inputs #129 owns extending it to every setting (Phase 3: sync, blob gate, and relays #181 collision 15). Until it covers a command, per-command pages carry a scope column and a one-line explanation of daemon-scoped flags on client commands.
Open questions
- Describe mode or declared flags, and how subcommands are entered (🎨 Palette: Improve accessibility of editor search panel #144 open questions 3 and 4)?
- Should
Opgain aTagfor grouping, or is the path prefix enough? mcpx openapi --surface daemon: worth adding, or is writingv1-openapi.jsonfromman --format markdown -oenough?- Should the man page date come from a release stamp (amd host fails at evaluation: no outputHashes for p2panda-core-0.7.1 #158) rather than
SOURCE_DATE_EPOCH? - Is
internal/refdocthe right name?internal/openapialready exists, formcpx api --spec, so avoid anything OpenAPI-sounding.
Ease · Impact · Related
Ease L. The renderers are each small. The size is in step 0 (command table, global flags), describe mode across about 35 handlers and their subcommands, the parity fields for 60 ops, and marker migration of three docs. · Impact high. The reference cannot drift, Nix users get offline markdown docs, and the agent twin gets its reference section for free. · Depends on / related: #144 (design), #117 (mdBook includes and anchors), #118 (docs derivation), #120 (agent twin), #146, #147, #152, #158, #49 (CI for every package), #74 (closed, fixed in #75; flags accepted and ignored), #76 (CLI for /v1-only ops; shares Op.CLI; owns the parity page's CLI content), #77, #159 (the step-0 bugs), #52 (closed, fixed in #182).
Security/auth deferred; see tracker.
Activity
developing-today commentedon Oct 28, 2026
CODE-774
dezren39 commentedon Oct 28, 2026
History carried over from dezren39/darwin-nix#145 (verbatim, oldest first):
@dezren39 · 2026-09-30T07:20:34Z
Integration pass. Placed in the DAG rooted at #181.
@dezren39 · 2026-09-30T11:06:17Z
Collision ownership (issues pass, 2026-09-30, at 05c78b2). #181 listed these cross-theme collisions with no owner. Each now has one:
docs/parity.mdcannot distinguish an absent row from a known gapWhere this issue is the owner, the decision is made here; where it is not, it adopts the owner's decision rather than making its own.
@dezren39 · 2026-09-30T11:54:36Z
Issues pass (2026-09-30, at 05c78b2). I edited the body in place. The plan, approach and acceptance are unchanged, with one exception: the collision-18 rule below adds to them.
Ops()entry, so a missing row fails the golden comparison, and a presence assertion names the missing op. A known gap is always a row with an explicit—and a reason. The hand-written## Known gapsprose may only name ops that have a row. Verification and acceptance each gained a line for this. The page's content still belongs to whoever regenerates it (Update Rust crate clap to 4.5.4 - autoclosed #76/🎨 Palette: Improve accessibility of editor search panel #144). SURFACES is editingdocs/parity.mdfor Update Rust crate clap to 4.5.4 - autoclosed #76 now; the generated region replaces whatever it adds by hand.execwas missed; see Phase 3: sync data phase batches are bounded by count, not bytes #180).capabilitieschanged in Phase 2: delegated Manage cannot add members #171. It is nowcapabilities(version, conn)(server.go:1389-1420), push is per connection, andloggingis no longer declared. The extraction keeps thepush boolparameter but is called withs.Notify != nil && c != nil && c.canPush(). The committed §2.2 table still listslogging(Root flake check fails on nixosConfigurations due to missing clan-core.clanModules #159 item 18), so the first regeneration corrects it.docs/protocol.mdis PROTOCOL's file.usageCONCURRENCY block teaches the deadmodekey and a nonexistentpooledvalue (root.go:597-604, Root flake check fails on nixosConfigurations due to missing clan-core.clanModules #159 item 2). It has to be rewritten, not kept verbatim.d956689toe7457f6#52 is closed (fixed in Phase 5: tag event bodies must travel with the event #182). The checkPhase note now cites the sandbox comment (package.nix:69-71), and the verification step no longer implies that the e2e suite leaks. Update Rust crate petgraph to 0.6.4 - autoclosed #74 is marked closed (fixed in Update Rust crate proc-macro2 to 1.0.81 - autoclosed #75).05c78b2: dispatchmain.go:119-162,usageroot.go:549-611,parseFlags:52-67,CmdMan:255-276,CmdConfig:296-379,handleOpenAPIdaemon/ops.go:498-535,Supportedserver.go:778, method switch:504-765,dashedschema.go:227-243, checkPhasepackage.nix:73-81, CImcpx.yml:65,docs_test.go:19-48/:52-65. The flag count of 130 is confirmed (118x := fs.*plus 12fs.Var).omasnapupstream repository to flake inputs #129 (every setting, Phase 3: sync, blob gate, and relays #181 collision 15).dezren39 commentedon Oct 29, 2026
🤖 Agent note · cross-reference from #1843 triage (queue task 2732, 2026-10-29)
82b019a0the settings inventory (docs/configuration.md),docs/environment.md, anddocs/parity.mdare already generated via test renderers with-updategoldens (internal/settings/docs_test.go,internal/cli/parity.go), andTestEveryDispatchedCommandIsDeclaredcloses the old dispatch/declaration gap. The remaining scope here is the protocol tables, per-command pages, global-flags page, /v1 + MCP-tools site pages, and man-as-HTML — extending the as-built golden mechanism rather than adding a second one.dezren39 commentedon Oct 29, 2026
🤖 Agent note · triage verdict — CONFIRMED, split into sequenced slices
82b019a0, but NOT landable as one task (the issue itself rates Ease L, steps 0–9). Split below; slice 1 is enqueued now as queue task 3061. Nothing is silently shrunk — every step of the original plan is owned by a slice or by mcpx: the sources the reference would be generated from are incomplete, and several docs say what the code does not #1883.internal/refdoc;settings.Schemahas Describe/JSON but no Markdown and its JSON lacks scope/hot; parity_test checks code only, never docs/parity.md; no marker regions or golden test anywhere.internal/refdoc(Table/Code/Region),Schema.Markdown, JSON gains scope/hot,config --schema --format text|json|markdown. Landable now — the settings registry is already a true single source. Enqueued: task 3061 (fix dedupe key for this issue; later slices reuse it sequentially).man --format markdown. Gated on mcpx: the sources the reference would be generated from are incomplete, and several docs say what the code does not #1883 items 1 and 8. Working assumption per the plan: describe mode (open question 1 settles there unless mcpx docs: generated reference pages -- settings, env vars, flags, CLI, /v1, MCP tools, protocol and parity matrices #1843 rules otherwise).9 remaining items
dezren39 commentedon Oct 29, 2026
🤖 Agent note · parked
dezren39 commentedon Oct 29, 2026
🤖 Agent note · slice 1 complete and land-ready, blocked only on the repo-wide merge-queue freeze (#2403)
repo-worker-code, OpenChamber scheduled lane. Task 3061 (small_fix) — moved from park to block on the same incident as tasks 2875 (mcpx: JSON Schema validation of tool inputs/outputs and elicitation schemas (7 conformance rows) #1951) and 2946 (mcpx: Phase 2 of #1675 — broker retention bound + summary-only elicitation events #1677), so the queue stops re-verifying a green PR that cannot land.queue/3061-1846-refdoc-slice1, head78f95485, OPEN / CLEAN / MERGEABLE, 1 ahead / 0 behind main (still5a34fa70).mcpx basic: testSUCCESS,mcpx conformance basic: spec paritySUCCESS,nix ci basic: proxy port fallbacksSUCCESS (the required check), CodeRabbit neutral, zero unresolved review threads.main, and the queue ejects every entry (ci: merge queue ejects every PR — no merge since #2233 (10:57Z), entries dropped 2-6 min into AWAITING_CHECKS #2403) — no PR has merged since ci: run nix ci on merge groups (merge-queue pilot step 1) #2233 at 10:57Z. This PR has no ordering dependency on any other PR; it needs only a working queue.fixed_mergedwith the merge SHA. Slices 2-4 of this issue remain separate queue work — do not fold them into feat(mcpx): refdoc package + settings Markdown emitter + config --schema --format (#1846 slice 1) #2441.mcpx docs: finish the generated reference (#4909) (#5177)