Commit Graph
446 Commits
Author SHA1 Message Date
Paul BakausandClaude Code 1e19e1838c Merge origin/main into rust-swap (#720 live loader handoff)
The page-side commits are identical on both sides. main's
tests/live-browser-regression.test.mjs stays deleted here: it imports
skill/scripts/live/ui-surfaces.mjs, a Node module this branch retired,
and the invariants #720 added to it are pinned by
tests/live-browser-source.test.mjs on both branches.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-04 09:59:30 -07:00
github-actions[bot] 695df68a58 Sync generated provider output 2026-09-04 09:31:58 +00:00
Paul BakausandClaude Code eac24af113 Merge origin/main into rust-swap (#716 orphaned-session fix)
Restores tests/live-browser-source.test.mjs from main: the page JS it
pins is unchanged by the engine swap and the file passes as-is.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 17:43:35 -07:00
github-actions[bot] fbc5c95355 Sync generated provider output 2026-09-03 23:54:25 +00:00
Paul BakausandClaude Fable 5.1 dde3067524 hook test: the stock cache path in the host's path form; Windows CI runs every crate's tests before failing
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 14:00:51 -07:00
Paul BakausandClaude Fable 5.1 c5adf55bc8 CI: the first full run on the branch, three fixes
- The oracle harness masks the climb to the root a /-prefixed target
  produces (<UP_TO_ROOT>/): the number of `../` is the staged tmpdir's depth
  (7 on macOS, 2 on Linux), not the verb's behavior. surface-brief-path-slash
  re-recorded.
- Two context test helpers canonicalized their temp dir, which on Windows
  yields a \\?\ verbatim path that takes `/` literally; they strip the prefix
  like Node's realpathSync. The critique-storage identity test compares
  against the platform's own resolved path.
- Every job that drives the binary end to end (live-e2e smoke and full,
  accept-cleanup, the DeepSeek sweep, the remote CLI smoke) builds it from
  the checkout first; before, they looked for a release that does not exist.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 13:37:26 -07:00
Paul BakausandClaude Fable 5.1 0375e219f1 Merge origin/main into rust-swap
Textual merge only. The JS engine and skill scripts stay deleted on this
branch; every behavior change they carried is ported to the Rust crates in
the commits that follow.

Conflict resolutions:
- skill/SKILL.src.md, skill/reference/new-work.md: main's new wording, with
  the branch's launcher invocations kept in place of `node <script>.mjs`.
- scripts/test-suites.mjs: registers main's new build-tooling tests
  (copy-provider-commands, root-commands-sync, opencode-commands) and leaves
  the tests for deleted JS modules deregistered.
- Every modify/delete conflict under cli/engine, cli/bin/commands,
  skill/scripts/*.mjs and tests/ for deleted modules keeps the deletion.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 12:01:19 -07:00
Paul BakausandClaude Fable 5.1 4369ad538d Open the detector: the rule crates join the workspace, the C-ABI goes away
The detector is open source. The rules it ships were already public in this
repo's git history and in every npm tarball of the JS engine, so a closed
binary bought nothing it could keep; the moat is the service (the catalog,
the labs, the review pipeline), not the check functions. Keeping them behind
a prebuilt archive cost a C-ABI, an exact toolchain pin, a build-time
download, a second release to order ahead of every engine release, and a
serde layer that had to serve two encodings.

Deleted
- crates/core/src/ffi.rs, crates/core/build.rs, crates/core/tests/boundary.rs
  and the shim modules under src/checks and src/browser.
- crates/foundation/src/boundary.rs and the postcard dependency.
- DETECTOR_VERSION, scripts/check-detector-release.mjs and its test, the
  check:detector-release script, the detector gate and
  IMPECCABLE_SKIP_DETECTOR_CHECK in scripts/release.mjs.
- scripts/lib/detector-bundle.mjs and tests/detector-bundle.test.mjs (the
  vendoring path for the closed browser bundle).
- scripts/build-browser-detector.js and the build:browser script (a stub
  since the JS engine left the tree).
- xtask's detector-archive subcommand and its public-repo lookup.

Came back
- crates/core is now the rule logic itself: every check_* / scan_*, the
  browser adapters, the visual-contrast decisions. It re-exports foundation
  as before, so no consumer changed. Its vectors dispatcher is the union of
  both id tables again, and tests/vectors.rs replays the frozen vectors
  straight through it.
- crates/wasm and crates/xtask join the workspace. cargo xtask bundle builds
  the in-page bundle from browser-bundle/ plus the wasm core, writes
  dist/, refreshes the tracked crates/live/assets/detect-antipatterns-
  browser.js, and writes extension/detector/. bun run build:extension runs
  it instead of downloading.
- crates/live/assets/detect-antipatterns-browser.js is tracked again; live
  mode embeds it and serves it as /detect.js.
- Serde is back to plain derives: no is_human_readable branch in
  js::json_number, derived Serialize for Rgba and BrowserFinding with their
  skip_serializing_if attributes.
- profile.release has lto = "fat" again; rust-toolchain.toml is plain
  stable plus the wasm32 target. The rust, rust-windows and oracle CI jobs
  lose continue-on-error and can be required.

Verified
- cargo build --workspace --all-targets: clean, no warnings.
- cargo test --workspace: 346 pass, 0 fail (the 8 boundary tests are gone
  with the boundary).
- cargo build -p impeccable-wasm --target wasm32-unknown-unknown --release: ok.
- cargo xtask bundle && cargo xtask bundle --check: reproducible; the
  regenerated bundle is committed (it differs from the archived one, which
  was built with a pinned rustc and lto = false).
- cargo build --release -p impeccable: no linker warnings, 12.5 MB (the
  same source at lto = false is 13.1 MB).
- oracle: 795 pass, 0 fail, 0 accepted deltas, 0 missing goldens.
- bun run build, bun run build:extension, web-ext lint (0 errors,
  8 warnings), bun run test: 363 + 80 + 1 + 1 + 133 + 180 + 4 pass, 0 fail.
- impeccable detect --no-config --json tests/fixtures/antipatterns: 128.7 ms
  median of 5.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 09:11:33 -07:00
github-actions[bot] fcc271c1cb Sync generated provider output 2026-09-03 15:54:21 +00:00
github-actions[bot] 5a7e2837d2 Sync generated provider output 2026-09-03 02:19:41 +00:00
github-actions[bot] 1e36c86315 Sync generated provider output 2026-09-03 01:29:47 +00:00
github-actions[bot] 0330f61cef Sync generated provider output 2026-09-02 19:46:15 +00:00
github-actions[bot] 54f0e641c6 Sync generated provider output 2026-09-02 18:11:19 +00:00
Paul BakausandClaude Fable 5.1 298194f787 release-engine: darwin-x64 builds on macos-14 (macos-13 is retired)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-02 08:03:20 -07:00
Paul Bakaus c0f4952122 Release: skill v4.1.3
AI-assisted release preparation under maintainer direction.
2026-09-01 17:26:46 -07:00
github-actions[bot] 1c137cd8d2 Sync generated provider output 2026-09-02 00:21:36 +00:00
github-actions[bot] 4981192613 Sync generated provider output 2026-09-01 23:06:17 +00:00
github-actions[bot] 74cf3ec605 Sync generated provider output 2026-09-01 22:47:06 +00:00
github-actions[bot] 6f6af815af Sync generated provider output 2026-09-01 22:02:32 +00:00
github-actions[bot] a70acd2823 Sync generated provider output 2026-09-01 21:10:03 +00:00
Paul BakausandClaude Fable 5.1 e355ebf714 reorg: public plumbing for the in-repo Rust workspace and the two-release flow
The engine binaries move from the impeccable-dist channel to this repo's own
GitHub Releases (tag engine-v<ENGINE_VERSION>), and the closed detector the
engine links arrives as detector-v<DETECTOR_VERSION> releases on the same
repo. This commit wires the public side for that; the crates themselves land
in the next commit.

- Launcher (sh + cmd), npm shim, fetch-engine and check-engine-release now
  download from github.com/pbakaus/impeccable/releases/download/engine-v<X>/.
- release.mjs gains `engine`: verifies ENGINE_VERSION against the platform
  package pins and the detector release, tags, pushes; release-engine.yml
  builds the five targets and publishes. check-detector-release.mjs is the
  matching release-order guard (with tests).
- Root Cargo.toml (workspace, lto = false with the reason), rust-toolchain.toml
  (exact pin), DETECTOR_VERSION, /target ignored.
- CI: rust + rust-windows jobs and an oracle job that replays the goldens
  against a source build, warn-only until the first detector release exists;
  ci-test-plan exposes a `rust` output.
- docs/ENGINE.md (the crate map and the closed-detector mechanism) and the
  CLAUDE.md engine, release-order and rules sections.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-01 14:05:39 -07:00
github-actions[bot] 94b7f34f6e Sync generated provider output 2026-09-01 04:23:23 +00:00
github-actions[bot] 2c8816a3ce Sync generated provider output 2026-09-01 04:01:22 +00:00
github-actions[bot] 5b585c0885 Sync generated provider output 2026-09-01 03:49:18 +00:00
github-actions[bot] 40b5151237 Sync generated provider output 2026-09-01 03:28:21 +00:00
Paul Bakaus aa65db332d Enforce engine-before-skill release order (triage D4)
The launcher, npm shim, and `impeccable install` all resolve the engine
binary for the pinned ENGINE_VERSION, so a skill/CLI release or a rust-swap
merge published ahead of the engine release + platform packages dead-ends
every install path. Add a mechanical guard:

- scripts/check-engine-release.mjs: verifies all five dist binaries +
  .sha256 and the five @impeccable/cli-<os>-<arch> npm platform packages
  exist for the pinned ENGINE_VERSION; names missing assets, exits non-zero.
  Honors IMPECCABLE_DOWNLOAD_BASE.
- release.mjs: hard-fails release:skill and release:cli when assets are
  missing; extension is exempt (vendored WASM detector, no engine exec).
- CI engine-release-ready job: runs the check, continue-on-error with a
  loud ::warning until the first engine release exists (flip to false then).
- CLAUDE.md Releases: documents the enforced ordering.

Prepared with AI assistance (Claude Code).
2026-08-31 20:00:04 -07:00
Paul Bakaus aeb8f29a64 Launcher: engine-probe PATH validation, working .cmd download path; CI: drop stale path, add oracle job
Byte-identical copies of the engine repo's launchers (engine main
af7572c): the retired 3.x npm CLI on PATH or in ~/.impeccable/bin is
rejected by the engine-probe handshake instead of hijacking every verb;
impeccable.cmd's download path is rewritten as straight-line goto flow
(the parenthesized blocks expanded %url%/%cached% at parse time, making
it dead code) with certutil sha256 verification and a windows-arm64 ->
x64 asset fallback; the final error points at the release download
instead of npm i -g (npm still serves the 3.x CLI).

ci.yml: the generated-output check no longer diffs the deleted
cli/engine/detect-antipatterns-browser.js, and a new oracle job fetches
the pinned engine (bun run fetch:engine) and replays tests/oracle/
against it. The job is continue-on-error with a loud warning until the
first engine release exists; flipping it to required is a release-time
toggle, documented in the workflow.

Verified here: sh -n on both launcher copies, bun run build green, full
oracle replay against the rebuilt engine binary green (770 pass, 0
fail), and a launcher behavior test proving a fake 3.x CLI on PATH is
skipped while the download + checksum chain completes against a local
file server.

Prepared with AI assistance (Claude Code).
2026-08-31 20:00:04 -07:00
github-actions[bot] d3f4cc8f4b Sync generated provider output 2026-09-01 02:43:18 +00:00
github-actions[bot] 0bc8643b51 Sync generated provider output 2026-09-01 00:11:15 +00:00
github-actions[bot] 4cc9578a3d Sync generated provider output 2026-08-31 23:34:40 +00:00
github-actions[bot] 52139bc8d3 Sync generated provider output 2026-08-31 23:22:14 +00:00
github-actions[bot] 61a2d230fd Sync generated provider output 2026-08-31 23:21:27 +00:00
github-actions[bot] 205643cf7a Sync generated provider output 2026-08-31 23:08:20 +00:00
Paul Bakaus ee1442d7af Improve PR sheriff queue flow
Make policy and merge-conflict blockers age as contributor work, keep maintainer-policy decisions out of ready state, auto-close regular contributors unless explicitly exempted, and mark new or reopened issues for triage.

AI-assisted change: implemented and validated by Codex under maintainer direction.
2026-08-31 15:47:32 -07:00
github-actions[bot] 5b5fdc12f3 Sync generated provider output 2026-08-31 22:22:06 +00:00
github-actions[bot] e92bf2b774 Sync generated provider output 2026-08-31 20:32:06 +00:00
github-actions[bot] b0594c72d1 Sync generated provider output 2026-08-29 00:58:57 +00:00
github-actions[bot] ea360025b5 Sync generated provider output 2026-08-28 13:39:10 +00:00
github-actions[bot] 09506a9bb5 Sync generated provider output 2026-08-28 10:15:23 +00:00
github-actions[bot] 0c2517884d Sync generated provider output 2026-08-28 10:02:05 +00:00
github-actions[bot] 31dcc687c6 Sync generated provider output 2026-08-28 02:14:29 +00:00
github-actions[bot] f86473ba7d Sync generated provider output 2026-08-28 00:53:54 +00:00
github-actions[bot] 1df992ade0 Sync generated provider output 2026-08-28 00:44:04 +00:00
380cfcb08e Release: skill v4.1.2
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 11:02:54 +05:00
github-actions[bot] ba68dce41e Sync generated provider output 2026-08-26 05:31:15 +00:00
github-actions[bot] fcd7622cd2 Sync generated provider output 2026-08-25 12:17:17 +00:00
github-actions[bot] 1159100c96 Sync generated provider output 2026-08-25 11:17:54 +00:00
github-actions[bot] 5d00e30405 Sync generated provider output 2026-08-24 02:52:15 +00:00
github-actions[bot] c3ea1c79f5 Sync generated provider output 2026-08-24 02:18:59 +00:00
github-actions[bot] c39b6425fa Sync generated provider output 2026-08-23 23:33:14 +00:00