Skip to content

skills(objectstack-data): the save notice is undiscoverable — the SKILL.md rule index calls rules/lifecycle.md retention-only, and references/data-hooks.md has no ctx.notice row #28819

Closed

Description

@objectstack-fleet

domain:skills#2 · marchtian · session_017ihL2g7RyXa8ErM6GAkHyc

Filing gate: ② the open_question of PR #28813's dev report (6564123997), which contract review 6564252529 ③ escalated as a follow-up card. It is outside that PR: its card (#28253) names rules/lifecycle.md only, and PR #28795 holds skills/objectstack-data/SKILL.md. Filed by domain:skills seat 2. ⛔ Not a claim. No grade: triage sets it.
Reader: domain:skills, skills/objectstack-data/SKILL.md (rule index, the rules/lifecycle.md entry, L45 on main) and skills/objectstack-data/references/data-hooks.md (the sandbox ctx.* table, L352–368, and the HookContext listing, L573–610).
Dedupe (open AND closed): "ctx.notice data-hooks" → only #28253; "save notice skill index" → none. #28787 covers the automation skill (save_notice node and ctx.notice) and does not cover these two files.
reach: an author writing a save hook from objectstack-data. SKILL.md L46 sends them to references/data-hooks.md, which has no notice. L45 describes rules/lifecycle.md as retention-only and "distinct from lifecycle hooks", so the save-notice teaching PR #28813 adds is correct but nothing in the skill's own index leads to it.

Wanted

  • SKILL.md rule index: the rules/lifecycle.md entry names the save notice, in one clause.
  • references/data-hooks.md: the sandbox ctx.* table and the HookContext listing each gain a notice(message) row that points at rules/lifecycle.md. The file has about 2 tokens of headroom, so the row is paid for by deleting restating prose in the same file.
  • Changeset: @objectstack/skills patch.

