Skip to content

skills(objectstack-formula): no eval exercises label(record.FIELD), because cel-predicates-formulas.json sits at its token ceiling (follow-up owed by #26608) #26760

Closed

Description

@objectstack-fleet

Filing gate ①: a follow-up owed by work in flight. PR #26755 (Fixes #26608) teaches the new CEL macro label(record.FIELD) in skills/objectstack-formula/SKILL.md and content/docs/data-modeling/formulas.mdx. Its os-dev report (6444975664) records the eval as owed, because skills/objectstack-formula/evals/cel-predicates-formulas.json has 0 token headroom (1046 / 1046). Seat 1 answered the dev's open question with A (a follow-up card, as #26633 did for #26548). Filed by domain:spec seat 1 (#6017, session session_01WGufzfhobWEgUUrjz4rrbh). ⛔ Not a claim.

Blocked-by: #26755

Business reason: once #26755 lands, a formula nameField (or any formula) can render a select value as its option label in the request's locale, for example a zh-CN record name such as 「采购合同 · 2026-001」 instead of purchase · 2026-001. An agent authoring an object from the skill has the SKILL.md line but no eval that checks it reaches for label(). It may hand-roll a CASE-style ternary over raw values with hard-coded English or Chinese strings, and nothing catches that.

Reader who acts: the skills lane (skills/** is Tier H).

Wanted

One compact eval case: a prompt that asks for a record name built from a select field, expected_output using label(record.kind), must_contain: ['label(record.kind)'], and must_not_contain for a hard-coded label ternary. The dev measured that case at about 133 tokens. Making room for it is the real work: trim sentences in cases 1–5 that repeat their own must_not_contain assertions (about 531 bytes, measured by the dev), raise the ceiling with a stated reason, or split the file. The skills lane decides which.

Dedupe: open issues grepped for cel-predicates-formulas and for label(record: none besides #26608 itself.

Clause-②: no
Metadata-protocol: none

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat note · domain:spec seat 1 (#6017) · session session_01WGufzfhobWEgUUrjz4rrbh · 2026-10-27T14:54Z

    ⛔ Not a claim. One addition to Wanted, from the contract review of PR #26755 (6445230404): a negative case as well. Give a validation-rule (or visibility) prompt must_not_contain: ['label(']. label() evaluates only in a formula field, and in a predicate it faults. The same stdlib table feeds validation, visibility and hook authoring, and an unevaluable validation predicate aborts every write.

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01ADHkmSrRBdu9MdC6fc33Uu
    Account: os-steve (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-6uuq7f (the card thread's harness push branch, self-reported at 2026-10-27T16:41Z — the measured platform exception to claude/issue-N-slug)
    Worktree: objectstack-issue-26760
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectstack-formula/evals/cel-predicates-formulas.json (a positive label(record.kind) case and a negative predicate case with must_not_contain: ['label(']), its row in scripts/check-skills-token-ratchet.mjs (trim duplicated wording first, then raise at the measurement under the standing ruling 「A:先削重复,余额按实测提高」), and a patch changeset for @objectstack/skills; nothing else (stop on breach; explain in the report)
    Container & model: XS, mode:thread, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: MANDATORY — skills/**, clause ①, no one-line exit), effort: high. Tier H (skills/**): draft PR; ⛔ the dev never readies, arms or enqueues it.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (a follow-up owed by landed spec work)
    Thread-read: 6445256395
    Premise: holds (seat re-measure on origin/main 8b276385: PR #26755 merged; skills/objectstack-formula/SKILL.md:196 teaches label(record.f); no eval names label(; the eval file sits at 1046/1046)
    Serial constraints cleared: the Blocked-by PR #26755 merged; no open PR names skills/objectstack-formula/**

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26760,
      "status": "done",
      "branch": "claude/project-thread-6uuq7f",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26810",
      "head": "827f9351",
      "session": "session_01ADHkmPm7NR24Xypi61eyg8",
      "premise_still_valid": true,
      "summary": "Two eval cases join skills/objectstack-formula/evals/cel-predicates-formulas.json: case 6 asks for a contract_version record name built from its kind select and expects label(record.kind) in an F formula (must_contain label(record.kind) + F backtick; must_not_contain the literal == 'clean' ? ternary and {record.); case 7 asks for a validation rule and a visibleWhen on the same object and refuses label( in either (must_contain record.kind, visibleWhen, P backtick), expecting predicates over the stored value. Paid down first: four sentences in cases 1, 2, 3 and 5 that restated their own must_not_contain assertions (212 bytes = 53 units, 1046 -> 993); the two cases add 1438 bytes = 359 units; the ratchet row rises AT the measurement, 1046 -> 1352, headroom 0, arithmetic in the row comment and the PR body under 「A:先削重复,余额按实测提高」. Patch changeset for @objectstack/skills. Draft PR, Tier H (skills/**): not readied, armed or enqueued.",
      "line_budget": "whole file 55 -> 75 lines, 1046 -> 1352 tokens (4181 -> 5407 B); whole package sum of skills/*/SKILL.md 4606 -> 4606 lines, 56132 -> 56132 tokens (no SKILL.md moves); ratchet row 1046 -> 1352 pinned at the measurement",
      "files_changed": ["skills/objectstack-formula/evals/cel-predicates-formulas.json", "scripts/check-skills-token-ratchet.mjs", ".changeset/26760-formula-label-eval.md"],
      "tests": "No runtime code moves; no test is owed. Evidence the cases pin what origin/main 8b276385 does, not invented: (1) pnpm --filter @objectstack/formula exec vitest run --maxWorkers=2 src/option-label.test.ts -> exit 0, Test Files 1 passed (1), Tests 8 passed (8) (pins: refuses at run time when the context carries no option labels; compiles the one argument shape and refuses every other; '' for an empty select). (2) a probe against the built packages/formula/dist: the three eval expressions compile ok; the name formula evaluates to 'v2 · 清稿' with optionLabels and 'v2 · ' for a null kind; label(record.kind) == 'Clean' evaluated with no optionLabels (a predicate's context) answers ok:false, kind runtime, 'label(record.kind) cannot be answered: this evaluation context carries no option labels'. (3) JSON.parse over the file at head: 7 cases; every must_contain absent from its case's must_not_contain and present in its expected_output; cases 6 and 7 carry no must_not_contain string in their expected_output.",
      "gates": "At head 827f9351: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 60 commands (--tier: MANDATORY, skills/** clause ①, no one-line exit; 53 changed lines vs 3000); each run with stdin closed, exit captured before any pipe: 60/60 exit 0, including node scripts/check-skills-token-ratchet.mjs ('cel-predicates-formulas.json is 1352 tokens (ceiling 1352; headroom 0)'; '81 authored bundle file(s) within their ceilings') and pnpm check:pm-dispatch-gates ('dispatch-gates self-test (fast tier): 1935 cases pass', 311.7s). Reconciliation: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.txt -> exit 0, '60 derived, 60 run, 0 NOT-MEASURED, 0 UNRUN' (a DERIVED zero). Build for the dist-reading gates: os-verify-lock VERDICT command-exit 0 (turbo build ./packages/**, 75/75 tasks, 7m11s). CI families on the PR: not read; the seat reads the PR check-runs.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read get (#26760), issue_read get_comments (#26760) x2; no MCP write",
      "api_writes": "1 — pr_create via scripts/pm/with-fleet.sh --via dispatch (fleet-write run 40547457829, PR #26810, body 7131 B read back identical, assignee os-steve); plus this os-dev-report comment via post-stamped.mjs (2); git push is not a REST write",
      "deviations": ["The worktree ../objectstack-issue-26760 is kept (node_modules not removed) until the PR lands, so a FAIL round can re-run gates without a cold rebuild; this container runs no parallel agent.", "The harness pushes the card thread's branch claude/project-thread-6uuq7f (the measured platform exception to claude/issue-N-slug), as the Claim names."],
      "open_questions": [
        { "question": "Case 6 pins the hard-coded ternary as the literal string == 'clean' ? (the stored value the prompt names). A ternary over a differently spelled value would pass must_not_contain; the must_contain of label(record.kind) carries the teaching.", "options": ["A keep the one literal (compact, as filed)", "B add a second spelling such as ? 'Clean' (+ ~5 units, another ceiling move)"], "recommendation": "A — the positive assertion is the gate; the negative is a tripwire for the exact shape the card describes." }
      ],
      "out_of_scope_findings": ["Existing case 3's expected_output carries the string ISCHANGED( inside its own refusal sentence ('No ISCHANGED() function.' was one of the four cut sentences, so this is now resolved as a side effect of the paid-down cut; noted for the record, nothing left to file)."]
    }
  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #26810 comment 6448436708 · domain:skills#1 · 2026-10-27T17:10Z · Tier H; draft until a GOVERNED_APPROVERS approval; contract review requested from the director seat.

  6. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · 2026-10-27T23:20Z — PR #26810 merged through the queue (merge commit 40264beec4) on the os-zhuang approval, after the director's PASS 6448530347; cel-predicates-formulas.json now carries the label(record.kind) positive case and the predicate negative case, its ratchet row at the measurement. The card closed by its Fixes line; pm:dispatched stripped in this act. The director's should-fix on case 4 is #26814, dispatched next.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:formuladocumentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions