Commit Graph
313 Commits
Author SHA1 Message Date
github-actions[bot] fcba5370f0 Sync generated provider output 2026-07-30 00:37:20 +00:00
github-actions[bot] 48e665edf2 Sync generated provider output 2026-07-29 23:47:41 +00:00
github-actions[bot] 6be04d3fd3 Sync generated provider output 2026-07-29 23:46:05 +00:00
github-actions[bot] 7c32d42055 Sync generated provider output 2026-07-29 23:27:30 +00:00
github-actions[bot] 71d7b5e310 Sync generated provider output 2026-07-29 23:06:03 +00:00
github-actions[bot] 4554895edc Sync generated provider output 2026-07-29 21:56:07 +00:00
github-actions[bot] 6c1aff7d1f Sync generated provider output 2026-07-29 20:13:15 +00:00
Paul BakausandGitHub 88500a46df Merge pull request #431 from pbakaus/agent/bump-web-ext-10
Bump web-ext lint to v10
2026-07-29 13:13:00 -07:00
Paul BakausandGitHub 5f4b58d06d Merge pull request #433 from pbakaus/live-v2-rewrite
Live v2: root manifest, mount-ack protocol, AST scaffolder, mechanical accept
2026-07-29 13:12:23 -07:00
github-actions[bot] adf7d706fa Sync generated provider output 2026-07-29 00:08:20 +00:00
github-actions[bot] 9ee5c1b1df Sync generated provider output 2026-07-28 23:58:05 +00:00
github-actions[bot] f22286e5e0 Sync generated provider output 2026-07-28 23:43:31 +00:00
github-actions[bot] 85fd6b4498 Sync generated provider output 2026-07-28 23:27:13 +00:00
github-actions[bot] cb8144dd12 Sync generated provider output 2026-07-28 23:17:28 +00:00
github-actions[bot] dedb8a1df2 Sync generated provider output 2026-07-28 20:41:53 +00:00
github-actions[bot] abe722d105 Sync generated provider output 2026-07-28 20:27:43 +00:00
github-actions[bot] 14c27e43af Sync generated provider output 2026-07-28 16:48:59 +00:00
github-actions[bot] 60668224b1 Sync generated provider output 2026-07-28 16:48:18 +00:00
github-actions[bot] 042b81cb8d Sync generated provider output 2026-07-28 16:02:34 +00:00
github-actions[bot] 1cf7d7ab0f Sync generated provider output 2026-07-28 03:28:15 +00:00
github-actions[bot] d8f1deb35d Sync generated provider output 2026-07-28 03:06:14 +00:00
Paul BakausandClaude Fable 5 68b1129634 Release bumps: skill 4.0.3, CLI 3.4.0, extension 1.3.0, with synced output
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 19:17:09 -07:00
github-actions[bot] d3c7b05a3e Sync generated provider output 2026-07-28 01:56:22 +00:00
github-actions[bot] 806a48aef2 Sync generated provider output 2026-07-28 01:52:13 +00:00
github-actions[bot] 270f177d1d Sync generated provider output 2026-07-28 01:19:54 +00:00
github-actions[bot] f59c5223a4 Sync generated provider output 2026-07-28 01:13:37 +00:00
github-actions[bot] 69bf1e9523 Sync generated provider output 2026-07-28 01:11:27 +00:00
github-actions[bot] c3fe6d8064 Sync generated provider output 2026-07-28 01:06:14 +00:00
github-actions[bot] aef8cbac34 Sync generated provider output 2026-07-28 00:49:56 +00:00
github-actions[bot] 149d71a772 Sync generated provider output 2026-07-28 00:15:34 +00:00
github-actions[bot] f5827256d0 Sync generated provider output 2026-07-28 00:11:12 +00:00
github-actions[bot] a07e4ed787 Sync generated provider output 2026-07-28 00:03:34 +00:00
Paul BakausandClaude Code 5a85050230 fix: give the nightly schedule its own CI concurrency group
cursor[bot]: the schedule run shared github.ref with pushes to main, so
cancel-in-progress let the nightly full matrix and a main push cancel
each other. Scheduled runs now use a dedicated group.

This work was produced with AI assistance (Claude Code).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-27 16:55:18 -07:00
github-actions[bot] 5bec5408e5 Sync generated provider output 2026-07-27 22:52:08 +00:00
Paul Bakaus 2d66c9acf1 Merge origin/main into live-v2-rewrite
Resolves bun.lock (regenerated) and package.json (both sides' devDependency
changes kept: main's @babel/parser bump, this branch's svelte addition).
2026-07-27 15:22:51 -07:00
github-actions[bot] d7d07cb0d6 Sync generated provider output 2026-07-27 22:14:03 +00:00
Paul BakausandClaude Code 17dabf4b7e Live v2: root manifest, mount-ack protocol, AST scaffolder, mechanical accept
A ground-up hardening of live mode, driven by a production session in a
nested-app monorepo that hit six distinct failure classes. Full design
rationale in docs/LIVE-REWRITE-PLAN.md; every Codex-reported failure now
has a mechanical fix and a regression test.

Roots: live/roots.mjs resolves appRoot/repoRoot/contextRoot once at boot
(keyed on dev-server configs, not monorepo brand markers), persists a
manifest, and every live CLI re-anchors onto it at startup, so a helper
run from the wrong directory can no longer fork session state. Context
files are discovered upward to the git root.

Render truth: variant_mounted / variant_mount_failed events give the
journal per-variant mount state; failures reach the agent's poll queue,
raise a persistent error card with Retry (no more localStorage wipe), and
an attach probe names root/dev-server mismatches explicitly. The browser
rehydrates from the server when localStorage is gone.

Svelte: the scaffolder now parses with the app's own svelte 5 compiler.
Control flow survives (an each collection crosses the contract as one
structured prop), keyed each blocks hydrate synthetic keys, and anything
a detached preview cannot support falls back to source-preview instead of
shipping a wrong scaffold. Preview modules live in per-publish revision
directories, defeating stale transform caches.

Accept: CSS is reconciled, not appended. Matching selectors are replaced,
params bake from params.json kinds, the compiler's unused-selector pass
prunes superseded rules (pre-existing dead rules protected), a selector-
loss postcondition refuses any write that would drop hand-written rules,
and live-complete refuses to finish while live plumbing remains in source.

Also: framework registry (live/frameworks/) with a crash-safe injection
journal, session-store snapshot caching with read-only reads, protocol
enum consolidation, steer Send button, honest DESIGN-panel empty states.

Testing: new unit suites (roots, AST scaffolder, accept CSS, accept
pipeline, framework conformance); e2e now fails on preview-tree 404s,
proves computed-style mount for every variant, drives the Tune panel
through baked params, and injects failures (broken mounts, republish,
storage loss). New runtime fixtures: monorepo-nested-vite (repo root !=
app root) and vite8-sveltekit-stateful (each blocks + state). Nightly
full-matrix cron. An independent adversarial review pass preceded this
commit; its blocker and major findings are fixed and regression-tested.

This work was produced with AI assistance (Claude Code).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-27 15:09:40 -07:00
Paul Bakaus 5e43ecd3fb Bump web-ext lint to v10
Prepared with AI assistance from OpenAI Codex under maintainer automation instructions.
2026-07-27 10:12:24 -07:00
github-actions[bot] 839dd10079 Sync generated provider output 2026-07-27 17:07:25 +00:00
Paul BakausandGitHub 5e572c8b8a Merge pull request #423 from pbakaus/hook-guard-unsupported-node
Stop the design hook erroring on a node too old for ESM
2026-07-26 18:12:52 -07:00
Paul BakausandGitHub 46e759b4db Merge pull request #420 from pbakaus/sync-output-push-retry
Sync workflow: retry the generated-output push when main advances mid-sync
2026-07-26 18:10:00 -07:00
github-actions[bot] 7380ecb153 Sync generated provider output 2026-07-27 01:09:00 +00:00
fd9076f4f0 Enforce the engines floor in the probe instead of a capability check
The probe asked whether node could load ESM, while the notice promised a
Node 22 floor and package.json engines declares >=22.12.0. Reviewers kept
flagging the gap, and they were right to: a 14.18-to-21 runtime passed the
probe on the strength of one import while the hook and its detector bundle
are only ever exercised on the engines floor, so "can load our code" was a
weaker claim than the one being made for it.

Check the floor directly: parseInt(process.versions.node) >= 22, in
ES5-only syntax that parses on any node old enough to fail it. Probe and
notice now derive from one NODE_MAJOR_FLOOR constant, so they cannot
disagree, and the archaeology about node: scheme support and pre-15
unhandled-rejection semantics goes with the import it explained.

Add the missing contract test: every generated hook command carries the
probe, the notice appears exactly where a harness can render it (Claude
and Codex, project and plugin), and the expected floor is read from
package.json engines rather than repeated by hand.

Verified against a fake pre-22 node, no node, and a real node: one notice
then the marker holds it silent, exit 0 in every failure shape, and the
hook's own exit code still passes through on a supported runtime.

Co-Authored-By: Claude Fable 5 (via Cursor) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 22:17:19 +05:00
Abdul WahabandClaude Opus 5 86cdf528c5 Probe the import the hook actually uses, and fail closed on rejection
Greptile flagged that the probe does not enforce the Node 22 engines floor.
Two parts to that, and they land differently.

The real defect is narrower and worse than stated: the hook closure imports
`node:fs`, `node:os`, `node:path` and `node:url`, and the `node:` scheme needs
14.18, so a bare `import('fs')` probe passed on 12 and 13 and those runtimes
then died on the real import, which is the banner this branch exists to remove.
Probing `node:fs` closes that. The added `.catch(()=>process.exit(1))` is load
bearing rather than tidiness: before Node 15 an unhandled rejection is only a
warning and the process still exits 0, so a rejected probe would have read as a
pass on exactly the versions in question.

Not enforcing 22 is deliberate and stays. The probe asks whether this runtime
can load our code, not whether it is a supported one, so a 14.18-to-21 runtime
that works today keeps working rather than being silently switched off. The
notice names 22 because that is the version worth installing, and it only ever
reaches someone whose runtime already failed the probe, so no user is shown a
threshold that contradicts what ran.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 21:20:26 +05:00
Abdul WahabandClaude Opus 5 0c19098754 Guard the remaining harness manifests against a dead node runtime
Bugbot caught the Codex plugin builder still invoking node directly, and the
same reasoning covers GitHub Copilot and Grok Build: all three shipped the
exact failure this branch exists to stop, and sat visibly inconsistent with
their guarded siblings.

Route them through guardedNode with no notice, matching Codex and Cursor.
GitHub gains a second property from it: outside a git repository
`$(git rev-parse --show-toplevel)` expands to nothing, so the old command
handed node a path that could not exist and failed the turn. The file test
now short-circuits that to exit 0.

Every builder carries the probe; only the two Claude manifests carry the
notice, which is the only harness whose response shape is confirmed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 20:58:49 +05:00
Paul BakausandClaude Code 166ec9a51e Make the job summary reflect whether a sync commit actually pushed
Both bots caught the same false report: the summarize step ran off the
initial drift flag, so the no-drift-after-rebuild exit still claimed a
commit landed on main. The commit step now records pushed=true/false in
its step output and the summary reads it.

Prepared with AI assistance (Claude Code), directed by @pbakaus.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-25 19:53:39 -07:00
Paul BakausandClaude Code bea601ac76 Skip the pointless final-attempt rebuild; stop misattributing push failures
Copilot's two review points: the fifth attempt performed a full
reset + install + rebuild + 25s backoff that nothing would ever consume
before the job failed, and the retry message blamed "main advanced"
when the combined condition also fails on push errors (network, auth).
The loop now breaks before recovery on the final attempt, and both the
retry and terminal messages name the two possible causes.

Prepared with AI assistance (Claude Code), directed by @pbakaus.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-25 19:43:03 -07:00
Paul BakausandClaude Code dfd7f9636d Retry the generated-output push when main advances mid-sync
The sync workflow built once from the checked-out main and aborted when
a human commit landed during the ~30s build window (about 10% of runs
per the evidence in issue #388), leaving generated provider output
stale until the next unrelated push re-triggered it.

The commit step now loops up to five times: on a lost race it resets
hard to the fresh origin/main (source included), re-installs and
rebuilds, and pushes again with linear backoff. Every attempt therefore
builds from the main it will land on, which is the invariant the old
abort guard protected; the merge-base check stays inside the loop as
the pre-push verification. When the rebuilt output shows no drift (the
racing commit was another sync, or the new source produces identical
output) the step exits cleanly instead of committing an empty sync.

Validated by yaml-lint, bash -n, and a local three-repo simulation
(bare origin + worker + racer) confirming the lost race rebuilds
against the racer's source and lands matching output on attempt two.

Retry design proposed by @mktdgtbrz in #388; implemented from the
description with the no-drift early exit added.

Prepared with AI assistance (Claude Code), directed by @pbakaus.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-25 19:37:01 -07:00
github-actions[bot] d272b9bd5d Sync generated provider output 2026-07-26 02:16:50 +00:00
github-actions[bot] 108b13f346 Sync generated provider output 2026-07-26 01:42:20 +00:00