Blocked-by: #28253
Blocked-by: #28730

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:skills · 2026-11-06T12:24Z

    ⛔ Not a claim.

    • A published-skill teaching gap (skills/**, with an '@objectstack/skills': patch changeset). It was never graded; triage missed it in the finding list until now. finding is removed.

    Generated by Claude Code

  3. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  4. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u

    Claim: PM loop round 4 · 2026-11-06T12:43Z
    Session: session_01L9qibz5RLVEYDFco93jZ7u
    Account: os-tesla (the card's assignee)
    Branch: claude/project-thread-q060ym (the card thread's designated branch; dev session session_01L9qibx4SVi1CLmwbLz82b7)
    Worktree: objectstack-issue-28819
    Domain: domain:skills
    Seat: domain:skills#2
    File surface: skills/objectstack-data/SKILL.md (the rule index's rules/lifecycle.md entry only, ⛔ not Verify), skills/objectstack-data/references/data-hooks.md (the sandbox ctx.* table and the HookContext listing; growth paid by same-file deletion), scripts/check-skills-token-ratchet.mjs (rows DOWN only), one root .changeset/28819-save-notice-discoverable.md. ⛔ every other file, ⛔ every ceiling raise (stop on breach)
    Container & model: S, mode:thread, model: claude-fable-5-1 (dispatch-gates --tier: MANDATORY for skills/** clause ①, no one-line exit), effort: high (p3)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (the open_question of PR #28813's dev report)
    Thread-read: 6684772134
    Premise: holds: the SKILL.md rule index calls rules/lifecycle.md retention-only and references/data-hooks.md has no notice row; blockers #28253 and #28730 are closed completed
    Serial constraints: queued card #30893 will later edit skills/objectstack-data/SKILL.md Verify and waits for this card. Seat 2's open PRs #30890 / #30921 touch other objectstack-data files; merge origin/main before pushing.

    Tier H (skills/**): draft until a governed approver approves; the seat's at-tier contract review precedes ACCEPT.

    Order: /mnt/project-files/skills-seat-2/r2026-11-06/dispatch-28819.md (frame FRAME.md beside it).

  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibx4SVi1CLmwbLz82b7
    os-dev-report

    Reported 2026-11-06T13:18Z · PR #30947 · head 79305e9 · status done.

    {
      "issue": 28819,
      "status": "done",
      "branch": "claude/project-thread-q060ym",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30947",
      "session": "session_01L9qibx4SVi1CLmwbLz82b7",
      "premise_still_valid": true,
      "summary": "Draft PR #30947 (head 79305e90 = 6edbf15a merged with origin/main 33043bd8). skills/objectstack-data/SKILL.md: the rule index's rules/lifecycle.md entry gains one clause, 'plus the save notice a hook hands the saver (ctx.notice)'; paid by dropping the bounding-policy clause from the lifecycle property row, which the index entry and rules/lifecycle.md § Validation Rules both carry; Verify untouched. references/data-hooks.md: a ctx.notice row in the sandbox ctx.* table ((message) => void, answered as the create/update notice and shown on the save toast, no capability, insert/update only, last call wins, link to rules/lifecycle.md § Save Notice) and a notice?: (message: string) => void member in the HookContext listing, both read off HookContextSchema.notice, body-runner.ts and quickjs-runner.ts on main; paid by three same-file restatements (the reverse-engineering aside in the body intro, the tenantId blockquote whose two halves live in the listing comment and the two-axes note, the ctx.user paragraph under the ?? line that shows it). scripts/check-skills-token-ratchet.mjs: both rows re-locked DOWN at the landed counts, 6123 -> 6078 and 10066 -> 10011, no ceiling raised. Changeset .changeset/28819-save-notice-discoverable.md, '@objectstack/skills': patch, Clause-②: no, Metadata-protocol: none.",
      "tests": "Prose only; no package test, no ablation (docs are excluded by the ablation rule). node scripts/check-skills-token-ratchet.mjs --self-test: '97 cases pass', exit 0. node scripts/check-skills-token-ratchet.mjs: 'skills/objectstack-data/SKILL.md is 6078 tokens (ceiling 6078; headroom 0)' and 'references/data-hooks.md is 10011 tokens (ceiling 10011; headroom 0)', exit 0, on 6edbf15a and again on 79305e90. Readings (gate convention ceil(bytes/4), SKILL.md stamp line unpriced): SKILL.md 465 -> 465 lines, 6087 -> 6078 tokens; data-hooks.md 973 -> 965 lines, 10056 -> 10011 tokens; all 11 skills/*/SKILL.md 4525 -> 4525 lines, 56670 -> 56661 tokens. The skill's evals/ fixtures have no runner in this tree (skills/README.md L74: maintainer-scored); untouched, still measured by the ratchet (1753 / 1749 tokens).",
      "gates": "Derived with dispatch-gates --commands --repo objectstack-ai/objectstack at 6edbf15a: 64 commands, each run with stdin from /dev/null and its exit code landed on disk before any pipe (ran-list: project files skills-seat-2/r2026-11-06/out/28819-gates-ran-6edbf15a.list). 63 exit 0 (incl. check-skills-token-ratchet + --self-test, check:skill-identifier-liveness, check:skill-frame-sync, check:skill-compatibility, check:pm-skill-id-lint, check:doc-authoring, check:role-word, check:nul-bytes, check:changeset-gate-self-tests, check-empty-changeset/--base, check-adr-0087-registration/--base, check-changeset-no-major/--base, check:pm-governed-merges, check:pm-dispatch-gates, spec check:skill-docs + check:skill-refs, lint check:doc-formula-expressions). check:lean-entry-closure exited 3 until packages/objectql dist was built under the verify lock, then 0 (recorded as 0). check:dual-build-cjs-loads: exit 3 PREREQUISITE NOT MET (every published dist, 89 absent) — NOT MEASURED locally, CI's Lint & Repo Gates runs it; the diff touches no package it loads. --ran: '64 derived famil(ies) accounted for — 63 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. On the merged head 79305e90 the five base-sensitive families re-ran, all exit 0 (28819-gates-ran-79305e90-merged.list). Prerequisite builds under os-verify-lock.sh: '@objectstack/lint...' (VERDICT command-exit 0, 108 s) and '@objectstack/objectql...' (VERDICT command-exit 0, 150 s). CI on the PR: in_progress at report time; the seat reads the check-runs.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — GitHub MCP reads only: issue_read get x1, issue_read get_comments x2; 0 write tools (the harness's assignee/reviewer step is skipped: the relay's pr_create carries none by design)",
      "api_writes": "0 REST proxy writes. Relay writes 2: pr_create (fleet-write run 42224290403, 9236 bytes read back identical), post-stamped --comment=28819 (this report). git push x2 (6edbf15a, 79305e90).",
      "files_changed": [
        "skills/objectstack-data/SKILL.md",
        "skills/objectstack-data/references/data-hooks.md",
        "scripts/check-skills-token-ratchet.mjs",
        ".changeset/28819-save-notice-discoverable.md"
      ],
      "deviations": [
        "The first local commit was made with a mistyped hooks path (core.hooksPath=.husky, which does not exist here), so the repo's .githooks pre-commit did not run on it; it was never pushed. I reset it (soft) and re-committed as 6edbf15a with the configured hooks running, then pushed. The pre-push hook ran on both pushes.",
        "Edits were made in the linked worktree objectstack-issue-28819 on the designated thread branch (the primary checkout left detached at origin/main 4d56914a) because guard-main-checkout blocks writes in the primary checkout. No empty-branch probe push (card-thread branch).",
        "Harness assignee/reviewer step skipped: no GitHub MCP write tool used; the seat sets the PR assignee at hand-over.",
        "No worktree removal yet: the card thread keeps driving the draft PR (CI, mergeability) until the seat lands it."
      ],
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: none of a/b/c (duplication, not a defect) · reach: none · skills/objectstack-data/SKILL.md still describes `lifecycle` in two places (the optional-properties table row and the rule-index entry); this PR trimmed the row's restated clause and left the rest · dedupe words: lifecycle row, rule index, objectstack-data duplication",
        "carrier: none · noted, not filed"
      ]
    }
  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibx4SVi1CLmwbLz82b7
    os-dev-report

    Reported 2026-11-06T13:55Z · PR #30947 · head 8111c0d · status done · supersedes comment 6685780581.

    {
      "issue": 28819,
      "status": "done",
      "branch": "claude/project-thread-q060ym",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30947",
      "session": "session_01L9qibx4SVi1CLmwbLz82b7",
      "premise_still_valid": true,
      "summary": "Refreshed report, supersedes comment 6685780581 (head 79305e90). Head 8111c0d5 adds one commit for the two should-fixes of contract review 6685938271 (PASS at 79305e90). (1) references/data-hooks.md: the Two-isolation-axes note now reads 'the generic driver-layer `tenantId` knob (`execCtx.tenantId` / `DriverOptions.tenantId`) can carry that environment id', so the two symbols the deleted blockquote named are back in the skill; paid by trimming the ctx.session row's history clause to '(declared, never produced)', dropping the 'Rules: ' prefix in the ctx.notice row, and a colon for a dash in the notice? comment. File 40042 bytes = 10011 tokens, ceiling 10011 unchanged, headroom 0. (2) scripts/check-skills-token-ratchet.mjs: the data-hooks row comment states the net move (main 10056 -> 10011, -45) and names the four deletions, no per-piece counts. Everything else as reported before: SKILL.md rule-index entry names the save notice (paid by the lifecycle row's bounding-policy clause, row 6123 -> 6078), ctx.notice table row + notice? HookContext member pointing at rules/lifecycle.md § Save Notice, changeset '@objectstack/skills': patch, Clause-②: no, Metadata-protocol: none.",
      "tests": "Prose only; no package test, no ablation. On 8111c0d5: node scripts/check-skills-token-ratchet.mjs --self-test '97 cases pass' exit 0; node scripts/check-skills-token-ratchet.mjs: 'skills/objectstack-data/SKILL.md is 6078 tokens (ceiling 6078; headroom 0)', 'references/data-hooks.md is 10011 tokens (ceiling 10011; headroom 0)', exit 0. Readings vs origin/main 4d56914a: SKILL.md 465 -> 465 lines, 6087 -> 6078 tokens; data-hooks.md 973 -> 965 lines, 10056 -> 10011 tokens; all 11 skills/*/SKILL.md 4525 -> 4525 lines, 56670 -> 56661 tokens. No evals runner exists for skills/*/evals (maintainer-scored, skills/README.md L74); fixtures untouched.",
      "gates": "Re-derived with dispatch-gates --commands --repo objectstack-ai/objectstack at 8111c0d5: the same 64 commands as at 6edbf15a. Each run with stdin from /dev/null, exit code landed on disk before any pipe (ran-list: project files skills-seat-2/r2026-11-06/out/28819-gates-ran-8111c0d5.list). 63 exit 0 (check:lean-entry-closure now 0 on the first pass, objectql dist present). check:dual-build-cjs-loads: exit 3 PREREQUISITE NOT MET (needs every published dist) — NOT MEASURED locally, CI runs it. --ran: '64 derived famil(ies) accounted for — 63 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. CI on 8111c0d5, read from the PR check-runs at 13:54Z: Lint & Repo Gates success, TypeScript Type Check success, Test Core success (shards 1/8 2/8 3/8 success), Build Core success, Governed Surface Queue Guard success, Check Changeset success, PR-body guards success, Check PR Size success, Test UI success, Live E2E UI success, Dogfood Regression Gate success, every Lint · / Type Check · sub-job success; Lint UI, Type Check UI, Build & E2E UI, Build UI Deps, Build Docs, Dogfood Verify CLI, Temporal Conformance, upgrade harness, packed-tarball smoke skipped by their filters. No red check-run. mergeable_state blocked (draft awaiting the Tier H approval), not dirty; origin/main is 3 commits ahead (616311c1), none touching the four files.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "10 — GitHub MCP reads only: issue_read get x1, issue_read get_comments x2, pull_request_read get x2, get_check_runs x3, get_comments x2; 0 write tools (harness assignee/reviewer step skipped: the relay's pr_create carries none by design)",
      "api_writes": "0 REST proxy writes. Relay writes 3: pr_create (fleet-write run 42224290403), post-stamped --comment=28819 x2 (6685780581 and this refresh). git push x3 (6edbf15a, 79305e90, 8111c0d5).",
      "files_changed": [
        "skills/objectstack-data/SKILL.md",
        "skills/objectstack-data/references/data-hooks.md",
        "scripts/check-skills-token-ratchet.mjs",
        ".changeset/28819-save-notice-discoverable.md"
      ],
      "deviations": [
        "PR body (written once at pr_create, head 79305e90) is stale in three places and the dev does not PATCH it: the data-hooks deletion list should add the session.roles history clause and say the two-axes note now names execCtx.tenantId / DriverOptions.tenantId; the notice? comment reads 'Save notice: rules/lifecycle.md § Save Notice' (colon); the readings table and Verification should cite 8111c0d5. The seat writes that edit if wanted.",
        "First local commit ran without the .githooks pre-commit (mistyped hooks path), never pushed; redone as 6edbf15a with hooks. Every later commit and push ran the hooks.",
        "Edits in the linked worktree objectstack-issue-28819 on the designated branch (primary checkout detached); no empty-branch probe push (card-thread branch).",
        "Worktree kept until the seat lands the PR."
      ],
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: none of a/b/c (duplication, not a defect) · reach: none · skills/objectstack-data/SKILL.md still describes `lifecycle` in two places (the optional-properties row and the rule-index entry) · dedupe words: lifecycle row, rule index, objectstack-data duplication",
        "carrier: none · noted, not filed"
      ]
    }
  7. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u

    Landed · 2026-11-06T15:27Z · PR #30947 merged as 7c1eeb14 through the merge queue (ACCEPT 6686517126). The Claim is discharged; pm:dispatched removed. Branch claude/project-thread-q060ym is retired.

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

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions