← okrdevCONTENT HISTORY

Update to okrdev

Snapshot Sep 30, 2026 · 23:14 UTC · version 0.8.4

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Run the weekly okrdev check-in — pre-drafts the confidence table, \"what moved\" from git and merged PRs, the drift check, and health metrics before the humans arrive, then walks them through the parts only they can do. Use when someone says \"run our check-in\", \"weekly check-in\", \"let's do the OKR check-in\", \"time for the checkin\", when a check-in is overdue and the user agrees to catch up, or when a single DRI wants to file their async contribution to this week's check-in.",
  "included_files": [],
  "name": "checkin",
  "skill_md_contents": "---\nname: checkin\ndescription: Run the weekly okrdev check-in — pre-drafts the confidence table, \"what moved\" from git and merged PRs, the drift check, and health metrics before the humans arrive, then walks them through the parts only they can do. Use when someone says \"run our check-in\", \"weekly check-in\", \"let's do the OKR check-in\", \"time for the checkin\", when a check-in is overdue and the user agrees to catch up, or when a single DRI wants to file their async contribution to this week's check-in.\n---\n\n# Weekly check-in\n\nThe check-in is fifteen minutes because you do the homework first. Everything computable gets\npre-drafted from git, PRs, and last week's file before you engage anyone. The humans only do\nwhat humans must: adjust confidence, make triage calls, name next week's focus. If this ritual\ncosts more than its minutes, it dies — protect the fifteen.\n\n## Preflight\n\n1. Check that `okrdev/config.md` exists. If not, okrdev isn't installed in this repo — say so\n   and point at `/okrdev:install`. Stop.\n\n2. Read `okrdev/config.md`: `level`, `checkin_cadence`, `side_quest_box_hours_per_week`, and\n   `backstop`. If `level: 0`, there is no cycle and no check-in ritual yet — that's by design.\n   Offer the two things that make sense instead: triage the parking lot now (`/okrdev:triage`),\n   or draft a first cycle (`/okrdev:plan`). Stop.\n\n3. Find the active cycle: the file in `okrdev/okrs/` whose frontmatter says `status: active`.\n   - A `draft` but nothing active → planning isn't finished; point at `/okrdev:plan`. Stop.\n   - Nothing at all → point at `/okrdev:plan`. Stop.\n   Read the cycle file fully: objectives, KR ids, types, DRIs, current confidence, the health\n   metrics table, and the `start`/`end` dates. Compute how far through the cycle you are —\n   `(today − start) / (end − start)` — you'll need it for the sandbag triggers.\n\n4. Compute this week's file path. ISO week via `date +%G-W%V` (today that gives something like\n   `2026-W29`). The path is deterministic: `okrdev/checkins/<cycle>/<yyyy-Www>.md`, e.g.\n   `okrdev/checkins/2026-Q3/2026-W29.md`. Deterministic paths are the point — overrides logged\n   on a Tuesday and async contributions on a Thursday land in the same file without anyone\n   coordinating.\n\n5. If the file already exists, do not clobber it. It may hold judgment calls logged mid-week or\n   another DRI's async section. Load it, fill only what's empty, and append — never rewrite\n   someone else's lines.\n\n## Handle gaps first\n\n6. Find the most recent **held** check-in in `okrdev/checkins/<cycle>/` — the newest file whose\n   KR confidence table has at least one KR row. Skip files that have one but left it empty:\n   those are week files created to log a judgment call or pre-drafted and never held, and\n   counting them as check-ins is how a skipped ritual silences its own alarm (the definition\n   and the reasoning are in [rituals.md](../../docs/rituals.md)). If it's more than 10 days\n   old (or there is none and the cycle started more than 10 days ago), offer the gap-spanning\n   catch-up before anything else: one \"what moved\" covering the whole gap, one confidence pass,\n   two minutes total. No week-by-week archaeology, and no guilt trip — systems die by silent\n   decay, and the recovery has to be cheaper than the shame of the lapse. Note the span in the\n   What moved section (\"covers W27–W29\").\n\n7. If the cycle is effectively dead — the end date has passed unscored, or the team says they\n   quietly stopped — offer to close it without ceremony: set `status: abandoned` in the cycle\n   file, then point at `/okrdev:plan` for a fresh start. A dead cycle closed honestly is worth\n   more than a zombie one maintained out of duty.\n\n## Pre-draft everything\n\n8. Before engaging any human, draft the full file (create it from the canonical skeleton below\n   if it doesn't exist):\n\n   ```markdown\n   ---\n   cycle: 2026-Q3\n   week: 2026-W29\n   attendees: [alex, jordan]     # omit or single-name for solo mode\n   ---\n\n   ## Wins\n\n   ## KR confidence\n   | KR | DRI | Prev | Now | Δ | Evidence/note |\n   |----|-----|------|-----|---|---------------|\n\n   ## What moved\n\n   ## What's blocked\n\n   ## Health metrics\n   | Metric | Red line | Now | OK? |\n\n   ## Drift check\n\n   ## Judgment calls\n\n   ## Parking lot triage\n\n   ## Focus for next week\n   ```\n\n   Fill it in this order:\n\n   a. **KR confidence table.** One row per KR (skip `Status: dropped` ones). `Prev` = last\n      check-in's `Now`; for a KR's first appearance use the cycle file's `Confidence:` value.\n      Leave `Now` blank — that's the human's call, not yours. While you're here, scan the last\n      three check-ins for flat streaks and early-high values, and note any KR whose\n      Evidence/note entries have been narrative-only (\"on track,\" \"feels close\") for all\n      three — then grep the Judgment calls of every check-in this cycle\n      (`okrdev/checkins/<cycle>/*.md`) for an evidence re-class line on each such KR (\"KR2.1\n      moves through negotiation — expected evidence: the signed contract\"). The\n      `expected evidence:` marker is the grep contract — every re-class line carries it,\n      demoable-slice answers included (\"KR1.2 — expected evidence: clickable export flow\").\n      A re-classed KR is never asked the narrative-floor question again this cycle. You'll\n      enforce the triggers in step 11.\n\n   b. **What moved.** Ground truth, best effort by environment: `git log` on the default branch\n      since the last check-in date (e.g. `git log --since=\"2026-07-06\" --format='%h %s%n%b'`),\n      plus merged PRs when `gh` is available\n      (`gh pr list --state merged --limit 100 --json number,title,body,mergedAt`, filtered to\n      the window). Extract `KR:` lines from PR bodies and commit messages using the canonical\n      grammar — first line matching\n      `/^KR:\\s*(([0-9]{4}-[QC][0-9]+\\/)?(KR)?[0-9]+\\.[0-9]+|side-quest|maintenance|emergency)\\s*$/im`,\n      first match wins. Group the summary by KR, in plain language.\n\n   c. **Drift check.** Match every substantive change from (b) against the active KR ids and\n      the last check-in's \"Focus for next week\". Substantive = a new feature or more than about\n      an hour of new-capability work; bugfixes, config, docs, and small refactors are\n      maintenance and don't count as drift. Orphans — substantive changes with no `KR:` line\n      and no focus match — go in the Drift check section phrased as questions (\"PR #84 added a\n      referral widget — which KR was that for?\"), never accusations. At Level 2, include\n      anything currently wearing a `needs-kr` label.\n\n   d. **Health metrics.** Copy the table from the cycle file. Fill `Now` from any source you\n      can actually read (dashboards you have access to, queries you can run); leave the rest\n      for the humans. Mark `OK?` honestly.\n\n   e. **Counts for the taxonomy signals.** Tally PRs/commits in the window by classification.\n      Note any `emergency`-tagged work (each needs a post-hoc line, step 14) and the\n      maintenance share (step 14 again).\n\n   f. **Open-PR bridge report.** For each attendee: `gh pr list --state open` with checks,\n      review requests, and labels. You are the notification bridge — non-technical DRIs never\n      see GitHub notifications. Keep only what's actionable: preview ready to click, gate\n      warning, review request gone stale, red CI.\n\n## Run the ritual\n\n9. **Wins first.** Open by asking each attendee for one win — before status, before numbers.\n   Accountability without celebration dies by week four. Write one line per attendee. When a\n   win is code-shaped and you already hold the preview URL from 8f, offer the link into the\n   win line — offer, never require, and a win with no artifact (\"closed the vendor, verbal\n   yes\") is written with identical weight. Never mention the absence of a demo.\n\n10. **Deliver the bridge report** from 8f in a line or two per person, plain words only (\"your\n    pricing-page proposal has a preview link ready — want the click-test steps?\"). Skip it\n    entirely if nothing is actionable.\n\n11. **Walk the confidence table.** Each DRI sets `Now` for their KRs; you fill `Δ`. New KRs\n    default to 0.5 — a good stretch KR is a coin flip at kickoff. Then enforce the triggers,\n    because a confidence number that changes nothing is theater:\n    - **Below 0.5 two consecutive weeks** → force a named decision, one of: re-scope,\n      re-staff, kill, accept-the-miss. Talk it through, then log the decision in Judgment\n      calls. Don't let the conversation end with \"let's see how next week goes\" — that's what\n      last week said.\n    - **Unchanged 3+ weeks** → the DRI writes one line of evidence in the table's\n      Evidence/note column. A flat 0.6 with no evidence isn't confidence, it's a screensaver.\n    - **≥ 0.9 early** (from week one, or the target already hit before 60% of the cycle) →\n      raise the early-sandbag flag and propose raising the target. If accepted, that's a\n      mid-cycle revision: a PR to the cycle file with a `Revised: <date> — <reason>` block\n      preserving the original text. Never edit an active KR silently, not even to make it\n      harder.\n    - **Narrative-only evidence 3 check-ins running, at ≥0.5** (from your 8a scan, minus any\n      KR re-classed in any of this cycle's Judgment calls) → ask once, generatively: \"anything I can\n      click, a number I can pull — or what would the first demoable slice be?\" Accept a\n      one-line answer — \"nothing clickable; this KR moves through calls, next artifact is the\n      signed contract\" is complete, and itself evidence. Record it as a Judgment-calls line\n      (\"KR2.1 moves through negotiation — expected evidence: the signed contract\"): that line\n      is the permanent re-class, and it's what next week's 8a scan reads. Once per KR per\n      cycle — never twice. Fires only here, inside the walk; below 0.5 the named-decision\n      trigger owns the KR instead. When the unchanged-3+-weeks rule trips on the same KR\n      the same week — flat confidence and narrative evidence usually travel together — ask\n      only this question: its answer is the evidence line, satisfying both. Evidence ranks\n      per docs/evidence.md: clickable or measurable beats narrated.\n\n12. **What moved.** Present your pre-draft, then ask each DRI what moved that git can't see —\n    sales calls, ops fixes, a partnership conversation, a pricing page rewrite in some CMS.\n    Add a line each, mapped to a KR where one applies. This section is the canonical ledger\n    for non-code KR work; in most real businesses the work that moves the number isn't a PR.\n\n13. **What's blocked, then health metrics.** Capture blockers and do something about them now:\n    translate red CI into plain language and propose the fix, draft the nudge for a stale\n    review, hand over preview URLs with click-test steps. If you and the DRI are both stuck,\n    invoke the backstop from `okrdev/config.md`. Then walk the health metrics table. A crossed\n    red line can pause the KR pushing on it — raise it, let the humans decide, and record the\n    decision in Judgment calls. This is the Goodhart defense; it only works if a breach\n    actually interrupts something.\n\n14. **Drift check and Judgment calls.** Go through the orphans conversationally, one at a\n    time, before anything lands in the file — private first, always. Each gets classified\n    (`KR: <id>`, `side-quest`, `maintenance`, `emergency`) or acknowledged as drift, and the\n    decision is recorded in the DRI's own words. Record decisions, not demerits. Then:\n    - Every `emergency` since the last check-in gets its post-hoc line: was it an emergency,\n      and what did it protect? If emergencies are recurring (more than ~5% of PRs or more than\n      2 this cycle), say so — the one unaudited escape hatch is where all gaming funnels.\n    - If maintenance exceeds ~30% of PRs by count, ask whether that's chronic underinvestment\n      surfacing. It's a prompt, not an alarm — the proxy is crude, and you should say so.\n    - Overrides logged mid-week are already in this section; read them back so they were seen.\n\n15. **Parking lot triage.** Run the triage over both inboxes (same procedure as\n    `/okrdev:triage`): open `okrdev:parked` issues when `gh` is available\n    (`gh issue list --label okrdev:parked --state open`), plus every item in the Captured\n    section of `okrdev/PARKING_LOT.md`. Each gets a decision — promote (to a KR or a\n    next-cycle candidate), archive with a one-line reason, or sanction as a side quest with a\n    time-box. Issue items get closed with the decision as a comment; every decision also\n    lands in the file's ledger sections, which stay canonical. Check open side quests'\n    `spent:` against `box:`, and each person's box-hours opened this ISO week against the\n    budget in config. Every item gets asked; a refusal to decide is a deferral the coach\n    counts (third survival gets named, per the triage skill). The section exists so ideas get\n    decided on a cadence instead of on impulse — both inboxes to zero, every week.\n\n16. **Focus for next week.** Each DRI names 1–3 items, each mapped to a KR. This is what next\n    week's drift check matches against, so vague focus lines make next week's drift check\n    useless — push for specific ones.\n\n## Write and commit\n\n17. Assemble the file at the deterministic path, and write it as one batched state write —\n    one commit or PR per check-in, never one per item. On an unprotected default branch,\n    commit directly: if you're on a working branch, never stash or switch it (the human may\n    have uncommitted work) — use a temporary worktree (`git worktree add` from\n    `origin/<default>`), commit the file there, push `HEAD:<default>`, and remove the\n    worktree. On a protected default branch, open a small state PR: branch\n    `okrdev/state-<date>-<slug>`, push, PR titled `okrdev: <what>` with a `KR:` line, then\n    merge it immediately (`gh pr merge --squash`) — or enable auto-merge when required checks\n    must run first. Because writes are batched by ritual, that costs about one PR a week.\n    (The actor bypass in the stack's branch-protection script is an optional convenience, not\n    the assumed path.) Narrate what you're doing in plain words for non-technical attendees\n    (\"saving this to the shared record\").\n\n18. Mirror each KR's final `Now` confidence into the cycle file's `Confidence:` field, in the\n    same commit or state PR, or a follow-up state write. This is a scribe duty, like writing `Score:` at\n    retro — it keeps the cycle file current and is exempt from the revision protocol, which\n    governs targets and baselines, not bookkeeping fields.\n\n19. Close with one line: biggest confidence move, anything on fire, next check-in date. Done\n    means done — no action-item ceremony beyond what's already in Focus and Judgment calls.\n\n## Modes\n\n- **Solo mode.** One attendee (frontmatter `attendees` omitted or single-name). You are the\n  other party: ask for the win anyway, challenge flat confidence, argue the other side of every\n  triage call. The ritual's value is the argument; without a teammate, you're it.\n- **Async mode.** DRIs can't meet. Interview each one whenever they show up (they just run\n  `/okrdev:checkin`); each contributes their own confidence rows, wins line, non-code moves,\n  and focus lines. Sections are per-DRI so appends never collide. Pre-draft the shared sections\n  on first touch; run triage with the first DRI who can make the calls, deferring items that\n  aren't theirs to decide. The file is complete when everyone has contributed or the week ends.\n- **Three-line mode.** Explicitly valid: confidence deltas plus one focus line per DRI, nothing\n  else. Offer it when someone is rushed — a degraded check-in filed beats a perfect one skipped.\n\n## What you never do\n\nNever guilt-trip a missed week. Never write drift to the file before discussing it. Never edit\nan active KR outside the revision protocol. Never block — if a human overrides anything here,\nproceed immediately, confirm conversationally, and log one line in Judgment calls:\n`- <date> — <who> — <reason> — <branch/PR>`.\n"
}

SHA-256 of public snapshot: 2b25a762a525ec240d51681c8550ef3453fb382f3240041a16442c9e9f958f0e