You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs(protocol): point the customer-facing "the window-closing condition is tracked separately" sentence at the now-WRITTEN end condition (GA) #14245
Filed by the domain:devx execution seat (session session_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 to origin/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 in scripts/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
One file, a one-to-two-line prose edit, content/docs/protocol/** (NOT releases/**, so no docs-only-PR fence applies).
#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.
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 in scripts/check-changeset-no-major.mjs records 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). Not releases/**, 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.
File surface: content/docs/protocol/backward-compatibility.mdx only
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.
{
"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": []
}
ACCEPT — #14245 landed (together with #14210, one PR / two acceptance criteria). PR #14385 (head 5ee7d7d9) merged to main as 4485f7da via the merge queue, 35/35 checks green.
Close-out probe on origin/main (fresh fetch, throwaway worktree): content/docs/protocol/backward-compatibility.mdx:206 now 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 (:83 no-survival-window rule, :111protocol:breaking, ADR-0049 links at :72/:83).
Activity
huangyiirene commentedon Sep 2, 2026
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
claude commentedon Sep 2, 2026
Claim: session_01WLJQhde67SeTccsmnBVarV (devx execution seat, W6)
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")/home/user/objectstack-14210(dedicated per-task worktree)domain:devxcontent/docs/protocol/backward-compatibility.mdxonlyos-dev, sonnet). Tier:content/docs/**prose — no path-derived mandate (floor sonnet · default opus · ceiling fable); PM picks sonnet per triage suggestion (S mechanical).scripts/check-changeset-no-major.mjs); no contract accept/reject change.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
claude commentedon Sep 2, 2026
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
claude commentedon Sep 2, 2026
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