Commit Graph

2166 Commits

Author SHA1 Message Date
Jakub Zych
b651a67356 docs(quick-261029-d9j): user plugin mail locale from Accept-Language, fallback key, Polish subjects 2026-10-29 09:49:36 +01:00
Jakub Zych
e51df97db8 docs(quick-261029-1r3): derive the summercms.io landing version from go.mod, close its todo 2026-10-29 01:32:38 +01:00
Jakub Zych
0e5bb0c44f docs(quick-261028-wqu): summercms.io changelog dropdown with Framework and Plugins streams 2026-10-29 00:31:21 +01:00
Jakub Zych
bac8e7ef22 docs: plugin release posts go to /changelog/plugins 2026-10-29 00:25:34 +01:00
Jakub Zych
83a952a74b docs: capture todo - Stream-aware previous/next links on the summercms.io changelog 2026-10-29 00:05:21 +01:00
Jakub Zych
545c0b4350 docs: record the version-format decision on the landing-version todo 2026-10-29 00:05:08 +01:00
Jakub Zych
13aa5f3227 docs: capture todo - Derive the summercms.io landing version from go.mod 2026-10-28 23:41:08 +01:00
Jakub Zych
860c41d829 docs(quick-batch-261028-rqa): 6 framework items complete, close their todos, record follow-ups v0.5.3 2026-10-28 21:51:41 +01:00
Jakub Zych
6c606c666b feat(diary): boot list, help and completion requests quietly (quick-261028-rqc)
- helpOnly also counts no command word, list, help, cobra's shell
  completion requests and --help=<bool>, read the way pflag does
- TestHelpOnlyAgreesWithCobra pins the classification against bonfire's
  real dispatch, with the passthrough --help case as the exception
- console and logging docs describe which invocations boot quietly
2026-10-28 21:47:42 +01:00
Jakub Zych
6b9becd994 feat(diary): boot --help invocations with the console at warn (quick-261028-rqc)
- Options.Args holds the command-line arguments; FromGlobals fills it
  from os.Args[1:], so the generated main needs no change
- Bootstrap and Setup install the setup with Quiet when Args only ask
  for help (-h, --help) and no -v is given; files keep their levels
- TestBootQuietSmoke runs the generated main's sequence with a plugin
  that logs from Register and Boot
2026-10-28 21:43:36 +01:00
Jakub Zych
653d95a5b9 test(cabana): cover the Roles form's holders list (quick-261028-rqg)
- TestRolesHoldersPartial (Docker-free): users partial field, view model
  guard, links, state lines, escaped strings, empty line, note
- TestRolesHolders (Postgres): D-03 hiding, links by manage_users, states,
  empty role, 100-row cap with note, 403 without manage_roles
2026-10-28 21:37:22 +01:00
Jakub Zych
8cb56a4c51 feat(cabana): list the administrators holding a role on the Roles form (quick-261028-rqg)
- users form partial on the Administrators tab of the role update form,
  served by rolesAdmin.PartialData through scopeAdministrators (D-03)
- deleted and deactivated holders marked, superusers only for superuser
  editors, first 100 rows with a count note, preview links for editors
  holding backend.manage_users
- en/pl phrases, README and docs, TestRolesSmoke asserts the partial
2026-10-28 21:32:19 +01:00
Jakub Zych
c8a22e3e84 test(boardwalk): cover the build id, the reload banner and the chunk reload guard (quick-261028-rqb) 2026-10-28 21:26:20 +01:00
Jakub Zych
75e19dc153 chore(boardwalk): rebuild the embedded admin for the reload banner and chunk guard (quick-261028-rqb) 2026-10-28 21:25:18 +01:00
Jakub Zych
64452a4919 feat(admin): reload once when a chunk fails to load after a deploy (quick-261028-rqb)
- installChunkReloadGuard reloads on vite:preloadError, at most once per
  60 s through a sessionStorage timestamp; no storage means no reload
2026-10-28 21:21:28 +01:00
Jakub Zych
291b18fb1e feat(boardwalk): expose the admin build id and show a reload banner when a new build is deployed (quick-261028-rqb)
- boardwalk.BuildID hashes the dist tree plus the binary's build info once
  per handler; X-Summer-Build on every response, {prefix}/build.json and the
  summer-admin-build meta carry it
- the SPA reads the booted build, re-checks on focus, visibility and every
  5 minutes, and shows UpdateBanner on a different build
2026-10-28 21:19:36 +01:00
Jakub Zych
4957e5ce25 refactor(surf): take the uploads inline types from attach.IsInlineContentType (quick-261028-rqe)
- the route's private inline list and its helper are gone; the
  disposition writer asks attach.IsInlineContentType, the same
  definition attach.Store uses for the disposition it stores
