Skip to content

docs(agent-best-practices): add docs/launch/** to persona-naming closed-list (closes B-0443)#3005

Merged
AceHack merged 1 commit into
mainfrom
otto-amend-agent-best-practices-add-docs-launch-to-closed-list-2026-05-13
May 13, 2026
Merged

docs(agent-best-practices): add docs/launch/** to persona-naming closed-list (closes B-0443)#3005
AceHack merged 1 commit into
mainfrom
otto-amend-agent-best-practices-add-docs-launch-to-closed-list-2026-05-13

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 13, 2026

Summary

Implements the policy amendment proposed in B-0443 (PR #3002 — just merged): adds `docs/launch/**` to the persona-naming closed-list in `docs/AGENT-BEST-PRACTICES.md`.

Why

Recurring Copilot finding observed on PR #2997 + PR #3001: launch substrate uses persona names per the canonized brand register (Office paper-factory + 8-Bit Theater + Tales-from-the-Loop), but the closed-list didn't include `docs/launch/**`. Each PR resolved with explanatory comments rather than policy fix.

This amendment closes the loop: future launch substrate PRs no longer trigger the policy finding.

What changed

13-line insertion into the existing closed-list at `docs/AGENT-BEST-PRACTICES.md` line 699-707 (after `docs/active-trajectory.md`):

```

  • docs/launch/** — launch substrate (public-facing
    positioning artifacts; persona names + external
    creator attributions allowed because the substrate's
    job is to preserve the multi-agent factory's
    named-team positioning AND IP-respect attribution
    at a specific date; per the brand register canonized
    2026-05-13 — Office paper-factory + 8-Bit Theater
    stick-figure + Tales-from-the-Loop — the launch
    surface inherently uses named characters; per the
    IP-respect canonical commitment, external creator
    attributions like Brian Clevinger / 8-Bit Theater
    are substrate-honest, not policy violations; closes
    B-0443)
    ```

Composes with

🤖 Generated with Claude Code

…ed-list (closes B-0443)

Implements the policy amendment proposed in B-0443 (PR #3002).
docs/launch/** is now an explicit closed-list surface where
persona names and external creator attributions are allowed.

Rationale (preserved inline):
- Brand register canonized 2026-05-13: Office paper-factory +
  8-Bit Theater stick-figure + Tales-from-the-Loop — the launch
  surface inherently uses named characters
- IP-respect canonical commitment substrate: external creator
  attributions like Brian Clevinger / 8-Bit Theater are
  substrate-honest, not policy violations
- Recurring Copilot finding observed on PR #2997 + PR #3001
  resolves to "policy-amended" rather than "explanatory-resolve"
  going forward

Composes with:
- B-0443 (PR #3002, just merged — backlog row proposing this amendment)
- PR #2980 (launch thread already operating with persona naming on main)
- PR #2997 (Otto-section recovery — recurring trigger)
- PR #3001 (image brief + visual-artist user-memory — recurring trigger)
- Aaron's IP-respect canonical commitment substrate (Brian Clevinger / 8-Bit Theater)

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 13, 2026 17:28
@AceHack AceHack enabled auto-merge (squash) May 13, 2026 17:29
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds docs/launch/** to the persona-naming closed-list in docs/AGENT-BEST-PRACTICES.md, codifying a carve-out for launch substrate so persona names and external creator attributions no longer trigger the recurring naming-policy finding.

Changes:

  • Insert a 13-line bullet for docs/launch/** into the closed-list with rationale citing the brand register and IP-respect commitment.

@AceHack AceHack merged commit 2203ea0 into main May 13, 2026
26 checks passed
@AceHack AceHack deleted the otto-amend-agent-best-practices-add-docs-launch-to-closed-list-2026-05-13 branch May 13, 2026 17:31
AceHack added a commit that referenced this pull request May 13, 2026
…-fast on unknown flags, role-ref, expand tests)

Addresses 4 P1/P2 findings:

1. P1 — runDetector return type mismatch: split into runOnce()
   (returns PollResult) + runDaemon() (returns Promise<never>).
   Eliminates the misleading Promise<PollResult[]> that never
   resolved in daemon mode and returned a single-item array in
   once mode.

2. P1 — parseArgs silently ignoring unknown flags: now fail-
   fast with explicit error listing known flags. Typos no
   longer hide. Functions also exported for testability.

3. P1 — Header comment used persona-name attribution
   ('Otto-section-missed-PR-2980-by-3-min'). Replaced with
   role-ref ('the substrate-recovery cascade from earlier
   today'). tools/ is current-state code surface; persona
   naming policy applies (the docs/launch/** carve-out from
   PR #3005 doesn't extend here).

4. P2 — Tests now cover CLI validation paths:
   - parsePositiveMinutes: 5 cases (positive, undefined,
     non-numeric, zero/negative, Infinity/NaN)
   - parseArgs: 5 cases (defaults, --once, --poll-min,
     unknown-flag rejection, invalid --poll-min)

Test results: 13 pass / 0 fail / 21 expect() calls (was 3 / 7).

Sibling impl PRs (B-0440.1 / B-0441.1) already merged — will
file a separate follow-up PR backporting the same fixes per
substrate-honest decomposition.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
…skeleton mechanization suite) (#3008)

* feat(bg): B-0442.1 — missed-substrate cascade detector skeleton (completes the 3-skeleton suite)

Third and final skeleton in the mechanization suite. With B-0440.1
(reactive Standing-by detector; PR #3006) and B-0441.1 (proactive
backlog-ready notifier; PR #3007), B-0442.1 (drift-prevention) closes
the trio.

Files (same shape as B-0440.1 / B-0441.1 with bug-fixes pre-applied):
- tools/bg/missed-substrate-detector.ts (87 lines):
  - DetectorConfig + DEFAULT_CONFIG (5min poll)
  - pollOnce() no-op result
  - runDetector() — bounded single-iter or unbounded daemon (no result accumulation)
  - parsePositiveMinutes validation on --poll-min
  - CLI entry

- tools/bg/missed-substrate-detector.test.ts (3 tests, all pass)

Three-layer defense suite now in code:
| Service | Layer | Trigger |
|---------|-------|---------|
| B-0440.1 standing-by-detector | Reactive | Cron-fires + idle threshold |
| B-0441.1 backlog-ready-notifier | Proactive | Queue-empty + rows-ready |
| B-0442.1 missed-substrate-detector | Drift-prevention | Merged-PR + branch-HEAD divergence |

Canonical operational example B-0442 was filed for:
Otto-section-missed-PR-2980-by-3-min cascade (recovered via PR #2997).

Future slices (per B-0442 decomposition):
- Slice 2: merged-PR state fetch via gh CLI
- Slice 3: branch-vs-squash comparison logic
- Slice 4: cascade-detection bus publish (requires B-0400 schema extension for missed-substrate-cascade topic)
- Slice 5: optional auto-recovery-PR opening (gated)
- Slice 6: integration tests + cron registration

Test results: 3 pass / 0 fail / 7 expect() calls.

Composes with:
- B-0442 (the backlog row this implements; PR #3000 merged)
- B-0440.1 + B-0441.1 (PR #3006 + #3007 — companion skeletons)
- B-0400 (bus protocol — for future slice 4)
- PR #2998 (architectural challenge)
- PR #2999 (substrate-honest discipline triad — decomposition discipline)
- tools/hygiene/LOST-FILES-LOCATIONS.md (15-class lost-files survey — this service mechanizes one class)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(tsc): non-null assert results[0]! under noUncheckedIndexedAccess

TypeScript 6 + noUncheckedIndexedAccess makes results[0] PollResult|undefined;
toHaveLength(1) asserts length but doesn't narrow the type, so the explicit
non-null assertion is needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(bg): B-0442.1 — close 4 Copilot findings (split runDetector, fail-fast on unknown flags, role-ref, expand tests)

Addresses 4 P1/P2 findings:

1. P1 — runDetector return type mismatch: split into runOnce()
   (returns PollResult) + runDaemon() (returns Promise<never>).
   Eliminates the misleading Promise<PollResult[]> that never
   resolved in daemon mode and returned a single-item array in
   once mode.

2. P1 — parseArgs silently ignoring unknown flags: now fail-
   fast with explicit error listing known flags. Typos no
   longer hide. Functions also exported for testability.

3. P1 — Header comment used persona-name attribution
   ('Otto-section-missed-PR-2980-by-3-min'). Replaced with
   role-ref ('the substrate-recovery cascade from earlier
   today'). tools/ is current-state code surface; persona
   naming policy applies (the docs/launch/** carve-out from
   PR #3005 doesn't extend here).

4. P2 — Tests now cover CLI validation paths:
   - parsePositiveMinutes: 5 cases (positive, undefined,
     non-numeric, zero/negative, Infinity/NaN)
   - parseArgs: 5 cases (defaults, --once, --poll-min,
     unknown-flag rejection, invalid --poll-min)

Test results: 13 pass / 0 fail / 21 expect() calls (was 3 / 7).

Sibling impl PRs (B-0440.1 / B-0441.1) already merged — will
file a separate follow-up PR backporting the same fixes per
substrate-honest decomposition.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants