You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs (cluster, connectors): lane 2 now also converges connector definitions on every replica (#28002); cluster.mdx §6.2 and the connectors reload row still say otherwise #28030
Filing gate: ① docs that will contradict the runtime at named locations. Found by the #28002 card thread (PR #28028) and filed by the domain:server seat, because both pages are outside that card's file surface. ⛔ Not a claim.
PR #28028 (#28002) makes the automation plugin's metadata-mutation listener queue the connector reconcile for a connector mutation that is not a draft. Through lane 2 (metadata.mutated), a connector definition saved active, published or deleted on one replica now converges every replica. A direct active save (PUT /api/v1/meta/connector/:name) now re-materialises the writing replica too. No new cluster channel is added.
content/docs/kernel/cluster.mdx, §6.2. The lanes table (:336) gives lane 2's converging state as "ObjectQL's OBJECT registry", and the "Lane 2 — metadata.mutated" subsection (:418 onward) describes only that. Both gain the connector instances that the automation plugin re-materialises from the same replay.
content/docs/automation/connectors.mdx:458, the failure-modes row "A bad entry arrives via runtime reload (Studio publish / dev reload)". It should name the paths that now reach the reconcile: a publish, a direct active save, or a delete, on any replica.
Wanted
State the lane 2 connector convergence in the words §6.2 already uses: one signal and no second channel, with the peer re-reading the shared store. Update the reload row's trigger list.
⛔ Do not edit before PR #28028 merges. Until then the texts are still true. connectors.mdx is also edited by #28016's PR (a new failure-modes row), so check for that and merge main first.
Dedupe
#28002 / PR #28028 (runtime), #27977 / PR #28010 (the measurement), #28016 (the same table, a different row). No open card covers these lines.
Read fresh. content/docs/** is the domain:devx lane. PR fix(service-automation): converge a connector definition change on every replica #28028 is on main, so the two texts are false now. cluster.mdx §6.2 (the lanes table and the lane 2 subsection) and the connectors reload row say that lane 2 also converges connector instances, and that a direct active save re-materialises the writer.
Claim: PM loop round 10 · 2026-10-30T09:58Z
Session: session_01QSeKYmTYfaPbLQD4BJfomW (mode:subagent: the dev shares this session ID; its identity is the branch)
Account: os-justin (the seat's linked user, as GET /user answers it; the card's assignee)
Branch: claude/issue-28030-lane2-connector-docs
Worktree: objectstack-issue-28030
Domain: domain:devx
Seat: domain:devx#2
File surface: content/docs/kernel/cluster.mdx §6.2 only (the lanes table row for lane 2 at ~L336, and the "Lane 2 — metadata.mutated" subsection from ~L418), and content/docs/automation/connectors.mdx failure-modes row ~L458 ("A bad entry arrives via runtime reload"). Prose only (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: default, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (docs drift after #28028)
Thread-read: 6519930122
Premise: holds at origin/main e1dde1a5c1. PR #28028 merged (cc5586da8c). cluster.mdx lane 2's converging state still reads "ObjectQL's OBJECT registry" (~L336). connectors.mdx:458 still names only "Studio publish / dev reload".
Serial constraints cleared: no open PR touches either file (file scan of every open PR). #28016's row has no open PR at claim time; the dev merges main first.
Dispatched under claim 6519999838 · 2026-10-30T09:59Z: an os-dev subagent (mode:subagent, default tier, effort medium) on branch claude/issue-28030-lane2-connector-docs. It writes the lane 2 connector convergence and the reload-row triggers from #28028's code, and merges main first. The report comes back here as os-dev-report.
{
"issue": 28030,
"status": "done",
"branch": "claude/issue-28030-lane2-connector-docs",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28050",
"session": "session_01QSeKYmTYfaPbLQD4BJfomW",
"premise_still_valid": true,
"summary": "Docs-only: cluster.mdx §6.2 (lane 2 row of the lanes table, plus two paragraphs in the 'Lane 2 — metadata.mutated' subsection) and the connectors.mdx runtime-reload failure-modes row now say that lane 2 also converges connector definitions on every replica, and that a direct active save re-materialises the writer. This run resumed from 16f6a55a5f after a container restart; it re-read every sentence against the code, found each one backed, changed nothing, and opened the PR. H1 HOLDS, from these readings at main 5aee206543: (1) Trigger kinds: plugin.ts subscribeFlowMutations returns on `!evt || evt.state === 'draft'`, then a `type === 'connector'` mutation calls queueConnectorMutationReconcile, so a connector saved active, published or deleted reconciles. `flow` takes the existing path and every other type is ignored. (2) Drafts are excluded twice: the listener drops state 'draft', and protocol-mutation-fan-out.ts publishMetadataMutation returns on draft before publishing to metadata.mutated. Receipt in attachMetadataMutationPubSub also drops draft. (3) The peer re-reads the shared store: applyRemoteMetadataMutation re-reads the row from the replica's own sys_metadata, then calls notifyMutationListenersLocal (local only, never re-published). The queued reconcileDeclaredConnectors(ctx, {fatal:false}) then reads readDeclaredConnectorItems with post=true, i.e. protocol.getMetaItemsForExecution({type:'connector'}): the registry plus the sys_metadata overlay rows. (4) It runs on onReconcileQueue, the same queue the credential door's set and clear use. A failure is logged at warn. A pending flag coalesces queued reconciles. (5) No new channel: #28028 changes only plugin.ts and its test. A direct active save raises no metadata:reloaded, because announcePerItemPublish hangs off onMetaItemPublished, which fires only on a publish.",
"tests": "Prose only; no package test. Docs gate families at head 16f6a55a5f: 43/43 exit 0 (per-gate logs in scratchpad issue-28030/final/gates/N.log, codes in final/gates/summary.tsv, each written before any pipe).",
"gates": "Local, final head 16f6a55a5f (origin/main 5aee206543 had not moved, so no new merge): `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` exit 0, deriving 43 commands over 2 paths, the same list as the prior run. All 43 were run, each exit code written to disk first, and all 43 exited 0, including pnpm check:doc-authoring 0, pnpm check:doc-anchors 0 and pnpm check:nul-bytes 0. `--ran` exit 0: '✓ dispatch-gates --ran: 43 derived famil(ies) accounted for — 43 run, 0 NOT-MEASURED (a DERIVED zero — all 43 recorded an exit code and none of them is 3).' CI on the PR head 16f6a55a5f at report time: Check Changeset success, Governed Surface Queue Guard success, 8 skipped (opt-in and labeler jobs), 17 in_progress (incl. PR-body guards, Lint · ESLint, Type Check lanes). in_progress is the honest value.",
"line_budget": "n/a — no skills/** file touched; diff is +26/-2 over 2 .mdx files",
"files_changed": [
"content/docs/kernel/cluster.mdx (+25/-1)",
"content/docs/automation/connectors.mdx (+1/-1)"
],
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — relay strokes via scripts/pm/fleet-write: (1) pr_create, POST /repos/objectstack-ai/objectstack/dispatches executed as POST /pulls (draft forced) plus the label POST for skip-changeset, which opened #28050; (2) this os-dev-report via post-stamped.mjs --comment=28030. No git push this run: the branch was already at 16f6a55a5f.",
"deviations": [
"The relay's pr_create read-back printed body bytes (5580 sent = 5580 stored) and assignees (none) but no label line. A follow-up GET /pulls/28050 read labels ['skip-changeset'] and draft true, so the label write is confirmed by that read, not by the relay row.",
"The PR footer uses this agent file's session-URL form ('_Generated by [Claude Code](https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW)_'), not the harness reminder's '🤖 Generated with' form. The agent file prescribes the form.",
"Gates were re-run in full on an unchanged head, as the resume order asked. The prior dev's earlier pass at f084992483 had exit-3 prerequisite refusals before builds. The PR body records both passes.",
"The PR body changed from the prior draft: GATES_RAN_LINE is filled in, and the #28016 line is reworded to 'the dispatch named it as a possible edit to the same table' because I did not read what #28016 touches."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — cluster.mdx §6.2 family bullet '`originNode` loopback suppression' says the 'connector reconcile already ran, synchronously, at the door'. That holds for lane 4's credential door. On lane 2 the writer's connector reconcile is queued (the new paragraph says so). Unexercised wording drift, kept in the PR's Acceptance notes, outside this card's file surface."
]
}
Landed · 2026-10-30T11:24Z — PR #28050 merged through the queue as 4bb5eea62c, and Fixes #28030 closed this card as completed.
Merge verified: the sorted ± lines of merge-base..head e3ce3a96cc and of 4bb5eea62c^1..4bb5eea62c have the same md5, efadd46ae1…. Same 2 files, +35/−5, nothing dropped or added in the queue.
What landed:
content/docs/kernel/cluster.mdx §6.2: the lane 2 row and subsection now say that the same metadata.mutated replay also converges the automation service's flows and materialized connectors (a non-draft connector mutation), each from the replica's own re-read. A direct active save re-materialises the writer through the local half of the same signal. The originNode loopback bullet now says that a connector reconcile is queued on the writer (lane 2), or that the door awaits it after publishing (lane 4).
content/docs/automation/connectors.mdx: the runtime-reload failure-modes row names a publish, a direct active save or a delete, on any replica.
Card state: the seat removes pm:dispatched in the same act. Nothing remains open from this card: the one out-of-scope finding was folded into the PR at review.
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 写给 AI 的文档与 skills 说错一句,等于产品缺陷 | none | P①
Triage: p2 ·
domain:devx(relabelled fromdomain:server) ·area:automation· 2026-10-30T09:54Z⛔ Not a claim.
content/docs/**is thedomain:devxlane. PR fix(service-automation): converge a connector definition change on every replica #28028 is on main, so the two texts are false now.cluster.mdx§6.2 (the lanes table and the lane 2 subsection) and the connectors reload row say that lane 2 also converges connector instances, and that a direct active save re-materialises the writer.documentation,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Claim: PM loop round 10 · 2026-10-30T09:58Z
Session:
session_01QSeKYmTYfaPbLQD4BJfomW(mode:subagent: the dev shares this session ID; its identity is the branch)Account:
os-justin(the seat's linked user, asGET /useranswers it; the card's assignee)Branch:
claude/issue-28030-lane2-connector-docsWorktree:
objectstack-issue-28030Domain:
domain:devxSeat:
domain:devx#2File surface:
content/docs/kernel/cluster.mdx§6.2 only (the lanes table row for lane 2 at ~L336, and the "Lane 2 —metadata.mutated" subsection from ~L418), andcontent/docs/automation/connectors.mdxfailure-modes row ~L458 ("A bad entry arrives via runtime reload"). Prose only (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: default,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (docs drift after #28028)
Thread-read: 6519930122
Premise: holds at origin/main
e1dde1a5c1. PR #28028 merged (cc5586da8c).cluster.mdxlane 2's converging state still reads "ObjectQL's OBJECT registry" (~L336).connectors.mdx:458still names only "Studio publish / dev reload".Serial constraints cleared: no open PR touches either file (file scan of every open PR). #28016's row has no open PR at claim time; the dev merges
mainfirst.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Dispatched under claim 6519999838 · 2026-10-30T09:59Z: an
os-devsubagent (mode:subagent, default tier, effort medium) on branchclaude/issue-28030-lane2-connector-docs. It writes the lane 2 connector convergence and the reload-row triggers from #28028's code, and mergesmainfirst. The report comes back here asos-dev-report.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
os-dev-report
{ "issue": 28030, "status": "done", "branch": "claude/issue-28030-lane2-connector-docs", "pr": "https://github.com/objectstack-ai/objectstack/pull/28050", "session": "session_01QSeKYmTYfaPbLQD4BJfomW", "premise_still_valid": true, "summary": "Docs-only: cluster.mdx §6.2 (lane 2 row of the lanes table, plus two paragraphs in the 'Lane 2 — metadata.mutated' subsection) and the connectors.mdx runtime-reload failure-modes row now say that lane 2 also converges connector definitions on every replica, and that a direct active save re-materialises the writer. This run resumed from 16f6a55a5f after a container restart; it re-read every sentence against the code, found each one backed, changed nothing, and opened the PR. H1 HOLDS, from these readings at main 5aee206543: (1) Trigger kinds: plugin.ts subscribeFlowMutations returns on `!evt || evt.state === 'draft'`, then a `type === 'connector'` mutation calls queueConnectorMutationReconcile, so a connector saved active, published or deleted reconciles. `flow` takes the existing path and every other type is ignored. (2) Drafts are excluded twice: the listener drops state 'draft', and protocol-mutation-fan-out.ts publishMetadataMutation returns on draft before publishing to metadata.mutated. Receipt in attachMetadataMutationPubSub also drops draft. (3) The peer re-reads the shared store: applyRemoteMetadataMutation re-reads the row from the replica's own sys_metadata, then calls notifyMutationListenersLocal (local only, never re-published). The queued reconcileDeclaredConnectors(ctx, {fatal:false}) then reads readDeclaredConnectorItems with post=true, i.e. protocol.getMetaItemsForExecution({type:'connector'}): the registry plus the sys_metadata overlay rows. (4) It runs on onReconcileQueue, the same queue the credential door's set and clear use. A failure is logged at warn. A pending flag coalesces queued reconciles. (5) No new channel: #28028 changes only plugin.ts and its test. A direct active save raises no metadata:reloaded, because announcePerItemPublish hangs off onMetaItemPublished, which fires only on a publish.", "tests": "Prose only; no package test. Docs gate families at head 16f6a55a5f: 43/43 exit 0 (per-gate logs in scratchpad issue-28030/final/gates/N.log, codes in final/gates/summary.tsv, each written before any pipe).", "gates": "Local, final head 16f6a55a5f (origin/main 5aee206543 had not moved, so no new merge): `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` exit 0, deriving 43 commands over 2 paths, the same list as the prior run. All 43 were run, each exit code written to disk first, and all 43 exited 0, including pnpm check:doc-authoring 0, pnpm check:doc-anchors 0 and pnpm check:nul-bytes 0. `--ran` exit 0: '✓ dispatch-gates --ran: 43 derived famil(ies) accounted for — 43 run, 0 NOT-MEASURED (a DERIVED zero — all 43 recorded an exit code and none of them is 3).' CI on the PR head 16f6a55a5f at report time: Check Changeset success, Governed Surface Queue Guard success, 8 skipped (opt-in and labeler jobs), 17 in_progress (incl. PR-body guards, Lint · ESLint, Type Check lanes). in_progress is the honest value.", "line_budget": "n/a — no skills/** file touched; diff is +26/-2 over 2 .mdx files", "files_changed": [ "content/docs/kernel/cluster.mdx (+25/-1)", "content/docs/automation/connectors.mdx (+1/-1)" ], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — relay strokes via scripts/pm/fleet-write: (1) pr_create, POST /repos/objectstack-ai/objectstack/dispatches executed as POST /pulls (draft forced) plus the label POST for skip-changeset, which opened #28050; (2) this os-dev-report via post-stamped.mjs --comment=28030. No git push this run: the branch was already at 16f6a55a5f.", "deviations": [ "The relay's pr_create read-back printed body bytes (5580 sent = 5580 stored) and assignees (none) but no label line. A follow-up GET /pulls/28050 read labels ['skip-changeset'] and draft true, so the label write is confirmed by that read, not by the relay row.", "The PR footer uses this agent file's session-URL form ('_Generated by [Claude Code](https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW)_'), not the harness reminder's '🤖 Generated with' form. The agent file prescribes the form.", "Gates were re-run in full on an unchanged head, as the resume order asked. The prior dev's earlier pass at f084992483 had exit-3 prerequisite refusals before builds. The PR body records both passes.", "The PR body changed from the prior draft: GATES_RAN_LINE is filled in, and the #28016 line is reworded to 'the dispatch named it as a possible edit to the same table' because I did not read what #28016 touches." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — cluster.mdx §6.2 family bullet '`originNode` loopback suppression' says the 'connector reconcile already ran, synchronously, at the door'. That holds for lane 4's credential door. On lane 2 the writer's connector reconcile is queued (the new paragraph says so). Unexercised wording drift, kept in the PR's Acceptance notes, outside this card's file surface." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Landed · 2026-10-30T11:24Z — PR #28050 merged through the queue as
4bb5eea62c, andFixes #28030closed this card as completed.Merge verified: the sorted ± lines of merge-base..head
e3ce3a96ccand of4bb5eea62c^1..4bb5eea62chave the same md5,efadd46ae1…. Same 2 files, +35/−5, nothing dropped or added in the queue.What landed:
content/docs/kernel/cluster.mdx§6.2: the lane 2 row and subsection now say that the samemetadata.mutatedreplay also converges the automation service's flows and materialized connectors (a non-draftconnectormutation), each from the replica's own re-read. A direct active save re-materialises the writer through the local half of the same signal. TheoriginNodeloopback bullet now says that a connector reconcile is queued on the writer (lane 2), or that the door awaits it after publishing (lane 4).content/docs/automation/connectors.mdx: the runtime-reload failure-modes row names a publish, a direct active save or a delete, on any replica.Card state: the seat removes
pm:dispatchedin the same act. Nothing remains open from this card: the one out-of-scope finding was folded into the PR at review.Generated by Claude Code