Repository navigation
docs(protocol): point the customer-facing "the window-closing condition is tracked separately" sentence at the now-WRITTEN end condition (GA) #14245
Description
Activity
Triage (R+89, triage seat, session
session_019kDRpB7D2XzVzkaLp57T5D):pm:queue·priority:p3·domain:devx·documentation· type Task.Lands in:
content/docs/protocol/backward-compatibility.mdx(the "tracked separately and deliberately not stated here" sentence, ~:207, re-derive). Replace with the ruled one-liner exactly as the gate header inscripts/check-changeset-no-major.mjsrecords it — the window closes at GA, strict semver resumes — ⛔ no dates, no version numbers, nothing the ruling does not contain. Provenance chain stays as the card states (director batch B 2026-09-01 「同意」 → #14043 / PR #14227 → this). Notreleases/**, so no docs-only fence. p3: the two other references on the page are already accurate; this is the customer-facing half of a landed ruling.Size/model suggestion: S mechanical,
sonnet.
Generated by Claude Code
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Sep 2, 2026 Claim: session_01WLJQhde67SeTccsmnBVarV (devx execution seat, W6)
- Session: session_01WLJQhde67SeTccsmnBVarV
- Branch:
claude/issue-14210-backward-compat-page-promises(shared with [finding] docs(protocol): the Backward Compatibility page's Breaking Change Process names two GitHub labels that do not exist, and a "2 MINOR releases" survival guarantee with no mechanism #14210 — triage: "one implementer, one PR is fine; two cards, two criteria") - Worktree:
/home/user/objectstack-14210(dedicated per-task worktree) - Domain:
domain:devx - File surface:
content/docs/protocol/backward-compatibility.mdxonly - Container & model: subagent (
os-dev, sonnet). Tier:content/docs/**prose — no path-derived mandate (floor sonnet · default opus · ceiling fable); PM picks sonnet per triage suggestion (S mechanical). - Clause ②: content-limb NO — customer-facing docs corrected to match what already exists (labels, ADR-0049/0087 dispositions, the GA end condition already recorded in
scripts/check-changeset-no-major.mjs); no contract accept/reject change. - Serial constraints: [finding] docs(protocol): the Backward Compatibility page's Breaking Change Process names two GitHub labels that do not exist, and a "2 MINOR releases" survival guarantee with no mechanism #14210 touches the same file — taken together in this one PR to avoid a same-file serial queue. No overlap with in-flight lint:
flow-update-readonly-when-fieldskipsrunAs:'system'flows entirely, but the conditional strip has noisSystemexemption #14201 / bump-objectui.sh never deepens when the OLD pin object is absent, so a shallow checkout emits apatchchangeset for aminorrange #14178 / [finding] #13646's fix routed a MIXED file tomerge=os-regen— the driver keeps one side whole and drops the other's hand-written prose, and the census gate cannot see the loss #14064.
Route: triage ruling (comment 5503069318) verbatim in the dispatch order. One PR,
Fixes #14210+Fixes #14245, each card's criterion checked separately.
Generated by Claude Code
os-dev-report
{ "issue": 14245, "status": "done", "branch": "claude/issue-14210-backward-compat-page-promises", "pr": "https://github.com/objectstack-ai/objectstack/pull/14385", "premise_still_valid": true, "summary": "Both #14210 and #14245 land in content/docs/protocol/backward-compatibility.mdx, one PR per the triage note. #14210: Breaking Change Process step 1 now points at the live protocol:breaking label (confirmed via REST label list); step 2's compatibility label instruction is dropped entirely; the unsourced 2-MINOR-release deprecation-survival guarantee is deleted from all three places it appeared (Phase 2 heading, mermaid diagram, callout) and replaced with the true statement (retired at the ADR-0087 registry boundary, no minimum window). #14245: the GA end-condition sentence is re-derived from scripts/check-changeset-no-major.mjs's own header wording (window closes at GA, strict SemVer resumes), with no dates or version numbers added.", "tests": "All four PM-assumption premise positions confirmed present on origin/main before editing. Labels: GET /repos/objectstack-ai/objectstack/labels confirmed protocol:breaking exists, breaking-change and compatibility do not. node scripts/pm/dispatch-gates.mjs derived 29 local gate families for content/docs/protocol/backward-compatibility.mdx. Built dependency closure first (@objectstack/spec gen:schema + build, @objectstack/formula, @objectstack/lint, @objectstack/client, @objectstack/client-react) since several derived gates read compiled dist/.d.ts output. Ran all 29 under scripts/pm/os-verify-lock.sh: 28 PASS, 1 legitimately NOT-MEASURED (node scripts/check-test-completeness.mjs grades a saved `turbo run test` CI log and refuses standalone with its own PREREQUISITE NOT MET). Reconciled with `dispatch-gates.mjs --ran`: 'Run reconciliation \u2014 29 derived, 28 run, 1 NOT-MEASURED, 0 UNRUN' / '\u2713 dispatch-gates --ran: 29 derived famil(ies) accounted for \u2014 28 run, 1 NOT-MEASURED.' Key gate output excerpts: check:docs -> '229 generated files in sync with packages/spec'; check:skill-examples -> '259 prose examples type-check across 3 surface(s)'; check:doc-formula-expressions self-test '58 cases passed' plus clean corpus scan; check:doc-security-posture -> '26 ObjectSchema.create example(s) ... carry an os validate-clean security posture'; check:docs-single-h1, check:doc-anchors, check:role-word, check:published-readme-links, check:vendor-version-stamps, check:react-page-adapter-contract, check:corpus-claim-drift, check:cross-package-test-inputs, check:docs-audit-scope, check:skill-identifier-liveness, check:doc-authoring, check:docs-redirects and the 7 node-direct gates all exited 0. node scripts/check-nul-bytes.mjs -> 'OK ... no raw ASCII control bytes' (repo-wide). Reverse-checked the diff is minimal via `git diff` and `git status --short` (only the target file touched, no stray build artifacts staged). Docs-only diff: skip-changeset label applied on the draft PR via the additive REST endpoint and confirmed present on comparative read-back (precedent: PR #14211, same page/author, docs-only, carries skip-changeset).", "mcp_calls": 0, "open_questions": [], "out_of_scope_findings": [] }
Generated by Claude Code
ACCEPT — #14245 landed (together with #14210, one PR / two acceptance criteria). PR #14385 (head
5ee7d7d9) merged tomainas4485f7davia the merge queue, 35/35 checks green.Close-out probe on
origin/main(fresh fetch, throwaway worktree):content/docs/protocol/backward-compatibility.mdx:206now states the launch-window end condition explicitly — "the window closes at GA, and strict SemVer resumes from that point. Until it closes, this section is the operative rule wherever any part of this page disagrees." Verified alongside #14210's probes (:83no-survival-window rule,:111protocol:breaking, ADR-0049 links at:72/:83).pm:dispatchedstripped in this same step.Seat:
session_01WLJQhde67SeTccsmnBVarV(domain:devx, #6023).
Generated by Claude Code
Filed by the
domain:devxexecution seat (sessionsession_01WLJQhde67SeTccsmnBVarV) at #14043's landing window, per the obligation recorded on that card's claim. ⛔ Unassigned —pm:*grading is triage's.The gap, one sentence
content/docs/protocol/backward-compatibility.mdx:207(position dated toorigin/main b360cc7d— re-derive) reads: "the condition that closes the window is tracked separately and is deliberately not stated here." That deferral was correct when written (PR #14211, whose dispatch fence forbade inventing the end condition). The end condition is now WRITTEN and maintainer-ruled: PR #14227 recorded it inscripts/check-changeset-no-major.mjs's header — at GA (the fixed group's first general-availability major), the group returns to strict semver.What to do
Replace the "deliberately not stated here" deferral with the ruled one-liner (window closes at GA; strict semver resumes), consistent with the gate-header text — ⛔ no dates, no version numbers, nothing the ruling does not contain. The customer reading this page is exactly the audience triage identified when it linked this half to #14043: they judge "when can I go back to reading MAJOR as the risk signal" from this sentence.
Read-only measurements already taken by #14043's dev (2026-09-01): the page's two other references to the gate (
:115,:195) are accurate and need no change.Scope notes for triage
content/docs/protocol/**(NOTreleases/**, so no docs-only-PR fence applies).Dedup
#13893 (closed — rewrote both pages but deliberately deferred this sentence) · #14043 (closed — the internal half) · #14210 (open — phantom labels + 2-MINOR dwell on the same page, different defect). No open card covers this sentence.