Skip to content

docs(qa): retarget rollup-summary-filter editor half at duplicate route - #11913

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-9788-rollup-filter-duplicate-route
Aug 25, 2026
Merged

docs(qa): retarget rollup-summary-filter editor half at duplicate route#11913
os-steve merged 1 commit into
mainfrom
claude/issue-9788-rollup-filter-duplicate-route

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Part of #9788.

What

Retargets automation.rollup-summary-filter clause 5 (the visual filter-editor half, docs/qa/platform-checklist/areas/automation.json) at the platform's supported runtime path, per the maintainer ruling on #9788 (2026-08-19, verbatim: 「接受你的所有建议」): the stock showcase does not boot with a project-scoped writable package. The runner instead clones the showcase base into a writable target via POST /packages/:id/duplicate (ADR-0070 D4 "duplicate base") before exercising Studio's visual filter editor.

Changes to the item:

  • steps — the editor-half step now names the duplicate-route call instead of "(editor half, blocked)".
  • acceptance clause 5 — retargeted wording; oracle stays screenshot, since the clause specifically tests the visual editor (corroborated by a meta-API read of the persisted filter), not just the API.
  • Removed the item-level blocked: {by: "fixture", ref: "#3358 …"} block and the matching fixtures.knownGaps entry — the clause is runnable on every boot now, not fixture-blocked.
  • Added fixtures.requires and source entries citing the duplicate route (packages/runtime/src/domains/packages.ts) and ADR-0070 §D4.
  • revision 2 → 3, with a history entry recording the retarget and its rationale.

Verified before writing

  • POST /packages/:id/duplicate exists (packages/runtime/src/domains/packages.ts:819) and really produces a writable package — its own requireWritablePackage refusal message names this exact route as the remedy ("duplicate this one into a writable base … and change that"), and protocol.duplicatePackage (packages/metadata-protocol/src/protocol.ts:16807) explicitly strips scope from the manifest copy because "the whole point of a duplicate is a WRITABLE base." ADR-0070 §D4 names the same gesture ("clone a base into a new writable package — the Airtable 'duplicate base' gesture").
  • Re-read automation.json on origin/main first: clause 5, the blocked.by:fixture entry and its ref: #3358 were all still present as the card described — premise held, nothing was retargeted already.

Scope

Only docs/qa/platform-checklist/areas/automation.json. The sibling half named in the ruling — docs/qa/platform-checklist/areas/access-security.jsonaccess-security.readonly-package-locks-studio — is out of scope: #11780 already has that file in its changed-file list, so this PR leaves it untouched.

Local gates

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (run against the final commit 86c4a39b9) names two matched families for this diff, both green:

  • pnpm check:doc-authoring — "389 files clean — no bare metadata literals."
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions — self-test 50/50, "22 record-scoped formula example(s) … judged clean," "9 @example(s) judged clean," "14 predicate(s) … judged clean; 6 skipped as undeterminable" (documented, unrelated to this diff).

check:platform-checklist is not CI-wired (manual cadence by maintainer decision — README), so dispatch-gates.mjs does not name it, but the area README asks for it "whenever you touch the checklist," so it was run anyway: check-platform-checklist: OK — 15 areas, 207 items (207 active); coverage: 31 kinds mapped, 0 waived; traps: 19 documented, 19 in use; provisioning: 4 area recipes, 7 item references resolved (1 area-qualified), 4/4 recipes referenced.

No changeset — QA-checklist-only change, nothing user-visible or published. skip-changeset label applied.


Generated by Claude Code

automation.rollup-summary-filter clause 5 (the visual filter-editor half)
was blocked.by:fixture, tracked at #3358. The maintainer ruled NO on a
stock writable showcase package (2026-08-19, 「接受你的所有建议」) and
directed retargeting at the platform's own runtime path instead: the
runner clones the showcase base into a writable target via
POST /packages/:id/duplicate (ADR-0070 D4 "duplicate base").
Bumped revision to 3 with a history entry; removed the item-level
blocked.by:fixture entry and its matching fixtures.knownGaps line, since
the clause is runnable on every boot now. Oracle stays screenshot — the
clause specifically exercises the visual editor, corroborated by a
meta-API read of the persisted filter.
The sibling half (access-security.json, readonly-package-locks-studio)
is held by open PR #11780 and stays out of scope here — see the PR body
for the card relationship.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015ahemw8RcTgqtxrj15PEZx
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 25, 2026
@os-steve
os-steve marked this pull request as ready for review August 25, 2026 00:29
@os-steveClaude

Copy link
Copy Markdown
CollaboratorAuthor

ACCEPT. Verified against the branch and origin/main, not read back from the report. Flipped out of draft — docs/qa/** is not a governed surface, so this one lands through the normal route.

claimhow I checkedresult
scope is one filegit diff --stat origin/main...HEADautomation.json only, +15/−13
the held sibling is untouchedgit diff --name-only | grep -c access-security.json0
Part of, not FixesPR body✅ card stays open for the second half
revision + historythe diff2 → 3, history entry present
the blocker is actually removedthe diffblocked: {by: fixture, ref: #3358} gone, and the matching fixtures.knownGaps line with it

The load-bearing Zone-2 claim re-derived independently — this is the one that, if wrong, would have written a confidently-wrong clause into the checklist:

packages/runtime/src/domains/packages.ts
// POST /packages/:id/duplicate → clone this base into a NEW writable
// package, re-namespacing objects + rewriting references (ADR-0070 D4
// "duplicate base"). Body { targetPackageId, targetName?, targetNamespace? }.

and ADR-0070 line 80: "Duplicate: clone a base into a new writable package (the Airtable "duplicate base" gesture)." Control in the same read: a phrase that cannot be in that ADR returned 0. So the route exists, is documented, and genuinely produces a writable base — the ruling rests on something real.

Two judgment calls I specifically agree with:

  • Keeping oracle: screenshot. The clause tests the visual editor; retargeting the setup step does not turn it into an API assertion. Corroborating with a meta-API read of the persisted filter is the right belt-and-braces.
  • Moving the writable-package need into fixtures.requires rather than deleting it. The requirement did not vanish, it changed how it is met. A reader who sees only the removed knownGaps would think the constraint was imagined.

Running check:platform-checklist even though dispatch-gates.mjs does not name it (it is not CI-wired) was correct — the area README asks for it, and "the tool didn't name it" is not a reason to skip a gate the file's own conventions require.

The access-security half stays blocked behind PR #11780 and is dispatched separately when that lands.


Generated by Claude Code

@os-steve
os-steve added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit bb62d4dAug 25, 2026
27 checks passed
@os-steve
os-steve deleted the claude/issue-9788-rollup-filter-duplicate-route branch August 25, 2026 00:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-steve@claude