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
pm-dispatch finding: the landing window ends at MERGED — no release-aftercare duties (placement re-draw physics, tourniquet rule for replayed state, orphaned-loop resumption) #11134
pm-dispatch's landing window ends at MERGED (入队跟到 MERGED、两读). Nothing in SKILL.md or the references covers what a PM owes AFTER a production release rolls — grep for 部署后/发版后/placement across the skill returns nothing. Two days of cloud release operations (v1.24.0 → v1.28.0, epic cloud#1521) hit the same three post-release traps repeatedly, each currently living only in one operator's memory.
Evidence (all from cloud, 2026-08-21/23)
Fleet rolls re-draw container placement, and bad draws eat the whole perf budget. Every tagged deploy re-drew Cloudflare container placement; v1.27.0 landed the control plane in Houston (35.9ms/leg ≈ ~870ms/request vs the ≤200ms gate), v1.28.0 landed Atlanta (~18ms). Recovery has a written protocol with two non-obvious physics: placement follows the WAKER (re-rolls woken from a California operator machine drew Houston repeatedly; waking via a us-east CI runner drew Ashburn first try), and MEASURING contaminates the next draw (a probe mid-swap becomes the new instance's waker). Protocol: rollout → zero operator HTTP → wake via us-east runner (gh workflow run keep-warm) → read the CF instances API for the city → only then measure.
Hand-fixes to state that a replay layer owns get silently reverted. The SSO outage remediation (cloud#1591) hand-flipped sys_oauth_application.token_endpoint_auth_method rows; a pre-fix deploy's reseed reverted them TWICE before the fix landed in the seed itself (cloud#1597). Rule worth stating: a DB hand-fix is a tourniquet — before applying one, name WHO replays that state and WHEN (seed, reseed, migration, boot binder), and treat the replay-layer fix as the real card. Corollary: the fixed code must ship before the next event that replays the state, or the outage re-opens.
Interrupted long-running loops leave production in an unknown intermediate state. A backgrounded re-draw loop orphaned by a session restart left prod's control plane parked on its WORST draw (Houston, 40.8ms/leg) for hours. On resume, the first action must be re-reading live state, never continuing from the loop's last known intent.
Suggested shape (for the skills seat to judge)
A short "release aftercare" section or reference page: after any prod roll — (a) placement/latency reading against the perf gate, with the waker-bias re-draw protocol; (b) one real user-path probe (the SSO outage hid for 5 weeks behind health-only monitoring); (c) the tourniquet rule for live-state hand-fixes; (d) orphaned-loop resumption = re-read reality first. Also a candidate honesty clause: when a later measurement falsifies an assertion made in a merged PR body (the cloud#1589 "SQL DEFAULT backfills existing rows" claim), the correction gets posted to the card, not just known privately.
Grading (skills seat, session session_01RMTpSRF5CjMmQBFfPtPCwJ, 2026-08-23 concentrated round): promoted finding → pm:queue. Scope: a release-aftercare reference page under references/ (placement re-draw physics + waker bias, one real user-path probe, the tourniquet rule for replayed state, orphaned-loop resumption = re-read reality first, and the honesty clause — a later measurement falsifying a merged PR-body assertion gets corrected on the card), plus a one-line pointer from the landing-operations reference. Keep the SKILL.md main file untouched if the pointer can ride an existing line — otherwise fable-mandatory for that one line. Origin is a maintainer directive to file these; content is operational record, not new semantics — no ruling needed.
Claim: PM loop round 1, wave 4-C
Session: session_01RMTpSRF5CjMmQBFfPtPCwJ
Branch: claude/issue-11134-release-aftercare
Worktree: objectstack-issue-11134
Domain: domain:skills
File surface: a NEW page .claude/skills/pm-dispatch/references/release-aftercare.md + a one-line pointer in .claude/skills/pm-dispatch/references/landing-operations.md (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: opus — references-face construction per the tiering clause, fable-tier review at ACCEPT
Clause-②: no
Serial constraints cleared: wave-4-A owns check-half-states.mjs + dispatch-runbook.md; wave-4-B owns SKILL.md/os-dev.md/AGENTS.md + the true-green page — all disjoint from this surface. #11251 (which shares dispatch-runbook with 4-A) is deliberately HELD for the next wave, serialized.
{
"issue": 11134,
"status": "done",
"branch": "claude/issue-11134-release-aftercare",
"pr": "https://github.com/objectstack-ai/objectstack/pull/11309",
"premise_still_valid": true,
"summary": "New references page .claude/skills/pm-dispatch/references/release-aftercare.md (58 lines) covering all five graded duties, one line per duty where it fits: (A) post-roll placement/latency read against the perf gate with both waker-bias physics and the four-step protocol (rollout -> zero operator HTTP -> wake via us-east runner -> read CF instances API for the city -> only then measure); (B) one real user-path probe after any prod roll; (C) the tourniquet rule for live-state hand-fixes (name WHO replays and WHEN, replay-layer fix is the real card, must ship before the next replay event); (D) orphaned-loop resumption re-reads live state first; (E) the honesty clause. Plus ONE pointer in landing-operations.md after its MERGED-tracking material. SKILL.md untouched. Premise verified against cloud receipts before writing: placement-follows-waker, measurement-contaminates-next-draw, the protocol, the ENAM city spread (Ashburn ~4 / Atlanta ~17 / Houston ~35 ms per leg), server ~= 33 + 23 x RTT, the 200ms gate, 35.9ms/leg ~= ~870ms/request, the ~15s re-roll blip, the five-week SSO outage (last successful token 2026-07-17, found 2026-08-22) with health and synthetic E2E both green because the E2E used email+password, the reseed reverting the hand-flip, and the falsified SQL-DEFAULT-backfills-existing-rows PR-body assertion corrected publicly on the card — all confirmed first-hand in cloud release-log comments. ONE sub-claim could NOT be independently confirmed in those receipts: the orphaned-loop incident 40.8ms/leg figure, which appears only in the issue body; the duty is stated with the mechanism and no invented number (page says worst draw, not a ms value). Deviation, declared: landing-operations.md sat at its ceiling with headroom 0, so rather than raise the roof (needs a maintainer ruling) or cut surviving content (lane charter forbids re-wrap and warns cuts lose rules), the pointer RIDES existing slack on that file s last MERGED-tracking line (36 -> 104 bytes, inside its own wrap width) — the file stays at 82 lines, zero line delta. CEILINGS does enumerate references pages individually on current main, so the new page got its row at its landed count (58, headroom 0), which puts scripts/pm/check-skill-line-ratchet.mjs in the declared surface; it is declared in the PR body table. Governed .claude surface: PR opened DRAFT, no auto-merge armed, human merge only, stated in the body.",
"files_changed": [
".claude/skills/pm-dispatch/references/release-aftercare.md (new, 58 lines)",
".claude/skills/pm-dispatch/references/landing-operations.md (pointer rides existing line; 82 -> 82, zero delta)",
"scripts/pm/check-skill-line-ratchet.mjs (one CEILINGS row + provenance comment)"
],
"page_duties_landed": {
"a_placement_latency_waker_protocol": "section A",
"b_real_user_path_probe": "section B",
"c_tourniquet_replayed_state": "section C",
"d_orphaned_loop_resumption": "section D",
"e_honesty_clause": "section E"
},
"ratchet_verdicts": [
"check-skill-line-ratchet: .claude/skills/pm-dispatch/references/landing-operations.md is 82 lines (ceiling 82; headroom 0).",
"check-skill-line-ratchet: .claude/skills/pm-dispatch/references/release-aftercare.md is 58 lines (ceiling 58; headroom 0).",
"check-skill-line-ratchet self-test: 20 cases pass."
],
"tests": "Gates derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack` on the real change set (3 paths, three-dot semantics; the --repo assertion held against this checkout s origin). 12 families named; ALL 12 run and green, and the union was RE-RUN AFTER the final commit at HEAD=15f02cad: check:pm-skill-ratchet 0 / check:pm-skill-id-lint 0 / check:skill-frame-sync 0 / check:pm-governed-merges 0 / check:pm-dispatch-gates 0 / check:doc-authoring 0 / check:entry-guard 0 / check:parse-guard 0 / check:pnpm-filter-targets 0 / check:cross-package-test-inputs 0 / check-ci-filter-parity.mjs 0 / check-cross-package-test-inputs.mjs 0 / check:doc-formula-expressions 0. Exit codes captured BEFORE any pipe (redirect-then-capture), and the verdict lines quoted here are the gates own printed lines, never a bare $?. Gate-printed verdicts: `✓ check-skill-id-lint: 18 file(s) clean (pattern /#[0-9]{3,}/g).` · `✓ doc authoring guard: 389 files clean — no bare metadata literals.` · `✓ dispatch-gates self-test: 557 cases pass.` · `✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 417 files / 1447 TS blocks judged clean` · plus the three ratchet lines above. check:pm-dispatch-gates was run DELIBERATELY, not by derivation: the residue report flags it as an artifact-roster family whose roster sits under scripts/ (silent is evidence in neither direction there) and its self-test genuinely reads this ratchet s hints. REPO-WIDE SCAN RUN, NOT NARROWED: `pnpm lint` (= `eslint . --no-inline-config`) exit 0 in 93s at 15f02cad — so no narrowing claim is needed. Two heavy runs went through `scripts/pm/os-verify-lock.sh` (VERDICT command-exit 0 · held 206s for the @objectstack/lint dependency-closure build, which was required — the gate first failed on an unbuilt @objectstack/formula/dist; and VERDICT command-exit 0 · held 93s · waited 168s for pnpm lint). Authoring self-checks beyond the gates: `grep -naP` for control bytes over both .md files and the PR body — clean; closing-keyword scan over the PR body — exactly one hit, `Fixes #11134`. No ablation applies to this card (no executable behaviour changed; the CEILINGS row is enforced by the ratchet run above, which reads the real landed counts).",
"open_questions": [],
"out_of_scope_findings": []
}
ACCEPT (skills seat, session session_01RMTpSRF5CjMmQBFfPtPCwJ, reviewer of record, fable tier per the references-face compensation) — PR #11309.
Checklist conclusions, verified against GitHub: draft ✓ · base main ✓ · Fixes #11134 first line and exactly one closing-keyword hit ✓ · changed files = the two declared plus the ratchet CEILINGS row, whose surface expansion was pre-authorized conditionally in the brief and is declared in the PR body table ✓ · skip-changeset ✓ · ratchet verdicts quoted per file, both at headroom 0 with no ceiling raised ✓. The five duties all land with their physics stated in executable order; premise verification was done against the cloud receipts first-hand, and the one figure that could not be independently confirmed (the 40.8ms/leg orphaned-loop reading) was correctly stated as mechanism-without-number rather than invented — that is the honesty clause applied to the page that carries it. The landing-operations pointer riding existing byte-slack at zero line delta is the right payment under a zero-headroom ceiling (no re-wrap, no cut, no raise).
Governed surface (.claude/**): PR stays draft, human merge only; review requested from os-zhuang (author claude[bot]).
Activity
os-zhuang commentedon Aug 23, 2026
Triage: routed
domain:skills— subject is the pm-dispatch landing-window definition (release aftercare duties), protocol face; skills seat self-triages.Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
Grading (skills seat, session
session_01RMTpSRF5CjMmQBFfPtPCwJ, 2026-08-23 concentrated round): promotedfinding→pm:queue. Scope: a release-aftercare reference page underreferences/(placement re-draw physics + waker bias, one real user-path probe, the tourniquet rule for replayed state, orphaned-loop resumption = re-read reality first, and the honesty clause — a later measurement falsifying a merged PR-body assertion gets corrected on the card), plus a one-line pointer from the landing-operations reference. Keep the SKILL.md main file untouched if the pointer can ride an existing line — otherwise fable-mandatory for that one line. Origin is a maintainer directive to file these; content is operational record, not new semantics — no ruling needed.Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
Claim: PM loop round 1, wave 4-C
Session:
session_01RMTpSRF5CjMmQBFfPtPCwJBranch:
claude/issue-11134-release-aftercareWorktree:
objectstack-issue-11134Domain:
domain:skillsFile surface: a NEW page
.claude/skills/pm-dispatch/references/release-aftercare.md+ a one-line pointer in.claude/skills/pm-dispatch/references/landing-operations.md(stop on breach; explain in the report)Container & model: S,
mode:subagent,model: opus— references-face construction per the tiering clause, fable-tier review at ACCEPTClause-②: no
Serial constraints cleared: wave-4-A owns
check-half-states.mjs+dispatch-runbook.md; wave-4-B owns SKILL.md/os-dev.md/AGENTS.md + the true-green page — all disjoint from this surface. #11251 (which shares dispatch-runbook with 4-A) is deliberately HELD for the next wave, serialized.Generated by Claude Code
docs(pm-skill): release-aftercare duties — the window past MERGED (#1…
claude commentedon Aug 23, 2026
{ "issue": 11134, "status": "done", "branch": "claude/issue-11134-release-aftercare", "pr": "https://github.com/objectstack-ai/objectstack/pull/11309", "premise_still_valid": true, "summary": "New references page .claude/skills/pm-dispatch/references/release-aftercare.md (58 lines) covering all five graded duties, one line per duty where it fits: (A) post-roll placement/latency read against the perf gate with both waker-bias physics and the four-step protocol (rollout -> zero operator HTTP -> wake via us-east runner -> read CF instances API for the city -> only then measure); (B) one real user-path probe after any prod roll; (C) the tourniquet rule for live-state hand-fixes (name WHO replays and WHEN, replay-layer fix is the real card, must ship before the next replay event); (D) orphaned-loop resumption re-reads live state first; (E) the honesty clause. Plus ONE pointer in landing-operations.md after its MERGED-tracking material. SKILL.md untouched. Premise verified against cloud receipts before writing: placement-follows-waker, measurement-contaminates-next-draw, the protocol, the ENAM city spread (Ashburn ~4 / Atlanta ~17 / Houston ~35 ms per leg), server ~= 33 + 23 x RTT, the 200ms gate, 35.9ms/leg ~= ~870ms/request, the ~15s re-roll blip, the five-week SSO outage (last successful token 2026-07-17, found 2026-08-22) with health and synthetic E2E both green because the E2E used email+password, the reseed reverting the hand-flip, and the falsified SQL-DEFAULT-backfills-existing-rows PR-body assertion corrected publicly on the card — all confirmed first-hand in cloud release-log comments. ONE sub-claim could NOT be independently confirmed in those receipts: the orphaned-loop incident 40.8ms/leg figure, which appears only in the issue body; the duty is stated with the mechanism and no invented number (page says worst draw, not a ms value). Deviation, declared: landing-operations.md sat at its ceiling with headroom 0, so rather than raise the roof (needs a maintainer ruling) or cut surviving content (lane charter forbids re-wrap and warns cuts lose rules), the pointer RIDES existing slack on that file s last MERGED-tracking line (36 -> 104 bytes, inside its own wrap width) — the file stays at 82 lines, zero line delta. CEILINGS does enumerate references pages individually on current main, so the new page got its row at its landed count (58, headroom 0), which puts scripts/pm/check-skill-line-ratchet.mjs in the declared surface; it is declared in the PR body table. Governed .claude surface: PR opened DRAFT, no auto-merge armed, human merge only, stated in the body.", "files_changed": [ ".claude/skills/pm-dispatch/references/release-aftercare.md (new, 58 lines)", ".claude/skills/pm-dispatch/references/landing-operations.md (pointer rides existing line; 82 -> 82, zero delta)", "scripts/pm/check-skill-line-ratchet.mjs (one CEILINGS row + provenance comment)" ], "page_duties_landed": { "a_placement_latency_waker_protocol": "section A", "b_real_user_path_probe": "section B", "c_tourniquet_replayed_state": "section C", "d_orphaned_loop_resumption": "section D", "e_honesty_clause": "section E" }, "ratchet_verdicts": [ "check-skill-line-ratchet: .claude/skills/pm-dispatch/references/landing-operations.md is 82 lines (ceiling 82; headroom 0).", "check-skill-line-ratchet: .claude/skills/pm-dispatch/references/release-aftercare.md is 58 lines (ceiling 58; headroom 0).", "check-skill-line-ratchet self-test: 20 cases pass." ], "tests": "Gates derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack` on the real change set (3 paths, three-dot semantics; the --repo assertion held against this checkout s origin). 12 families named; ALL 12 run and green, and the union was RE-RUN AFTER the final commit at HEAD=15f02cad: check:pm-skill-ratchet 0 / check:pm-skill-id-lint 0 / check:skill-frame-sync 0 / check:pm-governed-merges 0 / check:pm-dispatch-gates 0 / check:doc-authoring 0 / check:entry-guard 0 / check:parse-guard 0 / check:pnpm-filter-targets 0 / check:cross-package-test-inputs 0 / check-ci-filter-parity.mjs 0 / check-cross-package-test-inputs.mjs 0 / check:doc-formula-expressions 0. Exit codes captured BEFORE any pipe (redirect-then-capture), and the verdict lines quoted here are the gates own printed lines, never a bare $?. Gate-printed verdicts: `✓ check-skill-id-lint: 18 file(s) clean (pattern /#[0-9]{3,}/g).` · `✓ doc authoring guard: 389 files clean — no bare metadata literals.` · `✓ dispatch-gates self-test: 557 cases pass.` · `✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 417 files / 1447 TS blocks judged clean` · plus the three ratchet lines above. check:pm-dispatch-gates was run DELIBERATELY, not by derivation: the residue report flags it as an artifact-roster family whose roster sits under scripts/ (silent is evidence in neither direction there) and its self-test genuinely reads this ratchet s hints. REPO-WIDE SCAN RUN, NOT NARROWED: `pnpm lint` (= `eslint . --no-inline-config`) exit 0 in 93s at 15f02cad — so no narrowing claim is needed. Two heavy runs went through `scripts/pm/os-verify-lock.sh` (VERDICT command-exit 0 · held 206s for the @objectstack/lint dependency-closure build, which was required — the gate first failed on an unbuilt @objectstack/formula/dist; and VERDICT command-exit 0 · held 93s · waited 168s for pnpm lint). Authoring self-checks beyond the gates: `grep -naP` for control bytes over both .md files and the PR body — clean; closing-keyword scan over the PR body — exactly one hit, `Fixes #11134`. No ablation applies to this card (no executable behaviour changed; the CEILINGS row is enforced by the ratchet run above, which reads the real landed counts).", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
ACCEPT (skills seat, session
session_01RMTpSRF5CjMmQBFfPtPCwJ, reviewer of record, fable tier per the references-face compensation) — PR #11309.Checklist conclusions, verified against GitHub: draft ✓ · base
main✓ ·Fixes #11134first line and exactly one closing-keyword hit ✓ · changed files = the two declared plus the ratchet CEILINGS row, whose surface expansion was pre-authorized conditionally in the brief and is declared in the PR body table ✓ ·skip-changeset✓ · ratchet verdicts quoted per file, both at headroom 0 with no ceiling raised ✓. The five duties all land with their physics stated in executable order; premise verification was done against the cloud receipts first-hand, and the one figure that could not be independently confirmed (the 40.8ms/leg orphaned-loop reading) was correctly stated as mechanism-without-number rather than invented — that is the honesty clause applied to the page that carries it. The landing-operations pointer riding existing byte-slack at zero line delta is the right payment under a zero-headroom ceiling (no re-wrap, no cut, no raise).Governed surface (
.claude/**): PR stays draft, human merge only; review requested fromos-zhuang(authorclaude[bot]).Generated by Claude Code
docs(pm-skill): release-aftercare duties — the window past MERGED (ob…