- CLAUDE.md: correct WASM raw size gate from 3 MB to 3.5 MB (matches size_test.go)
- CLAUDE.md: document error handling (log.E) and file I/O (coreio.Local) conventions
- Makefile: sync WASM_RAW_LIMIT to 3670016 (3.5 MB) to match size_test.go
- Tests: add coverage for NewContextWithService, Attr through wrapper nodes,
Unless(true), and Text.Render with i18n service — core package 95.8% → 99.4%
No fmt.Errorf or os.ReadFile/os.WriteFile violations found.
Co-Authored-By: Virgil <virgil@lethean.io>
Replace os.ReadFile in cmd/wasm/size_test.go with coreio.Local.Read().
Replace fmt.Errorf/errors.New with log.E() in codegen, cmd/wasm/register,
and cmd/codegen. Add forge.lthn.ai/core/go-io as a dependency.
Co-Authored-By: Virgil <virgil@lethean.io>
- Alias stdlib `io` as `goio` in cmd/codegen/main.go to follow project conventions
- Add compile-time Node interface checks for all node types in node.go
and Layout in layout.go
- Replace fmt.Fprintf stderr logging with go-log in cmd/codegen/main.go
- Replace fmt.Println with go-log in cmd/wasm/register.go
Co-Authored-By: Virgil <virgil@lethean.io>
CoreDeno sidecar, manifest loader, gRPC proto definitions, and
.core/view.yml discovery are not yet built. Codegen and WASM exist
but the Phase 4 vision is future work.
Co-Authored-By: Virgil <virgil@lethean.io>
Replace manual string-replace escaping with stdlib html.EscapeString.
Escape tag names and attribute keys in elNode and Layout rendering.
Improve Attr() to traverse wrapper nodes (If, Unless, Entitled).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add go-devops build system configuration for standardised
build, test, and release workflows across the Go ecosystem.
Co-Authored-By: Virgil <virgil@lethean.io>
The WASM main.go is gated behind //go:build js && wasm, leaving
register.go (//go:build !js) as the only file on native builds —
but it had no main(). Adds a stub that prints a usage hint.
Co-Authored-By: Virgil <virgil@lethean.io>
- Add EachSeq[T](iter.Seq[T], fn) for iterator-based template rendering
- Use slices.Collect(maps.Keys()) + slices.Sort for deterministic attr output
- Use strings.SplitSeq in codegen TagToClassName and path parsing
- Use range over int in layout and pipeline loops
- Refresh go.sum
Co-Authored-By: Gemini <noreply@google.com>
Co-Authored-By: Virgil <virgil@lethean.io>
Uses reusable workflows from core/go-devops for Go testing
(with race detector and coverage) and security scanning
(govulncheck, gitleaks, trivy).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Go 1.26 rejects non-semver version strings (like 'main') in go.mod.
Tags v0.0.1 now exist on all forge repos — workspace still overrides
for local development.
Co-Authored-By: Virgil <virgil@lethean.io>
Forge module versions now use main branch resolution via ~/Code/go.work
workspace. Removes local replace directives — the central go.work handles
all cross-repo resolution during development.
Co-Authored-By: Virgil <virgil@lethean.io>
Replace internal task tracking (TODO.md, FINDINGS.md) with structured
documentation in docs/. Trim CLAUDE.md to agent instructions only.
Co-Authored-By: Virgil <virgil@lethean.io>
Coverage status, priority work items, and file map for
guided Claude session on WASM size, benchmarks, and TS typedefs.
Co-Authored-By: Virgil <virgil@lethean.io>
Exposes gohtml.registerComponents(slotsJSON) to browser context.
Pure-Go buildComponentJS is testable without WASM; WASM glue uses
Function constructor for browser-side execution.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Generates Custom Element v1 classes with closed Shadow DOM from manifest
slot assignments. Includes tag validation, PascalCase conversion, and
bundle generation for full HLCRF layout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TDD plan for CoreDeno + Web Components: manifest types, ed25519
signing, object store, WC codegen, sidecar lifecycle, gRPC proto,
permission engine, marketplace index, and framework service wiring.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Approved architecture for the JavaScript runtime layer:
- CoreDeno (Deno sidecar) as module loader, I/O fortress, and dev toolchain
- go-html as Web Component factory (manifest → custom elements)
- .core/view.yml convention for declarative app definitions
- Signed application loading with ed25519 verification
- gRPC/Unix socket bridge between Deno and Go
- Gradual Angular migration to vanilla Web Components
- HLCRF slot composition with Shadow DOM isolation
Open sections (polyfills, object store, config generators, marketplace)
pending dAppServer heritage code review.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Escape variant name in Responsive.Render HTML attribute (XSS fix)
- Rewrite StripTags to single-pass O(n) space collapsing
- Document Raw() security contract in WASM entry point
- Add TestAttr_NonElement coverage
- Fix Makefile WASM target to rebuild on source changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 2.8MB raw binary exceeds the original 2MB target, but Go WASM has
a ~2MB runtime floor that cannot be reduced without tinygo. The gzip'd
transfer size is 823KB — well under 1MB.
Update the Makefile size check to measure both raw and gzip'd sizes:
- Gzip transfer limit: 1MB (hard fail — what users download)
- Raw binary limit: 3MB (warning — accounts for Go runtime floor)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>