Commit Graph

1044 Commits

Author SHA1 Message Date
78b1d91568 g15office config 2026-10-09 10:35:16 +02:00
Jakub Zych
03553a9172 docs(quick-261008-o6k): summercms.io/update updates one application in place v0.1.14 2026-10-08 23:39:44 +02:00
Jakub Zych
9b3803c098 feat(sunrise): update an application in place with summercms.io/update
- new.sh gains --update, run inside one application directory (go.mod and
  summer.yaml required); it changes only that application
- the framework checkout is read from the app's go.mod replace (single-line
  or block form); module-version replaces, missing targets and foreign or
  dirty checkouts are refused through the shared check_framework_dir
- a detached checkout moves fast-forward only to the newest release (or
  SUMMERCMS_REF) through the shared move_detached; a branch checkout is
  pulled with git pull --no-rebase --ff-only, refusing a missing upstream
  or a diverged branch with the checkout unchanged
- other sm-*-app directories on the same checkout are named on one
  "not rebuilt" line and never built or written
- summer is reinstalled, a missing SUMMER_ADMIN__JWT__SECRET is appended to
  this app's .env (openssl, else head and base64; mode kept, never printed),
  then summer build runs and the script ends with the migrate and restart
  reminder and the shared path_hint
- sunrise.UpdateScript() serves the same script with its last line changed
  to main "$@" --update, so truncated downloads still run nothing
- check-phase14.3.sh --forbidden now allows only the literal
  SUMMER_ADMIN__JWT__SECRET in new.sh and still fails on any other
  SUMMER_ name or on a read or export of one; TestUpdateScript and
  TestUpdateScriptRoute are required tests
2026-10-08 20:15:50 +02:00
Jakub Zych
27f75308d7 docs(quick-261008-kdh): serve prints URL and admin status; summer new apps admin-ready 2026-10-08 17:24:33 +02:00
Jakub Zych
f70d80ec7e feat(build): make summer new apps admin-ready
- NewOptions.AdminSecret: summer new writes SUMMER_ADMIN__JWT__SECRET
  to .env (still 0600), generated from 32 crypto/rand bytes when empty
  and validated as at least 32 .env-safe characters
- .env.example gets an empty SUMMER_ADMIN__JWT__SECRET= placeholder
  with a comment; the secret never reaches the printed next steps
- The next steps and the generated CLAUDE.md explain the admin at
  /backend: make:admin-controller, build, migrate and
  summer admin:create --email you@example.com --superuser
- Goldens use a fixed, non-secret admin secret fixture
- Scaffolding, installation and users-and-permissions docs updated
2026-10-08 17:20:19 +02:00
Jakub Zych
da21670870 feat(surf): print the serve URL and admin status on startup
- Add surf.Router.AdminPrefix (additive): the admin mount path and true
  when BuildRouter mounted the cabana admin, false otherwise
- serve binds with net.Listen before printing, so a busy port fails
  without a misleading URL, then prints the listen address with a
  browser URL and an admin status line: the admin URL, a warning naming
  summer admin:create when backend_users is empty or missing, or
  admin: off with the steps to add an admin controller
- The administrator count is bounded by a 2 s timeout and never fails boot
- route:list ends with the same admin status line
- surf and cabana READMEs and the console and routing docs describe the output
2026-10-08 16:36:21 +02:00
Jakub Zych
4b5ed7707e docs(quick-261008-kdf): summer delegates pass flags through and forward signals 2026-10-08 16:24:54 +02:00
Jakub Zych
50c8cee541 fix(summer): forward SIGINT and SIGTERM to the app binary
- runAppBinary registers SIGINT and SIGTERM after its build and recursion
  checks and runChild forwards each signal to the app binary, then waits
  for it to exit, so stopping summer serve frees the port (WR-08)
- newAppCmd keeps the inherited stdin, env and output, and a context
  cancel sends SIGTERM with a 15-second appShutdownGrace before SIGKILL
- the child stays in summer's process group so the admin password
  prompts can read the terminal
- helper-process tests cover SIGINT, SIGTERM and context cancel
- console introduction notes the signal forwarding
2026-10-08 16:12:01 +02:00
Jakub Zych
b9ef034272 fix(summer): delegate admin, route and key commands and pass all delegate flags through
- delegateCommands() builds every delegate from one table of name,
  description and common-flags hint; toolCommands appends it
- route:list, key:generate, admin:create and admin:reset-password are new
  delegates; the child keeps summer's stdin, so the password prompts work
- migrate:rollback, queue:work and schedule:run lose their hand-written
  flag copies: --plugin, --queue and --once now pass through verbatim
- the command list marks delegates with "(flags pass to the app binary)"
  and the help command prints a Long text with the common flags
- console introduction, setup-and-maintenance and the root README
  describe the passthrough behaviour and the new delegates
2026-10-08 16:03:24 +02:00
Jakub Zych
9eb2a9237c fix(summer): pass delegated command flags to the app binary
- delegateCommand builds a Passthrough bonfire command, so
  `summer serve --addr :8123`, `summer serve --help` and `-h` reach the
  app binary instead of failing with "unknown flag: --addr"
- one leading "--" is dropped so `summer serve -- --addr :8123` still
  works
- appRunner is a package-level seam that tests replace to capture argv
2026-10-08 15:50:03 +02:00
Jakub Zych
14f6982c4d feat(bonfire): add Passthrough and Long command fields
- Command.Passthrough turns off cobra flag parsing and uses arbitrary
  args, so every argument after the command name, including --help, -h
  and --, reaches Run through Input.Args unchanged
- Command.Long sets cobra's Long text for the help command; without it
  the description is shown as before
- both fields are additive: commands without Passthrough parse flags and
  reject unknown ones exactly as before
- README and docs/console/writing-commands.md describe both fields
2026-10-08 15:49:39 +02:00
Jakub Zych
a6e2c399a5 docs(quick-261008-k7s): Bootstrap script PATH hint per login shell 2026-10-08 15:36:01 +02:00
Jakub Zych
ddf1178c51 feat(sunrise): print the PATH hint for the user's login shell
- new.sh reads the basename of SHELL (via ${SHELL:-} under set -u) and
  prints fish_add_path "<dir>" for fish, which keeps it for new sessions,
  export PATH="<dir>:$PATH" naming ~/.zshrc or ~/.bashrc for zsh and
  bash, and today's generic export line with "your shell profile" for
  any other, empty or unset shell
- dq_escape escapes the install directory for the target shell's double
  quotes: backslash, double quote and dollar always, plus backtick and a
  single-quoted ! for POSIX shells; a per-character loop, so bash 3.2
  and 5.2 behave the same
- the behaviour harness defaults SHELL to empty so cases do not depend on
  the developer's login shell, adds an unset-SHELL mode and covers fish,
  zsh, bash, empty, unset, unknown and two metacharacter directories
- TestBootstrapEndToEnd pins SHELL=/bin/bash
- sunrise README and docs/setup/installation.md describe the per-shell
  hint; the manual PATH section gains fish_add_path (go env GOPATH)/bin
2026-10-08 15:34:42 +02:00
Jakub Zych
8973da5cc1 test(14.3): record the v0.1.13 release and production acceptance in UAT 2026-10-08 14:10:43 +02:00
Jakub Zych
b1f54976aa test(14.3): persist human verification items as UAT v0.1.13 2026-10-08 12:50:07 +02:00
Jakub Zych
3caaf5f894 docs(14.3): add code review report 2026-10-08 12:42:58 +02:00
Jakub Zych
16a8520bb5 docs(14.3-04): update state and roadmap after the unit tests and gate plan 2026-10-08 12:32:18 +02:00
Jakub Zych
9dac7b8f67 docs(14.3-04): complete unit tests and phase gate plan 2026-10-08 12:31:45 +02:00
Jakub Zych
c4c91f0f6b chore(14.3-04): keep the gate marker line unique in check-phase14.3.sh 2026-10-08 12:30:11 +02:00
Jakub Zych
d0af79b496 docs(14.3-04): sign off the phase 14.3 security review and validation map
- security review: T-14.3-20..26 added, every row pinned by a named test or gate stage
- validation: per-plan map with exact tests and commands, validated and nyquist_compliant
2026-10-08 12:30:03 +02:00
Jakub Zych
89f1ab2c44 chore(14.3-04): fail-closed phase 14.3 gate with --unit, --security and --all
- --unit: vet, full suite with named --- PASS lines for every required test,
  goldens unchanged, examples/hello, docs check, site plugin/app, landing page
- --forbidden: no SUMMER_ name in new.sh, no new go.mod require since v0.1.12,
  no plugin/yaegi dependency, relative golden paths, goldens not ignored
- --bootstrap and --terminal run the gated end-to-end checks
- --security parses the threat register; --all runs every stage in its own process
2026-10-08 12:25:24 +02:00
Jakub Zych
93e9a8a45c test(14.3-04): pin the bootstrap script's behaviour matrix and shellcheck
- TestScriptBehavior: 25 cases on a stub PATH (real git, stub go/docker/summer)
  against a bare fake framework remote: usage and name errors, existing app,
  Go missing/old/devel, git required, Docker warning, newest release tag,
  SUMMERCMS_REF, fast-forward re-runs, refusals with HEAD unchanged,
  summer called from the parent with stdin closed, cd line and PATH hint
- TestScriptShellcheck: shellcheck -s bash new.sh, skipped only without shellcheck
2026-10-08 12:25:24 +02:00
Jakub Zych
392dd3c83f test(14.3-04): cover every summer new branch, key and CLI path
- name rule, existing targets, framework resolution order, inside-checkout refusal
- cleanup on failure, key validation, .env 0600, AGENTS.md symlink
- first commit identity, configured identity, missing git, --no-git, --no-plugin build
- plugin:add relative go.work, plain make:plugin routes, GenerateAppKey, summer new via the CLI
2026-10-08 12:18:14 +02:00
Jakub Zych
eed24b8ad1 test(14.3-04): pin every file summer new writes with golden files
- new_golden_test.go: -update flag, fixed 0x00..0x1f key, sibling summercms symlink
- testdata/new (16 files + next steps) and testdata/new-no-plugin (6)
- plugin go.mod replace and absent root go.sum asserted instead of pinned
2026-10-08 12:12:34 +02:00
Jakub Zych
9f56dc7eff docs(14.3-03): update state and roadmap after the docs and landing page plan 2026-10-08 12:10:20 +02:00
Jakub Zych
e2c8852b4c docs(14.3-03): complete docs and landing page plan 2026-10-08 12:09:59 +02:00
Jakub Zych
e0640220f2 docs(14.3-03): document summer new and the one-command start
- installation: one-liner first, what the script does and its overrides,
  running the generated app, summer new without the script, then the
  examples/hello walkthrough; the obsolete known-issues callout is gone (D-18)
- go modules and workspaces: what summer new writes (relative replace,
  framework detection order, committed relative go.work, no root go.sum);
  plugin:add adds a relative go.work path
- console scaffolding: Creating an application with --framework, --no-plugin,
  --no-git, the files written, first commit and naming convention (D-01)
- console introduction, llms note in site.yaml, root README quick start
2026-10-08 12:08:35 +02:00
Jakub Zych
90582522c7 docs(14.3-03): open the installation guide with the one-command start
- curl -fsSL https://summercms.io/new | bash -s -- demo and the follow-up
  compose, build, migrate and serve commands come first (D-18)
2026-10-08 12:02:10 +02:00
Jakub Zych
0d117a3e57 docs(14.3-02): update state and roadmap after the bootstrap script plan 2026-10-08 11:59:00 +02:00
Jakub Zych
e7637a0271 docs(14.3-02): complete bootstrap script plan 2026-10-08 11:58:45 +02:00
Jakub Zych
55dffb5b63 docs(14.3-02): add the phase 14.3 security review for plans 01 and 02
- ASVS L1 table (V5, V6, V10, V12, V14) and T-14.3-01..19 plus T-14.3-SC
  with controls, evidence and the plan 04 test that will pin each row
- 17 mitigated, 3 accepted (low), 0 open; refusal probe results
2026-10-08 11:57:04 +02:00
Jakub Zych
612d0c6dcb chore(14.3-02): add the D-20 container acceptance stages to the phase 14.3 gate
- --acceptance: in a bare node:24-bookworm container install jq, the Docker
  CLI and compose plugin (Docker apt repo) and Go 1.27.0 (sha256 from go.dev),
  pipe the committed new.sh into bash with SUMMERCMS_REPO=/fw and
  SUMMERCMS_REF=HEAD, then run the D-20 chain and require the starter route
- refuses when modules/sunrise/new.sh differs from HEAD; unique compose
  project with host-side cleanup of containers, volumes and networks
- --acceptance-production: same chain against https://summercms.io/new
2026-10-08 11:55:27 +02:00
Jakub Zych
cfd110eddb feat(14.3-02): add the sunrise bootstrap script module
- modules/sunrise/new.sh: curl | bash installer wrapped in main(), checks
  Go 1.27+/git/Docker, clones or fast-forwards the framework at the newest
  release tag (SUMMERCMS_REPO/DIR/REF overrides), installs summer and runs
  summer new next to the checkout, prints the cd line and a PATH hint
- sunrise.Script() returns a fresh copy of the embedded script
- smoke, shape, truncation and gated end-to-end tests; README and modules row
2026-10-08 11:51:39 +02:00
Jakub Zych
d0888d7576 docs(14.3-01): complete summer new generator plan 2026-10-08 11:45:53 +02:00
Jakub Zych
6695ab422a chore(14.3-01): add the phase 14.3 generator gate
- scripts/check-phase14.3.sh --generator runs summer new next to a
  symlinked checkout with no git identity, checks the layout and first
  commit, then docker compose up, summer build, migrate and serve, and
  requires the starter route to answer

Claude-Session: https://claude.ai/code/session_01M8Qu9LgCKYy7iYEho52tW8
2026-10-08 11:44:44 +02:00
Jakub Zych
147ef2494e feat(14.3-01): give summer new apps a key, compose, agent notes and a first commit
- .env (0600) with a fresh lagoon.GenerateAppKey key and the compose DSN;
  .env.example without a key
- compose.yaml runs postgres:16 on 127.0.0.1:54320 with a healthcheck
- .gitignore, CLAUDE.md with AGENTS.md as a relative symlink
- git init on main and one commit, with a fallback identity only when git
  has none; git failures are warnings; --no-git skips it
- print the next steps after creating the app

Claude-Session: https://claude.ai/code/session_01M8Qu9LgCKYy7iYEho52tW8
2026-10-08 11:44:44 +02:00
Jakub Zych
ca5b2963a5 feat(14.3-01): export lagoon.GenerateAppKey
- key:generate now calls GenerateAppKey; its output is unchanged
- tools can write a fresh app.key without the check-mark decoration
- document lagoon.GenerateAppKey in the lagoon README

Claude-Session: https://claude.ai/code/session_01M8Qu9LgCKYy7iYEho52tW8
2026-10-08 11:41:38 +02:00
Jakub Zych
cc7386d22e fix(14.3-01): ship http body limits in examples/hello
- add examples/hello/config/http.yaml so serve, route:list and
  TestTypedItemRoute work without a manual config step
- drop the matching setup step and known-issue notes from README.md and
  docs/setup/installation.md
2026-10-08 11:40:20 +02:00
Jakub Zych
c33ebf3b95 feat(14.3-01): detect the framework checkout and guard summer new targets
- resolve the framework from --framework, then a sibling summercms or
  summercms.go checkout, then the binary's own source tree, each accepted
  only when its go.mod declares the framework module
- refuse a missing parent and a target inside the framework checkout
- remove the half-written app when any step fails
- add --no-plugin for an app with no starter plugin
2026-10-08 11:40:20 +02:00
Jakub Zych
7bc955a0c2 feat(14.3-01): add summer new with a starter route and relative go.work
- build.NewApp writes sm-<name>-app: go.mod with a relative framework
  replace, go.work, summer.yaml, config/ and a starter plugin
- make:plugin gains an opt-in starter route (GET /{$}) in the same
  routes.go template; plain make:plugin output is unchanged
- plugin:add writes go.work use paths relative to the go.work directory
- bonfire accepts new as a bare tool command name
2026-10-08 11:37:53 +02:00
Jakub Zych
86fcd5d4fd docs(14.3): mark research open questions resolved 2026-10-08 01:17:06 +02:00
Jakub Zych
2f7d95626e docs(14.3): create phase plan 2026-10-08 01:15:04 +02:00
Jakub Zych
a2ec923439 docs(phase-14.3): add validation strategy and post-research decisions 2026-10-08 00:48:45 +02:00
Jakub Zych
861e7efb4f docs(14.3): research phase domain 2026-10-08 00:47:41 +02:00
Jakub Zych
d94f804ddd docs(14.3): insert phase for summer new and summercms.io/new bootstrap, capture context 2026-10-08 00:30:35 +02:00
Jakub Zych
498f4b4f3a docs(14.2): create phase plan
Four plans: Go glue (dev seed, plugin-command DB, marker, framework
/storage mount, access log), dev-stack.sh and guard, Nuxt specs and
manual UAT, unit tests and check-phase14.2.sh. Adds D-23 (Centrifugo
collection/wishlist namespaces) and resolves research open questions.
2026-10-07 21:26:08 +02:00
Jakub Zych
05349d4b6d docs(14.2): record planning checkpoint decisions D-18..D-22 2026-10-07 20:40:21 +02:00
Jakub Zych
29a5fc1608 docs(phase-14.2): add validation strategy 2026-10-07 20:16:55 +02:00
Jakub Zych
fa047559cf docs(14.2): research phase domain 2026-10-07 20:16:10 +02:00
Jakub Zych
5429d46751 docs: capture exploration — core plugin port inventory, Horoskopia and Wavepath seeds 2026-10-07 20:10:28 +02:00