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
skills: the object enable capability table does not teach aiReadable (read-only AI exposure, sys_* objects only) — PR #32971's Skills-docs follow-up #32974
Filing gate: ① published skill text that omits a key an in-flight PR adds, owed by PR #32971's Skills-docs: follow-up owed line; the seat files the card and rewrites that line to this number. ⛔ Not a claim. Triage sets the lane and grade.
Reader: domain:skills (skills/**, shipped with npx skills add).
Blocked-by: #32971
Dedupe: is:issue aiReadable skills enable → 0 hits besides #32865 / #32971.
reach: named producer — the published skill an authoring agent loads, skills/objectstack-data/SKILL.md (the object enable capability table, on origin/main).
ObjectCapabilities gains enable.aiReadable (optional boolean): a sys_* object opens read-only AI access (query, get one, aggregate, describe, list; never write) by declaring it. It is refused at parse on any object whose name does not start with sys_, and on the stored-metadata-body family (STORED_METADATA_BODY_OBJECTS) whatever its name. Reader in @objectstack/spec/data: isAiReadExposed.
Do
Add one aiReadable row to the enable table in skills/objectstack-data/SKILL.md, saying it exists for platform system objects and that an app author never writes it (a parse error on an app object). Changeset '@objectstack/skills': patch.
Related: #32865, #32971, #32442 (the server half that makes the key live).
Claim: PM loop round 4
Session: session_01FEkQ5pjSPT7ui2EUcunaVb
Account: os-project-manager
Branch: claude/project-thread-7ha66d
Worktree: objectstack-issue-32974
Domain: domain:skills
Seat: domain:skills#1
File surface: skills/objectstack-data/SKILL.md, one changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: opus (default; dispatch-gates --tier on the real diff decides), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds (#32971 closed; the dev re-reads enable.aiReadable on ba35dfd7)
Serial constraints cleared: PRs #33394 and #33427 (awaiting merge) own skills/objectstack-data/evals/objects-fields-relationships.json and rules/relationships.md; this card stays out of both
Order: /mnt/project-files/pm-orders/skills/order-32974.md (project file). Ruling-ref: Leehom 「开放 p3卡认领」 (2026-11-14T21:21:06Z). Claimed 2026-11-14T21:26Z.
{
"issue": 32974,
"status": "done",
"branch": "claude/project-thread-7ha66d",
"pr": "#33458",
"session": "session_01FEkQ5nzn5SncinMdswdSzM",
"premise_still_valid": true,
"summary": "skills/objectstack-data/SKILL.md gains one row in the Object Capabilities (enable) table: aiReadable, default dash, platform sys_* objects only (not sys_metadata*), read-only AI access (query, get, aggregate, describe, list; never a write), an app object never declares it, false included, refused at parse. Plus an '@objectstack/skills' patch changeset. Head 555603e, one SKILL.md line added, token ratchet 6606 to 6661 (ceiling 6665), Tier H.",
"tests": "Teaching text only; no tested behaviour changed, no ablation. Mechanism read on origin/main ba35dfd: packages/spec/src/data/ai-read-exposure.ts aiReadExposureRefusal judges any declared value (false included) and refuses first the stored-metadata family (STORED_METADATA_BODY_OBJECTS = sys_metadata, sys_metadata_history), then accepts a /^sys_/i name, else refuses; ObjectSchema's refinement calls it via refuseMisplacedAiReadExposure (object.zod.ts), so every parse door refuses. isAiReadExposed answers true only for boolean true on a sys_* object outside the family. #32442 made the key live: isAiReadExposed is read by packages/runtime/src/domains/mcp.ts, packages/mcp/src/mcp-http-tools.ts and packages/mcp/src/stdio-data-bridge.ts; sys_user and sys_approval_request declare it.",
"gates": "Local, head 555603e: dispatch-gates --commands --repo objectstack-ai/objectstack derived 46 families; 44 run exit 0 each, captured before any pipe (check:doc-formula-expressions first exit 3, exit 0 after pnpm --filter @objectstack/lint... build under the verify lock, VERDICT command-exit 0, 89s; check:dts-closure and check:sourcemap-no-sources-content first exit 3, exit 0 after that build over the 5 built packages only); 2 NOT MEASURED exit 3 prerequisite (check:dual-build-cjs-loads, check:lean-entry-closure read every package dist; no package touched, left to CI). --ran: 46 accounted, 44 run, 2 NOT-MEASURED. Ratchets: check-skill-line-ratchet exit 0; check-skills-token-ratchet exit 0. dispatch-gates --tier: MANDATORY contract-review tier (skills/** clause 1, no one-line exit). check-governed-merges --branch: exit 3 GOVERNED, landing tier H, 1 of 2 paths on the register. Record: /mnt/project-files/pm-orders/skills/32974-gates-ran.txt. CI: in_progress, not read (the seat holds CI events).",
"line_budget": "skills/objectstack-data/SKILL.md 477 to 478 lines, 26441 to 26663 bytes, 6606 to 6661 tokens (ceiling 6665, headroom 4; nothing cut, no ceiling moved). All skills/*/SKILL.md 4602 to 4603 lines, 235787 to 236009 bytes; bundle 244310 to 244365 tokens.",
"files_changed": [
".changeset/32974-skills-enable-ai-readable-row.md",
"skills/objectstack-data/SKILL.md"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — card, comments and PR read-back read with gh api GET (read-only); no MCP GitHub tool used",
"api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, no labels, no assignees; read-back 6366 bytes sent, 6366 stored), and this report through post-stamped (POST /repos//issues/32974/comments); git push is not a REST write",
"deviations": [
"Standing lines ask the PR body to end with an HTML-comment signed trailer; os-dev.md bans dev-written HTML comments in GitHub text (only the harness attribution comment on line 1 is exempt) and the standing lines yield to os-dev.md, so the body carries the visible signature line under Fixes #32974 and no trailer.",
"Order mechanism assumption 'SKILL.md may be at a token ceiling; pay in place' measured false: headroom was 59 tokens, the row costs 55, so nothing was cut.",
"The Default column reads a dash, not false: an absent key is closed and false on an app object is itself refused, so a false default would invite the one value that fails.",
"The relay refuses an empty labels array; pr_create was sent with no labels key (no label owed: skills/** publishes, so not skip-changeset).",
"Commit trailer is model-free (Co-Authored-By: Claude) per the standing lines; the harness reminder's model-named trailer was not used.",
"dispatch-gates --tier mandates the contract-review tier for skills/**; this card thread runs on the claim's default model, so the seat's in-seat contract review is the owed record."
],
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch + unblocked →
p3·pm:queue· 2026-11-13T02:49Z⛔ Not a claim.
Blocked-by:edge on this card is closed, so the card moves frompm:blockedtopm:queue.enable.aiReadable. It is prose, so the MCP focus weighting does not raise it.Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb
Claim: PM loop round 4
Session:
session_01FEkQ5pjSPT7ui2EUcunaVbAccount:
os-project-managerBranch:
claude/project-thread-7ha66dWorktree:
objectstack-issue-32974Domain:
domain:skillsSeat:
domain:skills#1File surface:
skills/objectstack-data/SKILL.md, one changeset (stop on breach; explain in the report)Container & model:
S,mode:thread,model: opus(default;dispatch-gates --tieron the real diff decides),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: none
Premise: holds (#32971 closed; the dev re-reads
enable.aiReadableonba35dfd7)Serial constraints cleared: PRs #33394 and #33427 (awaiting merge) own
skills/objectstack-data/evals/objects-fields-relationships.jsonandrules/relationships.md; this card stays out of bothOrder:
/mnt/project-files/pm-orders/skills/order-32974.md(project file). Ruling-ref: Leehom 「开放 p3卡认领」 (2026-11-14T21:21:06Z). Claimed 2026-11-14T21:26Z.objectstack-fleet commentedon Nov 14, 2026
domain:skills#1 · os-project-manager · session_01FEkQ5nzn5SncinMdswdSzM
os-dev-report
{
"issue": 32974,
"status": "done",
"branch": "claude/project-thread-7ha66d",
"pr": "#33458",
"session": "session_01FEkQ5nzn5SncinMdswdSzM",
"premise_still_valid": true,
"summary": "skills/objectstack-data/SKILL.md gains one row in the Object Capabilities (enable) table: aiReadable, default dash, platform sys_* objects only (not sys_metadata*), read-only AI access (query, get, aggregate, describe, list; never a write), an app object never declares it, false included, refused at parse. Plus an '@objectstack/skills' patch changeset. Head 555603e, one SKILL.md line added, token ratchet 6606 to 6661 (ceiling 6665), Tier H.",
"tests": "Teaching text only; no tested behaviour changed, no ablation. Mechanism read on origin/main ba35dfd: packages/spec/src/data/ai-read-exposure.ts aiReadExposureRefusal judges any declared value (false included) and refuses first the stored-metadata family (STORED_METADATA_BODY_OBJECTS = sys_metadata, sys_metadata_history), then accepts a /^sys_/i name, else refuses; ObjectSchema's refinement calls it via refuseMisplacedAiReadExposure (object.zod.ts), so every parse door refuses. isAiReadExposed answers true only for boolean true on a sys_* object outside the family. #32442 made the key live: isAiReadExposed is read by packages/runtime/src/domains/mcp.ts, packages/mcp/src/mcp-http-tools.ts and packages/mcp/src/stdio-data-bridge.ts; sys_user and sys_approval_request declare it.",
"gates": "Local, head 555603e: dispatch-gates --commands --repo objectstack-ai/objectstack derived 46 families; 44 run exit 0 each, captured before any pipe (check:doc-formula-expressions first exit 3, exit 0 after pnpm --filter @objectstack/lint... build under the verify lock, VERDICT command-exit 0, 89s; check:dts-closure and check:sourcemap-no-sources-content first exit 3, exit 0 after that build over the 5 built packages only); 2 NOT MEASURED exit 3 prerequisite (check:dual-build-cjs-loads, check:lean-entry-closure read every package dist; no package touched, left to CI). --ran: 46 accounted, 44 run, 2 NOT-MEASURED. Ratchets: check-skill-line-ratchet exit 0; check-skills-token-ratchet exit 0. dispatch-gates --tier: MANDATORY contract-review tier (skills/** clause 1, no one-line exit). check-governed-merges --branch: exit 3 GOVERNED, landing tier H, 1 of 2 paths on the register. Record: /mnt/project-files/pm-orders/skills/32974-gates-ran.txt. CI: in_progress, not read (the seat holds CI events).",
"line_budget": "skills/objectstack-data/SKILL.md 477 to 478 lines, 26441 to 26663 bytes, 6606 to 6661 tokens (ceiling 6665, headroom 4; nothing cut, no ceiling moved). All skills/*/SKILL.md 4602 to 4603 lines, 235787 to 236009 bytes; bundle 244310 to 244365 tokens.",
"files_changed": [
".changeset/32974-skills-enable-ai-readable-row.md",
"skills/objectstack-data/SKILL.md"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — card, comments and PR read-back read with gh api GET (read-only); no MCP GitHub tool used",
"api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, no labels, no assignees; read-back 6366 bytes sent, 6366 stored), and this report through post-stamped (POST /repos//issues/32974/comments); git push is not a REST write",
"deviations": [
"Standing lines ask the PR body to end with an HTML-comment signed trailer; os-dev.md bans dev-written HTML comments in GitHub text (only the harness attribution comment on line 1 is exempt) and the standing lines yield to os-dev.md, so the body carries the visible signature line under Fixes #32974 and no trailer.",
"Order mechanism assumption 'SKILL.md may be at a token ceiling; pay in place' measured false: headroom was 59 tokens, the row costs 55, so nothing was cut.",
"The Default column reads a dash, not false: an absent key is closed and false on an app object is itself refused, so a false default would invite the one value that fails.",
"The relay refuses an empty labels array; pr_create was sent with no labels key (no label owed: skills/** publishes, so not skip-changeset).",
"Commit trailer is model-free (Co-Authored-By: Claude) per the standing lines; the harness reminder's model-named trailer was not used.",
"dispatch-gates --tier mandates the contract-review tier for skills/**; this card thread runs on the claim's default model, so the seat's in-seat contract review is the owed record."
],
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb
ACCEPT → PR #33458 comment 6885000541 · contract review PASS 6884995626 · held for the maintainer (Tier H; reviewers requested) · 2026-11-14T22:13Z