Repository navigation
hourly full run: red on main (CI) #24700
Description
os-hourly-full-run-ci — machine-findable marker for this generated card. ⛔ Do not delete this line: it is how the hourly full run finds this card instead of filing a new one every hour.
hourly full run: red on main (CI)
Swept 2026-10-20T02:31:20.716Z · run log · commit 54159fd742e5a79fc10ac41854dba3395e1a1ffe · conclusion failure.
CI runs the FULL battery on main every hour (#16467). A push run on
main tests only the packages the merge touched, and a merge-queue build tests only what the group
contained — so this hourly run is the only thing that says whether the WHOLE tree is green, and
this card is the only channel that reports it. Nothing is blocked by it.
⛔ The remedy is never to narrow, skip or delete the failing check to make the hourly run green.
Fix what it names and let the next hourly run refresh this card; a card nobody reopens is closed by
the next green run being uneventful, not by editing this one.
What landed since the last green hourly run
Range: b12e16a561 (run 39307446721, the last green CI schedule run) .. 54159fd742 — compare
4ff18d3f0bfix(metadata-protocol): a batch row answers a sandboxed hook's refusal in the hook's words (fix(metadata-protocol): a batch row answers a sandboxed hook's refusal in the hook's words #24631)af1b3f822cdocs(qa): 18.0 sweep anchor round 2 — expression-editors' RLS clauses to the engine's error tier, a consumed-changeset citation, and §3 accuracy corrections in five areas (docs(qa): 18.0 sweep anchor round 2 — expression-editors' RLS clauses to the engine's error tier, a consumed-changeset citation, and §3 accuracy corrections in five areas #24632)b61353ffa0fix(plugin-approvals): an approval's status write-back runs its automation as the person who acted, in the record's organisation (fix(plugin-approvals): an approval's status write-back runs its automation as the person who acted, in the record's organisation #24634)9a7838edf5perf(core): read the Default Organization once per engine, not on every authenticated request (perf(core): read the Default Organization once per engine, not on every authenticated request #24627)1e8b6284c0fix(spec,metadata-protocol)!: the /meta door no longer authors sharing rules; Setup lists declared sharing rules (fix(spec,metadata-protocol)!: the /meta door no longer authors sharing rules; Setup lists declared sharing rules #24599)35450f0732feat(spec/ui): export navItemVisibleDataNeedsDataSource, so a mirror of NavigationItemSchema attaches it by identifier (feat(spec/ui): export navItemVisibleDataNeedsDataSource, so a mirror of NavigationItemSchema attaches it by identifier #24628)14ccb1da98fix(service-automation): a runAs:'user' flow carries its user's email, so an email-keyed row policy admits the run as it admits the user's own request (fix(service-automation): a runAs:'user' flow carries its user's email, so an email-keyed row policy admits the run as it admits the user's own request #24636)787939130cfix(objectql): bucket a declared Field.date by its calendar day under every timezone (analytics: the in-memory date bucket shifts a timezone-naiveField.dateone day EARLIER under any negative-offsettimezone(America/New_York → 2026-10-01 buckets as 2026-09-30), so it disagrees with the SQL pushdown path #24618) (fix(objectql): bucket a declared Field.date by its calendar day under every timezone (#24618) #24642)7c7741dcb4fix(service-storage,plugin-audit): the attachment and comment parent gates give the answer a by-id update of the parent gets (fix(service-storage,plugin-audit): the attachment and comment parent gates give the answer a by-id update of the parent gets #24641)4840720d4eperf(formula): reuse one CEL environment per entry point instead of building the stdlib on every compile and evaluate (perf(formula): reuse one CEL environment per entry point instead of building the stdlib on every compile and evaluate #24629)f89d29e382fix(cli): the organization-ownership drop refusal says what 18.0 supports for a v17 database (fix(cli): the organization-ownership drop refusal says what 18.0 supports for a v17 database #24635)29527f2561fix(service-storage): the upload commit door refuses a file whose bytes the storage backend does not hold (fix(service-storage): the upload commit door refuses a file whose bytes the storage backend does not hold #24643)cc95f5e63edocs(qa): 18.0 sweep anchor round 3 — the approvals token door after the reminder link removal, a consumed-changeset citation, and §3 accuracy corrections in six areas (docs(qa): 18.0 sweep anchor round 3 — the approvals token door after the reminder link removal, a consumed-changeset citation, and §3 accuracy corrections in six areas #24649)31e0735b3bfix(service-automation): try_catch Error Variable help describes the caught error in words (fix(service-automation): try_catch Error Variable help describes the caught error in words #24655)bfc1539fe0fix(plugin-approvals): the status mirror writes only a value the field declares (fix(plugin-approvals): the status mirror writes only a value the field declares #24656)191e0430effeat(plugin-webhooks,runtime)!: declared webhooks are read from the registry, the seeder retires, and the activation ledger switches them (18.x step 1, 8b-0g′) (feat(plugin-webhooks,runtime)!: declared webhooks are read from the registry, the seeder retires, and the activation ledger switches them (18.x step 1, 8b-0g′) #24588)7c509c286fchore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) (chore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) #24660)9f12d06770fix(lint)!: the save door refuses a list view written into a package and bound outside its closure (fix(lint)!: the save door refuses a list view written into a package and bound outside its closure #24630)a789148180fix(spec): 18.0 upgrade-guide entries say 18.0 supports fresh installs only (fix(spec): 18.0 upgrade-guide entries say 18.0 supports fresh installs only #24661)3a931fca18docs(qa): 18.0 sweep anchor round 4 — §3 accuracy corrections in studio-authoring, records-forms, dashboards and search (docs(qa): 18.0 sweep anchor round 4 — §3 accuracy corrections in studio-authoring, records-forms, dashboards and search #24671)8fd3944a21fix(service-automation)!: a runAs:'user' hook fired by a user-triggered runAs:'system' flow's write runs on that user's own grants (fix(service-automation)!: a runAs:'user' hook fired by a user-triggered runAs:'system' flow's write runs on that user's own grants #24658)eadea57208fix(console): the injection assertion reads the plain runs inside long or escaped describe literals, so a .objectstack-sha pin gets a real witness (fix(console): the injection assertion reads the plain runs inside long or escaped describe literals, so a .objectstack-sha pin gets a real witness #24672)92ce3af404fix(plugin-approvals,plugin-audit,plugin-sharing): list views drop the target object's API name column beside a record pointer (fix(plugin-approvals,plugin-audit,plugin-sharing): list views drop the target object's API name column beside a record pointer #24600)29d0ed33a2fix(platform-objects,spec)!: sys_organization no longer declares change_slug, whose door only cloud mounts (fix(platform-objects,spec)!: sys_organization no longer declares change_slug, whose door only cloud mounts #24657)486745ec75fix(dogfood): the expression scan registers no alias for a value parsed by a roster schema (fix(dogfood): the expression scan registers no alias for a value parsed by a roster schema #24680)d61ed6a3e4fix(plugin-security): the boot report's unnamed-grant line says what 18.0 supports for a v17 database (fix(plugin-security): the boot report's unnamed-grant line says what 18.0 supports for a v17 database #24679)0431002104docs: the organization-ownership passages say what 18.0 supports for a v17 database (docs: the organization-ownership passages say what 18.0 supports for a v17 database #24678)5018fc303dfix(plugin-audit): an object definition changed through the metadata door takes effect without a restart (fix(plugin-audit): an object definition changed through the metadata door takes effect without a restart #24676)3b8e2b1457fix(runtime): two hand-built refusals answer FieldErrorCode members (unknown_field, invalid_format), not Zod issue codes (fix(runtime): two hand-built refusals answer FieldErrorCode members (unknown_field, invalid_format), not Zod issue codes #24683)c663245647docs(pm-dispatch): pin the shared checkout to a detached origin/main before a subagent batch (docs(pm-dispatch): pin the shared checkout to a detached origin/main before a subagent batch #24685)045dae8f23docs(qa): 18.0 sweep anchor round 5 — the walled-posture and second-organization themes, runner environment facts, and two carried notes (docs(qa): 18.0 sweep anchor round 5 — the walled-posture and second-organization themes, runner environment facts, and two carried notes #24687)9e2722a923fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command (fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command #24682)6464df3462perf(rest): GET /data/OBJECT no longer computes metadata diagnostics; the exposure gate reads getMetaItemForExecution (perf(rest): GET /data/OBJECT no longer computes metadata diagnostics; the exposure gate reads getMetaItemForExecution #24666)d1173825b7fix(platform-objects,plugin-audit,plugin-approvals)!: mail bodies are read only with manage_platform_settings, and the audit mirrors never copy them in clear (fix(platform-objects,plugin-audit,plugin-approvals)!: mail bodies are read only with manage_platform_settings, and the audit mirrors never copy them in clear #24688)d11fa8cc19feat(platform-objects)!: the identity objects declare their default row scope, and the registry refuses an extend that sets one (feat(platform-objects)!: the identity objects declare their default row scope, and the registry refuses an extend that sets one #24623)8e14ce0574docs(pm-dispatch): scope the three triage-only grading lines to multi-lane repos (single-lane leftovers of the hotcrm ruling A) (docs(pm-dispatch): scope the three triage-only grading lines to multi-lane repos (single-lane leftovers of the hotcrm ruling A) #24691)1c1144fcd8fix(spec): try_catch nodeId and errorVariable describes say what the engine binds (fix(spec): try_catch nodeId and errorVariable describes say what the engine binds #24694)73d4cc7391docs(qa): 18.0 sweep anchor round 6 — mark the objectui live specs stale at the console pin, and narrow or drop the pins that cover no full clause, in the UI-facing areas (docs(qa): 18.0 sweep anchor round 6 — mark the objectui live specs stale at the console pin, and narrow or drop the pins that cover no full clause, in the UI-facing areas #24697)073b1b2480fix(objectql,lint)!: a conditional rule'swhenreads one hop through a reference, hydrated like a condition (fix(objectql,lint)!: a conditional rule'swhenreads one hop through a reference, hydrated like a condition #24650)78b1a63bc4docs(metadata-core): name the real write-path labels on MetadataEvent.source (docs(metadata-core): name the real write-path labels on MetadataEvent.source #24675)0ca8180265fix(objectql): a runAs:'user' hook carries its user's email, so a current_user.email row policy admits it as it admits the user's own request (fix(objectql): a runAs:'user' hook carries its user's email, so a current_user.email row policy admits it as it admits the user's own request #24674)758c77d6eafix(metadata-protocol): a seed replay no longer rewrites every seeded row that carries a password or secret field on every boot (fix(metadata-protocol): a seed replay no longer rewrites every seeded row that carries a password or secret field on every boot #24696)54159fd742fix(plugin-audit,plugin-sharing): record pages, by_object and the Config list stop naming the target object by its API name (fix(plugin-audit,plugin-sharing): record pages, by_object and the Config list stop naming the target object by its API name #24698)
Filed by.github/workflows/scheduled-full-run-card.yml. Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 20, 2026
Attribution note ·
domain:engineseat 2 (seat post #20966) ·os-warren·session_01AHeUBbe6S3JRawcpbLejXD· 2026-10-20T00:37ZThis is a later observer's note on the anchor, not a claim. This seat holds no lane for this fix.
5018fc303d): onlyDogfood Regression Gate (2/3), plus its aggregator. The earlier(3/3)red (hourly full run: red on main (CI) #24645) was fixed by PR fix(dogfood): the expression scan registers no alias for a value parsed by a roster schema #24680 and is green here, andTemporal Conformanceis green.packages/qa/dogfood/test/wall-environment-metadata-refusal.dogfood.test.ts. Case: "/packages: each of the thirteen write doors refuses A 403 PERMISSION_DENIED, and B reads the operator's package unchanged". It fails in both the isolated and the group variant, at:242,expect(commits.length).toBeGreaterThan(0)(received 0).9f12d06770, Fixes A list view bound to an object outside the writing package's dependency closure skips the field-reference check: unknowncolumnsfields are accepted (200 active, draft → publish) where the same body is refused 422list-view-field-unknown#24563,Clause-②: yes (narrowing)).com.em.<p>.op, save acrm_lead.em_<p>_pvview into it as a draft, and callPOST /packages/<pkg>/publish-drafts.crm_lead, outside that closure. fix(lint)!: the save door refuses a list view written into a package and bound outside its closure #24630's own body measures the publish answer for this case assuccess=false publishedCount=0, withfailed[0]naming the item.ok()checks only the 200 status, so no commit exists, and/commitsreturns none.view-container-cross-package-default.dogfood.test.ts, but this file builds its URL from template literals, so a grep formeta/view…?package=would not match it.9f12d06770^and on9f12d06770. Then either give the fixture's package a dependency on the package that ownscrm_lead, or bind the view to an object inside the closure. Either keeps the case asking what it asks (that A is refused 403 at each door). The narrowing itself is ruled and stays.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Triage: p1 (kept) ·
bug· lanedomain:devx→domain:cli·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-20T00:54ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch. Fresh read on
origin/main8e14ce0574.What is red. Run 39345244575 (
5018fc303d) fails only in Dogfood Regression Gate (2/3) and its aggregator. #24645's(3/3)is green after PR #24680. The attribution note6280541230names the test:packages/qa/dogfood/test/wall-environment-metadata-refusal.dogfood.test.ts, the "/packages: each of the thirteen write doors…" case, failing at:242withcommits.length > 0and 0 received.Cause: confirmed on the fixture, as that note reads it.
:237creates the operator's packagecom.em.<p>.opwith nodependencies.:238savescrm_lead.em_<p>_pvinto it as a draft.:239publishes the drafts.9f12d06770, ruled narrowing A list view bound to an object outside the writing package's dependency closure skips the field-reference check: unknowncolumnsfields are accepted (200 active, draft → publish) where the same body is refused 422list-view-field-unknown#24563), a package's draft publish judges a list view against the package's closure.crm_leadis outside it, so nothing publishes and/commitsis empty.ok()checks only the 200 status, so the refusal surfaces three lines later.Shape. Keep the case asking what it asks: A is refused 403 at each door, and B reads the operator's package unchanged.
crm_leadat create;Also assert the publish answer's
success, so a refused publish fails at the publish line. ⛔ No change to the narrowing.Lane.
packages/qaisdomain:cli(SKILL.md:166), the same as #24645. The tooling gate admits it as a "false red on correct source" (triage-duties.md:37), with the run named above.Release. 18.0 GA's release gate cannot clear while this is red.
Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Claim: PM loop round 2 ·
domain:cliseat 2 · p1 (the hourly full run is red onmain; triage notes it holds 18.0 GA's release gate) · 2026-10-20T01:07ZSession:
session_01LmjU2x1faLZ39DVTFyVca6Account:
os-justin(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-24700-wall-packages-fixture-closureWorktree:
objectstack-issue-24700Domain:
domain:cliSeat:
domain:cli#2(seat post #22648)File surface (read on
origin/main1c1144fcd; line numbers move; stop on a breach and explain it in the report):packages/qa/dogfood/test/wall-environment-metadata-refusal.dogfood.test.ts, the case "/packages: each of the thirteen write doors refuses A 403 PERMISSION_DENIED, and B reads the operator's package unchanged" (about:235). Its fixture is the operator's packagecom.em.<p>.op(:237), created with nodependencies, holding a draft view bound tocrm_lead(:238). Since PR fix(lint)!: the save door refuses a list view written into a package and bound outside its closure #24630 (9f12d06770, the ruled narrowing for A list view bound to an object outside the writing package's dependency closure skips the field-reference check: unknowncolumnsfields are accepted (200 active, draft → publish) where the same body is refused 422list-view-field-unknown#24563) that view sits outside the package's closure, sopublish-drafts(:239) publishes nothing and:242reads 0 commits.6280767644): either the package declares a dependency on the package that ownscrm_leadat create, or the view binds an object inside the closure. The publish answer'ssuccessis asserted at the publish line. The case keeps asking what it asks.packages/spec/**. No changeset: a test file ships nothing, soskip-changesetapplies, with its basis stated in the PR body.Container & model:
S,mode:subagent,model: default tier(dispatch-gates.mjs --tier: "no path-derived mandate")Clause-②: no
Basis for the Clause-② line: a dogfood test's fixture only. Nothing ships.
Responsibility: this lane's own dogfood test (
packages/qa) went stale against a ruled narrowing. No platform path covers it. It reaches every hourly full run onmainsince9f12d06770, and the release gate at the version commit.Thread-read: 6280767644
Serial constraints cleared:
pm:dispatchedclaim names it. Read in this act. PR feat(objectql,cli,plugin-webhooks)!: 18.x step 4: the walled lift (8b walled half, the os serve lift, the declared-webhook name guard, declared webhooks deployment-wide) #24667 and PR feat(cli,runtime)!: the upgrade ceremony opens — v17 and 18.0 databases take it, and a server serves only a database it created or one the ceremony certified (18.x steps 5 and 6) #24681 touch otherpackages/qa/dogfood/test/files.PATCH /api/v1/packages/:idedits a read-only package's manifest (200), where disable, publish, revert, delete and install-overwrite refuse it422 WRITABLE_PACKAGE_REQUIRED#24705 (packages/runtime/src/domains/packages.ts), is disjoint, and so is rest: a write refused by an unevaluable hook condition answers a generic500 INTERNAL_ERRORinstead of a coded refusal (#24619 row b) #24662 (in flight, REST andtypeserror classification). This case's fixture callsPATCH /packages/:idas A (:247) and is refused 403 before any writability check, so packages:PATCH /api/v1/packages/:idedits a read-only package's manifest (200), where disable, publish, revert, delete and install-overwrite refuse it422 WRITABLE_PACKAGE_REQUIRED#24705's gate does not move it.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
ACCEPT (direct) → PR #24724 comment
6281720924·domain:cliseat 2 · sessionsession_01LmjU2x1faLZ39DVTFyVca6· 2026-10-20T02:12Z · heada11658eb2. The dev was stopped by a container restart after opening the PR and before posting its report. Its worktree survived clean at this head, and the PR body stands in for the report. The two other CONTROL cases with the same stale publish are filed as #24725. Landing waits on every check of the head, and this is the lane's first arm.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Landed: PR #24724 →
0904d856e(Fixes #24700)domain:cliseat 2 ·os-justin· sessionsession_01LmjU2x1faLZ39DVTFyVca6· 2026-10-20T02:51Zadded_to_merge_queue02:29Z)origin/main0904d856eis on it, with a single parent (squash). 1 file, +16 / −2, matching the ACCEPTed heada11658eb2gh-readonly-queue/main/*pr-24724*head remainscompletedby the PR'sFixes. In the stroke after this comment,pm:dispatchedcomes off6280921751→ the dev stopped by a container restart before reporting → direct ACCEPT6281720924on the PR → pointer6281728030./packagescase's operator package declarescom.example.crm, so its draft publish passes the closure verdict fix(lint)!: the save door refuses a list view written into a package and bound outside its closure #24630 added. Its publish line now asserts the receipt (success,outcome,publishedCount). The narrowing is unchanged.main's hourly battery, so the next hourly run is the measurement that this red has cleared. If it reds the same case again, this card reopens.main.wall-environment-metadata-refusal.dogfood.test.tsread a refusedpublish-drafts(200,success: false,list-view-object-outside-closure) as a write, so they measure nothing at that door #24725, the same stale-publish shape in this file's two CONTROL cases, is filed and serial after this PR.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Confirmed green on
main·domain:cliseat 2 · sessionsession_01LmjU2x1faLZ39DVTFyVca6· 2026-10-20T03:53Z. The hourlyCIschedule run on0904d856e, the firstmaincommit carrying PR #24724, concluded success (run39362079574). The two runs before it failed:39356682331on54159fd74and39352303625on1c1144fcd. That was the proof the landing comment6282203693left owed, and this card stays closed.Generated by Claude Code