Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
pr_number: 3230
title: "feat(workflow): add stale-worktrees self-test job to factory-hygiene-audit-cadence"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-14T20:34:01Z"
merged_at: "2026-05-14T20:42:27Z"
closed_at: "2026-05-14T20:42:27Z"
head_ref: "feat/factory-hygiene-add-worktrees-job-otto-cli-2026-05-14-v2"
base_ref: "main"
archived_at: "2026-05-14T20:55:51Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #3230: feat(workflow): add stale-worktrees self-test job to factory-hygiene-audit-cadence

## PR description

Composes the third hygiene tool (`audit-stale-worktrees.ts` from PR #3225) into the daily cron from PR #3212. Workflow now self-tests all 3 hygiene tools each day at 14:37 UTC.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-14T20:36:10Z)

## Pull request overview

Adds a third factory-hygiene workflow job so the stale-worktrees audit tool’s unit tests run in the daily hygiene cadence.

**Changes:**
- Adds `stale-worktrees-self-test` job on Ubuntu 24.04.
- Checks out the repo, installs Bun, and runs `tools/hygiene/audit-stale-worktrees.test.ts`.

## Review threads

### Thread 1: .github/workflows/factory-hygiene-audit-cadence.yml:114 (resolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:36:09Z):

P1: The new stale-worktrees self-test job is not reachable from PRs that change only the stale-worktrees tool or its test, because `on.pull_request.paths` still lists only the first two hygiene tools plus this workflow. This undermines the PR self-test cadence for the newly composed tool; add the stale-worktrees source/test paths to the workflow trigger.

### Thread 2: .github/workflows/factory-hygiene-audit-cadence.yml:114 (resolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:36:09Z):

P2: Adding the third hygiene job leaves the workflow's file-level documentation stale: the header still describes this as a cadence for two tools and lists only the rule-cross-refs and memory-index audits. Update that summary/composes-with text so future maintainers do not miss that stale-worktrees is part of the daily cadence.

## General comments

### @chatgpt-codex-connector (2026-05-14T20:34:05Z)

You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage).
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ merged_at: "2026-05-14T20:39:32Z"
closed_at: "2026-05-14T20:39:32Z"
head_ref: "otto/extend-zeta-branch-rule-primary-defenses-2026-05-14"
base_ref: "main"
archived_at: "2026-05-14T20:45:32Z"
archived_at: "2026-05-14T20:55:50Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

Expand All @@ -18,13 +18,13 @@ archive_tool: "tools/pr-preservation/archive-pr.ts"

## Summary

Extends [`.claude/rules/zeta-expected-branch.md`](.claude/rules/zeta-expected-branch.md) with two primary defenses for multi-Otto-one-checkout topology. Promotes them from B-0519 RCA (grep-discoverable backlog row) to `.claude/rules/` (auto-loaded at cold-boot for every fresh session).
Extends [`.claude/rules/zeta-expected-branch.md`](../../.claude/rules/zeta-expected-branch.md) with two primary defenses for multi-Otto-one-checkout topology. Promotes them from B-0519 RCA (grep-discoverable backlog row) to `.claude/rules/` (auto-loaded at cold-boot for every fresh session).

## Why promote from RCA to rule

Per [claude-code-loading-taxonomy.md](.claude/rules/claude-code-loading-taxonomy.md): "I keep forgetting to do X" is the goldfish-ontology failure mode that needs direct-load surface (rule files), not router-loaded skills or grep-discoverable backlog rows. The defenses fire on every commit/PR call — every cold-boot Otto needs them in context from session start, not via grep.
Per [claude-code-loading-taxonomy.md](../../.claude/rules/claude-code-loading-taxonomy.md): "I keep forgetting to do X" is the goldfish-ontology failure mode that needs direct-load surface (rule files), not router-loaded skills or grep-discoverable backlog rows. The defenses fire on every commit/PR call — every cold-boot Otto needs them in context from session start, not via grep.

Per [skill-router-as-substrate-inventory.md](.claude/rules/skill-router-as-substrate-inventory.md): extend the existing rule rather than mint a new one — same failure mode (wrong-branch commits under multi-Otto contention).
Per [skill-router-as-substrate-inventory.md](../../.claude/rules/skill-router-as-substrate-inventory.md): extend the existing rule rather than mint a new one — same failure mode (wrong-branch commits under multi-Otto contention).

## What's added

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ merged_at: "2026-05-14T20:39:20Z"
closed_at: "2026-05-14T20:39:20Z"
head_ref: "shard/tick-2034Z-promote-defenses-to-rule-otto-cli-2026-05-14"
base_ref: "main"
archived_at: "2026-05-14T20:45:31Z"
archived_at: "2026-05-14T20:55:48Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
pr_number: 3234
title: "chore(b-0518): add Sharpenings 6 + 7 from Aaron's '.' failure-mode catch"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-14T20:38:00Z"
merged_at: "2026-05-14T20:46:00Z"
closed_at: "2026-05-14T20:46:00Z"
head_ref: "fix/b-0518-sharpen-with-aaron-period-failure-catch-2026-05-14"
base_ref: "main"
archived_at: "2026-05-14T20:55:48Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #3234: chore(b-0518): add Sharpenings 6 + 7 from Aaron's '.' failure-mode catch

## PR description

Aaron 2026-05-14: '. is another failure mode' (refined: 'terminal is decompose backlog or free time depending on budget').

Sharpening 6: forbidden minimal-output patterns ('.', single words, under-30-char on consecutive ticks).
Sharpening 7: terminal-level budget-conditional decomposition — budget available → decompose; budget exhausted → free time (legitimate, not failure mode).

Composes with 10% free-time-budget + Otto-as-AI-advocate role.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-14T20:39:54Z)

## Pull request overview

This PR updates backlog tracking to incorporate two additional “sharpenings” (6 and 7) for B-0518, and ensures the main backlog index links to the new/updated backlog items.

**Changes:**
- Extend B-0518 with Sharpening 6 (forbidden minimal-output patterns) and Sharpening 7 (terminal-level mechanical decomposition).
- Update `docs/BACKLOG.md` to include the B-0518 entry in P1 and add new P3 entries (B-0517, B-0519) in the index.

### Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

| File | Description |
| ---- | ----------- |
| docs/backlog/P1/B-0518-sharpen-holding-without-named-dependency-rule-anti-failure-mode-2026-05-14.md | Adds Sharpenings 6 and 7 to the B-0518 acceptance-criteria section. |
| docs/BACKLOG.md | Adds/updates index entries to reference B-0518 (P1) and B-0517/B-0519 (P3). |

## Review threads

### Thread 1: docs/backlog/P1/B-0518-sharpen-holding-without-named-dependency-rule-anti-failure-mode-2026-05-14.md:90 (resolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:39:53Z):

Sharpening 6’s forbidden-pattern enumeration is internally inconsistent: it lists "." as both a single character and as a “single word”, and “Standing” doesn’t match the earlier “Standing by” phrasing. This makes the acceptance criteria ambiguous for later mechanization; consider using a single “single-token output” category (or remove duplicates) and align the examples with the actual patterns described elsewhere in the row.

### Thread 2: docs/backlog/P1/B-0518-sharpen-holding-without-named-dependency-rule-anti-failure-mode-2026-05-14.md:105 (resolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:39:54Z):

PR description says Sharpening 7 is “budget-conditional” (budget available → decompose; budget exhausted → free time), but the added Sharpening 7 text only describes forced decomposition and doesn’t capture the free-time terminal condition. Either update the sharpening text to include the budget-conditioned terminal behavior, or adjust the PR description so they match.
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---
pr_number: 3235
title: "feat(b-0488): KSK (Kinetic Safeguard Kernel) persona map"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-14T20:45:20Z"
merged_at: "2026-05-14T20:48:18Z"
closed_at: "2026-05-14T20:48:18Z"
head_ref: "otto/b0488-ksk-personas-2026-05-14"
base_ref: "main"
archived_at: "2026-05-14T20:55:47Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #3235: feat(b-0488): KSK (Kinetic Safeguard Kernel) persona map

## PR description

## Summary

Per-product persona doc for KSK (Kinetic Safeguard Kernel) using the B-0485 template. Closes [B-0488](../backlog/P1/B-0488-ksk-persona-map-2026-05-14.md) which unblocks B-0492/B-0493 skill-mapping work.

## Personas defined

**Primary (3)**:
- `ksk-agent-developer` — engineers integrating "am I allowed to do this?" checks into AI agents
- `ksk-robotics-designer` — consent-first robotics / actuator system designers (NVIDIA Thor Homeland-Security clearance lineage)
- `ksk-security-engineer` — engineers building KSK itself in `Lucent-Financial-Group/lucent-ksk`

**Secondary (1)**: `ksk-clearance-deployer` — Homeland-Security / clearance-aware deployers

**Adjacent (1)**: `ksk-compliance-auditor` — SOC 2 / HIPAA / ISO 27001 auditors consuming KSK signed receipts

**Refused (2 — HARD LIMITS)**:
- `ksk-refused-weapons-control` — autonomous-weapons / kill-chain designers using KSK as a "consent UI" wrapper. Per `methodology-hard-limits.md` HARD LIMITS #1 + #3: laundered consent + violates consent-first design intent (PR #2892).
- `ksk-refused-apt-operator` — nation-state APT operators using KSK as a privilege oracle (receipt-replay, authorization enumeration, "stealth mode" feature requests). Per `mechanical-authorization-check.md`: not in the authorization-source list.

## Why the refused-persona list is load-bearing

KSK's terminal purpose is **human-in-the-loop refusal of impactful AI actions**. A weapons-system integration would launder the appearance of consent (the receipts say "authorized" but the operator never had meaningful refusal). An APT integration would use KSK's transparency against its own purpose (mapping authority topology). Both are structural adversaries, not off-target customers.

## Acceptance criteria

- [x] Template from [B-0485](../research/2026-05-14-persona-mapping-framework-b0485.md) applied
- [x] Primary personas fully documented (3, exceeds the "grey-hat / ethical researcher" minimum — folded that framing into `ksk-security-engineer`)
- [x] At least 2 refused personas with explicit HARD LIMITS rationale (R1 + R2)
- [x] Output doc at `docs/personas/ksk-personas.md`
- [x] B-0488 status: `open` → `in-progress` (closes on merge)
- [ ] B-0492 `composes_with:` pointer backfilled (deferred to a follow-up; B-0492 row may not exist yet — needs scoping)

## Test plan

- [x] `markdownlint-cli2` clean on both files
- [x] Composite-guard used for the commit: `test "$(git branch --show-current)" = "<expected>" && git commit`
- [x] `gh pr create --head` explicit ref used
- [ ] CI clears
- [ ] Auto-merge

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-14T20:48:48Z)

## Pull request overview

Adds the KSK (Kinetic Safeguard Kernel) per-product persona map using the B-0485 template, and updates the associated backlog row to reflect active work on B-0488.

**Changes:**
- Add `docs/personas/ksk-personas.md` defining primary/secondary/adjacent/refused KSK personas (with HARD LIMITS rationale).
- Update `docs/backlog/P1/B-0488-ksk-persona-map-2026-05-14.md` status from `open` to `in-progress`.

### Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

| File | Description |
| ---- | ----------- |
| docs/personas/ksk-personas.md | New KSK persona-map document (template-structured), including refused personas + detection/response notes. |
| docs/backlog/P1/B-0488-ksk-persona-map-2026-05-14.md | Backlog row status update for B-0488. |


<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**docs/personas/ksk-personas.md:375**
* P1 (name-attribution policy): This section repeats direct named attribution (e.g., “Aaron + Amara’s …”) inside a current-state `docs/personas/**` doc. Per `docs/AGENT-BEST-PRACTICES.md` “No name attribution in code, docs, or skills” (around lines 671–760), prefer role-refs here and keep named provenance on the allowlisted history surfaces (e.g., link to the relevant `memory/**`/`docs/research/**` artifact that preserves the attribution).
```
2. Compromise the protective lineage (KSK's reputation is its value;
weapons-system integration destroys it)
3. Violate the consent-first design intent (PR #2892 — Aaron + Amara's
consent-first design origin)
```
</details>

## Review threads

### Thread 1: docs/backlog/P1/B-0488-ksk-persona-map-2026-05-14.md:4 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:48:48Z):

P0 (schema/tooling): `status: in-progress` is not a valid backlog-row status per `tools/backlog/README.md` (allowed: `open` / `closed` / `superseded-by-B-NNNN` / `deferred` / `decomposed`). Please change this back to a supported value (typically keep `open` until the work is actually complete, then set `closed` with `closed`/`closed_by`).

### Thread 2: docs/personas/ksk-personas.md:8 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-14T20:48:48Z):

P1 (name-attribution policy): This is a current-state doc under `docs/personas/`, but it introduces direct contributor/persona names (e.g., `**Author:** Otto`, and `Aaron+Amara` in the substrate line). Per `docs/AGENT-BEST-PRACTICES.md` “No name attribution in code, docs, or skills” (around lines 671–760), please rewrite these to role-refs (e.g., “the agent”, “the human maintainer”, “external collaborator”) and/or move the named provenance into an allowlisted history surface (`memory/**` or `docs/research/**`) and link to it from here.

This issue also appears on line 372 of the same file.

## General comments

### @chatgpt-codex-connector (2026-05-14T20:45:24Z)

You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage).
Loading