Repository navigation
fix(dogfood): the wall /packages case's operator package declares the CRM dependency its view binds - #24724
Conversation
… CRM dependency its view binds The case "/packages: each of the thirteen write doors refuses A ..." saved a draft list view bound to crm_lead into a package created with no dependencies. Since the save door judges a package's list view against the package's closure, publish-drafts refuses that view (200, success: false, publishedCount: 0) and the case read 0 commits three lines later. The operator's package now declares com.example.crm, the package that ships crm_lead, and the publish line asserts the receipt (success, outcome published, publishedCount 1), so a refused publish fails where it breaks, naming its cause. Claude-Session: https://claude.ai/code/session_01LmjU2x1faLZ39DVTFyVca6 Co-authored-by: Claude <noreply@anthropic.com>
…ll-packages-fixture-closure Claude-Session: https://claude.ai/code/session_01LmjU2x1faLZ39DVTFyVca6 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
席位核对 · ACCEPT (direct acceptance)
Why direct. The dev (a
Accepted deviations:
Out-of-scope dispositions:
Landing: this is the main-red fix, the first PR this lane arms. It goes to the queue by this seat once every check on this head reads Generated by Claude Code |
Fixes #24700
Clause-②: no
The hourly full run on
main(run 39345244575,5018fc303d) is red inDogfood Regression Gate (2/3)on one case ofpackages/qa/dogfood/test/wall-environment-metadata-refusal.dogfood.test.ts. The case is "/packages: each of the thirteen write doors refuses A 403 PERMISSION_DENIED, and B reads the operator's package unchanged", and it fails in both walled postures (isolatedandgroup) atexpect(commits.length).toBeGreaterThan(0).Cause (measured, see Evidence)
com.em.iso.op/com.em.gro.opwith nodependencies.crm_leadinto that package, then callsPOST /packages/:id/publish-drafts.9f12d06770, the ruled narrowing), a package draft publish judges a list view against the package's closure.crm_leadbelongs tocom.example.crm, which is outside that closure.200withdata.success: false,outcome: refused,publishedCount: 0.ok()reads only the status, so the refusal surfaced three lines later as zero commits.The narrowing is ruled and stays. This PR changes one test file and nothing else.
What changes (one case, one file)
POST /packagesthe package now declaresdependencies: { 'com.example.crm': '*' }, in the bare-manifest body the case already sent.dependenciesis a declaredManifestSchemarow, andPackageInstallManifestSchemaextendsManifestSchema.crm_lead, so every later line of the case keeps the names it read before: the re-save as draft, the orphan view, the thirteen doors and B's reads. Zero downstream lines change.crm_lead.em_PREFIX_pvreference in the case.data:{ success: true, outcome: 'published', publishedCount: 1 }, withfailed[]as the assertion message.successof the200envelope is constant, so the assertion readsdata, asview-container-cross-package-default.dogfood.test.tsdoes.CRM_PKGnamescom.example.crm, whichexamples/app-crm/objectstack.config.tsdeclares asmanifest.id. This follows the same literal convention as that sibling file'sSHOWCASE.Evidence
Every run used the same command,
pnpm exec vitest run --maxWorkers=2 test/wall-environment-metadata-refusal.dogfood.test.ts, run inpackages/qa/dogfoodunder the shared verify lock.pnpm turbo run build --filter=@objectstack/dogfood, the dogfood gate's own build step.singlecontrol.1c1144fcd, the file as onmain2 failed, 21 passed. In both postures:AssertionError: expected 0 to be greater than 0at:242:30, the hourly run's linemainfile. Only #24630's rule-context line is removed frompackages/lint/src/runtime-gate.ts(thepackageScopeInForce(args.packageScope)spread). Lint rebuilt,ablation-dist-preflight --absentgreen23 passed70fe76cd6, this change23 passed70fe76cd6with the dependency emptied (dependencies: {})2 failedat the new publish line,:253:10. The message is the refusal:view/crm_lead.em_iso_pv failed author-time validation: 1 issue, views[0].object [list-view-object-outside-closure]. Its hint: "Declare a dependency on the package that defines crm_lead in the dependencies of com.em.iso.op's manifest" (thegroupposture is the same withem_gro)a11658eb2, after mergingorigin/main78b1a63bc23 passed9f12d06770^. R2 stands in for that run and is a single-variable control on the current tree. With only the narrowing's line gone, the unchanged case is green. So the narrowing is the case's only cause of red, and no other line of the case is stale against it.scripts/ablation-replace.mjs(WRAP), was restored and proven hash-equal toHEAD, and left a clean tree.ablation-dist-preflightfound the line back in all four lintdistfiles.tsc --noEmitinpackages/qa/dogfoodexits 0 ona11658eb2, and--listFilesincludes this file.dispatch-gates.mjs --commands, 55) ran ona11658eb2: 54 exit 0.check:dual-build-cjs-loadsexits 3 with PREREQUISITE NOT MET, because it reads every package'sdistand eight packages outside the dogfood closure are unbuilt locally. That is NOT MEASURED locally, and CI'sLint & Repo Gatesreads it.pnpm lintona11658eb2:LINT_EXIT=0(theeslint . --no-inline-configrun printed no finding).Dogfood is not in the PR or queue fast set; it runs on
main's hourly full battery. The runs above are the pre-merge reading, and the next hourly run refreshes #24700.Changeset
None.
skip-changeset: the diff is one file underpackages/qa/dogfood/test/,@objectstack/dogfoodis"private": true, and it ships nothing.Acceptance notes
CONTROL: the platform operator writes at every one of these doorsand thesingle (CONTROL)case in this same file. Both were held off by this dispatch, so they are not changed here.publish-draftsreceipt (R5, restored and proven hash-equal toHEAD). This case's two publishes answerpublished, publishedCount 1.200withsuccess: false, outcome: refused, publishedCount: 0, each withlist-view-object-outside-closure:crm_lead.em_iso_pkgvintocom.em.iso.opctl,crm_lead.em_gro_pkgvintocom.em.gro.opctl, andcrm_lead.em_sin_pvintocom.em.sin.a.ok()reads each as "the operator writes" (walled) or "writes as before" (single), so these controls measure nothing at the publish-drafts door.com.example.crmat create and assert the receipt. Raised with the seat.ok()stays status-only for every other line. Only this case's publish line reads the receipt.Generated by Claude Code