Use to mine ../airlineops for governance habits gzkit lacks; produces a parity scan report (gzkit leads, AirlineOps adopts).
日本語の概要は準備中です。原文の説明を表示しています。
Use to decompose an ADR item into an authored OBPI brief.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Decompose an ADR's Feature Checklist into implementable OBPI briefs. Each brief inherits lane, objective, and scope from the parent ADR's WBS table — not from hardcoded defaults.
OBPI increment size is not a process preference — it is an architectural safety property. The brief boundary is the only reliable firing point for governance gates.
Interpretability research (Lindsey et al. 2025) shows that once a model is committed mid-output, grammatical-coherence circuits hold it on-rails until the current structural unit is finished, even when safety circuits would otherwise want it to stop. The repo-level analog: once an agent is three files deep in a multi-file edit, completion pressure holds it on-rails until the edit is structurally complete — a gate that would otherwise block the direction cannot fire cleanly mid-edit.
OBPI briefs function as the agent's "sentence boundaries": the gate can fire between briefs, not inside one. Bundling two briefs' worth of work into one implementation pass collapses that firing point, even when the two briefs are related. Keep briefs narrow enough that the pipeline has somewhere to stop you.
Before saving a brief, every path in the Allowed Paths and Denied Paths
sections MUST be verified against on-disk reality. LLM authoring routinely
imports model priors from adjacent projects and writes them as if they were
gzkit conventions. The OBPI-0.0.16-03 brief shipped with fabricated framework
paths (config/chores/<slug>.toml-style layouts); the gzkit chore framework
authors chores at .gzkit/chores/<slug>/, generates the package copy at
src/gzkit/chores/<slug>/ and keeps a JSON registry at .gzkit/chores/registry.json,
and the implementer had to rewrite Allowed Paths as a scope amendment.
For each path:
Glob(pattern=<path>). If the path matches existing
files, the path is grounded. Continue.Glob(pattern=<parent>/*). If the parent
exists, inspect its contents:
.py, .toml, .json, .md) as the proposed path. The matching
extension is your evidence that the file you propose to create is
consistent with the convention of the directory.**CREATE** (or list it under a Creates these files heading):
gz obpi validate --authored fails any other Allowed Path that does not
exist on disk. Then verify the convention by:
Grep, Glob) that establish the
intended convention, OR<path> but no precedent exists;
is this a new convention?") before saving.Do NOT save a brief if any of the following is true:
config/chores/<slug>.toml when chores are authored in
.gzkit/chores/<slug>/ and generated to src/gzkit/chores/<slug>/, GHI #1044)..toml when sibling files are .json).| Thought | Reality |
|---|---|
| "The framework probably uses TOML for chores like airlineops does" | Verify it. Glob("config/**/*.toml") and Glob("config/**/*.json") will tell you in one call which convention this repo uses. |
| "I'll let the implementer correct the paths if they're wrong" | One Glob call before saving costs far less than an in-flight scope amendment and a context-burning rewrite (OBPI-0.0.16-03). |
| "The Allowed Paths look architecturally correct — that's enough" | Architectural plausibility is not ground truth. Run the Glob. Read a sibling file. Then save. |
gz obpi validate --authored and gz plan audit fail closed on an Allowed Path
that does not exist on disk unless it carries a **CREATE** marker or sits under
a Creates these files heading; a vendor-mirror path fails regardless (GHI #393,
#403, #419; src/gzkit/governance/brief_path_validity.py). The convention check
for a green-field path — extension, sibling precedent — is still by hand, and
this section governs it.
When authoring a brief semantically, read the parent ADR's structured input — § Decision item, then § Intent — before anything else (Allowed Paths, Prerequisites, Existing Code). The OBPI brief template's Discovery Checklist now pins this order: item #1 instructs the agent to quote the parent ADR § Decision item this OBPI implements verbatim into the brief's Implementation Summary, with a STOP guard below the pin: "If you cannot quote the parent ADR § Decision item that this OBPI implements, STOP and re-read."
The failure pattern it closes: an agent grepping backward from a keyword to a
code path rather than tracing forward from the parent ADR's Decision
(failure-mode taxonomy ADR-0.0.23 Skipped cheap verification; current-card
provenance is owned by .gzkit/rules/agent-failure-modes.md). When the first
authoring step is "quote the Decision item," drift between the ADR's Feature
Checklist line and the OBPI brief is structurally harder to introduce.
The pin lives in the rendered template (src/gzkit/templates/obpi.md).
A brief that drifts the pinned items out of order, deletes the STOP guard,
or omits the Decision quote in Implementation Summary is the same class of
defect as a thin Allowed Paths section: a brief that won't survive pipeline
execution.
# Create one OBPI brief (lane and objective from WBS table)
uv run gz specify my-feature-slug --parent ADR-0.0.11 --item 3
# One-shot fast path: fail-closed, and writes NO file if the authored pass fails
# (§ Skill Responsibility step 1). Not the standard route.
uv run gz specify my-feature-slug --parent ADR-0.0.11 --item 3 --author
# Override lane explicitly
uv run gz specify my-feature-slug --parent ADR-0.0.11 --item 3 --lane heavy
# Dry run (show what would be created)
uv run gz specify my-feature-slug --parent ADR-0.0.11 --item 3 --dry-run
# Create all OBPIs for an ADR (run once per checklist item)
for i in $(seq 1 6); do
uv run gz specify slug-$i --parent ADR-0.0.11 --item $i
done
--lane CLI arg > WBS table row > fallback liteobpi_created to the project ledger| Source | When Used |
|---|---|
--lane heavy (CLI) | Always wins when explicitly passed |
| WBS table row | Used when --lane is not passed and WBS table has a row for this item |
Fallback lite | Used when neither CLI nor WBS provides a lane |
The command prints the lane source so the operator can verify:
Lane: heavy (source: WBS table)
gz specify is the ADR-to-OBPI decomposition command, not a pseudo-authoring
shortcut. It fills the brief with deterministic ADR-derived content, but the
brief is only ready for pipeline execution when it passes authored validation:
uv run gz obpi validate --adr ADR-0.0.11 --authored
That gate requires each brief to have substantive:
Every REQ in an OBPI brief's ## Acceptance Criteria MUST carry exactly one kind tag
between the REQ ID and the colon (ADR-0.0.59-02; enforced by gz validate --req-kind-discipline):
REQ-X.Y.Z-NN-01 [BEHAVIOR]: the system does X when Y
REQ-X.Y.Z-NN-02 [SUPPORT]: the rule file carries subsection Z — gz validate --documents + artifact_edited event
REQ-X.Y.Z-NN-03 [STRUCTURAL-FENCE]: cross-OBPI boundary invariant P holds
| Use [BEHAVIOR] when... | Use [SUPPORT] when... | Use [STRUCTURAL-FENCE] when... |
|---|---|---|
| The REQ is about code behavior — a function produces output X, a CLI command exits Y, a state machine transitions Z | The REQ is about a governance artifact, doc, rule file, or data file that supports behavior but is not behavior itself | The REQ spans multiple OBPIs and can only be audited at ADR closeout, not per-OBPI |
BEHAVIOR — must include tests/** in Allowed Paths. The proof is a @covers-decorated test.
SUPPORT — must include BOTH in the REQ text:
gz validate -- scope reference (e.g. gz validate --documents)artifact_edited, obpi_created)Example: REQ-X.Y.Z-NN-02 [SUPPORT]: docs/governance/X.md gets Y section — gz validate --documents + artifact_edited event
STRUCTURAL-FENCE — the parent ADR must have a ## Boundary Invariants section naming this invariant.
Add it to the parent ADR before running gz validate --req-kind-discipline.
# Fails closed (exit 3) on mixed-state or missing proof citations
uv run gz validate --req-kind-discipline
Also runs as part of uv run gz check.
The skill does not stop at uv run gz specify.
The intended workflow is:
gz specify <slug> --parent ADR-<X.Y.Z> to materialize the OBPI from the ADR/WBS contract.
Do not pass --author here. --author runs the authored-validation pass and
raise SystemExit(1) fires before _write_specify_outputs, so a failed authored
pass leaves no file on disk — there would be nothing for steps 2-4 to author.
And when it succeeds the brief has already passed gz obpi validate --authored,
which is step 4's exit condition, so steps 2-4 are already discharged. The runtime
says so itself: the non---author path prints "Review allowed paths, requirements,
and acceptance criteria for OBPI-specific scoping" followed by "Validate with:
uv run gz obpi validate --authored" — steps 2, 3, and 4 — while the --author
path prints "validated for pipeline entry" and returns with no authoring guidance.
Treat --author as an optional one-shot fast path for an ADR rich enough to emit a
compliant brief directly; it is fail-closed, not the standard route.[kind] tags)uv run gz obpi validate --authored <path> and keep authoring until it passes.The CLI owns deterministic decomposition. The skill owns the semantic authoring pass that turns the generated brief into an execution contract.
Final Target OBPI Count{adr-dir}/obpis/OBPI-{version}-{NN}-{slug}.mdobpi_created ledger event recordedAfter creating all briefs:
# Fail closed if any brief is still thin or pseudo-authored
uv run gz obpi validate --adr ADR-0.0.11 --authored
# Verify count matches
ls docs/design/adr/foundation/ADR-0.0.11-*/obpis/ | wc -l
# Verify lanes match WBS
grep "^lane:" docs/design/adr/foundation/ADR-0.0.11-*/obpis/*.md
# Register any unregistered OBPIs
uv run gz register-adrs ADR-0.0.11 --all
When a brief's lane is Heavy (from WBS or CLI override):
assets/HEAVY_LANE_PLAN_TEMPLATE.md before authoring — this is mandatoryClosure failure modes (every lane):
These thoughts mean STOP — you are about to ship a thin or pseudo-authored brief:
| Thought | Reality |
|---|---|
| "The generated brief looks complete enough — ship it" | gz specify only fills ADR-derived defaults. The semantic authoring pass is mandatory. The authored validation gate exists because generated briefs are the start, not the end. |
| "The Allowed Paths from the template will work" | Template defaults are intentionally broad. Narrow them to the real execution boundary or the OBPI will sprawl during implementation. |
| "I can leave Discovery Checklist generic — the implementer will figure it out" | Generic checklists produce generic implementations. The checklist is where you record the prerequisite reads that prevent re-discovery on every pipeline run. |
| "REQ IDs are bookkeeping — I'll add them after the brief is approved" | Tests derive from REQ IDs. No REQ IDs means tests cannot be traced to acceptance criteria, which collapses the TDD discipline at Gate 2. |
| "Verification commands can be the same across all OBPIs in this ADR" | The point of OBPI-specific verification is that each brief proves this increment. Shared verification means you can't tell which brief broke. |
| "The WBS lane says lite but this is heavier than I thought — I'll just proceed lite" | The WBS lane is the canonical contract. If the work is heavier, fix the WBS first, then re-run specify. Silently proceeding lite skips Gates 3–4 (docs and BDD); Gate 5 applies either way. |
"gz obpi validate --authored is failing on minor things — I'll dismiss them" | The authored gate is fail-closed for a reason. Each warning is a brief that won't survive pipeline execution. Fix every one. |
assets/HEAVY_LANE_PLAN_TEMPLATE.md consultedgz specify without running gz obpi validate --authored| Skill | Relationship |
|---|---|
gz-adr-create | Creates the parent ADR that specify decomposes |
gz-obpi-pipeline | Executes briefs created by specify |
gz-adr-evaluate | Evaluates ADR+OBPI quality (run after specify) |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use to mine ../airlineops for governance habits gzkit lacks; produces a parity scan report (gzkit leads, AirlineOps adopts).
日本語の概要は準備中です。原文の説明を表示しています。
Use to file a GitHub issue when a finding needs its own work order or the operator asks; OBPI corrections stay in its change log.
日本語の概要は準備中です。原文の説明を表示しています。
Use to do the work a GHI describes, verify it and close the issue with evidence in one sweep.
日本語の概要は準備中です。原文の説明を表示しています。
Use to triage the open GHI queue before planning or choosing what to pull; produces a ranked deliverable.
日本語の概要は準備中です。原文の説明を表示しています。
Run the guarded repository sync ritual; commit-time hooks enforce the cheap gates and the pre-push hook runs gz check.
日本語の概要は準備中です。原文の説明を表示しています。
Run the guarded repository sync ritual; the hooks your pre-commit config declares enforce the quality gates.
日本語の概要は準備中です。原文の説明を表示しています。