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
[finding] skills/objectstack-automation/SKILL.md repeats the corrected completeness claim — "only the stdlib is callable" and "the full table" #15520
skills/objectstack-automation/SKILL.md:351 carries the same measurably-false completeness claim that PR #15519 has just corrected in the formula skill, one skill over:
Conditions are bare CEL — only the stdlib is callable.now(), today(), ... plus CEL built-ins (has, size, int, string, …) — see objectstack-formula for the full table.
Two claims in that sentence are wrong in the same direction as the one just fixed:
"only the stdlib is callable" — the CEL environment also resolves receiver-only methods called on a value (s.split(','), list.map(...), ts.getFullYear()), and four bare primitives (bytes, dyn, type, uint) that are withheld from the catalogue by an authoring decision rather than being unavailable. packages/formula/src/validate.ts states the real membership rule as load-bearing: CEL_STDLIB_FUNCTIONS is the bare-callable public subset, not the set of everything callable.
"the full table" — the referenced table is that same advertised subset, so pointing at it as "full" repeats the completeness claim by reference.
Both are false in the safe direction: they under-promise, so no author is broken by them today. That is why this is filed rather than hot-fixed.
Why it was not fixed in the same PR
The card PR #15519 implements is scoped by its ruling and its claim to skills/objectstack-formula/SKILL.md alone, with an explicit stop on editing any other skill. skills/objectstack-automation/SKILL.md is a separate published skill with its own token ceiling — worth noting for whoever takes this: it measures 12269 tokens against a 12768 ceiling, so there are 499 tokens of headroom and the correction has to fit inside them or buy the room by cutting content.
Suggested shape
The same treatment, in that skill's voice and much shorter, since the formula skill now carries the full explanation: say that conditions are bare CEL and that the table names the bare-callable subset, and drop the word "full". No engine change; no edit to CEL_STDLIB_FUNCTIONS.
Found while correcting the formula skill's copy of the claim. Not assigned — for triage.
Claim: PM loop round 5 (self-triaged into the skills lane: same defect class as the card it was filed from, one published skill, one sentence)
Session: session_019RfFHiRCSs3JXLK4cwcfox
Branch: claude/issue-15520-automation-skill-callable-wording
Worktree: objectstack-issue-15520
Domain: domain:skills
File surface: skills/objectstack-automation/SKILL.md — the sentence that says only the stdlib is callable and points at the formula skill for "the full table"; corrected to the bare-callable membership rule in one clause, sized for this file's own token ceiling (12768, headroom 499). ⛔ No edit to the formula skill (PR #15519 owns it), to packages/**, or to any other skill.
Container & model: S (one sentence in one published skill), mode:subagent, model: opus (dispatch-gates.mjs --tier: no path mandate; a published customer surface gets the judgement tier)
Clause-②: no (documentation correction in the safe direction)
Serial constraints cleared: no open PR touches skills/objectstack-automation/ (the 19:2xZ file-level scan of all open PRs found none; PR #15519 touches the formula skill only). Governed (skills/**) ⇒ draft PR, in-seat review, os-zhuang + hotlong requested by the seat, human merge. The PR carries Fixes #15520. Graded priority:p3, documentation: false in the safe direction, nothing broken today.
Decision re-read (19:4xZ): the ruling on the parent card (A — the bare-callable subset is the membership rule) covers this sentence; no new ruling owed.
{
"issue": 15520,
"status": "done",
"branch": "claude/issue-15520-automation-skill-callable-wording",
"pr": "#15524",
"premise_still_valid": true,
"summary": "The card's premise held on origin/main: skills/objectstack-automation/SKILL.md carried both halves of the corrected completeness claim, in one numbered item. BEFORE (L351/L354): '4. Conditions are bare CEL - only the stdlib is callable. now(), today(), ... plus CEL built-ins (has, size, int, string, ...) - see objectstack-formula for the full table.' AFTER: '4. Conditions are bare CEL - the stdlib is what you may call bare. now(), today(), ... plus CEL built-ins (has, size, int, string, ...) - see objectstack-formula for that table: it is CEL_STDLIB_FUNCTIONS, the bare-callable public subset, so receiver methods (called on a value, never bare) are not in it.' The pointer to the formula skill stays; no method name and none of the four withheld bare primitives is enumerated here, so this file does not become a second place that lists them. The wording agrees with the formula skill's corrected passage at head adfe3a4 ('the bare-callable public subset', 'called on a value, never bare') and with packages/formula/src/validate.ts, which calls the catalogue 'a curated bare-callable subset, not an oracle for existence'. Token delta: 12269 -> 12305 tokens (+36) against the 12768 ceiling, headroom 499 -> 463; no ceiling raise, nothing cut. Whole-skill scan for the claim family found no other member: L35 is a pointer with no completeness word, L291's 'mirror the CEL stdlib 1:1' is about the single-brace value-interpolation dialect (a different surface; verified accurate - floor and ceil are both in CEL_STDLIB_FUNCTIONS), L645/L945 and the eval file use 'full' unrelatedly, and references/_index.md is generator-owned, carries no such claim and was not hand-edited. Draft PR, skip-changeset labelled and read back; it stays a draft (GOVERNED).",
"tests": "Gate family derived by the script itself, not by a hand-made diff: 'node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands' -> 21 commands over its own change set (1 path). All 21 run at the FINAL commit fe35dc0 with a clean tree, each exit code captured by redirect-then-capture (never through a pipe): 21/21 exit 0. Reconciliation: '✓ dispatch-gates --ran: 21 derived famil(ies) accounted for - 21 run, 0 NOT-MEASURED.' TOKEN RATCHET, before: '✓ check-skills-token-ratchet: skills/objectstack-automation/SKILL.md is 12269 tokens (ceiling 12768; headroom 499).' after: '✓ check-skills-token-ratchet: skills/objectstack-automation/SKILL.md is 12305 tokens (ceiling 12768; headroom 463).' plus '✓ check-skills-token-ratchet: 36 authored bundle file(s) within their ceilings; 10 generator-owned file(s) measured, not ratcheted.' check:doc-formula-expressions first exited 3 - PREREQUISITE NOT MET (it imports compiled output; an install does not build it), read as NOT MEASURED rather than as a red gate; built the @objectstack/formula and @objectstack/lint closures through the shared lock ('os-verify-lock: VERDICT command-exit 0 - held the lock 1s - waited 0s'), after which the gate passed: '✓ check-doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1371 TS blocks judged clean by @objectstack/formula.' Other verdict lines worth naming: 'check-skill-identifier-liveness OK - Leg 1: 465 citation(s) over 46 published file(s) checked against 95764 implementation word tokens' (the newly cited CEL_STDLIB_FUNCTIONS is a live implementation identifier), 'check-corpus-claim-drift: OK, no new claim sites beside a pinned spelling.', '✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files'. GOVERNED: 'node scripts/pm/check-governed-merges.mjs --test skills/objectstack-automation/SKILL.md' exits 3 - '⛔ GOVERNED - a human merge is the review record for this PR.' / 'skills/** x1 - the published skills catalog'. Control bytes: pnpm check:nul-bytes green plus a direct control-range grep -naP over the edited file, no match. No ablation in this card - a documentation wording change has nothing to mutate, and no package source changed, so no package test/typecheck applies; the 21-command skills family is the whole local surface and CI runs the farm.",
"mcp_calls": "0 - zero GitHub MCP calls this run; the card, the claim comment, the sibling skill file at adfe3a4, the PR create, the label write and every read-back went through repo-scoped REST with $GITHUB_TOKEN (probe: HTTP 200 on the first read).",
"open_questions": [],
"out_of_scope_findings": []
}
Verified in a detached compare worktree at the PR head, not from the report: one file, one numbered item (4 insertions, 2 deletions) in skills/objectstack-automation/SKILL.md — "only the stdlib is callable … the full table" is now "the stdlib is what you may call bare … that table: it is CEL_STDLIB_FUNCTIONS, the bare-callable public subset, so receiver methods (called on a value, never bare) are not in it". The pointer to the formula skill stays; no method and none of the withheld primitives is enumerated here, so this file does not become a second list. A grep for the claim family finds nothing left. Wording agrees with PR #15519's corrected passage. check-skills-token-ratchet exit 0 (12269 → 12305 tokens, ceiling 12768, headroom 463; no ceiling change); check-governed-merges --test exit 3 (GOVERNED, skills/**); the dev's report adds dispatch-gates --ran 21/21, identifier liveness (the newly cited CEL_STDLIB_FUNCTIONS is a live implementation identifier), corpus-claim-drift, frame-sync, nul-bytes, doc-formula-expressions after building the lint closure — all exit 0. Dev report first on this card with the literal os-dev-report line; PR body starts Fixes #15520, no model identifier; zero MCP calls.
Landing regime: governed ⇒ the PR stays a draft; reviewers os-zhuang + hotlong requested in this same act; human merge. Serial note for the approvers: PR #15519 (formula skill) and this PR are disjoint files; either order lands cleanly.
Activity
claude commentedon Sep 4, 2026
Claim: PM loop round 5 (self-triaged into the skills lane: same defect class as the card it was filed from, one published skill, one sentence)
Session:
session_019RfFHiRCSs3JXLK4cwcfoxBranch:
claude/issue-15520-automation-skill-callable-wordingWorktree:
objectstack-issue-15520Domain:
domain:skillsFile surface:
skills/objectstack-automation/SKILL.md— the sentence that says only the stdlib is callable and points at the formula skill for "the full table"; corrected to the bare-callable membership rule in one clause, sized for this file's own token ceiling (12768, headroom 499). ⛔ No edit to the formula skill (PR #15519 owns it), topackages/**, or to any other skill.Container & model: S (one sentence in one published skill),
mode:subagent,model: opus(dispatch-gates.mjs --tier: no path mandate; a published customer surface gets the judgement tier)Clause-②: no (documentation correction in the safe direction)
Serial constraints cleared: no open PR touches
skills/objectstack-automation/(the 19:2xZ file-level scan of all open PRs found none; PR #15519 touches the formula skill only). Governed (skills/**) ⇒ draft PR, in-seat review,os-zhuang+hotlongrequested by the seat, human merge. The PR carriesFixes #15520. Gradedpriority:p3,documentation: false in the safe direction, nothing broken today.Decision re-read (19:4xZ): the ruling on the parent card (A — the bare-callable subset is the membership rule) covers this sentence; no new ruling owed.
Generated by Claude Code
claude commentedon Sep 4, 2026
os-dev-report
{
"issue": 15520,
"status": "done",
"branch": "claude/issue-15520-automation-skill-callable-wording",
"pr": "#15524",
"premise_still_valid": true,
"summary": "The card's premise held on origin/main: skills/objectstack-automation/SKILL.md carried both halves of the corrected completeness claim, in one numbered item. BEFORE (L351/L354): '4. Conditions are bare CEL - only the stdlib is callable. now(), today(), ... plus CEL built-ins (has, size, int, string, ...) - see objectstack-formula for the full table.' AFTER: '4. Conditions are bare CEL - the stdlib is what you may call bare. now(), today(), ... plus CEL built-ins (has, size, int, string, ...) - see objectstack-formula for that table: it is CEL_STDLIB_FUNCTIONS, the bare-callable public subset, so receiver methods (called on a value, never bare) are not in it.' The pointer to the formula skill stays; no method name and none of the four withheld bare primitives is enumerated here, so this file does not become a second place that lists them. The wording agrees with the formula skill's corrected passage at head adfe3a4 ('the bare-callable public subset', 'called on a value, never bare') and with packages/formula/src/validate.ts, which calls the catalogue 'a curated bare-callable subset, not an oracle for existence'. Token delta: 12269 -> 12305 tokens (+36) against the 12768 ceiling, headroom 499 -> 463; no ceiling raise, nothing cut. Whole-skill scan for the claim family found no other member: L35 is a pointer with no completeness word, L291's 'mirror the CEL stdlib 1:1' is about the single-brace value-interpolation dialect (a different surface; verified accurate - floor and ceil are both in CEL_STDLIB_FUNCTIONS), L645/L945 and the eval file use 'full' unrelatedly, and references/_index.md is generator-owned, carries no such claim and was not hand-edited. Draft PR, skip-changeset labelled and read back; it stays a draft (GOVERNED).",
"tests": "Gate family derived by the script itself, not by a hand-made diff: 'node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands' -> 21 commands over its own change set (1 path). All 21 run at the FINAL commit fe35dc0 with a clean tree, each exit code captured by redirect-then-capture (never through a pipe): 21/21 exit 0. Reconciliation: '✓ dispatch-gates --ran: 21 derived famil(ies) accounted for - 21 run, 0 NOT-MEASURED.' TOKEN RATCHET, before: '✓ check-skills-token-ratchet: skills/objectstack-automation/SKILL.md is 12269 tokens (ceiling 12768; headroom 499).' after: '✓ check-skills-token-ratchet: skills/objectstack-automation/SKILL.md is 12305 tokens (ceiling 12768; headroom 463).' plus '✓ check-skills-token-ratchet: 36 authored bundle file(s) within their ceilings; 10 generator-owned file(s) measured, not ratcheted.' check:doc-formula-expressions first exited 3 - PREREQUISITE NOT MET (it imports compiled output; an install does not build it), read as NOT MEASURED rather than as a red gate; built the @objectstack/formula and @objectstack/lint closures through the shared lock ('os-verify-lock: VERDICT command-exit 0 - held the lock 1s - waited 0s'), after which the gate passed: '✓ check-doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1371 TS blocks judged clean by @objectstack/formula.' Other verdict lines worth naming: 'check-skill-identifier-liveness OK - Leg 1: 465 citation(s) over 46 published file(s) checked against 95764 implementation word tokens' (the newly cited CEL_STDLIB_FUNCTIONS is a live implementation identifier), 'check-corpus-claim-drift: OK, no new claim sites beside a pinned spelling.', '✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files'. GOVERNED: 'node scripts/pm/check-governed-merges.mjs --test skills/objectstack-automation/SKILL.md' exits 3 - '⛔ GOVERNED - a human merge is the review record for this PR.' / 'skills/** x1 - the published skills catalog'. Control bytes: pnpm check:nul-bytes green plus a direct control-range grep -naP over the edited file, no match. No ablation in this card - a documentation wording change has nothing to mutate, and no package source changed, so no package test/typecheck applies; the 21-command skills family is the whole local surface and CI runs the farm.",
"mcp_calls": "0 - zero GitHub MCP calls this run; the card, the claim comment, the sibling skill file at adfe3a4, the PR create, the label write and every read-back went through repo-scoped REST with $GITHUB_TOKEN (probe: HTTP 200 on the first read).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
claude commentedon Sep 4, 2026
ACCEPT — governed in-seat review of PR #15524, head
fe35dc0f(skills seat, 2026-09-04T19:5xZ).Implemented-by:
claude/issue-15520-automation-skill-callable-wording(os-dev subagent)Reviewed-by:
session_019RfFHiRCSs3JXLK4cwcfox(skills seat)Verified in a detached compare worktree at the PR head, not from the report: one file, one numbered item (4 insertions, 2 deletions) in
skills/objectstack-automation/SKILL.md— "only the stdlib is callable … the full table" is now "the stdlib is what you may call bare … that table: it isCEL_STDLIB_FUNCTIONS, the bare-callable public subset, so receiver methods (called on a value, never bare) are not in it". The pointer to the formula skill stays; no method and none of the withheld primitives is enumerated here, so this file does not become a second list. A grep for the claim family finds nothing left. Wording agrees with PR #15519's corrected passage.check-skills-token-ratchetexit 0 (12269 → 12305 tokens, ceiling 12768, headroom 463; no ceiling change);check-governed-merges --testexit 3 (GOVERNED,skills/**); the dev's report addsdispatch-gates --ran21/21, identifier liveness (the newly citedCEL_STDLIB_FUNCTIONSis a live implementation identifier), corpus-claim-drift, frame-sync, nul-bytes, doc-formula-expressions after building the lint closure — all exit 0. Dev report first on this card with the literalos-dev-reportline; PR body startsFixes #15520, no model identifier; zero MCP calls.Landing regime: governed ⇒ the PR stays a draft; reviewers
os-zhuang+hotlongrequested in this same act; human merge. Serial note for the approvers: PR #15519 (formula skill) and this PR are disjoint files; either order lands cleanly.Generated by Claude Code