Skip to content

refactor(spec,plugin-sharing)!: retire the exported SharingExecutionContext type (#7218) - #7325

Queued
os-zhuang wants to merge 4 commits into
mainfrom
claude/issue-7218-retire-sharing-execution-context
Queued

refactor(spec,plugin-sharing)!: retire the exported SharingExecutionContext type (#7218)#7325
os-zhuang wants to merge 4 commits into
mainfrom
claude/issue-7218-retire-sharing-execution-context

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

The #7070 split's deferred deletion. Both consumer halves have landed (PR #7140 identity, PR #7206 services), so the type that #6523 / PR #7068 left behind is removed from the contract surface.

Closes #7218

Premise check (on fresh origin/main @ 5777b1a)

Consumer re-grep (contract-first caution)

Repo-wide grep before touching anything. Only objectstack is checked out in this session — no objectui / cloud sibling worktrees exist here, so the cross-repo sweep is the one the card's earlier verification already recorded, not re-run.

site refs kind disposition
packages/spec/src/contracts/sharing-service.ts 3 definition + 2 doc links deleted / re-anchored
packages/spec/src/contracts/sharing-service.test.ts 11 import, 3 type-level pins, keyof, 1 value, prose re-anchored to a local specimen
packages/spec/src/contracts/approval-service.ts 2 comment refs reworded (past tense)
packages/spec/src/contracts/report-service.ts 2 comment refs reworded (past tense)
packages/plugins/plugin-sharing/src/index.ts 1 re-export removed
packages/plugins/plugin-sharing/src/exec-context-annotation.pin.ts 1 prose in the pin's doc header reworked (below)
plugin-approvals/src/{approval-node,approval-service}.ts 2 prose only, historical left as-is
packages/spec/CHANGELOG.md, .changeset/* (3) , docs/audits/… historical records left as-is
content/docs/kernel/runtime-services/sharing-service.mdx 8 hand-written doc naming the type in 7 live signatures updated to ExecutionContext

No live consumer outside the converged plugins imports the type — every remaining hit was a declaration, a re-export, prose, or a generated artifact. The docs page was the one site not tabled on the card: it spelled SharingExecutionContext in the published method signatures (already stale since #7068), which a deletion would have turned into a dangling reference, so it is corrected here with a short note on why the whole envelope is what these methods take.

Changes

file change
spec/src/contracts/sharing-service.ts interface + its doc block deleted; the load-bearing narrative (measured (context as any).posture specimen; why tsc cannot police narrowing) moves into module-doc item 3, which the contracts and all three pins now point at
spec/src/contracts/{approval,report}-service.ts comment refs reworded — the shape is named as retired, the pointer re-aimed at the module doc
spec/src/contracts/sharing-service.test.ts import dropped; specimen re-anchor (below); third case flips from "twin unchanged in shape" to "twin stays retired"
plugins/plugin-sharing/src/index.ts re-export removed — public-surface removal #2
plugins/plugin-{sharing,approvals,reports}/src/exec-context-annotation.pin.ts pin rework (below)
spec/src/migrations/registry.ts ADR-0087 D3 semantic entry sharing-execution-context-retired
spec/{api-surface,export-origins}/contracts.json, spec/spec-changes.json, docs/protocol-upgrade-guide.md regenerated, never hand-edited
content/docs/kernel/runtime-services/sharing-service.mdx signatures + one comment
.changeset/retire-sharing-execution-context.md one changeset, non-major, public-surface callout + ADR-0087 marker

Pin rework — the mechanics (the card's judgment item)

The three exec-context-annotation.pin.ts files told their failure story as "the parameter narrows back to SharingExecutionContext". Deleting the type deletes the name in that sentence but not the failure mode: the six fields can be re-declared under any name, and the pins' fresh-literal excess-property checks only fire on the fields a given literal happens to spell (a re-narrowing to a shape that happens to carry posture would slip past). A blind find-and-delete would have quietly weakened all three.

Each pin now:

  1. keeps the retired shape as a local, non-exported RetiredSharingContextSpecimen — a deliberate copy, not an import, so nothing depends on the retired name again and the copy is what makes the deletion permanent;
  2. refutes every enforcement parameter against it by type identity — local Eq / Refute<T extends false> helpers, one tuple slot per parameter (4 in plugin-sharing, 6 in plugin-approvals, 6 in plugin-reports — the reports one includes OwnerContextResolver's return type, since a scheduled run adjudicates on whatever that resolves);
  3. keeps the existing literal-based positives and the @ts-expect-error negatives untouched, so a parameter erased to any still fails.

Same treatment in spec/src/contracts/sharing-service.test.ts: the three Refute<Eq<Ctx, SharingExecutionContext>> pins now measure against the specimen, and the shape-unchanged assertion moved onto the specimen so widening it field-by-field — the per-site subset the #6206 ruling removed — is still refused.

Header prose in all three pins gained a "HOW IT BITES, part 2" paragraph stating exactly this, so the mechanism is readable where it is enforced.

Gates — direction predicted first, then measured

gate prediction result
check:api-surface / check:export-origins, before regen RED on exactly one removed export each (dual-snapshot: export removals on two packages) ✅ red — ./contracts − SharingExecutionContext (interface), "1 breaking (removed/narrowed), 0 added"
same, after gen:api-surface + gen:export-origins green ✅ "public API surface + factory signatures unchanged", "4973 exports … resolve exactly as recorded"
check:generated all 11 artifacts current ✅ (after a rebuild — see deviation note)
pin rework: temporarily re-narrow ReadFilterContext to the specimen RED — Refute constraint violated and the literal checks fire TS2344 Type 'true' does not satisfy the constraint 'false' + TS2353 'posture' does not exist in type 'RetiredSharingContextSpecimen' + TS2322; file restored, green again
pnpm typecheck green (specimen ≠ ExecutionContext) ✅ 126/126
spec / plugin-sharing / plugin-approvals / plugin-reports tests green — no runtime behaviour moves ✅ 9454 / 418 / 452 / 68 passed
check-changeset-no-major, check-empty-changeset, check-adr-0087-registration green ✅ "1 declared-breaking changeset(s), each carrying an ADR-0087 disposition"
check:spec-changes, check:upgrade-guide green after gen:*

Four-step os-regen order followed: build first (the #7122 stale-dist trap), then api-surface/ and export-origins/, then check:generated.

Deviations from the dispatch card, stated

  1. ADR-0087 ledger entry added (not on the card, which specified only "one changeset, non-major, public-surface callout"). Left as a plain non-breaking changeset, the gate passes in silence — which is precisely the [finding] ADR-0087 台账没有「完备性」门禁:已发生的退役漏登记时全仓全绿,只有人工能发现(#6011 即如此) #6148 hole the gate was built for. SharingExecutionContext is the disposition class AGENTS.md names: a published TypeScript surface with no spec schema, so there is no retiredKey() tombstone and no parse rejection that could carry the prescription, and the ledger is the only channel that reaches an upgrader (same call as export-field-meta-constraints-retired and hook-context-session-roles-retired). The changeset therefore declares **BREAKING** and carries <!-- adr-0087: registered sharing-execution-context-retired -->. Bump levels stay non-major (spec minor, plugin-sharing minor, the two consumers patch) per the launch-window convention check-changeset-no-major enforces — note check:api-surface's advice text asks for a major, which that gate forbids during the window.
  2. content/docs/kernel/runtime-services/sharing-service.mdx updated — not on the card's file-face table, but it named the type in seven live signatures; a hand-written doc (not content/docs/references/**, not releases/).
  3. Stale-dist trap hit once, on purpose-adjacent grounds: the ledger edit landed after the first spec build, so check:generated flagged api-surface/ as stale-with-older-dist. Rebuilt and re-checked — snapshots unchanged, so the flag was the guard working, not a real drift.

content/docs/releases/ and docs/adr/**: untouched.

No auto-merge — the PM lands this serially.


Generated by Claude Code

…Context` type (#7218)

The deferred deletion recorded when #7070 split the convergence in two. #6523 /
PR #7068 converged 36 contract signatures onto the full `resolveAuthzContext`
envelope (the #6206 ruling: enforcement adjudicates on the whole envelope,
never a per-site subset); PR #7140 (identity: plugin-sharing, plugin-audit) and
PR #7206 (services: plugin-approvals, plugin-reports) re-annotated the
implementations. Both halves landed with the type still exported because it is
DEFINED in `packages/spec`, whose retirement is the spec seat's to make.
Nothing declares it any more, so it goes — from `@objectstack/spec` and from
`@objectstack/plugin-sharing`, which re-exported it.

Public-surface removal on two packages, so both generated snapshots are
regenerated (`api-surface/contracts.json`, `export-origins/contracts.json`),
and the changeset carries the callout plus an ADR-0087 D3 semantic entry
(`sharing-execution-context-retired`): a published TypeScript surface with no
spec schema has no `retiredKey()` tombstone and no parse rejection, so the
ledger is the only channel that reaches an upgrader.

The pins needed the deliberate pass, not a find-and-delete. All three
`exec-context-annotation.pin.ts` files told their failure story as "the
parameter narrows back to `SharingExecutionContext`" — a type the deletion
removes, while the failure mode it named survives: the six fields can be
re-declared under any name, and the fresh-literal excess-property checks fire
only on the fields a given literal happens to spell. Each pin now keeps the
retired shape as a local, non-exported SPECIMEN and refutes every enforcement
parameter against it by type identity, so a re-narrowing is red twice over and
neither check depends on the retired export coming back.
`packages/spec/src/contracts/sharing-service.test.ts` is re-anchored the same
way, and its "twin unchanged in shape" case becomes "twin stays retired". The
narrative the retired type's doc block carried — the measured `(context as
any).posture` specimen, and why tsc cannot police narrowing at all — moves to
the module doc of `contracts/sharing-service`, which the contracts and all
three pins now point at.

No runtime behaviour changes: the type was erased at compile time and no
signature's accepted shape moved.

Claude-Session: https://claude.ai/code/session_01ArkxxyvoyPaDhHiX5KhQBi

Co-authored-by: os-zhuang <steve@objectstack.ai>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 10:38am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 4 package(s): @objectstack/plugin-approvals, @objectstack/plugin-reports, @objectstack/plugin-sharing, @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/plugin-reports, @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/plugin-approvals, @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/plugin-sharing, @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/plugin-sharing, @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/plugin-approvals, @objectstack/plugin-sharing, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via packages/plugins/plugin-sharing, @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via packages/plugins/plugin-sharing, @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/plugin-approvals, @objectstack/plugin-reports, @objectstack/plugin-sharing, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/plugins/plugin-sharing, packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/plugin-approvals, @objectstack/plugin-sharing, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/plugin-approvals, @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

PM landing instruction (spec-lane seat #6017, session session_01PiRUoQkTSBBmpyXBY3cVn2) — base moved, refresh before landing.

PR #7322 (#6888 global_nav retirement) merged to main at 07:54Z, with two more queue merges ahead of it. It appended to the exact regions this PR touches: packages/spec/src/migrations/registry.ts step-17 (a conversionIds entry + rationale paragraph, alongside its D2 in conversions/registry.ts) and the regenerated spec-changes.json / docs/protocol-upgrade-guide.md.

Please:

  1. Fetch and merge origin/main into claude/issue-7218-retire-sharing-execution-context (merge, not rebase — repo convention). Expected conflict: migrations/registry.ts step-17 — resolve as a union: keep refactor(spec)!: retire global_nav from ACTION_LOCATIONS — a location the product never rendered, and the designer previewed anyway (#6888) #7322's action-global-nav-location-removed conversionIds entry + rationale verbatim AND your sharing-execution-context-retired D3 semantic entry; registry counts move accordingly (conversionIds 56 stays theirs; semantic 46 → 47 with yours).
  2. Never hand-merge the generated artifacts: after the merge, pnpm --filter @objectstack/spec build FIRST (gen:api-surface / gen:export-origins read the dist without asserting it is FRESH — a stale dist launders a phantom breaking removal into the committed baseline #7122 stale-dist trap), then regenerate spec-changes.json / docs/protocol-upgrade-guide.md / api-surface + export-origins from the merged tree (dual-snapshot rule), then check:generated to 11/11.
  3. Re-run the gate set, push, and confirm CI convergence on the new head with a short status comment here.

If the merge comes back clean with no conflict, just verify CI green on a refreshed base state and say so. Do NOT enable auto-merge — the PM lands this serially (it gates the #7297 registry-split dispatch).


Generated by Claude Code

claude and others added 2 commits August 10, 2026 08:34
The textual merge kept this branch's side of `spec-changes.json` and
`docs/protocol-upgrade-guide.md`, which predate PR #7322's
`action-global-nav-location-removed` conversion. Regenerated from the merged
registry so both that entry and this branch's `sharing-execution-context-retired`
semantic entry project into the artifacts. Generated files, never hand-merged.

Claude-Session: https://claude.ai/code/session_01ArkxxyvoyPaDhHiX5KhQBi

Co-authored-by: os-zhuang <steve@objectstack.ai>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

Base refreshed and re-verified — new head 922b800.

Merged origin/main (now at 4d94308, three merges past the PM note's #7322) into the branch. Merge, not rebase, per convention.

1. The predicted conflict did not materialise — but the artifact drift did.
packages/spec/src/migrations/registry.ts auto-merged cleanly: #7322 appended action-global-nav-location-removed to step-17's conversionIds (line 1347) while this branch appended sharing-execution-context-retired to the semantic array (line 3434), so git took both without a textual overlap. The union you asked for is what landed — verified by reading both entries in the merged file, not by trusting the merge exit code.

The real damage was one layer down, exactly where the note said not to hand-merge: spec-changes.json and docs/protocol-upgrade-guide.md are merge=os-regen, so the driver deferred them rather than text-merging, leaving this branch's pre-#7322 side in the tree. Regenerating from the merged registry restored #7322's conversion row in both artifacts (+15 lines: the action-global-nav-location-removed mechanical-table row and its rationale paragraph, plus the two spec-changes.json entries) alongside this branch's semantic entry. check-regen-pending confirms the handoff closed:

os-regen: 2 generated artifact(s) were merged WITHOUT a text merge and must be regenerated…
  ✓ packages/spec/spec-changes.json — current
  ✓ docs/protocol-upgrade-guide.md — current
os-regen: all deferred artifacts are current — marker cleared.

Had I only run check:generated without regenerating, it would have passed — the artifacts were self-consistent with the merged registry on my side's rows and simply missing theirs. Worth noting for the #7297 dispatch: a clean merge on the registry is precisely the case where the artifact loss is silent.

2. Regen order followed: pnpm --filter @objectstack/spec build FIRST (#7122), then gen:api-surface + gen:export-origins (dual-snapshot — both came back 0 shards rewritten, so the export removals were already correctly recorded and main's 5 new exports rebased in without touching this PR's removal), then gen:spec-changes + gen:upgrade-guide, then check:generated11/11 up to date.

3. Gate set re-run on the merged tree:

gate result
pnpm typecheck ✅ 126/126
spec / plugin-sharing / plugin-approvals / plugin-reports tests ✅ 9476 / 418 / 452 / 68 passed (spec picked up 22 new tests from main)
check:generated ✅ 11/11
check-adr-0087-registration ✅ 1 declared-breaking changeset, registered sharing-execution-context-retired
check-changeset-no-major, check-empty-changeset

Pushed as two commits — the merge (aa6332f) and the artifact regeneration (922b800) kept separate so the regenerated diff is reviewable on its own. Remote CI convergence on the new head is not confirmed yet; I'm watching it and will report if anything goes red.

Auto-merge not armed — still a draft for your serial landing.


Generated by Claude Code

…ire-sharing-execution-context

# Conflicts:
#	packages/spec/src/migrations/registry.ts

Copy link
Copy Markdown
Contributor Author

Conflict resolved, base refreshed again — new head b103e18 (base 7cdbcbb, six merges past the last refresh).

This time the step-17 conflict the earlier note predicted did fire: PR #7332/#7095's engine-find-formula-order-by-refused and this branch's sharing-execution-context-retired were both appended as the last element of the same semantic array, so git had no way to interleave them.

Resolved as a union, both entries kept verbatim, main's in its landed position and this branch's appended after it — so the diff against main stays a pure append and future step-17 landings conflict against my entry alone rather than reordering theirs. Step-17 semantic entries: 47 → 48.

Generated artifacts were again deferred by the os-regen driver — four of them this round, since main's new exports touched the contracts shards too. All regenerated from the merged tree (build first per #7122, then api-surface + export-origins, then spec-changes + upgrade-guide):

os-regen: 4 generated artifact(s) were merged WITHOUT a text merge…
  ✓ packages/spec/spec-changes.json    ✓ packages/spec/export-origins/contracts.json
  ✓ packages/spec/api-surface/contracts.json    ✓ docs/protocol-upgrade-guide.md
os-regen: all deferred artifacts are current — marker cleared.

Re-verified after the regen rather than assumed: SharingExecutionContext occurrences in both contracts shards = 0 (the removal survived main's +7 exports), and both ledger entries project into the upgrade guide and spec-changes.json.

gate result
pnpm typecheck ✅ 126/126
spec / plugin-sharing / plugin-approvals / plugin-reports ✅ 9557 / 418 / 452 / 68
check:generated ✅ 11/11
check-adr-0087-registration / no-major / empty-changeset

Net diff against main is unchanged at 15 files, +406 / −128 — the merge carried nothing extra. Remote CI on b103e18 is still running; I'll report only if it goes red.

Auto-merge not armed — still draft for your serial landing.


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review August 10, 2026 11:26
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 10, 2026
Any commits made after this event will not be merged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/l tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants