Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
954 commits
Select commit Hold shift + click to select a range
34af358
chore(release): cut v3.4.3 (global-event binder no-DOM guard + harden…
claude Jun 24, 2026
1f9346a
Merge pull request #9 from monstercameron/loop/correctness-hardening-3
monstercameron Jun 24, 2026
067b687
test(shorthand): MapKeyedComponent renders through SSR (RenderToString)
claude Jun 24, 2026
1e69df3
test(css): global/root rules participate in SSR seed-suppression
claude Jun 24, 2026
a6dba1a
fix(state): remove duplicate ExampleUseAtom that broke the wasm test …
claude Jun 24, 2026
a784a5b
chore(release): cut v3.4.4 (state wasm-build fix + SSR hardening tests)
claude Jun 24, 2026
e90f799
Merge pull request #10 from monstercameron/loop/correctness-hardening-4
monstercameron Jun 24, 2026
a006336
fix(diagnostics): wasm test build broken by native-only WriteHTTPErro…
claude Jun 24, 2026
81d9b04
chore(release): cut v3.4.5 (diagnostics wasm test-build fix)
claude Jun 24, 2026
a768292
Merge pull request #11 from monstercameron/loop/correctness-hardening-5
monstercameron Jun 24, 2026
4230705
test(ui): fuzz CSSEscape for panic-safety and invariants
claude Jun 24, 2026
718dfd3
fix(css): NUL-byte bypass of <style>/comment-close hardening (security)
claude Jun 24, 2026
446527a
chore(release): cut v3.4.6 (security: hardenCSS NUL-byte breakout fix)
claude Jun 24, 2026
923a486
Merge pull request #12 from monstercameron/loop/correctness-hardening-6
monstercameron Jun 24, 2026
60b183d
test(css): fuzz Var() for var() injection-safety
claude Jun 24, 2026
59fc9be
test(html): fuzz RawHTML sanitization for XSS breakout
claude Jun 24, 2026
d9b3dcb
Merge pull request #13 from monstercameron/loop/correctness-hardening-7
monstercameron Jun 24, 2026
b74c0ca
test(css): fuzz New+Raw emit path for <style>/comment breakout
claude Jun 24, 2026
14f8106
test(html): fuzz RenderMarkdown for XSS sanitization
claude Jun 24, 2026
76ab94b
test(css): fuzz New order-independence (determinism invariant)
claude Jun 24, 2026
468c905
Merge pull request #14 from monstercameron/loop/correctness-hardening-8
monstercameron Jun 24, 2026
9dc8187
test(state): fuzz snapshot JSON round-trip fixpoint + decode robustness
claude Jun 24, 2026
6080cda
Merge pull request #15 from monstercameron/loop/state-roundtrip-harde…
monstercameron Jun 24, 2026
19136a9
test(ui): fuzz SSR bootstrap script-breakout invariant
claude Jun 24, 2026
b61a0ca
Merge pull request #16 from monstercameron/loop/ssr-breakout-hardening
monstercameron Jun 24, 2026
515fe2d
security(render): block javascript:/vbscript: URLs in element attribu…
claude Jun 24, 2026
0cc03ce
Merge pull request #17 from monstercameron/loop/sec-url-sanitization
monstercameron Jun 24, 2026
10e9d49
test(ui,runtime): port React attribute-serialization invariants
claude Jun 25, 2026
a31eddc
Merge pull request #18 from monstercameron/loop/attr-serialization-tests
monstercameron Jun 25, 2026
26e33b6
test(ui): port React text-content escaping invariants
claude Jun 25, 2026
6971a95
Merge pull request #19 from monstercameron/loop/text-escaping-tests
monstercameron Jun 25, 2026
63604a7
test(ui): lock in HTML void-element serialization
claude Jun 25, 2026
076b615
Merge pull request #20 from monstercameron/loop/void-element-tests
monstercameron Jun 25, 2026
eab5cb2
test(ui): native reconciler harness + keyed-reconciliation invariants
claude Jun 25, 2026
6b88cdf
Merge pull request #21 from monstercameron/loop/native-reconciler-har…
monstercameron Jun 25, 2026
ecde100
test(ui): native reconciler update/unmount/tag-change invariants
claude Jun 25, 2026
16ccf16
Merge pull request #22 from monstercameron/loop/reconciler-update-tests
monstercameron Jun 25, 2026
09eb736
test(ui): native hook-behavior suite through the real reconciler
claude Jun 25, 2026
fa8d6af
Merge pull request #23 from monstercameron/loop/native-hook-tests
monstercameron Jun 25, 2026
e9d8ae7
test(ui): native effect-lifecycle suite
claude Jun 25, 2026
bf4004a
Merge pull request #24 from monstercameron/loop/native-effect-tests
monstercameron Jun 25, 2026
167dd02
test(ui): native context-propagation suite
claude Jun 25, 2026
5b2baba
Merge pull request #25 from monstercameron/loop/native-context-tests
monstercameron Jun 25, 2026
979d0db
test(ui): native conditional (nil-render) mount toggle
claude Jun 25, 2026
7eae5cb
fix: call state getter parseShow() in conditional render test
claude Jun 25, 2026
c14e3a0
Merge pull request #26 from monstercameron/loop/native-conditional-tests
monstercameron Jun 25, 2026
452e103
fix(reconciler): duplicate keys leaked host nodes and corrupted later…
claude Jun 25, 2026
e04d25a
Merge pull request #27 from monstercameron/loop/fix-duplicate-key-leak
monstercameron Jun 25, 2026
3458944
test(ui): React parity — effect ordering + fragments (+ coverage map)
claude Jun 25, 2026
1b4f3ca
Merge pull request #28 from monstercameron/react-parity/effects-fragm…
monstercameron Jun 25, 2026
dffdc9c
test(ui): React parity — DOM refs + useRef contract
claude Jun 25, 2026
756ca1f
Merge pull request #29 from monstercameron/react-parity/refs-useref
monstercameron Jun 25, 2026
a5f32d3
test(ui): React parity — functional updates, stable setter, set-after…
claude Jun 25, 2026
15060dd
Merge pull request #30 from monstercameron/react-parity/hook-updates
monstercameron Jun 25, 2026
ee610cf
test(ui): React parity — Children normalization + createElement assembly
claude Jun 25, 2026
86fcab2
Merge pull request #31 from monstercameron/react-parity/children-crea…
monstercameron Jun 25, 2026
cc5bffb
fix(ssr): controlled <textarea value> renders as text content, not at…
claude Jun 25, 2026
ca9759b
Merge pull request #32 from monstercameron/react-parity/fix-textarea-ssr
monstercameron Jun 25, 2026
2ceaf8d
fix(ssr): controlled <select value> marks the selected option (v3.4.10)
claude Jun 25, 2026
29372c1
Merge pull request #33 from monstercameron/react-parity/fix-select-ssr
monstercameron Jun 25, 2026
1bd359b
test(ui): React parity — SSR components/refs + multi-consumer context
claude Jun 25, 2026
a63023b
Merge pull request #34 from monstercameron/react-parity/ssr-component…
monstercameron Jun 25, 2026
a2b1dd6
test(ui): document SSR hook-context boundary (ReactDOMServerIntegrati…
claude Jun 25, 2026
96a0445
Merge pull request #35 from monstercameron/react-parity/ssr-hooks-bou…
monstercameron Jun 25, 2026
ddad5c3
feat(ssr): run hooks during server rendering (v3.5.0)
claude Jun 25, 2026
e3f8ef5
Merge pull request #36 from monstercameron/react-parity/ssr-hooks
monstercameron Jun 25, 2026
342dd80
feat(ssr): thread context to hooks in streaming SSR (v3.5.1)
claude Jun 25, 2026
5480630
Merge pull request #37 from monstercameron/react-parity/ssr-stream-co…
monstercameron Jun 25, 2026
d4f1162
test(ui): React parity — StartTransition applies updates
claude Jun 25, 2026
6e463a9
Merge pull request #38 from monstercameron/react-parity/transitions
monstercameron Jun 25, 2026
5910fc4
test(ui): React parity — child state isolation + automatic bailout
claude Jun 25, 2026
08b862b
Merge pull request #39 from monstercameron/react-parity/state-isolation
monstercameron Jun 25, 2026
6b66d4b
docs: reconcile React parity coverage map
claude Jun 25, 2026
b4993fb
Merge pull request #40 from monstercameron/react-parity/map-cleanup
monstercameron Jun 25, 2026
906df81
docs: mark hydration covered + add parity status summary
claude Jun 25, 2026
b8edd53
Merge pull request #41 from monstercameron/react-parity/map-status
monstercameron Jun 25, 2026
863950e
test(ui): React parity — dangerouslySetInnerHTML / RawHTML in SSR
claude Jun 25, 2026
f068c73
Merge pull request #42 from monstercameron/react-parity/raw-html-ssr
monstercameron Jun 25, 2026
0a4202b
test(ui): deepen attribute parity (name normalization, omission, styles)
claude Jun 25, 2026
dc8690c
Merge pull request #43 from monstercameron/react-parity/deepen-attrib…
monstercameron Jun 25, 2026
5dc127d
test(ui): deepen Children parity (count/flatten across shapes)
claude Jun 25, 2026
1f3746e
Merge pull request #44 from monstercameron/react-parity/deepen-children
monstercameron Jun 25, 2026
97b0962
fix(ssr): map defaultValue/defaultChecked to controlled value in SSR …
claude Jun 25, 2026
f9ecf3b
Merge pull request #45 from monstercameron/react-parity/fix-default-v…
monstercameron Jun 25, 2026
6237506
test(ui): deepen context parity (multiple independent contexts)
claude Jun 25, 2026
d72ceb2
Merge pull request #46 from monstercameron/react-parity/deepen-context
monstercameron Jun 25, 2026
83c5008
test(ui): deepen effects parity (multiple effects, deps, ordering)
claude Jun 25, 2026
0153aca
Merge pull request #47 from monstercameron/react-parity/deepen-effects
monstercameron Jun 25, 2026
e6d7af3
test(ui): deepen keyed reconciliation (complex moves)
claude Jun 25, 2026
74a3262
Merge pull request #48 from monstercameron/react-parity/deepen-keyed-…
monstercameron Jun 25, 2026
944650b
fix(state): converge render-phase updates instead of committing stale…
claude Jun 25, 2026
f2566e3
Merge pull request #49 from monstercameron/react-parity/fix-render-ph…
monstercameron Jun 25, 2026
d2f60b1
test(ui): lock in state-management semantics (vs React)
claude Jun 25, 2026
caf7dbe
Merge pull request #50 from monstercameron/react-parity/state-semantics
monstercameron Jun 25, 2026
6385d56
fix(state): don't drop effects under render-phase convergence (v3.5.4)
claude Jun 25, 2026
cab0d20
Merge pull request #51 from monstercameron/react-parity/fix-render-ph…
monstercameron Jun 25, 2026
5b7ff78
feat(ui): add ui.Run one-line entrypoint + interop.KeepAlive shared p…
claude Jun 27, 2026
d8cb80a
feat(gwc): singleton guard for dev/serve long-lived servers
claude Jun 27, 2026
da70b59
feat(gwc): hook-context static analyzer in gwc check
claude Jun 27, 2026
961db0b
fix(ci): release go-get smoke validates GoWebComponents, not GoGRPCBr…
claude Jun 27, 2026
717d32c
docs: typed css/u + ui.Run showcase; V4 competitive analysis + framew…
claude Jun 27, 2026
181066e
feat(state): fine-grained Signal[T] + Computed reactivity primitive (V4)
claude Jun 27, 2026
74c4be4
feat(html): BindTo/BindFunc two-way binding for any Get/Set handle
claude Jun 27, 2026
36f3759
feat(hookcheck): detect conditional hooks; name the symbol + specific…
claude Jun 27, 2026
b7b4d41
feat(gwc): add `gwc supplychain` zero-npm supply-chain audit
claude Jun 27, 2026
b58efa9
feat(gwc): add `gwc llms` AI-native docs generation
claude Jun 27, 2026
b523c32
chore(docs): publish generated llms.txt + llms-full.txt at repo root
claude Jun 27, 2026
65c244d
feat(validate): dependency-free shared struct-tag validator
claude Jun 27, 2026
25c8e1c
docs(plan): record V4 implementation status (FA1, FB7, C3, FC2, FB3, …
claude Jun 27, 2026
fb5d01e
feat(gwc): add `gwc routes gen` typed route link codegen
claude Jun 27, 2026
387655b
feat(ui): Form.ValidateStruct for turnkey shared validation
claude Jun 27, 2026
ede7fd2
docs(plan): mark routes-gen + Form.ValidateStruct shipped in V4 status
claude Jun 27, 2026
fa7811a
feat(query): stable query/data layer (dedupe + SWR + optimistic rollb…
claude Jun 27, 2026
938b9d3
docs: record query layer + Form.ValidateStruct in CHANGELOG and V4 st…
claude Jun 27, 2026
f182212
feat(ui): UseQuery/UseMutation hooks over the query layer
claude Jun 27, 2026
2083d2d
docs: note UseQuery/UseMutation hooks in CHANGELOG and V4 status
claude Jun 27, 2026
a1cfbdd
feat(gwc): add `gwc i18n gen` — typed, compile-checked message accessors
claude Jun 27, 2026
7d5e85a
docs: record gwc i18n gen in CHANGELOG and V4 status
claude Jun 27, 2026
bc4d3c5
feat(anim): keyed-list FLIP diff + enter/exit transition state machine
claude Jun 27, 2026
281992a
docs: record anim transitions layer in CHANGELOG and V4 status
claude Jun 27, 2026
86e5a67
feat(anim): prefers-reduced-motion gate for transitions (FA5 x D4)
claude Jun 27, 2026
bff3424
docs: note prefers-reduced-motion gate in anim CHANGELOG entry
claude Jun 27, 2026
f40a2a2
feat(validate): support omitempty (optional fields)
claude Jun 27, 2026
982515e
feat(router): typed, validated search params (DecodeQuery/EncodeQuery)
claude Jun 27, 2026
f4edc5c
docs: record typed search params + validate omitempty in CHANGELOG an…
claude Jun 27, 2026
da1a9ab
feat(query): InvalidateAll + Keys for global cache-bust and introspec…
claude Jun 27, 2026
03c7b2d
feat(serverfn): server-function runtime (//gwc:server keystone, FB1)
claude Jun 27, 2026
2b7c88c
feat(gwc): add `gwc server gen` — //gwc:server codegen (FB1)
claude Jun 27, 2026
5cb3b39
docs: record //gwc:server keystone (FB1) in CHANGELOG and V4 status
claude Jun 27, 2026
9e35132
feat(gwc): add `gwc vuln` — govulncheck reachability scan (D5)
claude Jun 27, 2026
f7c4da6
docs: record gwc vuln (D5) in CHANGELOG and V4 status
claude Jun 27, 2026
35e3917
feat(gwc): add `gwc add` headless component registry (FA3)
claude Jun 27, 2026
baebc59
docs: record gwc add component registry (FA3) in CHANGELOG and V4 status
claude Jun 27, 2026
23b958f
feat(localfirst): local-first sync engine — convergent CRDT core (FC1)
claude Jun 27, 2026
ed49ac0
test(localfirst): converge over the real serverfn transport (FC1 x FB1)
claude Jun 27, 2026
d272823
docs: record localfirst sync engine (FC1) in CHANGELOG and V4 status
claude Jun 27, 2026
48c78e1
feat(agentui): agent-native generative-UI runtime (FC3)
claude Jun 27, 2026
b2cb3f6
docs: record agentui generative-UI runtime (FC3) in CHANGELOG and V4 …
claude Jun 27, 2026
ae75c4c
docs(state): add state-primitive decision guide (B5)
claude Jun 27, 2026
a62bd0b
feat(localfirst): presence/awareness for collaboration (FC6)
claude Jun 27, 2026
23d382a
docs: record presence (FC6) + state decision guide (B5) in CHANGELOG …
claude Jun 27, 2026
ede2b61
test(api): pin public-API baselines for V4 packages (graduate to Stable)
claude Jun 27, 2026
596d041
test(api): add force-included API baseline goldens (past *.txt gitign…
claude Jun 27, 2026
9003907
docs: record public-API baseline tests in CHANGELOG and V4 status
claude Jun 27, 2026
83dc5a4
feat(agentui): depth/node limits on agent trees (FC3 DoS hardening)
claude Jun 27, 2026
8059f5b
docs: note agentui DoS limits in CHANGELOG
claude Jun 27, 2026
d3cb406
feat(localfirst): durable offline queue — Export/RestoreReplica (E3)
claude Jun 27, 2026
6f15917
docs: note localfirst durable offline queue (E3) in CHANGELOG
claude Jun 27, 2026
8da0621
feat(timetravel): snapshot step-back replay engine (C4/FB6)
claude Jun 27, 2026
439bb75
feat(ui): UseInspect — Svelte-style $inspect dev helper (FB7)
claude Jun 27, 2026
2e76234
feat(shorthand): named slots/snippets composition primitive (FB7)
claude Jun 27, 2026
8bc7142
docs: record timetravel (C4/FB6), UseInspect + named slots (FB7) in C…
claude Jun 27, 2026
e294a8f
feat(query): MutateAsync — fire-and-forget optimistic actions (FB2)
claude Jun 27, 2026
0552e33
feat(workbench): stories-as-tests headless runner (FB5/D1)
claude Jun 27, 2026
367fc46
docs: record MutateAsync (FB2) + workbench (FB5) in CHANGELOG and status
claude Jun 27, 2026
70cd4ca
feat(timetravel/devpanel): time-travel devtools panel as a GWC compon…
claude Jun 27, 2026
c327665
feat(workbench/gallery): component gallery as a GWC component (FB5)
claude Jun 27, 2026
97400b1
feat(query/devtools): cache observability + in-app devtools panel (D2)
claude Jun 27, 2026
ec52975
feat(localfirst/facepile): presence facepile collaboration UI (FC6)
claude Jun 27, 2026
8b6c39a
docs: record in-app dogfooded panels (D2/C4/FB5/FC6) in CHANGELOG and…
claude Jun 27, 2026
20079de
test(localfirst): SSR seeds the synced store on hydration (D6)
claude Jun 27, 2026
93e13fb
feat(wholestack): one-binary whole-stack handler (FC5)
claude Jun 27, 2026
13b29a3
docs: record wholestack one-binary deployment (FC5) in CHANGELOG and …
claude Jun 27, 2026
231bfc4
docs: record FC4 edge/WASI portability (wasip1-verified server stack)
claude Jun 27, 2026
c70990b
feat(gwc): add `gwc buildreport` — what rebuilt & why (C2 platform-ho…
claude Jun 27, 2026
4f8b1fc
feat(vscode-gwc): VS Code extension surfacing gwc lint diagnostics (A…
claude Jun 27, 2026
e27ca4b
docs: record gwc buildreport (C2) + VS Code extension in CHANGELOG an…
claude Jun 27, 2026
5651648
docs(plan): record final V4 disposition of the three out-of-code-scop…
claude Jun 27, 2026
0649494
feat(shorthand,ui): deferrable views — Defer + UseDefer (FA6 render h…
claude Jun 27, 2026
4e6f033
docs(plan): FA6 render-deferral shipped; only wasm-chunk-load remains…
claude Jun 27, 2026
c4c7c08
feat(hotreload): state-schema-change detection (C1 ghost-bug fix)
claude Jun 27, 2026
e908688
feat(erroroverlay): in-page Elm-grade error overlay component (FB4)
claude Jun 27, 2026
0a223bf
docs: record C1 schema detection + FB4 error overlay in CHANGELOG and…
claude Jun 27, 2026
b97fef8
feat(agentui): Registry.Catalog — allow-list introspection for MCP to…
claude Jun 27, 2026
49af703
docs: record agentui Registry.Catalog (F4) in CHANGELOG
claude Jun 27, 2026
adc8e01
docs(F3): commit a versioning & migration policy tied to the API base…
claude Jun 27, 2026
c771af7
docs(F8): document the wasm/native build-tag split as one mental model
claude Jun 27, 2026
93ec470
docs(F7): add GOVERNANCE.md tying the quality gates into a legible pr…
claude Jun 27, 2026
78399ab
docs(E2): specify the byte-identical reproducible-build recipe
claude Jun 27, 2026
1af9f6c
docs(plan): docs rows (F3/F7/F8/E2) shipped; residue is 3 hard-blocke…
claude Jun 27, 2026
c687b95
feat(ui): UseOptimistic / UseAction / UseAsyncMutation hooks (FB2 aud…
claude Jun 28, 2026
dad0c6e
feat(ui): FA6 defer trigger hooks + doc fix (audit Critical)
claude Jun 28, 2026
eb770e4
feat(gwc): implement `gwc check --fix` (audit Critical FB3)
claude Jun 28, 2026
4f4639c
test(localfirst): isolated Authority.Receive conflict resolution (aud…
claude Jun 28, 2026
471a0a1
feat(ui): honor prefers-reduced-motion by default in UseSpring + View…
claude Jun 28, 2026
59567a6
docs(plan): check off 5 audit items shipped (FB3, FA6, FB2, FA5, FC1)
claude Jun 28, 2026
6144d4d
feat(shorthand): Index position-keyed list renderer (audit FB7 Minor)
claude Jun 28, 2026
95ea822
fix(gwc): keep zero-npm intact + honest ChecksumsVerified (audit FC2)
claude Jun 28, 2026
d86ffce
docs(plan): check off FB7 Index + FC2 checksum/zero-npm audit items
claude Jun 28, 2026
4637ef0
test(gwc): wasm-compile smoke for generated serverfn client stub (aud…
claude Jun 28, 2026
4b7c189
ci(supply-chain): wire gwc supplychain + vuln gates into CI (audit FC…
claude Jun 28, 2026
e4d72e8
docs(plan): check off FB1 wasm smoke + FC2 supplychain-in-CI
claude Jun 28, 2026
9718988
feat(gwc): expand gwc add catalog to 5 a11y components (audit FA3)
claude Jun 28, 2026
59005a5
feat(ui): UseRevalidateOnFocus — refetch on focus/reconnect (audit FA2)
claude Jun 28, 2026
f237e0e
docs(plan): check off FA2 focus/reconnect refetch
claude Jun 28, 2026
73bd748
feat(state): Signal/Computed TextValue zero-arg shortcut (audit FA1 n…
claude Jun 28, 2026
d381ce4
feat(ui): gwcsilent build tag for zero-cost UseInspect silence (audit…
claude Jun 28, 2026
4b1a90b
docs(plan): check off FA1 TextValue + FB7 gwcsilent niggles
claude Jun 28, 2026
0172ea5
feat(gwc): `gwc agentui check` — validate agent UI schemas in CI (aud…
claude Jun 28, 2026
ca3d658
docs(plan): check off FC3 agentui CLI validation
claude Jun 28, 2026
185e38c
feat(gwc): structured Symbol on hook-rule lint diagnostics + extensio…
claude Jun 28, 2026
f99ce63
docs(plan): check off FB4 hook-symbol lint diagnostics
claude Jun 28, 2026
d01b3bc
feat(gwc): `gwc bundle` single-binary whole-stack server scaffold (au…
claude Jun 28, 2026
cfd9bc6
docs(plan): check off FC5 gwc bundle single-binary scaffold
claude Jun 28, 2026
3fb5afc
feat(localfirst): op-based PN-Counter CRDT + typed Cursor (audit FC6 …
claude Jun 28, 2026
f082f0a
docs(plan): check off FC6 op-based CRDT core (PN-Counter + Cursor)
claude Jun 28, 2026
d6370fa
ci(edge): real wasip1 build gate for the server stack (audit FC4)
claude Jun 28, 2026
c8cdc04
docs(plan): reconcile FC1/FC2 naming + check off FC4 wasip1 CI (audit…
claude Jun 28, 2026
40562dd
fix(state): structural equality for non-comparable atom values (audit…
claude Jun 28, 2026
4f6871f
feat(gwc): `gwc agentui catalog` emits the allow-list for agents/MCP …
claude Jun 28, 2026
760a155
docs(plan): check off FA1 non-comparable equality fix
claude Jun 28, 2026
82994c2
feat(workbench/fixtures): first-class boundary fixtures (audit FB5)
claude Jun 28, 2026
81159d4
docs(router): document EncodeQuery non-struct behavior (audit FA4 nig…
claude Jun 28, 2026
acae283
docs(plan): check off FB5/FA4 + resolve FA1-multisource & FB4-naming …
claude Jun 28, 2026
78da6c8
feat(gwc): HTTP content negotiation for llms docs (audit FB3 partial)
claude Jun 28, 2026
6c6141c
feat(devtools-extension): real browser DevTools extension (audit FB6)
claude Jun 28, 2026
25b7d35
test(gwc): MCP-server integration smoke (audit FB3)
claude Jun 28, 2026
d30111f
docs(plan): check off FB6 browser extension + FB3 MCP smoke/content-n…
claude Jun 28, 2026
363ceeb
feat(examples): real routes_gen.go demo + CI staleness gate (audit FA4)
claude Jun 28, 2026
cff8bf9
feat(gwc): server-leak analyzer in gwc check (audit FB1)
claude Jun 28, 2026
4e132d0
docs(plan): check off FB1 server-leak analyzer + FA4 staleness gates
claude Jun 28, 2026
8982784
test(browser): Playwright e2e for the disclosure component (audit FA5…
claude Jun 28, 2026
39cfb96
docs(plan): check off FA3 component browser-lane test (FA5 FLIP-trans…
claude Jun 28, 2026
aa924e2
test(browser): keyed-list FLIP Playwright e2e (audit FA5 — final item)
claude Jun 28, 2026
011ef57
docs(plan): FA5 FLIP browser test shipped — all 29 audit items implem…
claude Jun 28, 2026
ae348dd
feat(gwc): routes gen emits combined Link*WithQuery constructors (aud…
claude Jun 28, 2026
f10c8e3
test(state): native coverage for Signal.Text reactive getter (audit F…
claude Jun 28, 2026
3621ae7
docs(plan): resolve final 4 niggles — all 29 audit items now checked off
claude Jun 28, 2026
6189769
test(ui): native DOM e2e for UseQuery snapshot path (audit FA2)
claude Jun 28, 2026
3e4f522
feat(state): NewAutoComputed opt-in auto-tracking (audit FA1)
claude Jun 28, 2026
3c94979
docs(plan): FA1 auto-tracking shipped as opt-in NewAutoComputed
claude Jun 28, 2026
1a3f43a
feat(gwc): transitive import-graph server-leak analysis (Tier0 FB1)
claude Jun 28, 2026
d9b7b2a
feat(gwc): check --fix applies structured remediations (Tier0 FB3)
claude Jun 28, 2026
c94101a
feat(localfirst): op-based collaborative-text CRDT (Tier0 FC6)
claude Jun 28, 2026
92d6043
feat(gwc): blocking vuln merge gate with stdlib waiver (Tier1 D5)
claude Jun 28, 2026
dd102df
feat(gwc): doctor --fix auto-remediation + cross-OS CI parity (Tier1 A1)
claude Jun 28, 2026
07d60d1
feat(router,gwc): route focus + view transitions + a11y lint (Tier1 D…
claude Jun 28, 2026
cb8fff7
fix(state): multi-source computed .Text subscribes every source (Tier…
claude Jun 28, 2026
2b538bf
feat(ui,fetch): @defer sub-blocks + durable mutation bridge (Tier2 FA…
claude Jun 28, 2026
16a102c
feat(gwc): expose agentui catalog as an MCP tool (Tier2 FC3)
claude Jun 28, 2026
97c14a4
feat(workbench): suspense + hydration boundary fixtures (Tier2 D1)
claude Jun 28, 2026
1c543c6
test(css/u): completeness matrix + no-double-emit + escape doc (Tier1…
claude Jun 28, 2026
f317291
feat(gwc): bench drift merge-gate (Tier1 D3, gate half)
claude Jun 28, 2026
f2abe26
ci(release): ship prebuilt cross-platform gwc binaries (Tier1 A2)
claude Jun 28, 2026
fd82c34
feat(gwc): tabs arrow-key nav + catalog compile smoke (Tier2 FA3)
claude Jun 28, 2026
5f715d1
docs(governance): public roadmap, triage SLA, Discussions routing (Ti…
claude Jun 28, 2026
5918e20
feat(devtools): one-command zero-npm extension packager (Tier2 FB6)
claude Jun 28, 2026
7f23fde
feat(examples): third-party-JS typed bridge + native parity (Tier1 F5)
claude Jun 28, 2026
d2e234e
feat(gwc): persistent build-warming daemon `gwc warm` (Tier1 C2)
claude Jun 28, 2026
f29ccae
Release v4.0.0
claude Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
11 changes: 11 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Default owner fallback.
* @monstercameron

# Release and CI automation are protected surfaces.
/.github/workflows/ @monstercameron

# Transport/runtime library changes require explicit owner review.
/third_party/GoGRPCBridge/ @monstercameron

# Release-readiness roadmap and integration docs.
/docs/GOGRPCBRIDGE_*.md @monstercameron
44 changes: 44 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Bug report
description: A concrete, reproducible defect in the framework, runtime, or gwc tooling.
labels: ["bug", "needs-triage"]
body:
- type: markdown
attributes:
value: |
Thanks for the report. A **minimal reproduction** is the single most
useful thing you can include — the smallest `main.go` plus the `gwc`
command that triggers the problem. First-response target: 5 business
days (see CONTRIBUTING.md → Triage SLA).
- type: textarea
id: what-happened
attributes:
label: What happened
description: What did you observe, and what did you expect instead?
validations:
required: true
- type: textarea
id: repro
attributes:
label: Minimal reproduction
description: The smallest code + the exact `gwc`/`go` command that reproduces it.
render: shell
validations:
required: true
- type: input
id: versions
attributes:
label: Versions
description: "Output of `go version` and the GoWebComponents version/commit."
validations:
required: true
- type: dropdown
id: lane
attributes:
label: Where does it occur?
options:
- Browser (js/wasm)
- Server / SSR (native)
- gwc tooling
- Both / unsure
validations:
required: true
13 changes: 13 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Issues are for concrete, reproducible defects. Questions, ideas, and show-and-tell go to
# Discussions; security reports follow the disclosure policy.
blank_issues_enabled: false
contact_links:
- name: Questions & Help (Q&A)
url: https://github.com/monstercameron/GoWebComponents/discussions/categories/q-a
about: Ask how to do something, or "is this a bug?" before filing an issue.
- name: Ideas & Feature Proposals
url: https://github.com/monstercameron/GoWebComponents/discussions/categories/ideas
about: Propose a feature or direction. Accepted ideas are linked from ROADMAP.md.
- name: Security Disclosure
url: https://github.com/monstercameron/GoWebComponents/security/policy
about: Report a vulnerability privately. Do NOT open a public issue.
87 changes: 87 additions & 0 deletions .github/workflows/agent-bridge-headless.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Agent Bridge Headless

on:
pull_request:
paths:
- ".github/workflows/agent-bridge-headless.yml"
- "AGENTS.md"
- "agentbridge/**"
- "docs/REFERENCE_MANUAL/**"
- "examples/public-examples-site/assets/docs/**"
- "examples/server/ai-chat-wizard/**"
- "internal/runtime/**"
- "security/**"
- "test/playwrightgo/**"
- "tools/agenthub/**"
- "tools/gwc/**"
- "tools/livereload/**"
push:
branches:
- main
- master
paths:
- ".github/workflows/agent-bridge-headless.yml"
- "AGENTS.md"
- "agentbridge/**"
- "docs/REFERENCE_MANUAL/**"
- "examples/public-examples-site/assets/docs/**"
- "examples/server/ai-chat-wizard/**"
- "internal/runtime/**"
- "security/**"
- "test/playwrightgo/**"
- "tools/agenthub/**"
- "tools/gwc/**"
- "tools/livereload/**"
workflow_dispatch:

permissions:
contents: read

env:
PLAYWRIGHT_GO_VERSION: v0.5700.1

jobs:
bridge-headless:
name: Bridge Native + Headless Dogfood
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Install Playwright Chromium
run: go run github.com/playwright-community/playwright-go/cmd/playwright@${{ env.PLAYWRIGHT_GO_VERSION }} install --with-deps chromium

- name: Run native agent bridge lane
run: go run ./tools/gwc test -lane agent -json

- name: Prebuild agent dogfood client
run: |
mkdir -p examples/server/ai-chat-wizard/bin/client/app
GOOS=js GOARCH=wasm go build -tags gwcagent -o examples/server/ai-chat-wizard/bin/client/app/chat.wasm ./examples/server/ai-chat-wizard/client

- name: Prebuild agent dogfood server
run: |
mkdir -p bin/ci
go build -o bin/ci/example100-agent-dogfood-server ./examples/server/ai-chat-wizard/cmd/server

- name: Run headless agent bridge dogfood lane
env:
GWC_AGENT_DOGFOOD_REUSE_CLIENT_WASM: "1"
GWC_AGENT_DOGFOOD_SERVER_BINARY: bin/ci/example100-agent-dogfood-server
GWC_AGENT_DOGFOOD_TRACE: "1"
run: |
while sleep 20; do
echo "agent-browser dogfood still running..."
done &
keepalive_pid="$!"
trap 'kill "$keepalive_pid" 2>/dev/null || true' EXIT
go test -tags playwrightgo -run 'TestExample100AgentBridgeDogfood|TestAgentBridgeDogfood|TestAgentBridgeHeadless' -count=1 -timeout=5m -v ./test/playwrightgo/examples
39 changes: 39 additions & 0 deletions .github/workflows/api-baseline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: API Baseline

# F3 merge gate: the public-API baseline tests run on every PR (and push to main), so an
# accidental breaking change to an exported surface fails BEFORE merge — not only at release
# tag time. This makes the major/minor boundary (VERSIONING.md) mechanically enforced: a removed
# or changed baseline line fails the gate; an intentional change regenerates the baseline
# (UPDATE_API_BASELINE=1 go test ./<pkg>/) as a reviewed commit.

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
api-baseline:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Public-API baseline gate
# No continue-on-error: any exported-surface drift fails the PR. Covers every package
# whose public API is pinned with an api_baseline.txt.
run: |
go test -count=1 \
./serverfn/ ./query/ ./localfirst/ ./agentui/ ./validate/ \
./anim/ ./timetravel/ ./workbench/ ./wholestack/ \
-run 'APIBaseline|ApiBaseline|API_BASELINE'
37 changes: 37 additions & 0 deletions .github/workflows/bench-drift.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Bench Drift

# D3 merge gate: a benchmark that regresses beyond the tolerance fails the build, so a
# performance regression cannot land silently. The run compares the fresh native benchmark
# numbers against the committed baseline (docs/benchmarks/latest.json) and exits non-zero on any
# out-of-tolerance regression via `gwc bench -fail-on-regression`. Benchmarks are pinned to a
# single package run (-parallel 1) for the lowest-noise comparison.

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
bench-drift:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Build gwc
run: go build -o gwc ./tools/gwc

- name: Benchmark drift gate (native lane)
# Compares against the committed baseline and fails on any out-of-tolerance regression.
run: ./gwc bench -lane native -parallel 1 -fail-on-regression
30 changes: 30 additions & 0 deletions .github/workflows/browser-compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Browser Compatibility

on:
push:
branches:
- main
- master
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
compatibility-smoke:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Run Browser Compatibility Smoke (Playwright-Go)
run: |
go test -tags playwrightgo ./test/playwrightgo/examples -run TestBrowserCompat -v
53 changes: 53 additions & 0 deletions .github/workflows/build-times.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Build Times

# A2/C2 platform-honest gate: publishes the cold-vs-warm build-time pair and fails the build if
# the Go build cache stops delivering a speedup (warm rebuild slower than -max-warm-ratio of the
# cold build). CI starts from a cold cache, so the cold/warm differential is real and meaningful.
# The gate targets the WASM build of a representative app (the workload A2/C2 actually care about —
# wasm compile time, not the native CLI), recomputes timings fresh each run, and gates on the
# machine-independent warm/cold ratio (absolute ms vary by hardware). The committed
# docs/benchmarks/build-times.json is a portable reference snapshot; the gate does not depend on
# it, so it cannot silently drift the build green/red — the fresh artifact is uploaded each run.

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
build-times:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Build gwc
run: go build -o gwc ./tools/gwc

- name: Cold/warm WASM build-time gate
# Cold wasm build (CI cache is empty) then an immediate warm rebuild of the counter app;
# fails if the warm rebuild is not at least 40% faster than the cold one
# (-max-warm-ratio 0.6), proving the build cache delivers for the wasm target. Writes the
# fresh report to docs/benchmarks/build-times.json (uploaded below).
run: |
./gwc warm -once -target wasm -pattern ./examples/public/counter \
-baseline docs/benchmarks/build-times.json \
-max-warm-ratio 0.6 -fail-on-regression -json

- name: Upload build-time report
if: always()
uses: actions/upload-artifact@v4
with:
name: build-times
path: docs/benchmarks/build-times.json
72 changes: 72 additions & 0 deletions .github/workflows/catalog-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Catalog Smoke

# FA3: prove every `gwc add` catalog component compiles AFTER being copied into a fresh module
# (not just in-repo). For each component we scaffold a throwaway module that requires the local
# GoWebComponents via a replace directive, `gwc add` the component, write a tiny consumer, and
# `go build` it. A template that does not compile standalone fails the gate.

on:
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
catalog-smoke:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26.x"

- name: Build gwc
run: go build -o gwc ./tools/gwc

- name: gwc add → go build each catalog component
shell: bash
run: |
repo="$(pwd)"
for name in alert breadcrumb disclosure switch tabs; do
work="$(mktemp -d)"
( cd "$work"
go mod init example.com/catalog-smoke
echo "require github.com/monstercameron/GoWebComponents v0.0.0" >> go.mod
echo "replace github.com/monstercameron/GoWebComponents => $repo" >> go.mod
mkdir -p uikit
"$repo/gwc" add "$name" -dir ./uikit -pkg uikit
# Tiny consumer so the package is actually compiled, not just present.
printf 'package main\nimport _ "example.com/catalog-smoke/uikit"\nfunc main() {}\n' > main.go
go mod tidy
echo "Building catalog component: $name"
go build ./...
)
rm -rf "$work"
done

- name: gwc add component/route generators → go build
# A3 10-rung "CI-verified": the composable sub-generators must also produce compiling code
# in a fresh module, not just parse. Scaffold a component and a route into a throwaway
# module and build them.
shell: bash
run: |
repo="$(pwd)"
work="$(mktemp -d)"
( cd "$work"
go mod init example.com/generator-smoke
echo "require github.com/monstercameron/GoWebComponents v0.0.0" >> go.mod
echo "replace github.com/monstercameron/GoWebComponents => $repo" >> go.mod
"$repo/gwc" add component MyWidget -dir ./ui -pkg ui
"$repo/gwc" add route Home -path /home -dir ./ui -pkg ui
printf 'package main\nimport _ "example.com/generator-smoke/ui"\nfunc main() {}\n' > main.go
go mod tidy
echo "Building generated component + route"
go build ./...
)
rm -rf "$work"
Loading
Loading