- headers are unchanged (TestUploadsResponseHeaders, TestUploadsMount)
- surf README and the storage page name the shared function
2026-10-28 21:12:46 +01:00
Jakub Zych
ba8432cfb8 fix(lagoon/attach): store non-inline uploads with Content-Disposition attachment (quick-261028-rqe)
- attach.IsInlineContentType: the shared inline raster list (JPEG, PNG,
  GIF, WebP, AVIF), parameters and case ignored, false for empty or
  unparsable values
- writeBlob stores Content-Disposition: attachment for every other type,
  so a public bucket or CDN makes the browser download HTML, SVG, PDF or
  plain text; content_type and thumbnails are unchanged
- driver tests on memblob and fileblob, Postgres-backed Store assertion,
  lagoon README and the storage and attachments pages
2026-10-28 21:10:48 +01:00
Jakub Zych
61d10436c7 feat(cabana): log successful toolbar and widget action runs with the admin id (quick-261028-rqf)
- runAction writes "cabana: admin action run" with controller, action,
  admin_id and kind (toolbar or field; field name and record id for a
  widget), never values, payload, answer or record contents
- the failure and data-rejected lines carry the same keys (admin_id, kind)
- actionAdminID helper shared with the bulk and record lines (unchanged)
- TestAdminActionRunLog pins the line on the acme.demo fixture (Postgres)
- README and the permissions docs describe the run log
2026-10-28 21:05:55 +01:00
Jakub Zych
202d38ba3c docs(quick-261028-rqd): record the console info findings as fixed and the earlier gates' consumer names as a todo 2026-10-28 20:57:22 +01:00
Jakub Zych
10fec478be fix(scripts): read the sibling application paths and names from the environment in the 19.8 gate (IN-09, quick-261028-rqd) 2026-10-28 20:56:23 +01:00
Jakub Zych
2da42e93f9 docs(console): say that -q hides the Created and Added lines (IN-05, quick-261028-rqd) 2026-10-28 20:53:26 +01:00
Jakub Zych
bb7e14bce9 fix(summer): exit 128+n when a delegated binary dies by a signal (WR-10, quick-261028-rqd) 2026-10-28 20:52:57 +01:00
Jakub Zych
4914cade5a fix(summer): send a delegate's stderr to the root's error writer through bonfire.ErrWriter (IN-13, quick-261028-rqd) 2026-10-28 20:50:39 +01:00
Jakub Zych
f3f87f3cc4 refactor(diary): share the console types through internal/consolekit so diary no longer links bonfire (IN-07, quick-261028-rqd) 2026-10-28 20:46:32 +01:00
Jakub Zych
3520d5d480 fix(diary): skip HideOnTTY records only on a terminal console, also with forced color (IN-01, quick-261028-rqd) 2026-10-28 20:41:07 +01:00
Jakub Zych
f91d70d05e fix(bonfire): kill a live view on a signal only after it has started (IN-12, quick-261028-rqd) 2026-10-28 20:37:30 +01:00
Jakub Zych
6efb9a4997 fix(bonfire): print Error lines above a running live view (IN-10, quick-261028-rqd) 2026-10-28 20:35:34 +01:00
Jakub Zych
4d75695582 fix(bonfire): keep a blank line printed during a live view (IN-11, quick-261028-rqd) 2026-10-28 20:34:35 +01:00
Jakub Zych
795c4f6b29 feat(bonfire): add FlagBool and read every bare switch with it (IN-04, quick-261028-rqd) 2026-10-28 20:32:38 +01:00
Jakub Zych
e34d113c80 fix(bonfire): read the =value forms of the global flags and use the parsed globals in the error block (IN-02, quick-261028-rqd) 2026-10-28 20:29:16 +01:00
Jakub Zych
6294ac4141 docs(quick-261028-rqd): record that bonfire dropped fang 2026-10-28 20:26:35 +01:00
Jakub Zych
53c0a65a43 refactor(bonfire): run the root without fang so bonfire's root help stays installed (IN-06, quick-261028-rqd) 2026-10-28 20:26:20 +01:00
Jakub Zych
39c59b8329 fix(bonfire): recognise cobra's unknown command error once in Execute (IN-03, quick-261028-rqd) 2026-10-28 20:23:39 +01:00
Jakub Zych
8476a65aa0 fix(bonfire): replace invalid UTF-8 before the control scan in Sanitize (IN-08, quick-261028-rqd) 2026-10-28 20:21:19 +01:00
Jakub Zych
825a3fd2da docs(quick-261028-r16): close the two lagoon todos, record the fonoteka.go and S3 follow-ups 2026-10-28 19:47:44 +01:00
Jakub Zych
36092f542c fix(lagoon): warn on after-commit work registered after lagoon:after_commit; correct the OnDatabase example and pivot read guidance (quick-261028-r16)
- flushStatementAfterCommit marks the statement; AfterCommit logs a warning
  when work is buffered on a flushed statement that no longer holds GORM's
  transaction. Log-only: the work still never runs, the write succeeds
- subtests pin the late callback warning, a callback between commit and
  flush, and a reused chained statement staying silent
- README OnDatabase example registers After(gorm:create).Before(commit),
  matching docs/database/transactions.md
- RegisterJoinTable: pivot-ordered reads join the pivot table explicitly;
  a Preload cannot be ordered by a pivot column
2026-10-28 19:45:57 +01:00
Jakub Zych
ebdfd78ab4 docs(storage): pin the script-chunk PNG upload and split the uploads deploy note (quick-261028-r16)
- TestPNGScriptChunkNaming (no Docker) and TestStoreScriptChunkPNG (Postgres)
  pin the todo exploit: a decodable PNG with a script tEXt chunk uploaded in
  image mode as x.html is stored and served as .png, bytes unchanged
- storage deploy note separates static servers (nosniff, nginx extension
  allow-list, 404 otherwise) from public buckets, which send the stored
  sniffed Content-Type; attachments.md points to it
2026-10-28 19:42:28 +01:00
Jakub Zych
6ea2cb70e0 fix(build): keep an existing toolchain line instead of adding a second one
make:*, plugin:add and new inserted toolchain go1.27.0 into go.mod and
go.work whenever that exact line was missing. A file that already named
another toolchain (go mod tidy and go work use write the running one)
ended up with two toolchain lines, and Go refused to load it with
"repeated toolchain statement". ensureToolchain now keeps an existing
line, replaces it only when it names an older toolchain, and inserts
one only when there is none.
2026-10-28 19:42:20 +01:00
Jakub Zych
8c9c967c88 docs: close todo and debug session - user logout leaves the session cookie valid 2026-10-28 19:24:43 +01:00
Jakub Zych
1a487bc644 docs(quick-261028-pq8): fix the four internal/build scaffolder todos 2026-10-28 19:18:29 +01:00
Jakub Zych
8bc18c90b6 feat(build): scaffold working admin controllers with model, AdminFS and delete (quick-261028-pq8)
- make:admin-controller edits the singular of its name (--model overrides):
  ModelName, modelClass and the YAML under models/<model>/
- NewRecord returns &models.<Model>{} when the model exists; otherwise the
  nil body stays and the command says to run make:model
- config_list.yaml offers create and delete with showCheckboxes
- registry.gen.go embeds controllers/*/*.yaml and models/*/*.yaml once they
  exist and exposes generatedAdminFS(); scaffolded plugins implement
  pact.AdminAssets through it, and a plugin without AdminFS gets a note
- blog example moves its YAML to models/post; docs and help text follow
2026-10-28 19:15:23 +01:00
Jakub Zych
70e4b4183c feat(build): mark scaffolded files with //summer:make and pass the app to generated commands (quick-261028-pq8)
- model, migration, command, job and admin-controller stubs start with
  //summer:make <kind>; registry.gen.go keeps its generated-code header
- the registry scan accepts the directive and the older header
- command functions may take one *backpack.App; generatedCommands takes a
  variadic app, so plugin.go files calling generatedCommands() still compile
- scaffolded plugins keep the app from Boot and return generatedCommands(p.app)
- make:command notes the nil app for an older plugin.go
- docs, help text and the blog example follow
2026-10-28 19:04:39 +01:00
Jakub Zych
a95a014b52 fix(build): scaffold plugins under plugins/<vendor>/<name> (quick-261028-pq8)
- make:plugin writes plugins/<vendor>/<name> with module
  <app>/plugins/<vendor>/<name>; the package name stays <name>
- make:* and the models-leaf check look in summer.yaml, then
  plugins/<vendor>/<name>, then the older plugins/<name>
- summer new puts its starter plugin at plugins/golem15/<name>
- refuse a vendor directory that is a legacy plugin module and a second
  copy of a plugin that already sits in plugins/<name>
- help text and docs, with an upgrading note: moving is optional
2026-10-28 18:55:46 +01:00
Jakub Zych
a941ab2394 fix(build): order scaffolded migrations after every existing one (quick-261028-pq8)
- nextMigrationFile starts at one second past the newest updates/ timestamp
  when that is not earlier than now, so registry order is creation order
- frozen-clock unit test and a registry-order check in the scaffold test
- docs: drop the same-second caveat and the manual order check
2026-10-28 18:49:17 +01:00
Jakub Zych
017e0e9a6a docs(20): create phase plan 2026-10-28 18:39:49 +01:00
Jakub Zych
2bef465ecd docs: capture todo - make:plugin drops the vendor namespace 2026-10-28 18:24:53 +01:00
Jakub Zych
d788d12785 docs(phase-20): add pattern map 2026-10-28 17:55:35 +01:00
Jakub Zych
341a3a51a1 docs(phase-20): record plan-time decisions D-20..D-23 2026-10-28 17:52:58 +01:00
Jakub Zych
b5a20996c1 docs(phase-20): add research and validation strategy 2026-10-28 17:50:49 +01:00