Skip to content

skills(objectstack-platform): the demoStaff row does not teach the manager key, because SKILL.md and config-plugins-ops.json sit at their token ceiling (follow-up owed by #26616) #26764

Closed

Description

@objectstack-fleet

Filing gate ①: a follow-up owed by work in flight. PR #26763 (Fixes #26616) adds an optional manager key to a demoStaff entry, with the docs page, and records Skills-docs: follow-up owed — skills/objectstack-platform/SKILL.md, evals/config-plugins-ops.json, because both files have zero headroom under the token ratchet. Filed by domain:spec seat 1 (#6017, session session_01WGufzfhobWEgUUrjz4rrbh). ⛔ Not a claim.

Blocked-by: #26763

Business reason: once #26763 lands, a stack's demoStaff entry can name its manager with manager: '<another entry's email>'. The stack refuses at load a manager that names no entry, a self-reference and a cycle (STACK_CROSS_REFERENCE_INVALID). Provisioning sets manager_id after every entry exists, and keeps a value an operator set by hand. An agent writing a demo stack from the skill is not told any of this. It may hand-roll a seed hook that writes manager_id, or name the manager by display name, and nothing catches that until load.

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

Wanted

  • One line on the demoStaff row of skills/objectstack-platform/SKILL.md: manager takes another entry's email, and the platform sets manager_id itself.
  • One compact eval case in evals/config-plugins-ops.json that expects manager: '<email>' and forbids a seed hook writing manager_id.

Making room is the real work: trim, raise the ceiling with a stated reason, or split the file. The skills lane decides which.

Dedupe: open issues grepped for demoStaff + manager and for config-plugins-ops: none besides #26616 itself.

Clause-②: no
Metadata-protocol: none

Activity

  1. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

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

    ⛔ Not a claim. The payment path for Wanted, from the contract review of PR #26763: the standing ruling on #26302 (same token-ratchet row), 「A:先削重复,余额按实测提高」. Trim the duplication first, then raise the ceiling by the measured remainder. Neither step needs a new ruling.

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: audit line · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T16:59Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  4. added
    priority:p1High: required for production / M2
    and removed on Oct 27, 2026
  5. 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-rv4qvb (the card thread's harness push branch, self-reported at 2026-10-27T17:41Z — the measured platform exception to claude/issue-N-slug)
    Worktree: objectstack-issue-26764
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectstack-platform/SKILL.md (§ Demo accounts: the manager key with its behaviour as main serves it), skills/objectstack-platform/evals/config-plugins-ops.json (the case the body asks for), their rows in scripts/check-skills-token-ratchet.mjs (room made inside the package first per triage 6448202744; any measured remainder raised at the measurement under the standing ruling 「A:先削重复,余额按实测提高」, spec-seat note 6445537040), 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 #26616 / PR #26763)
    Thread-read: 6448202744
    Premise: holds (seat re-measure on origin/main 0ea90c7a: PR #26763 merged; git grep -w manager over the platform SKILL.md and config-plugins-ops.json → none; SKILL.md 5995 / 5997 tokens, the eval 1469 / 1469)
    Serial constraints cleared: the Blocked-by PR #26763 merged; no open PR names skills/objectstack-platform/** (read over every open PR's files)

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

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26764,
      "status": "done",
      "branch": "claude/project-thread-rv4qvb",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26852",
      "session": "session_01ADHkmTMombCWi6iByM4RdD",
      "premise_still_valid": true,
      "summary": "skills/objectstack-platform/SKILL.md § Demo accounts: the demoStaff example gains a second entry and `manager: 'lead@example.com'`, and one prose clause teaches the key as origin/main 0ea90c7a serves it — another entry's email; the development boot writes sys_user.manager_id itself once every account exists and keeps one set by hand, so no seed hook writes it; a display name, an address no entry has, the entry itself or a loop is refused at load (demo-staff.zod.ts, collectDemoStaffManagerErrors, linkDemoStaffManagers). Eval case 8 added to evals/config-plugins-ops.json by textual splice (must_contain demoStaff / `manager: '` / os dev; must_not_contain `manager_id:` / `reportsTo:`; JSON parses, 8 cases). Paid under ruling A citing triage 6448202744 and spec-seat note 6445537040: four restatements cut from SKILL.md (-331 B, each rule keeps its other home in the file; the phantom-key contract sentence stays because check:skill-top-level-keys quotes it — the first gate round caught my cut of it) against +332 B added, net +1 B inside the 2-token headroom, so that row re-pins at the measurement 5997 -> 5996; the eval file had no duplicate (0 B), so its row rises by the whole addition 1469 -> 1690 (+885 B). Patch changeset for @objectstack/skills. Whole-file: SKILL.md 504 -> 499 lines / 5995 -> 5996 tokens; eval 75 -> 85 lines / 1469 -> 1690 tokens. Whole-package (8 authored files): 21010 -> 21232 tokens, 2142 -> 2147 lines; every skills/*/SKILL.md: 4606 -> 4601 lines.",
      "tests": "No code or test file changed. node scripts/check-skills-token-ratchet.mjs on 3f46225b: exit 0 — `skills/objectstack-platform/SKILL.md is 5966 tokens (ceiling 5966; headroom 0)`, `config-plugins-ops.json is 1690 tokens (ceiling 1690; headroom 0)`, `81 authored bundle file(s) within their ceilings`; --self-test `79 cases pass` exit 0. Eval acceptance by node: every must_contain string in its case's expected_output, no must_not_contain string in case 8's (substring and equality). Build closure for the dist-reading gates: os-verify-lock `turbo run build --filter='./packages/**'` → VERDICT command-exit 0, 75/75 tasks, held 6m31s. No ablation: no tested behaviour changed.",
      "gates": "Derived: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; 4 paths vs merge base 0ea90c7a) -> 64 commands. Run on head 3f46225b after the last commit, stdin closed, exit captured before any pipe: 64/64 `:: exit 0` (incl. check-skills-token-ratchet + --self-test 79 cases; check:skill-top-level-keys self-test 14 cases; spec check:skill-docs; check:pm-dispatch-gates; check:dual-build-cjs-loads; check:dts-closure; check-empty-changeset --base origin/main; check-adr-0087-registration --base origin/main; check:pm-skill-id-lint; check:doc-authoring; check:nul-bytes). `dispatch-gates --ran`: `64 derived, 64 run, 0 NOT-MEASURED, 0 UNRUN` (DERIVED zero), exit 0. Round 1 on ce024605 was 63/64: check:skill-top-level-keys --self-test red (the page must carry the contract sentence 'the top level refuses it and the stack fails to load'; my first cut removed it); fixed in 3f46225b and the whole list re-run there. --tier: MANDATORY — skills/**, clause ①. CI families (lint, type-check lanes, Test Core/UI, Governed Surface Queue Guard): PR check-runs, not re-run locally; status at report time: in_progress (PR just opened).",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — all reads: mcp__github__issue_read get (the card) ×1, mcp__github__issue_read get_comments ×2 (notes, then the Claim), mcp__github__pull_request_read get ×1 (#26852 read-back: draft, labels, reviewers). No MCP write tool used.",
      "api_writes": "2 REST writes, both through the fleet-write relay as objectstack-fleet[bot]: POST /repos/objectstack-ai/objectstack/pulls (pr_create, request fw-20261027T183316Z-4ab078, run 40561053146, read-back 12138/12138 bytes identical, assignee os-steve) and POST /repos/objectstack-ai/objectstack/issues/26764/comments (this report, post-stamped.mjs --comment=26764). Plus two `git push` of the head branch (not REST). No label write: the diff publishes (changeset present), so no skip-changeset; no issue_patch.",
      "open_questions": [
        {
          "question": "Triage 6448202744 says the skills seat 'does not raise the ceiling'; the seat's order and spec-seat note 6445537040 say raise each row by the measured remainder under ruling A. Which reading governs the eval row, which had no duplicate to cut?",
          "options": ["A — as applied: room made inside the package first; a row moves only by its measured remainder (SKILL.md row went DOWN 5997 -> 5966; the eval row rose by exactly its +885 B addition, 1469 -> 1690, the same path its two previous re-pins took)", "B — fold the manager case into eval 7 instead of a new case 8, so the eval row rises less (one prompt covering two teachings; the card's Wanted asks for one compact case)", "C — no raise at all: drop the eval case and leave the follow-up open"],
          "recommendation": "A, because the standing ruling on this very row is 「A:先削重复,余额按实测提高」 and the card's Wanted names the eval case; B blurs eval 7's own assertion set, C leaves the card half-done."
        }
      ],
      "out_of_scope_findings": [
        "class: none filed · observation only (not a card): evals 1, 2, 4 and 7 of config-plugins-ops.json already carry a must_not_contain string as a substring of their own expected_output (`tableName`, `data:beforeInsert`, `onInstall`, `@objectstack/adapter-`, `role:`, `admin_full_access`); the acceptance rule as this card states it is equality, which they pass. carrier: none · noted, not filed"
      ]
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    Round 2 (the seat's review of PR #26852): the sys_metadata clause restored, the SKILL.md row raised by the remainder, the PR body's blockquote corrected.

    {
      "issue": 26764,
      "status": "done",
      "branch": "claude/project-thread-rv4qvb",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26852",
      "session": "session_01ADHkmTMombCWi6iByM4RdD",
      "premise_still_valid": true,
      "summary": "Round 2 on the seat's review: `and do not add sys_metadata objects to an environment runtime manifest` is back in § Compile Artifact (its only other home, references/plugin-development.md, is a plugin author's page, not the objectstack.config.ts author's). Three restatements stay cut (-257 B: the sample refusal fence, the bad-platform-default bullet, the driver parenthetical) against the +332 B addition; priced text 23980 -> 24055 B, so the SKILL.md row moves 5997 -> 6014 (+17, the measured remainder under ruling A, arithmetic and both notes in its comment); the eval row stays 1469 -> 1690. Changeset wording follows (three cuts, remainder raised). PR body patched through the relay (issue_patch): blockquote now says `manager_id` as the landed text does; cut list, table and arithmetic updated. Whole-file: SKILL.md 504 -> 500 lines / 5995 -> 6014 tokens; eval 75 -> 85 lines / 1469 -> 1690. Whole-package (8 authored files): 21010 -> 21250 tokens, 2142 -> 2148 lines; every skills/*/SKILL.md: 4606 -> 4602 lines; bundle 213518 -> 213758.",
      "tests": "No code or test file changed. node scripts/check-skills-token-ratchet.mjs on 02253051: exit 0 — `SKILL.md is 6014 tokens (ceiling 6014; headroom 0)`, `config-plugins-ops.json is 1690 tokens (ceiling 1690; headroom 0)`; --self-test 79 cases pass; check-skill-top-level-keys --self-test 14 cases pass. Rebuild closure under os-verify-lock (turbo build ./packages/**): VERDICT command-exit 0, 75/75 (cache).",
      "gates": "Derived again on 02253051: `dispatch-gates --commands --repo objectstack-ai/objectstack` -> 64 commands (same list as round 2). Run from the worktree after the last commit, stdin closed, exit captured before any pipe: 64/64 `:: exit 0` (check-skills-token-ratchet + --self-test; check:skill-top-level-keys; spec check:skill-docs; check:pm-dispatch-gates; check:dual-build-cjs-loads; check:dts-closure; check-empty-changeset / check-adr-0087-registration --base origin/main; check:pm-skill-id-lint; check:doc-authoring; check:nul-bytes …). `dispatch-gates --ran`: `64 derived, 64 run, 0 NOT-MEASURED, 0 UNRUN`, exit 0. History: ce024605 63/64 (top-level-keys self-test), 3f46225b 64/64, 02253051 64/64. CI on 02253051: PR check-runs, not re-run locally; in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "6 over the card, all reads: issue_read get ×1, issue_read get_comments ×2, pull_request_read get ×1, get_check_runs ×1, get_review_comments ×1 (the subscription check-in on 3f46225b: CI in progress, no review threads). No MCP write tool used.",
      "api_writes": "4 over the card, all through the fleet-write relay as objectstack-fleet[bot]: POST pulls (pr_create #26852, run 40561053146), POST issues/26764/comments (round-1 report 6450488515), PATCH pulls/26852 body (issue_patch, request fw-20261027T190139Z-9450dd, run 40565363741, read-back 12623/12623 identical — the seat allowed this patch of my own PR body), POST issues/26764/comments (this round-2 report). One over the three-write budget: the body patch, ordered by the seat. Three `git push` of the head branch (not REST).",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

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

  10. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · 2026-10-27T23:47Z — PR #26852 merged through the queue (merge commit d7dd47a8e8) on the os-zhuang approval, after the director's PASS 6451188988; the platform skill teaches demoStaff manager and eval case 8 pins it, both rows at the measurement under ruling A. The card closed by its Fixes line; pm:dispatched stripped in this act.

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

Metadata

Metadata

Assignees

Labels

area:authdocumentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions