Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f62f8ef
docs(plan): issue sweep unit (preview, #301, #297, #296, #294)
lidge-jun Oct 27, 2026
5d42de2
ci: drop the removed preview branch from push filters and cleanup pro…
lidge-jun Oct 27, 2026
077834b
ci(inventory): let PR and dev CI tolerate a lagging tests badge (#301)
lidge-jun Oct 27, 2026
6e9ca44
test: measure prompt byte budgets without the machine-specific root (…
lidge-jun Oct 27, 2026
e85a963
test: hold the event loop in unref-timer tests so Node 22 does not ca…
lidge-jun Oct 27, 2026
de2c2f4
docs(pabcd): bounded re-audit scope, rebuttal basis and small-reviewe…
lidge-jun Oct 27, 2026
72bd28c
docs: sync README CI note and dispatch doctrine with #301 and #294
lidge-jun Oct 27, 2026
8b1c7ed
fix(inventory): refuse --tests-mode without a value; drop preview fro…
lidge-jun Oct 27, 2026
fea3eea
Merge pull request #325 from lidge-jun/fix/issue-sweep-261027
lidge-jun Oct 27, 2026
e4f9d2e
docs(plan): issue sweep delivery record (#325)
lidge-jun Oct 27, 2026
c12c71c
Merge pull request #326 from lidge-jun/docs/issue-sweep-done-261027
lidge-jun Oct 27, 2026
f0d9f76
docs(plan): frontend skill audit roadmap (wp0)
lidge-jun Oct 27, 2026
093f556
docs(plan): fresh-reader fixes to 000
lidge-jun Oct 27, 2026
99fc1f4
docs(plan): wp0 D summary
lidge-jun Oct 27, 2026
1b63744
docs(plan): wp1 P revalidation
lidge-jun Oct 27, 2026
b8bca2b
feat(dev-uiux-design): experience audit and universal interface princ…
lidge-jun Oct 27, 2026
11a1631
fix(dev-uiux-design): evidence ids through the experience audit (C ve…
lidge-jun Oct 27, 2026
9ab67b7
docs(plan): wp1 D summary
lidge-jun Oct 27, 2026
a63958b
docs(plan): wp2 P revalidation
lidge-jun Oct 27, 2026
ca00e85
feat(dev-frontend): WCAG 2.2 AA owner and visual audit loop
lidge-jun Oct 27, 2026
50b1181
docs(plan): wp2 D summary
lidge-jun Oct 27, 2026
2a0c106
docs(plan): wp3 P revalidation
lidge-jun Oct 27, 2026
19e9d69
fix(skills): correct WCAG levels, link stale section references, sync…
lidge-jun Oct 27, 2026
5e664a2
docs(changelog): PR numbers
lidge-jun Oct 27, 2026
ba8d777
docs(plan): commit fixture screenshots and run log (ignored by defaul…
lidge-jun Oct 27, 2026
7c1fe15
Merge branch 'docs/frontend-skill-audit-frontend' into docs/frontend-…
lidge-jun Oct 27, 2026
e816f21
docs(plan): wp3 delivery note
lidge-jun Oct 27, 2026
89fa2a0
docs(plan): wp3 D summary
lidge-jun Oct 27, 2026
ed63835
fix(dev-frontend): keep KWCAG verdicts separate from the WCAG 2.2 che…
lidge-jun Oct 27, 2026
9e68ba5
Merge branch 'docs/frontend-skill-audit-frontend' into docs/frontend-…
lidge-jun Oct 27, 2026
8710779
Merge pull request #327 from lidge-jun/docs/frontend-skill-audit-uiux
lidge-jun Oct 27, 2026
447a97a
Merge pull request #328 from lidge-jun/docs/frontend-skill-audit-fron…
lidge-jun Oct 27, 2026
d8304b1
Merge pull request #329 from lidge-jun/docs/frontend-skill-audit-cons…
lidge-jun Oct 27, 2026
940d279
release: codexclaw 0.2.45
lidge-jun Oct 27, 2026
00a481f
Merge pull request #330 from lidge-jun/codex/release-0245
lidge-jun Oct 27, 2026
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
2 changes: 1 addition & 1 deletion .github/scripts/closed-pr-branch-cleanup.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*/

/** Branches that may never be deleted regardless of pull-request state. */
const PROTECTED_BRANCHES = Object.freeze(["main", "dev", "preview", "gh-pages"]);
const PROTECTED_BRANCHES = Object.freeze(["main", "dev", "gh-pages"]);

/** Branch namespaces explicitly reserved for disposable pull-request work. */
// codexclaw declares only codex/ disposable. fix/, docs/ and every other
Expand Down
6 changes: 3 additions & 3 deletions .github/scripts/closed-pr-branch-cleanup.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ function deletedBranches(result) {
}

describe("isProtectedBranch", () => {
it("protects the integration, release, and prerelease lines", () => {
for (const name of ["main", "dev", "preview", "gh-pages"]) {
it("protects the integration and release lines", () => {
for (const name of ["main", "dev", "gh-pages"]) {
assert.equal(isProtectedBranch(name), true, name);
}
assert.equal(isProtectedBranch("codex/dev"), false);
Expand Down Expand Up @@ -146,7 +146,7 @@ describe("planClosedPrBranchDeletions", () => {
it("refuses to delete a protected branch even if a closed pull request used it", () => {
const result = planClosedPrBranchDeletions({
pullRequests: [closedPr({ number: 70, headRefName: "dev" })],
branches: ["dev", "main", "preview"],
branches: ["dev", "main"],
now: NOW,
});
assert.deepEqual(deletedBranches(result), []);
Expand Down
9 changes: 6 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

on:
push:
branches: [main, preview, dev]
branches: [main, dev]
pull_request:
workflow_dispatch:

Expand Down Expand Up @@ -54,12 +54,15 @@ jobs:
fi
echo "total=$total" >> "$GITHUB_OUTPUT"
# The tests badge is the one published count that cannot be derived from the
# payload, so it is checked against what the suite just measured.
# payload, so it is checked against what the suite just measured. Floor mode:
# a badge that lags behind newly added tests only prints a notice with the exact
# write command, and a badge that claims more tests than ran fails. The release
# gate still requires an exact match (#301).
- name: Inventory and published counts
shell: bash
run: |
set -euo pipefail
node plugins/codexclaw/scripts/inventory.mjs --check --tests "${{ steps.suite.outputs.total }}"
node plugins/codexclaw/scripts/inventory.mjs --check --tests "${{ steps.suite.outputs.total }}" --tests-mode floor
- run: node plugins/codexclaw/scripts/gate.mjs
- name: Platform smoke
run: node plugins/codexclaw/scripts/platform-smoke.mjs
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/wsl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ name: WSL
# merged it and is fixed forward.
on:
push:
branches: [main, preview, dev]
branches: [main, dev]
workflow_dispatch:

permissions:
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ All notable changes to codexclaw are documented here. The format follows

## [Unreleased]

## [0.2.45] - 2026-10-28

### Added

- dev-uiux-design: an experience audit (evidence ids, personas, journeys, ideal state, a severity-ranked gap ledger and a handoff packet) and universal interface principles distilled from Apple's HIG without Apple-specific visuals. (#327)
- dev-frontend: a WCAG 2.2 AA owner with all 55 A/AA criteria, the six 2.2 additions, a Playwright axe script and verdict rules that forbid conformance claims from automated runs alone; a visual audit loop with a violation ledger, a verifier and pass rule per violation, before/after captures, a closure gate, a PR before/after section and cxc-loop routing. A KWCAG verdict is kept separate: KWCAG 2.2 builds on WCAG 2.1 with 33 inspection items, so it needs its own item list or an explicit mapping (FE-WCAG22-03). (#328)

### Fixed

- WCAG levels and thresholds stated wrongly in both skills: reduced motion labelled AA (it is AAA 2.3.3), large bold text at 18.5px (18.66px), Lighthouse score used as an accessibility pass, unconditional 3:1 borders, and target size without the 24px AA floor. Stale "SKILL.md §12/§14" references now link to the sections that hold those rules. (#329)

### Compatibility

- Skill and documentation changes only. No hook declaration, CLI command or component behavior changed, so no hook retrust is needed beyond the usual install.

## [0.2.44] - 2026-10-26

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<p align="center">
<a href="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml"><img src="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<img src="https://img.shields.io/badge/tests-3%2C869-brightgreen" alt="3,869 tests">
<img src="https://img.shields.io/badge/tests-3%2C879-brightgreen" alt="3,879 tests">
<img src="https://img.shields.io/badge/skills-29-blue" alt="29 skills">
<img src="https://img.shields.io/badge/hooks-31-blue" alt="31 hooks">
<a href="https://lidge-jun.github.io/codexclaw/"><img src="https://img.shields.io/badge/docs-codexclaw-black" alt="Documentation"></a>
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<p align="center">
<a href="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml"><img src="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<img src="https://img.shields.io/badge/tests-3%2C869-brightgreen" alt="3,869 tests">
<img src="https://img.shields.io/badge/tests-3%2C879-brightgreen" alt="3,879 tests">
<img src="https://img.shields.io/badge/skills-29-blue" alt="29 skills">
<img src="https://img.shields.io/badge/hooks-31-blue" alt="31 hooks">
<a href="https://lidge-jun.github.io/codexclaw/"><img src="https://img.shields.io/badge/docs-codexclaw-black" alt="Documentation"></a>
Expand Down Expand Up @@ -303,14 +303,14 @@ Pull requests target the `dev` integration branch; `main` moves by maintainer pr

CI on a pull request runs the checks a reviewer needs; the slow installation lanes run when a change lands on an integration line.

| Check | Pull request | Push to `dev` / `preview` / `main` |
| Check | Pull request | Push to `dev` / `main` |
|---|---|---|
| `ci` (aggregate of `test (ubuntu-latest, false)`, `test (macos-latest, false)`, four Windows shards) | yes | yes |
| `artifact (…)` / `install (…)` packed-install lifecycle | yes | yes |
| `enforce-target` | yes | — |
| `wsl (drvfs /mnt/c)`, `wsl (native ext4 ~)` | no (also `workflow_dispatch`) | yes |

`ci` fails when any leg fails, is cancelled or is skipped; it is the one check to require. The ubuntu lane runs the whole suite in one process and is where the tests badge total is measured; the Windows legs run `scripts/test.mjs --shard i/2`.
`ci` fails when any leg fails, is cancelled or is skipped; it is the one check to require. The ubuntu lane runs the whole suite in one process and is where the tests badge total is measured; a badge that lags behind new tests only gets a notice with the exact `inventory.mjs --write --tests <n>` command, and the release gate requires the exact number. The Windows legs run `scripts/test.mjs --shard i/2`.

## License

Expand Down
2 changes: 1 addition & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<p align="center">
<a href="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml"><img src="https://github.com/lidge-jun/codexclaw/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<img src="https://img.shields.io/badge/tests-3%2C869-brightgreen" alt="3,869 tests">
<img src="https://img.shields.io/badge/tests-3%2C879-brightgreen" alt="3,879 tests">
<img src="https://img.shields.io/badge/skills-29-blue" alt="29 skills">
<img src="https://img.shields.io/badge/hooks-31-blue" alt="31 hooks">
<a href="https://lidge-jun.github.io/codexclaw/"><img src="https://img.shields.io/badge/docs-codexclaw-black" alt="Documentation"></a>
Expand Down
2 changes: 1 addition & 1 deletion cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@codexclaw/cli",
"version": "0.2.44",
"version": "0.2.45",
"private": true,
"type": "module",
"description": "codexclaw CLI \u2014 status, subagent config, provider toggle, GUI launcher.",
Expand Down
84 changes: 84 additions & 0 deletions devlog/_plan/261027_issue_sweep/000_plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# 000 — issue_sweep: Plan

Five open issues (#313 #301 #297 #296 #294) and a dead `preview` branch name in CI
config get closed out in one pass. Contributors stop paying a badge-bump commit per PR
(#301), the full local suite stops failing on machines with long checkout or temp paths
(#297, and the same bug in worktree-guard found while reproducing #296), and the
PABCD Audit phase gains three rules that keep re-audits converging. `main` is kept:
`codex plugin marketplace add` without `--ref` installs the default branch, so `main`
is the release channel.

## Loop-spec

- Loop archetype: spec-satisfaction (tests, inventory check, hosted CI define done).
- Trigger: user request in session 01a17d48 (cxc-loop, merge into dev, no preview).
- Goal: issues closed, preview references gone, PR merged into dev with green CI.
- Non-goals: deleting `main`; release-flow changes; version bump; new config settings;
reviewer-tier rule, fresh-reviewer rotation, rebuttal-outcome ledger, mechanical
rebuttal-evidence gate (#294 items rejected with the user); open PRs #305 #312.
- Verifier: see 010 §Verification (commands run in P or audit r1 carry their exit codes;
rows marked "to run in B/C" have not run against the change yet).
- Stop condition: PR merged into dev, issues closed with comments.
- Memory artifact: this unit + goalplan `codexclaw-issue-sweep-lidge-jun-codexclaw-hotl-v`.
- Expected terminal outcomes: DONE (merged, closed); BLOCKED (CI red for out-of-scope
reasons); NEEDS_HUMAN (a decision beyond the agreed rules).
- Escalation: any change to release.yml / release-gate.ts semantics, or #296
reproducing in a way that needs harness changes beyond tests.
- Write scope: files listed in 010. Push, PR and merge into dev authorized by the user
this session. Budget: none stated; host limits apply.
- Class: wp1 is C3 (CI contract change in inventory.mjs, docs contract). Release
semantics are untouched, so not C4 (architect flagged #301 as release-sensitive;
main disposition: the release gate path is unchanged and re-verified by its tests).

## Work-phase map

| WP | Doc | Slice | Depends on |
|----|-----|-------|------------|
| wp1 | 010_phase1.md | preview cleanup, #301, #297 (+worktree-guard), #296 verdict, #294 docs, #313 close | — |

## Architect consultation

- Handle: agent 01a17d54-21dc-71e2-99f7-96a4985b73b5 (gpt-6.1-sol, high), read-only,
cxc-dev + cxc-dev-architecture attached. Proposal D1–D7 (PROPOSAL-END received).
- D1 branch policy stays with existing owners — ACCEPT.
- D2 `--tests-mode exact|floor`, default exact, used only by ci.yml — ACCEPT
(over `--tests-floor N`: one measured-value interface).
- D3 `check()` returns additive `notices[]`; the CLI prints `::notice::` with the literal
write command; floor success text no longer claims "matches" — ACCEPT.
- D4 release.yml / release-gate.ts untouched; release.md step 3 explains lag — ACCEPT.
- D5 placeholder-normalized affordance budget — ACCEPT, AMENDED: the same fix applies
to worktree-guard.test.ts:277 (context embeds `rig.slotRoot` under os.tmpdir(); fails
alone on this mac, tmpdir = /var/folders/.../goat-threads-*/…). Precedent for
path-aware budgets: git-write-guard.test.ts:124.
- D6 diagnose before choosing test vs harness — ACCEPT. Evidence: see 010 §#296.
- D7 guidance in phase-audit.md + loop-engineering.md only — ACCEPT.
- Reflection: see 010 §Reflection.

## Audit synthesis (REVIEW-SYNTHESIS-01)

Round 1, reviewer 01a17d5a-54d4-7ad3-89b4-e26e711ceb88 (gpt-6.1-sol, high): FAIL, 2 blockers.

- B1 High — #296 reproduces on real Node 22.22.0 (8 cancelled). Root cause of the miss:
main's "Node 22" run went through the Vite+ `npm` launcher and ran Node 26. ACCEPT.
Main reproduced it (3 files, cancelled 8) and found the cause (unref'd awaited timers
under Node 22's runner). 010 §4 now fixes it test-scoped per architect D6. This stays
inside the plan's escalation boundary (no harness change needed).
- B2 High — AUDIT-REAUDIT-SCOPE-01 draft let a new High/Critical survive near-pass
without fold or rebuttal, contradicting phase-audit.md:3 and attest.ts:191. ACCEPT.
Wording now bounds only Low/Medium to residuals; a new High/Critical is folded,
rebutted under REBUTTAL-BASIS-01, or sends the work back to P. No conflict between
B1 and B2; neither conflicts with the user's rules (the nit-loop guard is preserved).
- Notes folded: CLI unknown-mode and notice-on-failure subprocess cases; 000 verifier
wording; test-count wording in 010.
- Architect recheck: not triggered — the #296 fix is the shape D6 already proposed; no
design decision changed.

## Accept criteria (mirrors goalplan c-1..c-6)

- c-1 `rg -n preview` over ci.yml, wsl.yml, closed-pr-branch-cleanup.{cjs,test.cjs} → no hits.
- c-2 floor mode: lag passes with a notice naming `--write --tests <N>`, overstatement
fails, default `--tests` stays exact; release-gate tests unchanged and green.
- c-3 l1-injections + worktree-guard budgets pass with long synthetic roots.
- c-4 full local `npm test` exit 0 on this mac (Node 26), plus a #296 verdict on Node 22.
- c-5 phase-audit.md / loop-engineering.md carry the three rules; same-reviewer reuse kept.
- c-6 PR merged into dev with green CI on its head; five issues closed with comments.
Loading
Loading