Walkthrough

Step 07 — Publish & Act

06 Sign-off · Index

Two things remain. Publish is the closing work of Check: turn the accepted bundle into a draft PR. Act is the fourth beat — the cross-cycle review that closes the PDCA loop by improving the process, not the contribution.


Publish — contribute the accepted fix

Once a bundle is COMPLETE, publish opens it as a draft PR on the target branch from the brief. In make flow this runs automatically on an accept; you can also run it standalone:

make publish ID=11589           # open the draft PR
make publish ID=11589 DRY=1     # print the git/gh plan without pushing

It writes publish.json into the bundle and uses the project's PR conventions from INTEGRATION §8. For gramps that's a four-section body (Root cause / Fix / Verified against / Test), and — because 11589 touches an addon — an ## Affected addon section that @-mentions the addon's maintainer (INTEGRATION §10).

STOP discipline holds to the end: the PR opens as a draft. A human marks it ready — the harness never does. gramps' governance makes this explicit (INTEGRATION §10): "Eduard opens fork PRs as draft, marks ready himself; builder commits and stops — no push/PR-open/ready-mark without explicit instruction."

In gramps' git history you can see cycles land this way — each result bundle gets a branch and a PR:

c52c6a4 Merge pull request #105 from eduralph/results/issue-46-graphview-import
f1092ca results(46): record published GraphView import-safety cycle

That's one full cycle, steps 03–07, from tracker issue to merged record.


Act — improve the process, not the contribution

Plan/Do/Check operate on one contribution. Act operates on the process itself, across many completed cycles, on its own cadence (every N cycles, or weekly — not per-cycle). It's touch point #3.

pdca act-index                              # read-only: frozen cycles + recurring signals
pdca act-log --date 2026-06-12 --append     # scaffold a dated entry into process/act-log.md

Act reads the COMPLETE bundles' SUMMARYs — especially §6 (what needed a human), §7 (what stayed unproven), and §10 (Act candidates the cycle flagged) — looking for patterns. A one-off is noise; the same gap across three cycles is a process defect. What Act explicitly does not do: re-decide any disposition, re-run the suite, or write the next brief.

A real Act entry

This is from gramps-testbed-v2/process/act-log.md (2026-06-12), and it's the clearest demonstration of why the beat exists. A maintainer reviewing the glade-setattr cycle's published PR was asked to list a new .py file in po/POTFILES — a documented rule no gate owned:

# Act review — 2026-06-12 — cycles considered: glade-setattr (PR #2356 review feedback)

## What the cycles' records exposed
- A documented doc-16 MUST with no owner in the cycle — surfaced by a maintainer
  at review, not by any gate. Nick-Hall asked for the new test file to be listed
  in `po/POTFILES.{in,skip}`. The rule is explicit and sourced ... It is not
  exotic — it simply has no encoding in our T1–T4 ladder.
- The omission fell through every beat. Plan: the brief never stated the
  obligation. Do: the builder has no independent doc-16 checklist. Check/gates:
  T1 is addon-only; T2 checks file *shape*; T4 checks the commit/PR *wrapper* —
  none implement doc 16 §Translation Files. New-file→manifest registration falls
  in the gap between T2 (shape) and T4 (wrapper); neither owns it.

## Process deltas (candidates — routed for engineering, NOT applied here)
- Gate (highest-value): add a bundle-scoped, deterministic check — for a *core*
  bundle whose `patch.diff` adds a `.py` file, assert it appears in
  `po/POTFILES.in` or `po/POTFILES.skip`. Directly implements doc 16:99-100, is
  target-aware (core-only), and needs no Docker. Home: extend `t2_shape.py`.

Trace the loop: a human review comment (§ outside the gates) → Act generalizes it ("this will recur on every core bundle that adds a file") → a concrete process delta (a new gate) → which, once built, means the next cycle's gates catch it automatically instead of a maintainer catching it at review. That is the "→ back to Plan with a better baseline" arrow made operational.

Another entry shows Act tightening the spec, not the gates — the issue_8653 cycle shipped a test that exercised a hand-ported copy of production rather than production itself; only the human's T5 judgment caught it:

- Reference (applied): new principle §3.4 — test the production path: the success
  evidence MUST exercise the production path; a parallel re-implementation that
  mirrors production is not acceptable evidence. (docs/principles.md §3.4)
- Spec template (applied): brief Test file field now reminds that the test must
  drive the production path, not a parallel copy. (templates/brief.md.tpl)

Act deltas land in five places: the spec template (a brief field), the ruleset (a written rule), the gates (a new/promoted check), the agent files (.claude/agents/*.md), or the orchestration (driver/state). Each is a permanent improvement to the baseline every future cycle starts from.


The loop, closed

Plan ─► Do ─► Check ─► (sign-off) ──► COMPLETE ──► publish (draft PR)
  ▲                                      │
  └──────────── Act ◄────────────────────┘
        (every N cycles: turn recurring
         misses into spec/gate/rule deltas)

You've now walked one contribution from a tracker issue to a merged, signed-off, verified fix — and seen how the cycle feeds its own improvement. To do it for real, go back to step 01 and render the harness into your own project; the reference spec in ../template/PCDA/quality-cycle/ is there when you want the why behind any beat.

06 Sign-off · Index