Skip to content

Add EUPL-1.2 license and canonicalize repo configuration#7

Merged
Snider merged 19 commits into
mainfrom
dev
Jun 29, 2026
Merged

Add EUPL-1.2 license and canonicalize repo configuration#7
Snider merged 19 commits into
mainfrom
dev

Conversation

@Snider

@Snider Snider commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

This pull request introduces project metadata and licensing to the repository. The most important changes are the addition of a canonical project marker for Go tooling and the inclusion of the EUPL-1.2 license text.

Project configuration and licensing:

  • Added .core/go.yaml to mark the repository as a managed canonical Go project, specifying module name, subtree, and Go version for audit and dispatch tooling.
  • Added the full text of the European Union Public Licence (EUPL) v. 1.2 in LICENCE, establishing the project's open source license.

Documentation:

  • Removed SESSION-BRIEF.md, which previously described the project’s architecture, status, dependencies, and conventions.

Snider and others added 19 commits May 1, 2026 08:34
Reference: core/api/LICENCE.

Co-Authored-By: Cladius Maximus <cladius@lethean.io>
…untime subdirs

The .core/ root holds tracked Lethean canon config (go.yaml, build.yaml,
agents.yaml, etc.). Only the runtime subdirs (workspace/, vm/, cache/,
runtime/) and per-repo runtime artifacts should be gitignored.

Brings this repo into the managed canonical set per audit-sweep
discovery filter.

Co-Authored-By: Cladius Maximus <cladius@lethean.io>
…(Mantis #1336)

go-html gets the canonical NewService(opts) + Register(c) dual-method
shape per #1336. Implementation in service.go with //go:build !js so
the WASM build (per RFC §7's 3.5 MB raw / 1 MB gzip budget) doesn't
pull in dappco.re/go.

  html.NewService(html.Options{Locale: "en", Translator: t})
                                                    → factory for core.WithService
  html.Register(c)                                  → defaults
  svc.Context()                                     → pre-built default Context
                                                      ready for Render(node, ctx)

Service struct embeds *core.ServiceRuntime[Options] for typed options
access and holds a pre-built default Context. Translator is optional —
nil leaves the package's existing fallback behaviour intact.

The shared rendering surface (context.go, node.go, render.go,
responsive.go, layout.go, etc.) stays core-free so the WASM build is
unaffected. Service registration is server-side only.

Smoke verified:
- GOWORK=off go vet ./... — clean
- GOWORK=off GOOS=js GOARCH=wasm go build ./... — pre-existing
  Imprint failure unrelated to service.go (verified by stashing —
  same failure on pristine HEAD)
- TestNewService_DefaultOptions / TestNewService_LocaleOption /
  TestRegister_Imperative — all PASS

Co-Authored-By: Virgil <virgil@lethean.io>
Permanent service_test.go for canon shape (commit 9a9e000). Build-tagged
//go:build !js so the WASM build (RFC §7 size budget) doesn't pull
in dappco.re/go via the test compilation. Four cases: default-locale
fallback, explicit-Locale flow-through, imperative Register, nil-receiver
Context guard.

Coverage sweep (#1387): 7th of 22.

Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Hephaestus <hephaestus@lthn.ai>
TestCmdWasm_WASMBinarySizeGood called process.RunWithOptions without
initialising the process service, failing with "process: service not
initialized". process@v0.8 binds the global service to dappco.re/go/core,
not the dappco.re/go facade, so init via corepkg.New().

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for the codegen CLI command layer: option-path
helpers, flag defaults, poll-interval parsing, generate/types/watch command
actions, named-file read/write paths, and the result-wrapping helpers.
cmd/codegen statement coverage 40.0% -> 66.7%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for the HTTP handlers: empty-template
rejection, locale propagation, invalid-JSON grammar requests, the
reference/similarity branch (match and mismatch against min_similarity),
and the nil-context guards. pkg/api statement coverage 69.6% -> 100.0%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for renderLayout: empty-variant guard, all
five HLCRF slots, unrecognised slot keys, and the no-locale path.
cmd/wasm statement coverage 73.9% -> 95.7% (remaining is the !js main stub).

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for the JS string-literal escaper (named
escapes, U+2028/U+2029 line separators, sub-0x20 control chars, BMP
surrogate pairs, empty input) and for isValidCustomElementTag (reserved
names, non-letter start, missing hyphen, uppercase, invalid UTF-8).
codegen statement coverage 80.5% -> 98.4%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for the GrammarImprint walker across the
control-flow node types: Responsive (populated and empty), If/Unless
(both branches), Entitled (granted, denied, no-checker), Switch (hit and
miss) and an empty-slot layout. grammar.go imprint walker 26.1% -> 91.3%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for Entitled's invalid argument shapes (empty
feature, non-string feature, non-Node child, wrong arity in both 2- and
3-arg forms) and the empty sentinel's layout-path renderer and
isNilHTMLNode guard. entitled.go now 100% covered.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad coverage for If/Unless/Entitled/Switch rendered inside a
layout slot (both nested-layout and leaf children, both branches each),
exercising their renderWithLayoutPath methods. node.go control-flow
path renderers 0-66% -> ~80%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Ugly coverage for nodePreservesLayoutPath via single-item Each
inside a layout slot, exercising the If/Unless/Entitled/Switch arms
(preserve true) and the leaf default arm plus a failing-condition path.
nodePreservesLayoutPath 25% -> 75%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Ugly coverage for ShadowComponent.RenderClass JS string-literal
escaping: control chars, U+2028/U+2029 line separators, sub-0x20 unicode
escapes, BMP surrogate pairs, plus the style-prepend and explicit-mode
paths. shadow.go appendUnicodeEscape 0% -> 100%, appendJSStringLiteral
25% -> 85%.

Co-Authored-By: Virgil <virgil@lethean.io>
Adds Good/Bad/Ugly coverage for translationArgs and countInt: all
numeric type branches, string parse and whitespace edges, non-numeric
rejection, nil/non-count-key/no-count-in-context paths, count injection
vs prepend vs leading-count-kept, metadata fallback, and trimTextSpace.
text_translate_args.go now fully covered.

Co-Authored-By: Virgil <virgil@lethean.io>
…amps

Adds Good/Bad/Ugly coverage for the GrammarImprint structural helpers by
stamping control-flow node types at the depth limit: switchNode
(countMapNodes), Each (structuralEachChildCount), If/Unless/Entitled and
Responsive child counts. countMapNodes 0% -> 100%, structuralChildCount
39% -> 75%, structuralEmpty 60% -> 93%.

Co-Authored-By: Virgil <virgil@lethean.io>
Bump the core/go module pin to v0.10.4. This repo has no external/go workspace submodule on disk, so the bump is module-mode (GOWORK=off) only — verified build + test green.

Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Virgil <virgil@lethean.io>
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@Snider, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 35 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bcd01d28-73ba-489a-aaf0-9992c9f4a4a4

📥 Commits

Reviewing files that changed from the base of the PR and between 74d946e and 4da5c56.

⛔ Files ignored due to path filters (1)
  • go/go.sum is excluded by !**/*.sum
📒 Files selected for processing (19)
  • .core/go.yaml
  • .gitignore
  • LICENCE
  • SESSION-BRIEF.md
  • go/cmd/codegen/cli_test.go
  • go/cmd/wasm/render_layout_test.go
  • go/cmd/wasm/size_test.go
  • go/codegen/escape_test.go
  • go/each_preserve_test.go
  • go/entitled_edge_test.go
  • go/go.mod
  • go/grammar_imprint_test.go
  • go/grammar_stamp_test.go
  • go/layout_path_test.go
  • go/pkg/api/handlers_test.go
  • go/service.go
  • go/service_test.go
  • go/shadow_escape_test.go
  • go/text_translate_args_test.go

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Snider Snider merged commit d2e4f9c into main Jun 29, 2026
4 of 7 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant