Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4ed0532
Add ExecPlan for SolidJS front-end adoption
Jul 19, 2026
7d84ada
Import axinite-mockup SolidJS workspace as web-src
Jul 19, 2026
7d3e50c
Retarget web-src build from GitHub Pages to gateway serving
Jul 19, 2026
7466c5a
Align browser contracts with the real gateway payloads
Jul 19, 2026
84cbd68
Add gateway bearer-token boot flow to the SolidJS app
Jul 19, 2026
2e62740
Serve the SolidJS app as the default gateway UI
Jul 19, 2026
ce15622
Expose browser feature flags at GET /api/features
Jul 19, 2026
6a9e4ce
Harden the stub runtime contract and add coverage for it
Jul 19, 2026
0d71487
Fix three defects surfaced by stub browser validation
Jul 19, 2026
b665108
Document the SolidJS front-end and pin the Python e2e suite to legacy
Jul 19, 2026
1a8b61b
Remove stray css-view scratch snapshots
Jul 19, 2026
2613e78
Satisfy lint and spelling gates for the SolidJS adoption
Jul 19, 2026
9f16236
Close out the SolidJS adoption ExecPlan
Jul 19, 2026
3872757
Add ExecPlan for SolidJS adoption follow-ups
Jul 19, 2026
5082a04
Promote logs to a top-level SolidJS route
Jul 19, 2026
016fd05
Extend the stub runtime with pairing, chat auth, and media surfaces
Jul 19, 2026
15423c0
Persist deployment-scoped feature flags per RFC 0009
Jul 19, 2026
a09971c
Align the db sub-trait table with the MD060 column style
Jul 19, 2026
e2ddc8e
Add chat media, auth cards, and job-start cards to the SolidJS chat
Jul 19, 2026
2988691
Add restart, TEE attestation, and pairing surfaces to the SolidJS UI
Jul 19, 2026
9091a64
Rebuild the jobs detail view with legacy fidelity
Jul 19, 2026
b911863
Add an e2e testability contract to the SolidJS app
Jul 19, 2026
b428253
Refresh embedded SolidJS assets with the parity surfaces
Jul 19, 2026
b1ff8f9
Migrate the Python e2e suite to the SolidJS DOM
Jul 19, 2026
cb08ec4
Update front-end and e2e documentation for the parity follow-ups
Jul 19, 2026
071986d
Fix spelling-gate findings and rewrap ExecPlan progress lines
Jul 19, 2026
bcc628b
Close out the follow-ups ExecPlan
Jul 19, 2026
b3965bb
Use typographic apostrophes in French and Italian locale strings
Jul 19, 2026
373a14a
Wire the semantic and full verification chains into Make and CI
Jul 19, 2026
dddaed3
Resolve RFC 0009 open questions for the feature-flag layer
Jul 19, 2026
c0a2381
Implement deployment-flag methods in the settings trybuild fixture
Jul 20, 2026
92f1455
Pin the Playwright browsers path in the Frontend workflow
Jul 20, 2026
93ff779
Address CodeScene code-health findings in the browser workspace
Jul 20, 2026
d9c7156
Use Oxford spelling in a skills-preview comment
Jul 20, 2026
bfb6121
Scope CodeScene rules for generated assets and the browser workspace
Jul 20, 2026
8c3162d
Clear the remaining CodeScene findings
Jul 20, 2026
3edd57b
Make the mock-backend CodeScene rule set self-contained
Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions .codescene/code-health-rules.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,56 @@
{
"usage": "Repository overrides for CodeScene code health scoring. Test code is relaxed for inherently similar test structure, and one repo-wide false positive (String Heavy Function Arguments) is disabled with its rationale below. Production code keeps every other rule at default weight.",
"rule_sets": [
{
"matching_content_path": "src/channels/web/static/solid/**",
"matching_content_path_doc": "Generated, minified SolidJS build output embedded into the binary (refreshed by `make frontend-build`). Not hand-maintained source; code-health findings here are false positives against the bundler's output. The corresponding sources under web-src/ are analysed at full weight.",
"rules": [
{
"name": "Complex Method",
"weight": 0.0
},
{
"name": "Complex Conditional",
"weight": 0.0
},
{
"name": "Bumpy Road Ahead",
"weight": 0.0
},
{
"name": "Overall Code Complexity",
"weight": 0.0
},
{
"name": "Deep, Nested Complexity",
"weight": 0.0
},
{
"name": "Excess Number of Function Arguments",
"weight": 0.0
},
{
"name": "Lines of Code in a Single File",
"weight": 0.0
},
{
"name": "Code Duplication",
"weight": 0.0
},
{
"name": "Large Method",
"weight": 0.0
},
{
"name": "Primitive Obsession",
"weight": 0.0
},
{
"name": "String Heavy Function Arguments",
"weight": 0.0
}
]
},
{
"matching_content_path": "tests/**",
"matching_content_path_doc": "Integration test crates: parameterized cases, fixture staging, and assertion tables are deliberately repetitive.",
Expand Down Expand Up @@ -161,6 +211,54 @@
}
]
},
{
"matching_content_path": "web-src/axinite/tests/**",
"matching_content_path_doc": "Browser workspace test suites: the same test-shape leniency as tests/** (parameterized cases, fixture staging, and assertion tables are deliberately repetitive).",
"rules": [
{
"name": "Code Duplication",
"weight": 0.0
},
{
"name": "Large Assertion Blocks",
"weight": 0.0
},
{
"name": "Duplicated Assertion Blocks",
"weight": 0.0
},
{
"name": "Large Method",
"weight": 0.0
},
{
"name": "String Heavy Function Arguments",
"weight": 0.0
}
]
},
{
"matching_content_path": "web-src/mock-backend/**",
"matching_content_path_doc": "Daemon-free stub harness, not production code: it mirrors the gateway wire contract with deterministic in-memory fixtures, so fixture volume (file length) and contract-shaped response builders (duplication) are down-weighted, and stringly wire identifiers (primitive obsession, string-heavy arguments) are disabled outright \u2014 the public mock API deliberately takes the same string ids the wire carries. Structural rules (Bumpy Road, Complex Method) stay at default weight and were refactored, not suppressed. Note CodeScene applies one rule set per file, so this set restates the repo-wide String Heavy disable.",
"rules": [
{
"name": "Code Duplication",
"weight": 0.3
},
{
"name": "Lines of Code in a Single File",
"weight": 0.3
},
{
"name": "Primitive Obsession",
"weight": 0.0
},
{
"name": "String Heavy Function Arguments",
"weight": 0.0
}
]
},
{
"matching_content_path": "**",
"matching_content_path_doc": "String Heavy Function Arguments is disabled repo-wide: after the refactor rounds extracted every genuine parameter clump into structs and newtypes, the remaining flagged parameters are paths, URLs, user-supplied text, secret names, shell command tokens, and SQL fragments, which are idiomatically &str in Rust. The smell fires as a systematic false positive here. This general rule set is listed last so the more specific test-scoped sets above take precedence.",
Expand Down
54 changes: 54 additions & 0 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
name: Frontend
"on":
pull_request:
branches:
- main
paths:
- "web-src/**"
- "src/channels/web/static/solid/**"
- "Makefile"
- ".github/workflows/frontend.yml"
push:
branches:
- main
paths:
- "web-src/**"
- "src/channels/web/static/solid/**"
- "Makefile"
- ".github/workflows/frontend.yml"

jobs:
frontend:
name: Frontend verification
runs-on: ubicloud-standard-8
env:
# playwright.config.ts pins the hermetic browsers path at test time;
# the install step must target the same location.
PLAYWRIGHT_BROWSERS_PATH: "0"
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install uv
# `semantic` and `verify:full` fetch semgrep and moz-fluent-linter
# through uvx.
uses: astral-sh/setup-uv@v5
Comment on lines +30 to +39

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== .github/workflows/frontend.yml ==="
nl -ba .github/workflows/frontend.yml | sed -n '1,120p'

echo
echo "=== action refs in workflow ==="
python3 - <<'PY'
from pathlib import Path
import re
p = Path('.github/workflows/frontend.yml')
text = p.read_text()
for m in re.finditer(r'uses:\s*([^\s#]+)', text):
    print(m.group(1))
PY

Repository: leynos/axinite

Length of output: 231


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== .github/workflows/frontend.yml ==="
cat -n .github/workflows/frontend.yml | sed -n '1,140p'

echo
echo "=== all workflow action refs ==="
rg -n 'uses:\s*' .github/workflows -g '*.yml' -g '*.yaml'

Repository: leynos/axinite

Length of output: 12221


Pin the workflow actions and drop checkout credentials. Replace actions/checkout@v6, oven-sh/setup-bun@v2, and astral-sh/setup-uv@v5 with commit SHAs, and set persist-credentials: false on actions/checkout; the checkout token should not remain available to later repository scripts.

🧰 Tools
🪛 zizmor (1.26.1)

[warning] 30-31: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 31-31: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 33-33: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 39-39: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/frontend.yml around lines 30 - 39, Update the workflow
steps for Checkout repository, Install Bun, and Install uv to reference
immutable commit SHAs instead of version tags. Add persist-credentials: false to
the actions/checkout configuration so its token is unavailable to later scripts,
while preserving the existing Bun and uv version settings.

Source: Linters/SAST tools

- name: Install dependencies
run: make frontend-install
- name: Install Playwright Chromium
working-directory: web-src
run: bunx playwright install --with-deps chromium
- name: Full verification chain
# Tailwind compile check, Biome lint, TypeScript, vitest unit and
# accessibility suites, Fluent variable/coverage checks, the
# semantic-CSS rules, the workspace Playwright spec, and
# moz-fluent-lint.
run: make frontend-full
- name: Embedded asset staleness gate
# Rebuild the SPA and fail when src/channels/web/static/solid does
# not match the web-src sources.
run: make frontend-verify
39 changes: 38 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,47 @@ AUDIT_FLAGS ?= \
--ignore RUSTSEC-2024-0370 \
--ignore RUSTSEC-2025-0134

.PHONY: all install install-with-overrides sync-local-wasm-overrides build-github-tool-wasm fmt check-fmt typecheck lint lint-clippy lint-whitaker markdownlint spelling spelling-phrase-check spelling-config spelling-config-write spelling-helper-test nixie audit rust-audit test test-cargo test-matrix test-matrix-cargo test-workflow-contracts clean
.PHONY: all install install-with-overrides sync-local-wasm-overrides build-github-tool-wasm fmt check-fmt typecheck lint lint-clippy lint-whitaker markdownlint spelling spelling-phrase-check spelling-config spelling-config-write spelling-helper-test nixie audit rust-audit test test-cargo test-matrix test-matrix-cargo test-workflow-contracts clean frontend-install frontend-build frontend-verify frontend-check frontend-test frontend-full frontend-stub

all: check-fmt lint test spelling

BUN ?= $(shell command -v bun 2>/dev/null || printf '%s' "$$HOME/.bun/bin/bun")
FRONTEND_DIR := web-src
FRONTEND_DIST := $(FRONTEND_DIR)/dist
FRONTEND_EMBED_DIR := src/channels/web/static/solid

frontend-install:
cd $(FRONTEND_DIR) && $(BUN) install --frozen-lockfile

# Build the SolidJS app and refresh the embedded copy served by the gateway.
frontend-build: frontend-install
cd $(FRONTEND_DIR) && $(BUN) run build
rsync -a --delete $(FRONTEND_DIST)/ $(FRONTEND_EMBED_DIR)/

# Fail when the committed embedded assets are stale relative to web-src.
frontend-verify: frontend-build
git diff --exit-code -- $(FRONTEND_EMBED_DIR) || { echo "error: $(FRONTEND_EMBED_DIR) is stale; commit the output of 'make frontend-build'" >&2; exit 1; }

# Static checks and unit suites for the browser workspace. `semantic`
# covers the classlist, semgrep, and stylelint rules and fetches semgrep
# through uvx on first use.
frontend-check: frontend-install
cd $(FRONTEND_DIR) && $(BUN) run check:fmt && $(BUN) run lint && $(BUN) run check:types && $(BUN) run semantic

frontend-test: frontend-check
cd $(FRONTEND_DIR) && $(BUN) run test && $(BUN) run test:a11y && $(BUN) run lint:ftl-vars

# The mockup's full verification chain: Tailwind compile check, lint,
# typecheck, unit + a11y + Fluent + semantic suites, the workspace
# Playwright spec (browsers must be installed), and moz-fluent-lint.
frontend-full: frontend-install
cd $(FRONTEND_DIR) && $(BUN) run verify:full

# Daemon-free stub runtime: Bun mock API (HTTP + SSE + /api/features) plus a
# preview server for the built SPA on http://127.0.0.1:2020.
frontend-stub:
cd $(FRONTEND_DIR) && $(BUN) run dev
Comment on lines +107 to +108

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Install workspace dependencies before starting the stub runtime.

Make frontend-stub depend on frontend-install; a fresh checkout otherwise
fails before Bun can resolve the development scripts.

Proposed fix
-frontend-stub:
+frontend-stub: frontend-install
 	cd $(FRONTEND_DIR) && $(BUN) run dev
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Makefile` around lines 107 - 108, Update the frontend-stub Make target to
depend on frontend-install so workspace dependencies are installed before
running the Bun development command; preserve the existing runtime command
unchanged.


install:
./scripts/build-wasm-extensions.sh
$(CARGO) install --path .
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ ______________________________________________________________________
and tools.
- [Building channels](docs/BUILDING_CHANNELS.md) — rebuilding bundled channel
artefacts.
- [SolidJS front-end](docs/solidjs-frontend.md) — the browser UI, its
daemon-free stub runtime (`make frontend-stub`), and feature flags.
- [Contributing](CONTRIBUTING.md) — development workflow and review tracks.
- [Changelog](CHANGELOG.md) — release history.

Expand Down
Loading
Loading