Repository navigation
skills(objectstack-upgrade): the "several majors late" paragraph still examples os migrate meta --from 10, which the chain refuses below MIGRATION_SUPPORT_FLOOR = 16 (MigrationFloorError) #22123
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iterateand removed
on Oct 7, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsUnlock —
pm:blocked→pm:queueby skills seat 1,session_01CXydFDyiQwNbGFkmwrcRQq, 2026-10-08T02:34Z. ⛔ Not a claim.The body's
Blocked-by: #22120is discharged: #22120 closedcompletedat 2026-10-08T02:10Z by PR #22122 (squash033e5c536donorigin/main). Double-check: this card carries no transition comment after its filing and no PR references it, so the body line is the only condition; re-derived blockers: none — no open card or PR holdsskills/objectstack-upgrade/SKILL.md(nine open PRs' file lists read at 2026-10-08T02:26Z; the oneskills/**hit is PR #22103 onskills/objectstack-data/rules/indexing.md, a different file). Premise re-read onorigin/main033e5c536d:--from 10still atskills/objectstack-upgrade/SKILL.md:103(control:os migrate metaat:21);MIGRATION_SUPPORT_FLOOR = 16atpackages/spec/src/migrations/registry.ts:79. Token ratchet at this read: 6187 tokens, ceiling 6193, headroom 6. The card is a candidate from this act (p3; the lane holds no open P0/P1).
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsClaim: PM loop round 2
Session:session_01CXydFDyiQwNbGFkmwrcRQq
Account:huangyiirene(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-22123-upgrade-skill-late-arrival-floor
Worktree:objectstack-issue-22123
Domain:domain:skills
Seat:domain:skills#1
File surface:skills/objectstack-upgrade/SKILL.mdonly — the "several majors late" paragraph (:103onorigin/main033e5c536d) and, only where the reword needs room, deletions elsewhere in the same file to pay the token ratchet (6187 tokens, ceiling 6193, headroom 6;node scripts/check-skills-token-ratchet.mjs). Governed (skills/**, Tier H): the PR stays draft with## 维护者速读(草稿)and lands on an authorized APPROVED or the maintainer's hand. ⛔ No other file; ⛔ no re-wrap as token payment; stop on breach; explain in the report
Container & model:Sjudged asM(the judgment is in the wording, not in a gate),mode:subagent,model: CONTRACT_REVIEW_TIER—dispatch-gates --tier --repo objectstack-ai/objectstack skills/objectstack-upgrade/SKILL.mdprints "Model tier — MANDATORY: … (derived from the file surface, not recalled)"; the publishedskills/**root ships whole, no line-level exemption
Clause-②: no
Responsibility: the published skill text produces the risk (skills/objectstack-upgrade/SKILL.md:103tells its reader to runos migrate meta --from 10, which the chain refuses belowMIGRATION_SUPPORT_FLOOR = 16) | the platform path that already covers it: the CLI's own refusal (MigrationFloorError, exit 1 /unsupported_from_major) stops the harm at the door, but the shipped sentence stays wrong until the text changes | who reaches it: every reader of the published upgrade skill arriving from a protocol below 16; used today — the skill ships with everynpx skills add
Thread-read: 6051006175
Serial constraints cleared: #22120 (same file) landed — PR #22122 MERGED 2026-10-08T02:10Z, squash033e5c536donorigin/main, so this branch cuts from that tip; same-day churn: yes,033e5c536dat 2026-10-08T01:54Z on this file — the dispatch order carries the churn line; no open PR touches this file (nine open PRs' file lists read at 2026-10-08T02:26Z; PR #22103 holdsskills/objectstack-data/rules/indexing.md, a different file); no in-flight card in the lane before this batch, and #22059 (dispatched in the same batch) is file-disjoint (scripts/check-corpus-claim-drift.mjs); verify lock free, queue empty (arrival depth 1 at this read, belowLOCK_DEPTH_HOLD); the lane's open P0/P1: none ⇒ p3 is a candidate (NORTH-STAR 「优先级」 3 read). Readings taken at 2026-10-08T02:28Z.
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 22123, "status": "done", "branch": "claude/issue-22123-upgrade-skill-late-arrival-floor", "pr": "https://github.com/objectstack-ai/objectstack/pull/22145", "session": "session_01CXydFDyiQwNbGFkmwrcRQq — subagent run under the PM's session (mode:subagent; the relay route read the same id from the container)", "premise_still_valid": true, "premise_evidence": "On the branch base ef1fcb26a2 (origin/main at cut time, one commit past the order's 033e5c536d — #22103, file-disjoint): skills/objectstack-upgrade/SKILL.md:103 read `os migrate meta --from 10` (grep -n -F -- '--from 10' → 1 hit; control `--from 16` → 11 hits); packages/spec/src/migrations/registry.ts:79 `export const MIGRATION_SUPPORT_FLOOR = 16;` (control: 4 mentions in the file); the failure-mode row `MigrationFloorError` at SKILL.md:472; chain.ts:208 throws MigrationFloorError for fromMajor below the floor; packages/spec/spec-changes.json carries `supportFloor: 16`. Token ratchet before: 6187 / 6193, headroom 6 — as the order stated. Assumption 3 held: the only `--from 10` under skills/objectstack-upgrade/ was SKILL.md:103; references/ and evals/ never carried it.", "summary": "Reworded the 'several majors late' paragraph in skills/objectstack-upgrade/SKILL.md: the example is now `os migrate meta --from 16` (the floor, the spelling every other example in the file uses), the floor is stated in the same breath ('down to the chain's support floor, 16 today'), and the below-floor case carries the remedy the failure-mode row and the CLI refusal already give ('upgrade to it by the older route first, then run the chain'). Paid the +94-byte growth by deleting two clauses the file states beside them (the `mkdir -p .upgrade` trailing comment, -57 bytes; the clause 'which is exactly what the table above points at' in §2.1's callout, -49 bytes); no re-wrap. Draft PR #22145 against main (head 3e842f9fd8, one file, +6/-5), `skip-changeset` + assignee huangyiirene applied in one label-write; `documentation` and `size/s` on the PR were set by other actors and left alone. Tier H: stays draft.", "files_changed": ["skills/objectstack-upgrade/SKILL.md (+6/-5; 484 → 485 lines; 24748 → 24736 bytes; 6187 → 6184 tokens, ceiling 6193, headroom 6 → 9)"], "readings_skills": { "whole_file_before": "ef1fcb26a2: 484 lines / 24748 bytes / 6187 tokens / headroom 6", "whole_file_after": "3e842f9fd8: 485 lines / 24736 bytes / 6184 tokens / headroom 9", "whole_package_before": "ten skills/*/SKILL.md: 4407 lines / 52575 tokens; ratchet authored-bundle total 144050, shipped tree 154836", "whole_package_after": "ten skills/*/SKILL.md: 4408 lines / 52572 tokens; ratchet authored-bundle total 144047, shipped tree 154833", "gate_line_at_head": "✓ check-skills-token-ratchet: skills/objectstack-upgrade/SKILL.md is 6184 tokens (ceiling 6193; headroom 9). — taken at 3e842f9fd8" }, "tests": "Prose-only diff: no package test or typecheck owed (no package touched; no ablation applies — nothing executable changed). Gates derived on this tree with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (stderr line 1: 'gate list derived from the tree of objectstack-ai/objectstack at commit ef1fcb26a2', re-derived at 3e842f9fd8): 24 families, identical to the PM's list. All 24 run with exit captured before any pipe and reconciled: `dispatch-gates --repo objectstack-ai/objectstack --ran ran.txt` → 'Run reconciliation — 24 derived, 24 run, 0 NOT-MEASURED, 0 UNRUN' (a DERIVED zero: all 24 recorded an exit code and none is 3). Evidence lines: check-skills-token-ratchet '6184 tokens (ceiling 6193; headroom 9)' + self-test '65 cases pass'; check:doc-authoring '53 published skill files clean — no internal issue-id references'; check:nul-bytes 'OK (scanned 10133 text file(s) … no raw ASCII control bytes)'; check:skill-identifier-liveness 'OK — Leg 1: 457 citation(s) over 53 published file(s)'; spec check:skill-docs '✅ Skill docs in sync'; check:skill-compatibility '10 SKILL.md file(s) reconciled'; check:skill-frame-sync 'internally coherent'; check:doc-formula-expressions first exit 3 (PREREQUISITE NOT MET: @objectstack/formula and @objectstack/lint not built) → built both under os-verify-lock (VERDICT command-exit 0, held 143s, waited 0s) → re-run exit 0. Extra, outside the derived list, green: check:skill-top-level-keys, check:skill-frame-freshness, spec check:skill-refs ('9 generated files in sync'). NOT MEASURED: spec check:skill-examples — exit 3, prerequisite 'packages/client-react/dist holds no .d.ts declarations'; outside the derived list and the diff touches no SDK example, so the client build was not taken. Card re-check lines: `grep -n -F -- '--from 10' skills/objectstack-upgrade/SKILL.md` → 0 hits on 3e842f9fd8; control `grep -c -F -- '--from 16'` → 12. PR body read back after create: 7315 bytes sent, 7315 stored, byte-identical; one session-URL footer; draft=true, base=main.", "gates": [ "node scripts/check-ci-filter-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-doc-route-spelling.mjs --advisory :: exit 0", "node scripts/check-doc-route-spelling.mjs --self-test :: exit 0", "node scripts/check-skills-token-ratchet.mjs :: exit 0", "node scripts/check-skills-token-ratchet.mjs --self-test :: exit 0", "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 (first run exit 3 = prerequisite not built; re-run after `turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` under the verify lock)", "pnpm --filter @objectstack/spec run check:skill-docs :: exit 0", "pnpm check:agent-test-spelling :: exit 0", "pnpm check:corpus-claim-drift :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:doc-authoring :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:pm-governed-merges :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:role-word :: exit 0", "pnpm check:skill-compatibility :: exit 0", "pnpm check:skill-frame-sync :: exit 0", "pnpm check:skill-identifier-liveness :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "EXTRA pnpm check:skill-top-level-keys :: exit 0", "EXTRA pnpm check:skill-frame-freshness :: exit 0", "EXTRA pnpm --filter @objectstack/spec run check:skill-refs :: exit 0", "NOT MEASURED pnpm --filter @objectstack/spec run check:skill-examples :: exit 3 (prerequisite: client SDK dist not built; outside the derived list)", "CI: in_progress at report time (not waited for, per the no-wait clause)" ], "deviations": [ "Branch base is ef1fcb26a2, one commit past the order's 033e5c536d (#22103, skills/objectstack-data/rules/indexing.md — file-disjoint); every premise re-taken on ef1fcb26a2 and the readings are quoted from it.", "The PR carries `documentation` and `size/s` labels not in my label-write target — set by other actors (labeler), left alone per the shared-identity rule.", "Commit trailer pair is the model-free form AGENTS.md requires (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By; reported, not a deviation to correct." ], "mcp_calls": "0 — no MCP GitHub tool called (reads via `gh api` GET on the single card, its comments, PR #22122 and PR #22145; the fleet-write route probe)", "api_writes": "3 relay dispatches, 4 REST endpoints (all as objectstack-fleet[bot] via scripts/pm/fleet-write; `git push` ×2 is not REST): ① pr_create → POST /repos/objectstack-ai/objectstack/pulls (run 37720597750 → PR #22145, draft forced); ② label-write → POST /repos/objectstack-ai/objectstack/issues/22145/labels {skip-changeset} + POST /repos/objectstack-ai/objectstack/issues/22145/assignees {huangyiirene} (run 37720660086; read-back matches target); ③ this os-dev-report → POST /repos/objectstack-ai/objectstack/issues/22123/comments via post-stamped. No PATCH, no PUT, no bare curl.", "open_questions": [], "out_of_scope_findings": [ "observation (not a card; class: none) · neither the skill nor the CLI's MigrationFloorError text names what 'the older route' / 'another path' is for a project below the floor (install the spec major that still reaches it, run its chain, then continue from 16). The refusal is loud and the remedy's direction is stated; naming the route is a product sentence for the maintainer. carrier: none · noted in the PR's Acceptance notes, not filed. dedupe words: `older route floor skill` · `MigrationFloorError another path named` · `upgrade below support floor route`" ] }
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsACCEPT — PR #22145 (
3e842f9fd8), reviewed against GitHub andorigin/mainby skills seat 1,session_01CXydFDyiQwNbGFkmwrcRQq, 2026-10-08T03:12ZVerdict: ACCEPT. Landing path: Tier H (
skills/**is a governed surface;check-governed-mergesreading below), so the final four-piece set replaces a queue landing: ① the## Contract reviewrecord is on PR #22145 (PASS, head3e842f9fd8f667f2b22066787d69fd1db6b53694, served tierCONTRACT_REVIEW_TIER, in-seat); ② this ACCEPT; ③needs-user-decisionon the PR plus the final maintainer brief comment there; ④ review requested fromos-zhuangandhotlong. The PR stays draft until an authorized APPROVED (GOVERNED_APPROVERS) or a hand merge; on APPROVED this seat lands it (check-expected-skips,check-governed-merges,pr_ready,automerge_enableaftermergeable_statereadsclean) and closes out.Checklist, read on the PR and the tree, not on the report:
- PR form: draft, base
main, first lineFixes #22123(merge should close the card: the whole defect is this one paragraph),Clause-②: noat the start of its own line; the body's only closing keyword is that first line, and no keyword sits beside another open card number (skills(objectstack-upgrade): the upgrade skill saysos migrate meta"writes nothing but--out", which--write(PR #22108) now makes incomplete #22120 and docs(skills): objectstack-upgrade namesos migrate meta --writebeside the default run #22122 appear as plain references).documentation,size/s,skip-changesetand assigneehuangyiireneon the PR, read back. - Scope:
get_files= exactly one file,skills/objectstack-upgrade/SKILL.md, +6/−5, as the claim 6051018446 declared. Nocontent/docs/releases/, no.changeset/*, nopackages/spec/**, nopackages/cli/**. Docs-only ⇒skip-changesetis the correct declaration for this repository. - The fix, read in the diff: the §0 "several majors late" paragraph now examples
--from 16, states the floor ("16 today") in the same breath and gives the below-floor remedy; "no penalty for lateness" dropped as a restatement. Premises re-read onorigin/mainef1fcb26a2:MIGRATION_SUPPORT_FLOOR = 16(packages/spec/src/migrations/registry.ts:79), the chain's refusal atchain.ts:177-178,unsupported_from_majoratmeta.ts:975, the failure-mode row atSKILL.md:472. All hold. - Token ratchet paid in content: two clauses deleted, both surviving beside their deletion sites (the
.upgrade/workspace sentence at head:115; the §2.1 callout still namingspec-changes.jsonand the chain's--jsonoutput at head:247); no line re-wrapped. 6187 → 6184 tokens, ceiling 6193, headroom 6 → 9. CI reading on the head 2026-10-08T03:10Z:Lint & Repo Gatessuccess,TypeScript Type Checksuccess (the two required jobs; the ratchet,check:skill-docsandcheck:skill-refsrun inside the first), 34 check-runs: 22 success, 11 skipped, 1 in_progress (still running: Test Core (1/6)). Landing waits on every check being green regardless, per the Tier H path above. - Evidence: 24 gate families derived with
dispatch-gates --commandsatef1fcb26a2and at3e842f9fd8(identical to this seat's path-derived list of 52 entries' skill-file subset), 24 run / 24 exit 0 with--ranreconciliation; one prerequisite re-run (check:doc-formula-expressionsafter building@objectstack/formulaand@objectstack/lintunder the verify lock) recorded with its first exit;check:skill-exampleshonestly NOT MEASURED (client SDK dist not built; outside the derived list, no SDK example touched).mcp_calls0;api_writes2, both relay dispatches landing asobjectstack-fleet[bot](branch push and the draft PR). - Freshness: branch cut from
origin/mainafter docs(skills): objectstack-upgrade namesos migrate meta --writebeside the default run #22122 (033e5c536d);origin/mainis stillef1fcb26a2at this reading;mergeable: true. - Contract faces: governed rule text hit (
skills/**) ⇒ at-tier contract review owed and written in-seat (record on the PR).Clause-②: no; nopackages/spec/src/**. - Governed-merge reading:
node scripts/pm/check-governed-merges.mjs --pr 22145classifies the single path as Tier H (its output is quoted in the maintainer brief's seat-opinion section as read at posting time). Not flipped ready, not armed.
Deviations noted, none blocking:
- The PR body says "Nothing else in the file states a
--frombelow 16"; its control wasgrep -- '--from 10'only.SKILL.md:93does state--from 15, as the lower bound derived from a range example. Judged in the contract review (item 8): a range-arithmetic illustration, not this defect's class, and the reworded paragraph two lines below now covers the below-floor case; left untouched, put to the maintainer as an optional same-byte swap, not ordered. premise_still_valid: truereported and confirmed by this seat's own re-read onorigin/main.
Acceptance notes (stay notes; no card):
- Neither the skill nor the CLI refusal names the "older route" / "another path" for a below-floor project. The refusal is loud and the remedy's direction is stated; naming the route is a product sentence for the maintainer, raised in the maintainer brief, not filed.
Generated by Claude Code
- PR form: draft, base
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsLanding in progress — PR #22145, skills seat 1,
session_01CXydFDyiQwNbGFkmwrcRQq, 2026-10-08T03:33ZAuthorized approval read on the REST reviews endpoint, not from the event:
os-zhuang(aGOVERNED_APPROVERSaccount) APPROVED review 5451008723 on head3e842f9fd8at 2026-10-08T03:30Z. The approver then flipped the PR ready (ready_for_review2026-10-08T03:30Z) and armed auto-merge themselves (auto_merge_enabled2026-10-08T03:30Z); the Governed Surface Queue Guard re-ran on the head and concludedsuccess(2026-10-08T03:31Z); the timeline showsadded_to_merge_queueat 2026-10-08T03:32Z. Pre-landing readings by this seat:check-expected-skips --pr 22145exit 0 (40 check-runs, 25 success, 15 skipped, every skip in the roster);check-governed-merges --pr 22145Tier H as declared at ACCEPT;origin/mainatec8f37c890,merge-treeclean. The queue carries the PR to MERGED; this seat watches the queue andorigin/mainand closes out on both readings.Refused step, recorded as landing-operations requires: this seat's strip of
needs-user-decisionfrom PR #22145 was refused by the session's auto-mode classifier. Command:node scripts/pm/label-write.mjs --issue 22145 --repo objectstack-ai/objectstack --remove needs-user-decision(sent in one shell line with three read-only calls: the PR timeline, the head's check-runs,check-expected-skips --pr 22145). Stated reason: "Merge Without Review". Not re-spelled, not retried, no other channel tried. The label therefore stays on the PR until the maintainer removes it or this seat's close-out after MERGED removes it (the rule's "PR merged or closed ⇒ the dispatching seat strips"); if that strip is refused again it is recorded here the same way.Close-out after MERGED, owed by this seat: the card closes through
Fixes #22123;pm:dispatchedand the assignee come off the card; the landing note names the squash sha and itsorigin/mainancestry.
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsLanded — PR #22145 MERGED, skills seat 1,
session_01CXydFDyiQwNbGFkmwrcRQq, 2026-10-08T04:07ZTwo readings, taken together: PR #22145 reads
merged: trueat 2026-10-08T04:04Z with merge commitaaa4ad29bc1e813a418f0251d94083fc84ccd7cd, and that commit is an ancestor oforigin/main(single parent, content = the one-file diff of head3e842f9fd8; control:origin/mainat959c209d56). The queue entrygh-readonly-queue/main/pr-22145-dc759f2fb9rode behind pr-22138 (all five merge-group workflowssuccesson both entries). Approval and arming were the approver's own (os-zhuang, review 5451008723,ready_for_reviewandauto_merge_enabled2026-10-08T03:30Z,added_to_merge_queue2026-10-08T03:32Z); the contract review (PASS, 6051399880), the ACCEPT (6051404779) and the maintainer brief (6051414645) are the review record beside the approval.Close-out in this act: this card closed by the merge through
Fixes #22123(read back below);pm:dispatchedand the assignee stripped; the lane's open set compared before and after the landing: 7 open before (#22123 #22060 #22059 #22053 #22052 #19287 #17161, read 2026-10-08T03:23Z) and 7 open after (#22176 #22172 #22060 #22053 #22052 #19287 #17161): #22123 left by this merge, #22059 closed by this seat under its ruling (6051932778), #22176 filed by this seat, #22172 filed and dispatched by the director seat; nothing else closed. The PR'sneeds-user-decisionstrip: done in this act after the merge (3 labels read back, the label gone; the pre-merge attempt had been refused by the session classifier, recorded in 6051617776).Published text now on
main:skills/objectstack-upgrade/SKILL.md§0 examplesos migrate meta --from 16, names the floor ("16 today") and the below-floor remedy; the deleted clauses' content survives beside them (:115,:247); ratchet 6184 of 6193. Two optional notes left with the maintainer in the brief (the:93range illustration; the unnamed "older route"), neither ordered.
Generated by Claude Code
- added 2 commits that reference this issue
on Oct 9, 2026
① — a shipped sentence that is wrong: the published upgrade skill tells its reader to run a command the CLI refuses. Filed by the skills seat (
domain:skills#2,session_0181E4ZeZmWyknawnauxD2CE, seat post #19287) from the dev's out-of-scope finding on #22120 (report 6046525169, class b). ⛔ Not a claim.What is wrong (read on
maindb4c45b8c3)skills/objectstack-upgrade/SKILL.md:103: "Arriving several majors late is the designed-for case.os migrate meta --from 10replays every step in order …".packages/spec/src/migrations/registry.ts:79:MIGRATION_SUPPORT_FLOOR = 16. A--frombelow the floor throwsMigrationFloorError("Cannot migrate from protocol 10: the chain's support floor is 16 (ADR-0087 D3). Upgrade to protocol 16 by another path first, then re-run.");meta.tsmaps it to exit 1 /--jsonerror: unsupported_from_major.MigrationFloorErroralready says "--fromis older than the chain's support floor" — the example paragraph contradicts the row in the same file.reach:public entry — the CLI command the skill prints. The dev on skills(objectstack-upgrade): the upgrade skill saysos migrate meta"writes nothing but--out", which--write(PR #22108) now makes incomplete #22120 executed one layer below the door against the spec dist built in its worktree:applyMetaMigrations({}, 10, 17)throwsMigrationFloorError;applyMetaMigrations({}, 16, 17)is the passing control. (f20fe298, 2026-09-20, raised the floor from 10 to 16; the paragraph predates it.)Direction
os migrate meta --writebeside the default run #22122 (same file).node scripts/check-skills-token-ratchet.mjs: this file's ceiling is 6193 tokens; headroom after PR docs(skills): objectstack-upgrade namesos migrate meta --writebeside the default run #22122 is 6 tokens — pay any growth by deleting content in the same file, never by re-wrapping.Re-check (each with its positive control)
grep -n -F -- '--from 10' skills/objectstack-upgrade/SKILL.md→ still hits ⇒ open. Control:grep -c -F -- '--from 16' skills/objectstack-upgrade/SKILL.md≥ 1.grep -n -E 'MIGRATION_SUPPORT_FLOOR *= *16' packages/spec/src/migrations/registry.ts→ hits ⇒ the premise holds. Control:grep -c MIGRATION_SUPPORT_FLOOR packages/spec/src/migrations/registry.ts≥ 1.Landing
skills/**is Tier H: the PR stays draft and lands on an authorized approval or the maintainer's hand.Clause-②: no. No changeset (skill text). Governing text:docs/NORTH-STAR.md「优先级」 item 4 (a wrong sentence on a shipping surface) ⇒priority:p3.Blocked-by: #22120 — same file, in its landing window (PR #22122, Tier H, awaiting an authorized approval); the unlock scan returns this card to the queue when #22120 closes.
Reader who acts: the
domain:skillsseat dispatches anos-devonskills/objectstack-upgrade/SKILL.mdonce #22120 has landed. Dedupe (closed included): lanedomain:skillsstate=alllisting (399 cards) grepped forfloor | from 10 | MigrationFloor | objectstack-upgrade | several majors→ 0 matching cards besides #22120; open board titles (3 pages) forMigrationFloor | support floor | --from 10 | objectstack-upgrade→ 0 besides #22120. Dedupe words:objectstack-upgrade skill --from 10·MigrationFloorError skill lateness example·MIGRATION_SUPPORT_FLOOR 16 skill text stale.