Walking skeleton: Go binary + SolidJS shell + supervised hugo server preview #1
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/deckle#1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What to build
The end-to-end spine everything else plugs into (docs/DECISIONS.md D13, D22): a single Go binary that, pointed at a Hugo site directory, serves an embedded SolidJS SPA shell and supervises a
hugo server --buildDraftssubprocess, with the live preview shown in an iframe inside the shell. Include a sample Hugo site in the repo (testdata) to run against. The tool binds to localhost only.Acceptance criteria
harness serve --site <dir>starts, spawnshugo server --buildDraftsbound to an internal port, and restarts it if it crashesgo buildproduces one deployable artifactBlocked by
None - can start immediately
Agent Brief
Category: enhancement
Summary: Build the end-to-end walking skeleton: a single Go binary that serves an embedded SolidJS shell and supervises a
hugo server --buildDraftssubprocess whose output is shown live in an iframe.Current behavior:
The repository is greenfield: it contains only
README.mdanddocs/DECISIONS.md(the design record). There is no code, no build tooling, and no CI. Every other planned issue depends on the spine this issue creates.Desired behavior:
harness serve --site <dir>, pointed at a Hugo site directory, starts a localhost-only web server (D19: bind to localhost, never a public interface) that serves a SolidJS SPA embedded in the binary viago:embed(D22). On startup it spawnshugo server --buildDraftsas a subprocess (never linked as a library — D13/D22) bound to an internal localhost port, and supervises it: if the subprocess crashes it is restarted. The SPA presents the TYPO3-style three-pane layout placeholder (D11): page-tree pane, form pane, and a preview pane containing an iframe of the live Hugo site. Hugo LiveReload works through the iframe, so hand-editing a content file on disk updates the preview with no tool involvement. If the Hugo subprocess fails to build (e.g. a broken template or content file), the error output is captured and surfaced in the shell UI instead of leaving a dead iframe.The repo includes a minimal sample Hugo site under a testdata-style directory to run and test against.
Key interfaces:
harness serve --site <dir>(the binary name isharness; further subcommands likeinitare other issues' scope)hugo server --buildDraftson an internal port, restart on crash, capture stdout/stderr for error surfacing; assumehugois available onPATHfor this slice (version pinning + auto-download is a separate issue)go buildfrom the repo root produces one deployable artifact containing the built frontend (D22); frontend tooling choice (e.g. Vite) is the implementer'sAcceptance criteria:
harness serve --site <dir>starts, spawnshugo server --buildDraftsbound to an internal port, and restarts it if it crashesgo:embed;go buildproduces a single deployable artifactOut of scope:
harness.yaml, and auto-downloading the hugo binary (issue #5) — assumehugoon PATHharness initscaffolding (#17)Landed via PR #18 (merged).
Verification signal: Forgejo Actions CI —
ci / build-and-test, run 2, success in 2m8s (frontend build+test,go vet,go testincl. the real-hugo integration test,go build). The initial run was stuck pending because the workflow targeted adockerrunner this instance doesn't offer; fixed on the PR branch (commit1d81872,runs-on: ubuntu-latest), after which CI went green.Review: Conventional-commit title; valid
Closes #1; clean merge into main; all 8 acceptance criteria satisfied (harness serve/supervise/restart, localhost-only bind, three-pane SolidJS shell + preview iframe, LiveReload-safe polling, build errors surfaced, go:embed single artifact, testdata sample site used by tests, CI runs Go+frontend). Scope stayed within the issue — #2/#3/#4/#16/#17 left as declared placeholders.Verdict: PASS. Merged with a merge commit.