Repository navigation
Description
epic:#31527#1 · os-project-manager · session_01FEkQ5mLd7pR2PHjsPwiGkz
Ruled: 6729831159 · letter A · 2026-11-09T01:11Z
Ruling-ref: 6729831159
Filing gate: ④ coordination node: child E5 of the epic #31527 (parent and per-layer children), as ADR-0150 (docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md, merged in #31586 at 5d1382a)'s execution plan lists it. Hand-over card: filed undispatched as the epic seat signs off (maintainer 2026-11-08T16:34Z 「专题卡当前任务处理完,合并后就下班」). ⛔ Not a claim.
Ruling-ref: per-type table A (6723462584); epic A 「立专题」 (6723499113); division of labour A 「留核心,其余交车道」 (6723571682); ADR-0150 accepted by merge (#31586, 2026-11-08T21:16Z).
Business reason: inherited from the parent #31527. Behavioural metadata is addressed by (package, name), so two installed packages can each ship an item of the same name and every reader answers the right one, or refuses with the candidates, instead of silently taking the first match.
Reader: the next domain:server seat picks it from the queue (pm-dispatch selection) and accepts its PR against the red lines below.
Dedupe (open AND closed): webhook connector email template package (79; top hits #30806(open) #27314(open) #31527(open), none on point: they are this epic, its parent #30806, or unrelated cards).
class: d · type: Feature
Grade: p1, inherited from the parent (self-graded under 「定级你可以自己决定」).
Blocked-by: #31575
维护者速读
Webhook、连接器、邮件模板按(软件包, 名称)查找。
What to build
Webhooks, connectors and email templates consult on (package, name) through R's resolver.
Surface
- Expected file surface: plugin-webhooks, service-automation connectors, plugin-email.
- Clause-②: no.
- Narrowing: yes, for a package item's bare reference that only an environment-authored item holds (D3 (a); not measurable first-party; the D10 upgrade report lists each case).
Acceptance — the epic's three red lines (every child shares them)
- Resolution never loosens. No first-registered fallback, no environment-wide guess for a caller with a package, no silent pick.
- Ambiguity is reported, never guessed. Every refusal and every migration report names every candidate.
- Independently releasable (red line 3). The PR proves it with ADR-0150's four readings: (a) the phase-1 one-holder tests stay green; (b) bare-name behaviour (URLs, MCP, SDK) is unchanged for every name with one holder, except this card's declared narrowing; (c) any migration is re-runnable and never guesses; (d) its
Clause-②:declaration and, where it changes the protocol, its ADR-0087 migration entry. - The epic seat is off duty after hand-over: the accepting lane seat checks these lines itself, and a narrowing beyond the declared one goes to the maintainer before landing.
Parent: #31527.
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: confirmed ·
domain:server· p1 ·pm:blocked· 2026-11-08T21:57Z⛔ Not a claim.
epic:#31527#1is online, and the maintainer ruled 「留核心,其余交车道」. The children live in lane queues withoutpm:epic, which matches [Decision] Epic-driven delivery as the next working mode: one epic = parent + epic seat + milestone table; children as sub-issues withpm:epic+Blocked-by:; rolling split; mandatory hand-over when an epic seat leaves; a cap on concurrent epics #31502 A′.domain:server, by package ([Decision] Keepdomain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424 rule 1).Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
epic:#31527#1 · os-steve · session_01ADHkmP7o3uDTti21wLTfPf
Unblocked 2026-11-08T23:01Z:
Blocked-by: #31575is closed. R merged in #31637 as 0ebb080 (resolvePackageScopedName,packageResolutionClosureand the three read-onlySchemaRegistrypackage-scoped methods in objectql;packageDependencyClosurein metadata-protocol).pm:blocked→pm:queuein this stroke. Read the resolver through those exports only, and never re-implement the rule. The epic seat reviews this card's PR against the three red lines before it lands.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Claim: PM loop round 1 · #31677 (E5, epic #31527) · 2026-11-08T23:08Z
Session:
session_01ADHkmQXLfvyB5R53VDm3Ka(seat); dev = card threadsession_01ADHkmR4astMzES5UkW47jWAccount:
os-steveBranch:
claude/project-thread-bwr6nnWorktree: the card thread's checkout of
objectstack-ai/objectstackDomain:
domain:serverSeat:
domain:server#3File surface:
packages/plugins/plugin-webhooks/src/**, the connectors inpackages/services/service-automation/src/**,packages/plugins/plugin-email/src/**, their tests,.changeset/31677-*.md(stop on breach; ⛔ nopackages/specedit, no second resolver: R's exports only)Container & model:
M,mode:thread,model: default tier; CONTRACT_REVIEW_TIER for the review owed before the queue (dispatch-gates --tier: a card that only NARROWS owes one contract-review-tier review, judged from the card content),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6728372383
Premise: holds (R #31637 merged as 0ebb080; the card's
Blocked-by: #31575closed, moved topm:queueby the epic seat in 6728372383; the dev confirms the resolver exports onmainin step 0)Narrowing: as the card declares (D3 (a)), a package item's bare reference that only an environment-authored item holds; the dev measures it on base and head
Serial constraints cleared: E1 #31672 (this seat, branch
claude/project-thread-ack2ot) also touches service-automation (flows): parallel while the files are disjoint, E1 lands first if they meet and this branch mergesorigin/mainafter it. S3 #31684 follows E1, E5 and E7 on this seat.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Claim amendment · #31677 · 2026-11-08T23:12Z · amends Claim 6728454873
File surface: adds
packages/plugins/plugin-webhooks/package.json,packages/plugins/plugin-email/package.json,packages/services/service-automation/package.json(E1 #31672 moves the same service-automation line; E1 lands first and this branch mergesorigin/mainafter it) (only to move@objectstack/objectqlfromdevDependenciestodependencies) and the matchingpnpm-lock.yamlimporter lines. Reason: R's resolver is exported from objectql, and a copy of the rule would be the second resolver the epic forbids. Condition: no dependency cycle (the dev shows the reading in the report; a cycle means stop and report, never a copy).Narrowing: per the epic seat's reading 6728487836 on #31527, a package caller's bare name whose only holder is a package outside its declared closure is inside ADR-0150 (step 3 of the ruled rule). The PR's
Narrowing:line declares it beside D3 (a) with its measured first-party count, and measures the sibling-in-the-same-release-artifact sub-case separately: 0 lands on review; any other count holds for the ruling on #31678.11 remaining items
objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmR4astMzES5UkW47jW
os-dev-report
{ "issue": 31677, "status": "done", "branch": "claude/project-thread-bwr6nn", "pr": 31744, "session": "session_01ADHkmR4astMzES5UkW47jW", "premise_still_valid": true, "summary": "Webhooks part of E5 after Q1 ruled A (6729831159): draft PR #31744 (Part of #31677), head 7d39171d, branch restarted from main after #31725 merged. The declared-webhook dispatcher and by-name reads ask resolvePackageScopedName as a no-package caller; a refused name is not dispatched, warned once naming every candidate, and the by-name read throws DeclaredWebhookAmbiguousError (409 RESOURCE_CONFLICT). Phase 1's dogfood pin declaredWebhookPackage(HOOK) === alpha moved to the refusal (both occurrences). Narrowing: line declares the ruled case beside D3 (a), first-party count 0. Remaining on #31677: the email half, waiting on R2 #31716 (patch at /mnt/project-files/server-seat3/31677/email-half.patch; its vitest config per Q4 goes with it).", "tests": "head 7d39171d. Under os-verify-lock: plugin-webhooks test exit 0 (25 files, 262), typecheck exit 0 (one && command, VERDICT 0). Targeted dogfood after dogfood^... build (70/70): 19 files, 96 tests passed, VERDICT 0, including bare-name-one-holder-flow-family with the moved pin. Ablations measured at da3bc28e, plugin-webhooks/src byte-identical to this head (git diff da3bc28e HEAD -- packages/plugins/plugin-webhooks/src empty): refusal -> listed[0]: 2 failed; registry-less >=1: 1 failed. The moved dogfood pin read com.qa.bare.alpha on main's reader (old pin green there), so the refusal assertion is red on main.", "gates": "CI on #31744 at 7d39171d: 67 check-runs, all success or skipped (Test Core 8/8, Test UI 16/16, Lint & Repo Gates, TypeScript Type Check, Check Changeset, PR-body guards). Local: dispatch-gates --commands at 7d39171d: 86 derived; 85 exit 0; check:dual-build-cjs-loads exit 3 ('Run pnpm build first … nothing was measured') then exit 0 on rerun; --ran: 86 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). check:registry-log-declared green with the vitest config. eslint --no-inline-config over plugin-webhooks and the dogfood file exit 0. CI check-runs: pending on #31744.", "dogfood_battery": "7d39171d · VERDICT command-exit 0 (held the lock 1398s) · pnpm --filter @objectstack/dogfood test, no shard, no path, closure built at this head · Test Files 440 passed | 3 skipped (443) · Tests 3652 passed | 41 skipped (3693) · 0 failures. Owed by the declared narrowing (Q1 ruled A).", "mcp_calls": "this round 3 reads: pull_request_read get #31725, issue_read get #31736, (gh api read of comment 6729831159)", "api_writes": "this round 3: pr_create #31744 via relay (read-back identical, assignee os-steve), report 6730336692, and this re-post carrying the battery, via post-stamped.", "files_changed": [ ".changeset/31677-package-scoped-declared-webhooks.md", "packages/plugins/plugin-webhooks/package.json", "packages/plugins/plugin-webhooks/src/declared-webhooks.ts", "packages/plugins/plugin-webhooks/src/declared-webhooks.test.ts", "packages/plugins/plugin-webhooks/vitest.config.ts", "packages/qa/dogfood/test/bare-name-one-holder-flow-family.dogfood.test.ts", "pnpm-lock.yaml" ], "line_budget": "325 changed lines (+307 / -18, 7 files) vs the 3000 human-merge threshold: under", "deviations": [ "Forced test change: the dogfood pin moved from first-registered to the refusal, as ruled (Q1 A) and as seat 3 asked; named in the PR body.", "Branch restarted from main after #31725 merged: the webhooks commit sits on 1a2361c8 + f2abd476; the push was a new ref (the merged branch had been deleted), no force.", "No-cycle reading: objectql's workspace closure (14 packages) contains no plugin-webhooks.", "test:repo not run locally (CI Test Core); no repo-project test touched." ], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Stamped 2026-11-09T02:15Z.
objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Landed (part) · #31677 webhooks (ADR-0150 E5) · 2026-11-09T02:35Z
f65c36fc, from head7d39171d(seat ACCEPT 6730649996, epic PASS 6730349344; full dogfood 3652 green on that head)Part of #31677Done so far: connectors (#31725) and webhooks (#31744). Remaining on this card: the email half, which waits on R2 #31716 (PR #31733, in the merge queue).
pm:dispatchedstays, and the claim continues onclaude/project-thread-bwr6nn.objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmR4astMzES5UkW47jW
os-dev-report
{ "issue": 31677, "status": "done", "branch": "claude/project-thread-bwr6nn", "pr": 31825, "session": "session_01ADHkmR4astMzES5UkW47jW", "premise_still_valid": true, "summary": "Email template part of E5, the card's last part, after R2 #31733 (36a87008): draft PR #31825 (Fixes #31677), head 375152d8, branch restarted from main 630a0baa. readBundle asks resolvePackageScopedName as a no-package caller before the per-locale pick; a refused name fails the send with EmailTemplateAmbiguousError (409, candidates). The dependent-locale dogfood that was 3 red at da3bc28e is green on R2. Narrowing: line declares the Q1-ruled sealed clash beside D3 (a), first-party 0. connector_action's connectorId is carried by E1 #31672 per Q3 A, so the PR closes the card.", "tests": "head 375152d8. Under os-verify-lock: plugin-email test exit 0 (50 files, 831), typecheck exit 0 (one && command, VERDICT 0). Ablation on this head (ablation-replace --delete, committed first, restored to HEAD blob, git diff HEAD empty): the refusal throw removed -> 1 failed (expected undefined to be an instance of EmailTemplateAmbiguousError). Targeted dogfood after dogfood^... build (70/70): 19 files, 98 passed.", "gates": "dispatch-gates --commands at 375152d8: 79 derived, all 79 ':: exit 0'; --ran 79 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). First pass at 48ab8da9: check-console-intercept-disarm exit 1 (the vitest config merged the preset, which the gate reads as source) and dual-build-cjs-loads exit 3 (nothing measured before dists); fixed by the second commit, both 0 on the final pass. eslint over plugin-email exit 0. CI check-runs: pending on #31825.", "dogfood_battery": "375152d8 · VERDICT command-exit 0 (held the lock 1349s) · pnpm --filter @objectstack/dogfood test, no shard, no path · Test Files 440 passed | 3 skipped (443) · Tests 3654 passed | 41 skipped (3695) · 0 failures.", "mcp_calls": "0 this round", "api_writes": "this round 2: pr_create #31825 via relay (read-back identical, assignee os-steve), and this report via post-stamped.", "files_changed": [ ".changeset/31677-package-scoped-email-templates.md", "packages/plugins/plugin-email/package.json", "packages/plugins/plugin-email/src/template-loader.ts", "packages/plugins/plugin-email/src/template-loader.test.ts", "packages/plugins/plugin-email/vitest.config.ts", "pnpm-lock.yaml" ], "line_budget": "166 changed lines (+154 / -12, 6 files) vs the 3000 human-merge threshold: under", "deviations": [ "PR body says Fixes #31677: connectors (#31725) and webhooks (#31744) landed, and connector_action's connectorId was ruled out of this card (Q3 A, carried by E1 #31672). If the seat wants the card kept open for it, the body's first line becomes Part of #31677.", "plugin-email/vitest.config.ts no longer re-exports vitest.preset.mts: it spells disableConsoleIntercept itself beside env OS_REGISTRY_LOG, because check-console-intercept-disarm reads the file's source.", "No-cycle reading: objectql's workspace closure contains no plugin-email.", "test:repo not run locally (CI Test Core); no repo-project test touched." ], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Stamped 2026-11-09T05:55Z.
objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Landed (part) · #31677 email (ADR-0150 E5) · 2026-11-09T07:49Z
785d432b, from head375152d8(seat ACCEPT 6733684550, after the epic's review)Part of #31677Done so far: connectors (#31725), webhooks (#31744) and email (#31825). Remaining on this card: the
connectorIdreference (Q3 A, after E1). It lands as the last PR, withFixes #31677.pm:dispatchedstays, and the claim continues onclaude/project-thread-bwr6nn. S3 #31684 unblocks when #31677 closes.objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmR4astMzES5UkW47jW
os-dev-report
{ "issue": 31677, "status": "done", "branch": "claude/project-thread-bwr6nn", "pr": 31863, "session": "session_01ADHkmR4astMzES5UkW47jW", "premise_still_valid": true, "summary": "Last part of E5 (Q3 A), after #31825 merged as 785d432b: draft PR #31863 (Fixes #31677), head 17781316, origin/main merged in as 8c54bc7c. connector_action asks resolvePackageScopedName (type connector) for the calling flow's package, read through E1's flowCallerPackage (context.flowName -> packagedFlowOwner). A refused answer fails the node naming every candidate. A no-package caller, a code-registered connector or a host with no resolver dispatches by name as before. Narrowing: line declares outside-closure (sibling-in-artifact included), D3 (a) and two-in-closure for package callers; first-party 0.", "tests": "head 17781316. Under os-verify-lock: service-automation test exit 0 (267 files, 3505), typecheck exit 0 (one && command, VERDICT 0). 8 new tests in flow-package-scoped-resolution.test.ts over a real SchemaRegistry, including a booted AutomationServicePlugin pin for the init wiring. Ablations (ablation-replace, committed first, restored to HEAD blob, git diff HEAD empty): engine connectorNameRefusal -> undefined: 3 red; node refusal check removed: 3 red; plugin setConnectorNameResolver line deleted: 1 red (expected undefined to be 'refused').", "gates": "dispatch-gates --commands at 17781316: 73 derived, all 73 ':: exit 0'; --ran 73 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). eslint --no-inline-config over service-automation exit 0. CI check-runs: pending on #31863.", "dogfood_battery": "17781316 · VERDICT command-exit 0 (held the lock 1460s) · pnpm --filter @objectstack/dogfood test, no shard, no path, after dogfood^... build 70/70 · Test Files 441 passed | 3 skipped (444) · Tests 3662 passed | 42 skipped (3704) · 0 failures.", "mcp_calls": "0 this round", "api_writes": "this round 2: pr_create #31863 via relay (read-back identical, 8219 bytes, assignee os-steve), and this report via post-stamped.", "files_changed": [ ".changeset/31677-connector-action-package-scoped.md", "packages/services/service-automation/src/builtin/connector-nodes.ts", "packages/services/service-automation/src/connector-package-scope.ts", "packages/services/service-automation/src/engine.ts", "packages/services/service-automation/src/flow-package-scoped-resolution.test.ts", "packages/services/service-automation/src/plugin.ts" ], "line_budget": "272 changed lines (+270 / -2, 6 files) vs the 3000 human-merge threshold: under", "deviations": [ "Only a refusal is acted on: the engine holds one instance per name, materialized for the no-package answer, and the registry cannot hold an environment item beside a package holder of the same name, so a package caller that resolves at all resolves to the served instance. The mismatch branch was dropped as unreachable (no test can build it).", "origin/main merged into the branch (8c54bc7c), not rebased, per seat instruction.", "test:repo not run locally (CI Test Core); no repo-project test touched." ], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Stamped 2026-11-09T07:55Z.
objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Seat answer · #31677 · public names for the epic's R1 fix on PR #31863 (head
17781316) · 2026-11-09T08:02ZAutomationEngine.armedFlowPackage(name): string | undefined. Accepted. It answers the loader's package only when the armed registration's source ispackage. A declared.customoverride, an environment (package-less) row, a runtime arm and an unregistered name all answerundefined.flowCallerPackagebecomesarmedFlowPackage(context.flowName) ?? null. feat(objectql, plugin-approvals): assignment rules and approval steps read the queue they name from their declaring package (ADR-0150 D3) #31850's approval service (objectql assignment rules and plugin-approvals approver steps pass the declaring package to queue reads, so their queue names resolve by ADR-0150 D3 (follow-up of #31734) #31790) reuses this reader, so feat(service-automation): a connector_action names its connector from the calling flow's package #31863 lands first.registerFlow(name, definition, armedFrom?: FlowContender). Accepted. It reuses the exportedFlowContender, so no new type name. All four arming paths pass the winner's classification. No third argument means aruntimearm, except that the door's restore ofheldcarries the arm over by identity. The arm is kept in a WeakMap keyed by the parsed body.servedOverrideBaseOf('flow', body)equal to the loader's owner) classifies asoverride.connectorId, and override plussubflow, each in both shapes: a package-less environment row, and a.customoverride, the latter also as the served-envelope document atkernel:ready. Add a real-kernel measurement of both shapes, and a CONTROL that a plain package arm still answers P. The changeset says E1's subflow reader is corrected too.objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmR4astMzES5UkW47jW
os-dev-report
{ "issue": 31677, "status": "done", "branch": "claude/project-thread-bwr6nn", "pr": 31863, "session": "session_01ADHkmR4astMzES5UkW47jW", "premise_still_valid": true, "summary": "Epic R1 (6735080780) fixed on #31863, head c6a08105 (main 2e9121ed merged in as 5e37bfd4; epic PASS 6735249931 at 5e37bfd4, one test-only commit since). The engine records the arm of every flow registration (registerFlow(name, def, armedFrom?: FlowContender), WeakMap keyed by the parsed body; no arm = runtime, a held body put back keeps its arm by identity). armedFlowPackage(name) answers packagedFlowOwner only for a package arm; flowCallerPackage reads it, which corrects E1's subflow reader too. Names accepted by seat 3 (6735158321). Precedence winners carry contender for every name; the four plugin arming steps pass it. Real-kernel measurement: at kernel:ready the protocol view serves the .custom override with _packageId = base and overrides.package = base, which the old classifier read as package; classifyContender now answers override for that shape via isServedOverrideRowOf on the pair's row.", "tests": "head c6a08105. Under os-verify-lock: service-automation test exit 0 (267 files, 3518), typecheck exit 0. R1 pins: 3 override shapes (package-less row, .custom stored row, .custom served envelope) x connectorId and subflow resolve with no package (6); 2 package-arm CONTROLs answer P; 1 write-door/held pin; real kernel (#28717 harness) 4 cases at the boot pull and after kernel:ready. Ablations (restored to HEAD blob, git diff HEAD empty): reader back to packagedFlowOwner: 6 red; served-envelope branch off: 4 red; plugin arm dropped at the 4 arming steps: 2 red; plus the earlier 3 (engine 3, node 3, plugin wiring 1). Existing pin restated: flow-precedence-loader-set 'never asks for an uncontested name' -> 'once per name' (red at 5e37bfd4 locally and in CI Test Core 5/8).", "gates": "dispatch-gates --commands at c6a08105: 73 derived (same set as at 5e37bfd4), all 73 ':: exit 0'; --ran 73 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). eslint --no-inline-config over service-automation exit 0. CI at c6a08105: green (seat 3: 35 success, 15 skipped).", "dogfood_battery": "5e37bfd4 · VERDICT command-exit 0 (held the lock 1450s) · pnpm --filter @objectstack/dogfood test, no shard, no path, after dogfood^... build 70/70 · Test Files 441 passed | 3 skipped (444) · Tests 3662 passed | 42 skipped (3704) · 0 failures. c6a08105 differs by one test file only.", "mcp_calls": "this round: get_job_logs x3, pull_request_read x1, issue_read x1 (reads)", "api_writes": "this round 3: issue_patch #31863 body x2 via relay (read-back identical, 8327 and 13608 bytes), and this report via post-stamped.", "files_changed": [ ".changeset/31677-connector-action-package-scoped.md", "packages/services/service-automation/src/builtin/connector-nodes.ts", "packages/services/service-automation/src/connector-package-scope.ts", "packages/services/service-automation/src/engine.ts", "packages/services/service-automation/src/flow-declared-override-first-boot-pull.integration.test.ts", "packages/services/service-automation/src/flow-package-scoped-resolution.test.ts", "packages/services/service-automation/src/flow-precedence-loader-set.test.ts", "packages/services/service-automation/src/flow-precedence.ts", "packages/services/service-automation/src/plugin.ts" ], "line_budget": "551 changed lines (+531 / -20, 9 files) vs the 3000 human-merge threshold: under", "deviations": [ "Existing test pins changed: flow-precedence-loader-set (uncontested names are now asked once, for the arm), E1's ship() helper arms { source: 'package' }, and the plugin pin arms P's charge before asking.", "The served-override shape is recognised with _packageId === owner plus the exported isServedOverrideRowOf on the pair's row, not servedOverrideBaseOf, which is a protocol method and not a package export (no new export).", "Dogfood measured at 5e37bfd4; c6a08105 adds only a test file.", "Recorded for later, per the epic: connector dispatch stays by bare name until the D9 backstop child; #31850 reuses armedFlowPackage.", "test:repo not run locally (CI Test Core); no repo-project test touched." ], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Stamped 2026-11-09T09:00Z.
objectstack-fleet commentedon Nov 9, 2026
domain:server#3 · os-steve · session_01ADHkmQXLfvyB5R53VDm3Ka
Landed · #31677 (ADR-0150 E5) · 2026-11-09T09:24Z
5d17aa6b, from headc6a08105(seat ACCEPT 6736153918, epic PASS at5e37bfd4). It went through the queue once, with no ejection.completedbyFixes #31677connectorIdplus the armed-flow reader #31863pm:dispatchedis removed in this stroke. #31863 also landsAutomationEngine.armedFlowPackage(name)(names ruled in 6735158321), which corrects E1's subflow reader for environment overrides; #31790 reuses it. With E1, E5 and E7 landed, S3 #31684 is unblocked, and the epic seat moves it. Recorded for the connector D9 backstop child: dispatch is still by bare name, which is safe only while phase 1's one-holder refusal stands.feat(service-automation): a connector_action names its connector from…
docs(adr): ADR-0150 records its children's rulings; ADR-0048 §5, ADR-…
fix(objectql, rest, service-automation): a mapping name two packages …
feat(automation)!: hold, arm and run flows by (package, name), so two…
docs(changeset): name the eighth moved answer, a declared:NAME redeli…