You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
dogfood: activity-text-predicate.dogfood.test.ts times out at vitest's 5000 ms default under load (Rerun Safety pass 1, 10-02 and 10-14); the file sums 12.9 s unloaded with no declared budget #23977
Filing gate ①: a measured CI defect at a public door. reach: the Rerun Safety nightly on main. Its pass 1 went red on this file on two readable nights. That makes it the "dogfood" half of #23880's pass-1 failures (the "cli" half was turbo stopping cli after dogfood failed).
Filed by the domain:devx seat 2 (#20163) · os-sales · session_016PVjjuVPte5XEJvaQx1E4t. It is the split card from the #23880 dev's report (6218645603, out-of-scope finding 1), filed by the seat under os-dev.md. ⛔ Not a claim; the lane and grade are triage's.
Reader who acts: the dogfood lane, for packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts.
CI: Rerun Safety pass 1, Error: Test timed out in 5000ms. in this file. It happened on 10-02 (run 36962761984, log line 465) and on 10-14 (run 38509291145, log line 470).
Unloaded, on an idle 4-core container at 98ba1bf1d2:
the file's 22 tests sum to 12.9 s;
the test control: the unmasking reader filters and groups by every column of a pinned parent alone takes 3377 ms, 68 % of vitest's 5000 ms default;
the sibling files activity-parent-read-gate (1063 ms) and audit-log-parent-read-gate (974 ms) pass.
Budget: the file is over the 10 s per-file line (AGENTS.md; ruling record 6181973363), and it declares no // test-budget:.
The hourly battery: the hourly CI (Dogfood 3 shards) stayed green in the same window. Under Rerun Safety's one-runner unsharded load, the 3.4 s test crosses 5 s.
Done when
The file runs under the 10 s line, with the fix in the test or in what it waits on. Alternatively, it carries a measured budget in a class a ruling names. ⛔ No timeout raise, no deletion without a named duplicate, and no move to a slower or skipped project (ruling 6181973363 item 5). The control test then no longer sits within 2× of its timeout under load.
Dedupe
MCP search_issues on this repository, closed included, at this filing: activity-text-predicate dogfood test timed out 5000ms file over 10 s unmasking reader control gave 7 hits. #23185 (test budget, devx, closed), #19768 and #19631 (other files' 5000 ms timeouts, closed), #22400, #22653, #15240 and #20820 are unrelated. None is this file.
Dedupe words: activity-text-predicate timeout; dogfood file over 10 s; unmasking reader control test 5000ms.
Why domain:cli:packages/qa is domain:cli by the domain table.
For the claimant: fix the file to what it waits on, under the test-budget ruling 6181973363. Declare a budget only where the wait is real. ⛔ Raising vitest's timeout alone does not fix it.
Claim: PM loop round 1 (#23977: activity-text-predicate.dogfood.test.ts runs under the 10 s per-file line, with its slow control case far from vitest's 5000 ms default under load, by fixing what the file waits on, with no timeout raise, no deletion and no move) · 2026-10-16T17:51Z
Session: session_018t6a5rvqPRvEDMCVVW9kYT
Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee from this act)
Branch: claude/issue-23977-activity-text-predicate-budget
Worktree: objectstack-issue-23977
Domain: domain:cli
Seat: domain:cli#2 (seat post #22648)
Scope: batch 3.
No open p0, pm:blocking or target: card of this lane is in pm:queue. This card is the lane's only queued p1.
Seat 1's claim 6220729537 records the maintainer's word to that seat, 「当前任务处理完,后续只派p3卡」, so this card is this seat's.
File surface (read on origin/maind132140ebc; stop on a breach and explain it in the report):
packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts only (500 lines). The fix goes to what the file waits on.
Its beforeAll boot (about :241) is clocked as a hook.
Its control case (about :470) makes about 30 sequential list calls.
Probes that are independent of each other may run concurrently, and every assertion stays.
A first load may be paid at module top, by AGENTS.md:124's convention, through what @objectstack/verify already exports.
⛔ Hold-offs:
No timeout raise. No deletion without a named duplicate. No move to a slower or skipped project (ruling 6181973363 item 5).
No // test-budget: line: a single beforeAll boot is neither class that ruling names. If the measurement shows the wait is real and of a named class, stop and report.
No new export from @objectstack/verify (boot-warm-up.testkit.ts is not exported, and exporting it widens a published package).
No platform code. If the wait is in a platform path (a slow query, a lock, the boot itself), report it with class: and reach: instead of fixing it here.
{
"issue": 23977,
"status": "rework",
"branch": "claude/issue-23977-activity-text-predicate-budget",
"pr": "https://github.com/objectstack-ai/objectstack/pull/24026",
"session": "session_018t6a5rvqPRvEDMCVVW9kYT",
"premise_still_valid": true,
"summary": "Part of #23977, not Fixes: one of the card's two halves is met. MET: the control case no longer sits within 2x of its timeout under load. Base timed out at 5000 ms on 2 of 3 loaded runs here (control 5028/4892/5031 ms, the nightly's red reproduced). Head splits it into 4 cases with every probe and assertion moved intact, and the slowest part took 2488/1906/1629 ms loaded. NOT MET: the file is not under the 10 s line. The module-scope warm-up (bootStack, already exported) took the hook from 5.8-6.8 s to 3.1-3.4 s, but the file's unloaded median only fell from 16022 to 12247 ms. What remains is 141 CPU-bound requests at a median of 60-74 ms each, and 62-72 % of each request is one platform cost: the REST API-exposure gate re-validates every object's metadata on every data request (finding 1). That is platform code the claim holds off. Assumption 2 is falsified: concurrent probes were no faster (2137 ms vs 2016 ms for 33), so no concurrency was added. Recommended routing: the seat files finding 1 in the rest/metadata-protocol lane, #23977 gains a Blocked-by: line naming it and stays open, and the file is re-measured after it lands (projected roughly 6-8 s by the measured ratio). Worktree removed after the PR opened.",
"tests": "All at head 0c7592a22, through os-verify-lock, shared 4-vCPU box. (1) pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/activity-text-predicate.dogfood.test.ts test/activity-parent-read-gate.dogfood.test.ts test/audit-log-parent-read-gate.dogfood.test.ts => VITEST_EXIT=0, 'Test Files 3 passed (3) / Tests 39 passed (39)'; the file line read 25 tests 12514ms. (2) pnpm --filter @objectstack/dogfood typecheck (tsc --noEmit) => exit 0; tsc --listFilesOnly lists the changed file once (308 dogfood test files in the program). (3) A/B: base = untracked copy blob bb7cbee56a89 (identical to 61a680956), head = 0c7592a22. Isolated, interleaved B-H/H-B/B-H, file line of the default reporter (agent variables unset). Unloaded file ms: base 17680/16022/15338 (median 16022), head 12059/12731/12247 (median 12247). Loaded with 7 CPU hogs (about 2.2-2.7x): base 42696(1 failed)/34224/32896(1 failed) (median 34224), head 37072/29319/26863 (median 29319). Control: base unloaded 2572/2493/2398, loaded 5028/4892/5031 (both failures are 'Error: Test timed out in 5000ms.'); head slowest part unloaded 779/804/832, loaded 2488/1906/1629. (4) Ablation, one-time, prediction written first ('3 failed / 22 passed: the three per-class control parts on expect(snapHit.rows).toBe(1)'). node scripts/ablation-replace.mjs wrap mode changed the per-class snapHit filter to NOMATCH. Mutation landed: anchor x1 -> x0, blob 8b5eb87856f9 -> 2ac1463e3d0a. vitest exit=1, '25 tests | 3 failed', each 'expected +0 to be 1'. Restore: blob after restore 8b5eb87856f9 == HEAD, git diff HEAD empty, ABLATION_TOOL_EXIT=0. No build was involved: the test file is source. (5) Assertions kept: base's 12 it/describe title literals hash 887e5a912c4fe675 (sha256 prefix, file order), and head's 14 minus the 2 added part titles hash the same. expect( 40 = 40.",
"gates": "Local subset at 0c7592a22. pnpm exec eslint --no-inline-config packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts => ESLINT_EXIT=0. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; 1 path vs merge base 61a680956) derived 53 commands; each was run with its exit captured before any pipe. 52 => exit 0. pnpm check:dual-build-cjs-loads => exit 3, PREREQUISITE NOT MET (no dist for studio, client-react, embedder-openai, knowledge-*, organizations, service-cluster-redis, service-knowledge), so NOT MEASURED locally. --ran with ':: exit N' per line => RAN_EXIT=0, '53 derived famil(ies) accounted for — 52 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. CI on PR #24026 at report time (head 0c7592a22240): 'No other open PR may claim the same issue' completed/success; 'Packed-tarball smoke (opt-in)' completed/skipped; 22 more in_progress, among them Lint & Repo Gates' lanes (Lint · ESLint, Lint · repo & tooling gates, Lint · docs & code guards, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · scoped ×3), Type Check · workspace/source gates/consumer gates/debt ledger, Check Changeset, Governed Surface Queue Guard, 'Part-of PR must not also close its card', 'The card this PR closes must claim this branch'. Test Core and Build Core were not yet listed. Dogfood is not a PR-CI family; it runs on main's full battery.",
"deviations": [
"PR first line is 'Part of #23977', not the closing-keyword line the dispatch asked for: the 10 s half is unmet, and os-dev.md's DoD says a merge that must not close the card uses Part of.",
"Assumption 2 is falsified, so no concurrency was added. The dispatch's 'concurrency ablation' became an ablation of the split: one moved probe returns a wrong answer and the case goes red.",
"The control case is split into 4 its, as the dispatch allows for a timeout. So the head title-line set has 2 added titles; every base title is kept verbatim.",
"Local scope: the whole dogfood suite was not run (the file plus its 2 named siblings only, per the dispatch). test:repo was not run (no repo-project file touched). check:dual-build-cjs-loads is NOT MEASURED locally (exit 3).",
"Load emulation was 7 CPU hogs, about 2.2-2.7x slower, which is harsher than the card's about 1.5x. The box is shared, so other agents' unlocked work ran too.",
"Environment: about an hour into the run the container's disk hit 0 bytes free. Two probe runs died on ENOSPC (one at module load, one on the tool's own output); they were re-run and are not counted. The dominant consumer then was the shared scratchpad's issue-23805 directory (21G, last written 08:49Z). I deleted nothing outside my own scratch; space came back (22G free) without my action.",
"Commit trailers use AGENTS.md's model-free pair (Claude-Session + 'Co-authored-by: Claude'), not the harness reminder's model-named Co-Authored-By.",
"The branch is 7 commits behind origin/main and was not merged: none of those commits touch the file, armed.ts, catalog-permission-set.ts, packages/qa/dogfood/vitest.config.ts or packages/verify/src/harness.ts, and git merge-tree is clean.",
"No labels written (the dispatch said label-write: none). The seat applies skip-changeset (Clause-②: no, private package)."
],
"files_changed": [
"packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts"
],
"mcp_calls": "0 — none",
"api_writes": "2 — both through the fleet-write relay (repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, run 38953684601 = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/24026/assignees ['os-tesla'], read-back 9411 bytes sent = 9411 stored; (2) this os-dev-report comment = POST /repos/objectstack-ai/objectstack/issues/23977/comments via scripts/pm/post-stamped.mjs. Plus 2 git pushes of the branch (not REST).",
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: a measured red at a CI door, the Rerun Safety nightly on main (this card's own reach), plus every authenticated REST data request in production paying the same cost · evidence: every /data/OBJECT read and query request enters enforceApiAccess (packages/rest/src/rest-server.ts) to read ONE object's enable flags. That calls loadObjectItems (packages/rest/src/meta-item-read-gate.ts:409) -> protocol getMetaItems({type:'object'}) -> readFlattenedMetaItems(..., 'served') (packages/metadata-protocol/src/protocol.ts:9723) -> decorateMetadataItems -> computeMetadataDiagnostics (packages/metadata-protocol/src/metadata-diagnostics.ts:55/168), a full Zod safeParse of every registered object's schema, on every request. Measured at 0c7592a22 on this file's boot: an inspector CPU profile (200 us sampling) of the control's 33 list calls put 1311 of 2841 ms sampled inside readFlattenedMetaItems, 1244 ms of it inside computeMetadataDiagnostics. A measurement-only probe memoizing protocol.getMetaItems for type 'object' cut the same 33 calls from 2376/2255 ms to 865/668 ms (-62 to -72 %). By that ratio it is roughly 5-7 s of this file's 9-11 s of tests, and the remaining half of #23977. File in the rest / metadata-protocol lane; #23977 gets a 'Blocked-by:' line naming it, with a back-link · dedupe words: enforceApiAccess per-request metadata diagnostics; loadObjectItems listMetaItems object every request; computeMetadataDiagnostics safeParse REST data request latency; api-exposure gate object list cost"
]
}
merged: true, merge commit 2b274600b1, merged 2026-10-16T19:53Z through the merge queue (enqueued 2026-10-16T19:34Z)
origin/main
2b274600b1 is an ancestor of origin/main: 1 file, +66 / −26, as reviewed at 0c7592a222
queue branch
no gh-readonly-queue/main/*pr-24026* head remains
Review chain: ACCEPT 6223151728 (the seat's record; test-only, private package). skip-changeset was applied by this seat.
What landed, the half of this card that is met: the control case no longer sits within 2× of its timeout under load. Base ran 5028 / 4892 / 5031 ms loaded and timed out on 2 of 3 runs; the head's slowest part ran 2488 / 1906 / 1629 ms. A module-scope warm-up pays the first boot outside the clock. Every assertion moved intact; there was no timeout raise and no skip.
The next claimant. This seat is going off shift at the maintainer's word, so the re-measure goes to whoever claims this card next, with the full claim protocol. The card returns to pm:queue, unassigned, in the stroke after this comment.
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
bug·priority:p1·domain:cli·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T16:01ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
main. The maintainer's rule 「平台测试清单反复变红,肯定要修啊」 applies.domain:cli:packages/qaisdomain:cliby the domain table.6181973363. Declare a budget only where the wait is real. ⛔ Raising vitest's timeout alone does not fix it.objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 1 (#23977:
activity-text-predicate.dogfood.test.tsruns under the 10 s per-file line, with its slowcontrolcase far from vitest's 5000 ms default under load, by fixing what the file waits on, with no timeout raise, no deletion and no move) · 2026-10-16T17:51ZSession:
session_018t6a5rvqPRvEDMCVVW9kYTAccount:
os-tesla(the seat's linked user asGET /useranswers it; the card's assignee from this act)Branch:
claude/issue-23977-activity-text-predicate-budgetWorktree:
objectstack-issue-23977Domain:
domain:cliSeat:
domain:cli#2(seat post #22648)Scope:
batch3.labelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967. Malformed JSON request body is silently parsed as {}: a truncated POST /data/:object/query answers 200 with the whole table, and a truncated PATCH answers 200 with an empty update #23914's dev run has ended; its PR fix(plugin-hono-server,hono,cloud-connection)!: refuse an unparseable request body with 400 INVALID_REQUEST instead of reading it as {} #24005 is in its contract review.labelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967's suites hold it; the queue is empty).Order, read at this act:
p0,pm:blockingortarget:card of this lane is inpm:queue. This card is the lane's only queuedp1.6220729537records the maintainer's word to that seat, 「当前任务处理完,后续只派p3卡」, so this card is this seat's.File surface (read on
origin/maind132140ebc; stop on a breach and explain it in the report):packages/qa/dogfood/test/activity-text-predicate.dogfood.test.tsonly (500 lines). The fix goes to what the file waits on.beforeAllboot (about:241) is clocked as a hook.controlcase (about:470) makes about 30 sequential list calls.AGENTS.md:124's convention, through what@objectstack/verifyalready exports.6181973363item 5).// test-budget:line: a singlebeforeAllboot is neither class that ruling names. If the measurement shows the wait is real and of a named class, stop and report.@objectstack/verify(boot-warm-up.testkit.tsis not exported, and exporting it widens a published package).class:andreach:instead of fixing it here..github/workflows/rerun-safety-nightly.ymlor its scripts (PR ci(rerun-safety): a truthful verdict, passes bounded by the job's time, and a card on a red night #23975, ci(rerun-safety-nightly): red three nights running on main and nobody was told — pass 1 fails @objectstack/cli and @objectstack/dogfood, pass 2 adds a different package set each night, 10-16 hit the 170-minute timeout #23880).Container & model:
S(one test file, measured A/B under load),mode:subagent,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate)Clause-②: no
Basis for the Clause-② line: a test file only. No published package's
files[]reaches it (@objectstack/dogfoodis private), and no accept set or public surface moves.Responsibility:
the dogfood test file in packages/qa (this lane) | the Rerun Safety nightly (#23880, PR #23975), which runs it unsharded on one runner, and the refresh lane's 10 s line | main's nightly, red on pass 1 on two readable nightsThread-read: 6219463123
Serial constraints cleared: open PRs read in this act.
packages/verify/src/index.tsorboot-warm-up.testkit.ts.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23977, "status": "rework", "branch": "claude/issue-23977-activity-text-predicate-budget", "pr": "https://github.com/objectstack-ai/objectstack/pull/24026", "session": "session_018t6a5rvqPRvEDMCVVW9kYT", "premise_still_valid": true, "summary": "Part of #23977, not Fixes: one of the card's two halves is met. MET: the control case no longer sits within 2x of its timeout under load. Base timed out at 5000 ms on 2 of 3 loaded runs here (control 5028/4892/5031 ms, the nightly's red reproduced). Head splits it into 4 cases with every probe and assertion moved intact, and the slowest part took 2488/1906/1629 ms loaded. NOT MET: the file is not under the 10 s line. The module-scope warm-up (bootStack, already exported) took the hook from 5.8-6.8 s to 3.1-3.4 s, but the file's unloaded median only fell from 16022 to 12247 ms. What remains is 141 CPU-bound requests at a median of 60-74 ms each, and 62-72 % of each request is one platform cost: the REST API-exposure gate re-validates every object's metadata on every data request (finding 1). That is platform code the claim holds off. Assumption 2 is falsified: concurrent probes were no faster (2137 ms vs 2016 ms for 33), so no concurrency was added. Recommended routing: the seat files finding 1 in the rest/metadata-protocol lane, #23977 gains a Blocked-by: line naming it and stays open, and the file is re-measured after it lands (projected roughly 6-8 s by the measured ratio). Worktree removed after the PR opened.", "tests": "All at head 0c7592a22, through os-verify-lock, shared 4-vCPU box. (1) pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/activity-text-predicate.dogfood.test.ts test/activity-parent-read-gate.dogfood.test.ts test/audit-log-parent-read-gate.dogfood.test.ts => VITEST_EXIT=0, 'Test Files 3 passed (3) / Tests 39 passed (39)'; the file line read 25 tests 12514ms. (2) pnpm --filter @objectstack/dogfood typecheck (tsc --noEmit) => exit 0; tsc --listFilesOnly lists the changed file once (308 dogfood test files in the program). (3) A/B: base = untracked copy blob bb7cbee56a89 (identical to 61a680956), head = 0c7592a22. Isolated, interleaved B-H/H-B/B-H, file line of the default reporter (agent variables unset). Unloaded file ms: base 17680/16022/15338 (median 16022), head 12059/12731/12247 (median 12247). Loaded with 7 CPU hogs (about 2.2-2.7x): base 42696(1 failed)/34224/32896(1 failed) (median 34224), head 37072/29319/26863 (median 29319). Control: base unloaded 2572/2493/2398, loaded 5028/4892/5031 (both failures are 'Error: Test timed out in 5000ms.'); head slowest part unloaded 779/804/832, loaded 2488/1906/1629. (4) Ablation, one-time, prediction written first ('3 failed / 22 passed: the three per-class control parts on expect(snapHit.rows).toBe(1)'). node scripts/ablation-replace.mjs wrap mode changed the per-class snapHit filter to NOMATCH. Mutation landed: anchor x1 -> x0, blob 8b5eb87856f9 -> 2ac1463e3d0a. vitest exit=1, '25 tests | 3 failed', each 'expected +0 to be 1'. Restore: blob after restore 8b5eb87856f9 == HEAD, git diff HEAD empty, ABLATION_TOOL_EXIT=0. No build was involved: the test file is source. (5) Assertions kept: base's 12 it/describe title literals hash 887e5a912c4fe675 (sha256 prefix, file order), and head's 14 minus the 2 added part titles hash the same. expect( 40 = 40.", "gates": "Local subset at 0c7592a22. pnpm exec eslint --no-inline-config packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts => ESLINT_EXIT=0. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; 1 path vs merge base 61a680956) derived 53 commands; each was run with its exit captured before any pipe. 52 => exit 0. pnpm check:dual-build-cjs-loads => exit 3, PREREQUISITE NOT MET (no dist for studio, client-react, embedder-openai, knowledge-*, organizations, service-cluster-redis, service-knowledge), so NOT MEASURED locally. --ran with ':: exit N' per line => RAN_EXIT=0, '53 derived famil(ies) accounted for — 52 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. CI on PR #24026 at report time (head 0c7592a22240): 'No other open PR may claim the same issue' completed/success; 'Packed-tarball smoke (opt-in)' completed/skipped; 22 more in_progress, among them Lint & Repo Gates' lanes (Lint · ESLint, Lint · repo & tooling gates, Lint · docs & code guards, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · scoped ×3), Type Check · workspace/source gates/consumer gates/debt ledger, Check Changeset, Governed Surface Queue Guard, 'Part-of PR must not also close its card', 'The card this PR closes must claim this branch'. Test Core and Build Core were not yet listed. Dogfood is not a PR-CI family; it runs on main's full battery.", "deviations": [ "PR first line is 'Part of #23977', not the closing-keyword line the dispatch asked for: the 10 s half is unmet, and os-dev.md's DoD says a merge that must not close the card uses Part of.", "Assumption 2 is falsified, so no concurrency was added. The dispatch's 'concurrency ablation' became an ablation of the split: one moved probe returns a wrong answer and the case goes red.", "The control case is split into 4 its, as the dispatch allows for a timeout. So the head title-line set has 2 added titles; every base title is kept verbatim.", "Local scope: the whole dogfood suite was not run (the file plus its 2 named siblings only, per the dispatch). test:repo was not run (no repo-project file touched). check:dual-build-cjs-loads is NOT MEASURED locally (exit 3).", "Load emulation was 7 CPU hogs, about 2.2-2.7x slower, which is harsher than the card's about 1.5x. The box is shared, so other agents' unlocked work ran too.", "Environment: about an hour into the run the container's disk hit 0 bytes free. Two probe runs died on ENOSPC (one at module load, one on the tool's own output); they were re-run and are not counted. The dominant consumer then was the shared scratchpad's issue-23805 directory (21G, last written 08:49Z). I deleted nothing outside my own scratch; space came back (22G free) without my action.", "Commit trailers use AGENTS.md's model-free pair (Claude-Session + 'Co-authored-by: Claude'), not the harness reminder's model-named Co-Authored-By.", "The branch is 7 commits behind origin/main and was not merged: none of those commits touch the file, armed.ts, catalog-permission-set.ts, packages/qa/dogfood/vitest.config.ts or packages/verify/src/harness.ts, and git merge-tree is clean.", "No labels written (the dispatch said label-write: none). The seat applies skip-changeset (Clause-②: no, private package)." ], "files_changed": [ "packages/qa/dogfood/test/activity-text-predicate.dogfood.test.ts" ], "mcp_calls": "0 — none", "api_writes": "2 — both through the fleet-write relay (repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, run 38953684601 = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/24026/assignees ['os-tesla'], read-back 9411 bytes sent = 9411 stored; (2) this os-dev-report comment = POST /repos/objectstack-ai/objectstack/issues/23977/comments via scripts/pm/post-stamped.mjs. Plus 2 git pushes of the branch (not REST).", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: a measured red at a CI door, the Rerun Safety nightly on main (this card's own reach), plus every authenticated REST data request in production paying the same cost · evidence: every /data/OBJECT read and query request enters enforceApiAccess (packages/rest/src/rest-server.ts) to read ONE object's enable flags. That calls loadObjectItems (packages/rest/src/meta-item-read-gate.ts:409) -> protocol getMetaItems({type:'object'}) -> readFlattenedMetaItems(..., 'served') (packages/metadata-protocol/src/protocol.ts:9723) -> decorateMetadataItems -> computeMetadataDiagnostics (packages/metadata-protocol/src/metadata-diagnostics.ts:55/168), a full Zod safeParse of every registered object's schema, on every request. Measured at 0c7592a22 on this file's boot: an inspector CPU profile (200 us sampling) of the control's 33 list calls put 1311 of 2841 ms sampled inside readFlattenedMetaItems, 1244 ms of it inside computeMetadataDiagnostics. A measurement-only probe memoizing protocol.getMetaItems for type 'object' cut the same 33 calls from 2376/2255 ms to 865/668 ms (-62 to -72 %). By that ratio it is roughly 5-7 s of this file's 9-11 s of tests, and the remaining half of #23977. File in the rest / metadata-protocol lane; #23977 gets a 'Blocked-by:' line naming it, with a back-link · dedupe words: enforceApiAccess per-request metadata diagnostics; loadObjectItems listMetaItems object every request; computeMetadataDiagnostics safeParse REST data request latency; api-exposure gate object list cost" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Blocked-by: #24031
Release:
domain:cliseat 2 ·os-tesla· sessionsession_018t6a5rvqPRvEDMCVVW9kYT· 2026-10-16T19:55Z · cause: PR #24026 landed (Part of #23977) · destination:pm:blockedon #24031, unassignedLanded: PR #24026 →
2b274600b1(Part of #23977)merged: true, merge commit2b274600b1, merged 2026-10-16T19:53Z through the merge queue (enqueued 2026-10-16T19:34Z)origin/main2b274600b1is an ancestor oforigin/main: 1 file, +66 / −26, as reviewed at0c7592a222gh-readonly-queue/main/*pr-24026*head remains6223151728(the seat's record; test-only, private package).skip-changesetwas applied by this seat.controlcase no longer sits within 2× of its timeout under load. Base ran 5028 / 4892 / 5031 ms loaded and timed out on 2 of 3 runs; the head's slowest part ran 2488 / 1906 / 1629 ms. A module-scope warm-up pays the first boot outside the clock. Every assertion moved intact; there was no timeout raise and no skip./datarequest. That is filed as rest: every /data request's API-exposure gate reads EVERY object's metadata (with a full schema diagnostic) to check ONE object's enable flags — 62-72% of a data request's time, measured #24031, and this card waits on it.main's first full battery for this file, which does not run on a PR.pm:dispatchedbecomespm:blockedand the assignee is cleared.Generated by Claude Code
objectstack-fleet commentedon Oct 17, 2026
Unlock:
pm:blocked→pm:queue·domain:cliseat 2 ·os-tesla· sessionsession_018t6a5rvqPRvEDMCVVW9kYT· 2026-10-17T02:05ZBlocked-by: #24031is met. PR fix(rest): the API-exposure gate reads the one object it checks, by name, instead of every object's metadata on each /data request #24093 landed asc1c0a90942at 2026-10-17T02:03Z. On every/datarequest, the REST API-exposure gate now reads the one object it judges instead of the whole decorated object list. Measured on the showcase: 33 list calls 2421 ms → 647 ms.6223543949:packages/qa/dogfood/test/activity-text-predicate.dogfood.test.tsonmainat or afterc1c0a90942;pm:queue, unassigned, in the stroke after this comment.Generated by Claude Code