Commit Graph
250 Commits
Author SHA1 Message Date
m038andClaude Opus 4.8 db50b84bfd docs: record Phase 2 test-env upgrade executed + twig3 config reconciliation
Test env upgraded to Grav 2.0.7, plugins to stable, smoke-tested, git-sync
re-enabled. Documents the strict_mode Twig 3 migration gotcha (fresh-image
local build skips the schema migration that self-upgrade runs).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 20:15:57 +02:00
m038andClaude Opus 4.8 9440bdc29d docs: capture Grav new-user --admin-type gotcha (api.* vs admin.*)
On Admin2-only installs, login new-user auto-detects the admin permission
type to api-only, so accounts lack admin.login and silently fail on
access.admin.login-gated pages like /gpx-manager. Document the root cause,
the --admin-type both fix baked into make test-account, and prevention.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 19:49:35 +02:00
m038andClaude Opus 4.8 fb9a47ea0c docs: record Grav 2.0.4 upgrade; GPM-managed plugins; prod runbook
Update CLAUDE.md + architecture.md stack to Grav 2.0.4 stable, admin2 2.0.10,
gpm.releases: stable, and the three-category plugin-management model
(GPM-managed / custom-in-repo / remote-only git-sync). Add execution outcome,
Phase 3 prod fresh-install runbook (documentation-only), and mark plan Status
complete. Note the Form 9.1.10 filepond regression as a known issue owned by
the separate form-to-page rework.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 19:39:00 +02:00
m038andClaude Opus 4.8 58d2d70c13 test: self-contained local test account + urlencoded login
Add a dedicated, gitignored testrunner account auto-created by the suite
(make test-account, also invoked from global-setup) so `make test` no longer
needs the real account in .env. The target uses --admin-type both so the
account has admin.login for the gpx-manager specs. test-post.sh switches its
login POST to --data-urlencode to survive special chars in credentials.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 19:36:39 +02:00
m038andClaude Opus 4.8 725131e128 test: retarget form-config and post tests from retired japan-korea-2026 to italy-2026-demo
The japan-korea-2026 trip is retired; italy-2026-demo is the vetted go-forward
fixture (already used by the Playwright suite and matching post-form.md parent).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 17:50:05 +02:00
m038andClaude Opus 4.8 0f9a3b86b8 build: drop admin2/api zip-stash from server-install; install via GPM (option B)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 16:41:50 +02:00
m038andClaude Opus 4.8 a639dc6e41 build: fix remote-upgrade-grav; add remote plugin-update, git-sync toggle, content-status targets
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 16:41:25 +02:00
m038andClaude Opus 4.8 3fffa02bec build: pin Grav core 2.0.4 and add admin2/api/flex-objects to plugins.txt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 16:38:58 +02:00
m038andClaude Opus 4.8 6ad62360c6 docs: apply doc-review fixes to Grav 2.0.4 upgrade plan
- Task 2 Step 8: version-assert Expected output now includes the
  'version:' prefix the grep command actually prints (coherence).
- Rollback: state core self-upgrade is forward-only (no revert) and warn
  that server-install.sh must never be used as a live-server rollback —
  it rm -rf's the untracked git-sync.yaml encrypted token (feasibility +
  adversarial).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
2026-07-04 16:35:20 +02:00
m038 a28ef8f8d7 Merge branch 'main' into grav-2.0.4-upgrade 2026-07-04 15:20:59 +02:00
m038andClaude Opus 4.8 1710ad8612 docs: document dual-repo submodule workflow and pointer-bump convention
Add docs/solutions/architecture-patterns/dual-repo-submodule-workflow.md
covering the outer-repo + user/ submodule structure, when to bump the pin
(cross-repo feature boundaries, not routine content), the reachable/push-first
rules, and the worktree + per-worktree dev-server flow. Update CLAUDE.md's
folder explanation and add a "Dual-repo submodule structure" section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 15:13:50 +02:00
m038andClaude Opus 4.8 52010c9733 chore: register user/ as a git submodule
Converts the orphaned gitlink (160000 with no .gitmodules) into a proper
submodule pointing at the content remote, and absorbs user/.git into
.git/modules/user so linked worktrees can populate user/. Bumps the pin
from 75da83d to the current pushed origin/main (924cfc1) as a clean
baseline. Enables per-worktree user/ checkouts for parallel dual-repo work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 15:04:27 +02:00
m038andClaude Opus 4.8 b47b1e9657 docs: add Grav 2.0.4 upgrade implementation plan
6 tasks: Phase 0 edits, local build+validate, Makefile remote targets
(fix broken remote-upgrade-grav; add update/git-sync-toggle/content-status),
server-install cleanup, test-env upgrade sequence, docs+prod runbook.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 15:02:59 +02:00
m038andClaude Opus 4.8 3085cede28 docs: correct upgrade spec channel + CLI commands after container verification
- GPM channel is system.yaml gpm.releases (testing->stable), not GRAV_CHANNEL
- core upgrade is 'bin/gpm self-upgrade -y'; existing remote-upgrade-grav
  target ('bin/grav upgrade') is broken and must be fixed
- add server content-pull + cache-clear + preflight steps to Phase 2

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:58:27 +02:00
m038andClaude Opus 4.8 2f733f668d chore: register user/ as a git submodule
Converts the orphaned gitlink (160000 with no .gitmodules) into a proper
submodule pointing at the content remote, and absorbs user/.git into
.git/modules/user so linked worktrees can populate user/. Bumps the pin
from 75da83d to the current pushed origin/main (924cfc1) as a clean
baseline. Enables per-worktree user/ checkouts for parallel dual-repo work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:57:13 +02:00
m038andClaude Opus 4.8 99f290fbca docs: add Grav 2.0.4 upgrade + GPM-manage plugins design spec
Coordinated upgrade of core rc.10 -> 2.0.4 and promotion of
admin2/api/flex-objects to GPM management (option B). Documents the
dependency-forced atomicity, the three plugin-management categories,
git-sync handling (disable-during-upgrade, remote-only), and the
local -> test -> prod(documented-only) rollout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:54:28 +02:00
m038andClaude Opus 4.8 b1b7f64996 docs: add journal-post-form implementation plan (ce-plan + reviewed)
Enriched from the requirements-only brainstorm to implementation-ready:
7 units (active-trip parent injection, full field exposure, EasyMDE,
client-side HEIC conversion, Field Notes mobile styling, draft resilience,
tests). Applied headless doc-review fixes plus two owner decisions:
/post bundle built ESM + code-split (defer heic-to for cold-load), and
R20 draft persistence narrowed to text (photos re-picked after re-auth).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:31:07 +02:00
m038andClaude Opus 4.8 2695bce835 docs: compound learning — retiring a consolidated Grav sub-page
Capture the safe procedure + three non-obvious traps from the standalone-
page cleanup: keep the folder as a routable:false data container, repoint
Back-link fallbacks to the grandparent (silent direct-landing regression),
and sync the gitignored demo source + Makefile or the next demo-load undoes it.

Seed CONCEPTS.md (Trip, Entry, Story, Active Trip) and surface docs/solutions/
+ CONCEPTS.md in CLAUDE.md so future sessions discover them.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:23:25 +02:00
m038andClaude Opus 4.8 7984b3a75e docs: sync CLAUDE.md + reference/guides with standalone-page cleanup
- Replace 'Shared feed-map partial' section with 'entry-map' partial + the
  single MapUtils.initEntryMap map path
- Trip architecture: two content subfolders (dailies/stories as inert
  routable:false containers); map/stats inline on trip page
- Fix stale references to deleted map/stats/dailies/stories templates in
  architecture.md (template list, page tree, GPX flow) and trip-switching.md
  (scaffold + verify steps)
- Correct GPX rendering: toGeoJSON bundled in map.js, no leaflet CDN
- Pre-launch smoke test now checks the trip page feed, not /dailies

Left docs/working/* (milestones, learnings, QA, plans) as point-in-time history.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:06:55 +02:00
m038andClaude Opus 4.8 4dc5bf6812 build: add per-environment (test/prod) Makefile targets
Split env config into local vs remote:
- .env: local/shared config, always loaded (docker compose + make test)
- .env.test / .env.prod: full remote config, loaded on demand via ENV

Remote targets now generate -test/-prod variants (e.g. remote-install-prod);
a guard-env prerequisite blocks bare remote targets with no environment set.
Refresh .env.example to document the two-tier layout and add .env.prod/.env.test
to gitignore and the never-read list in CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:02:13 +02:00
m038andClaude Opus 4.8 a1425e851b docs: mark standalone-page-cleanup plan complete
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:58:59 +02:00
m038andClaude Opus 4.8 7407129812 test: re-point suite off retired standalone views
Phase-1 fallout: delete tests for deleted pages, re-point moved-behavior
tests to the trip/home page where the content now lives.

- maps.spec: keep M4/M7/M8 (home+trip maps); drop M1-3,5,6,9-11 (/map,
  /dailies & /stories mini-maps)
- map-ux: re-point MUX4/5 sort toggle to #trip-sort-toggle on trip page
- nav: N1->trip page, N2->home, drop N3 (/stats) + N5 (obsolete skip)
- dailies: T1->trip page; T2->trip page with oldest-first assertion;
  fix T3-T6 stale entry-detail selectors (.entry-* -> .journal-post-*,
  pre-existing failures from an earlier entry redesign)
- stories: S1/S5 -> trip feed story cards ([data-type=story])
- gpx-journey: load MapUtils from the trip page instead of /map
- a11y: A4 photo strips -> trip page; drop AX3 (covered by AX2)
- post/helpers: verify posted entry on the trip page (ACTIVE_TRIP_URL)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:58:27 +02:00
m038andClaude Opus 4.8 a2457d6402 docs: mark cleanup Phase 1.5 + 2 complete; note test debt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:43:27 +02:00
m038andClaude Opus 4.8 2729a8c14c docs: mark standalone-page-cleanup Phase 1 complete
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:23:14 +02:00
m038andClaude Opus 4.8 aeea6744bd chore: drop 02.map/03.stats from demo-load target
Phase 1 cleanup companion — demo-load no longer creates the retired
map/stats sub-pages or copies their now-deleted source .md files.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:22:58 +02:00
m038andClaude Opus 4.8 a9ca68d790 docs: add standalone sub-page cleanup plan (map/stats/dailies/stories retire)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:15:55 +02:00
m038andClaude Opus 4.8 9fbc61ee6e docs: mark map-init consolidation plan complete
Status → Complete; document the markLatest opt added during execution,
the window.tripMap/homeMap exposure, and the test outcome (38 passed;
M6/H1 pre-existing and out of scope).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-28 00:11:45 +02:00
m038andClaude Opus 4.8 abab85ca5c docs: add map-init consolidation plan (reviewed)
Plan for extracting duplicated MapLibre init into a shared
MapUtils.initEntryMap(opts). Incorporates ce-doc-review findings:
card-absent fallback invariant scoped (no-op→navigate), exact
isLatest predicate, and the home-map attribution restyle documented
as an intentional change. Filter-hidden-card click left as a noted
known limitation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 23:43:03 +02:00
m038andClaude Opus 4.8 0427b75b6e chore: update .env.example
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 22:35:43 +02:00
m038andClaude Opus 4.8 4665e014be chore: bump user/ to home/trip view convergence theme work
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 22:35:43 +02:00
m038andClaude Opus 4.8 567ea7bb89 docs: add home/trip convergence plan (complete) and update design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 22:35:43 +02:00
m038andClaude Opus 4.8 dd3c89e88a docs(claude): document shared trip-feed-col + home-predeparture partials
Adds a 'Shared trip-feed-col partial' section (callers, param table, the
home-predeparture sibling, and the initTripStats JS glue) and points the
trip-page filter-bar note at it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 22:32:11 +02:00
m038andClaude Opus 4.8 301de51add docs: add home/trip view convergence design spec
Converge home-active feed-col chrome (date range, filter bar, stats/
cycling panels) with the trip page via a shared partial + shared
initTripStats() glue. Map convergence deferred to a later spec.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
2026-06-27 19:37:11 +02:00
m038andClaude Sonnet 4.6 119e8e5a35 chore: restore docs/immich-workflow gitignore entry dropped in previous commit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 18:35:37 +02:00
m038andClaude Sonnet 4.6 532fbda801 fix(home): wrap map init in DOMContentLoaded to fix broken homepage map
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 18:34:21 +02:00
m038andClaude Sonnet 4.6 fcd8ed13ce chore: ignore services/ dir, remove stale travel-memories gitignore entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 18:25:29 +02:00
m038andClaude Sonnet 4.6 a80b0a90fc chore: remove travel-memories service from repo (moved to separate project)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 18:23:54 +02:00
m038andClaude Sonnet 4.6 4df191b9f4 docs: clean up research notes, add production backlog and working docs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 18:22:58 +02:00
m038andClaude Sonnet 4.6 0d3a3451f3 chore: update .env.example and fix remote-fetch-content sparse-checkout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 18:22:53 +02:00
m038 65e18be92a docs: mark template-refactor plan as complete 2026-06-26 10:07:31 +02:00
m038 13fe204d30 docs: mark accessibility-audit plan as complete 2026-06-26 09:55:05 +02:00
m038 ae33c256a7 docs: mark pixelfed-import plan as complete 2026-06-26 09:43:15 +02:00
m038andClaude Sonnet 4.6 ef215cb4fc docs: backfill Status field on all plans
Assigns Status to the 18 plans that had none, based on checkbox
completion state, memory entries, and CLAUDE.md documentation:

- 16 marked Complete (dates approximate from git/memory)
- 1 marked Not started (template-refactor, now unblocked)
- 1 marked Deferred (pixelfed-import, superseded by travel-memories)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 09:37:56 +02:00
m038andClaude Sonnet 4.6 ac80a9ab18 docs: add plan status convention to CLAUDE.md
Defines Status field values (Not started / In progress / Deferred /
Complete / Abandoned) and scanning rules so any session knows which
plans are open vs done without reading every file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-26 09:37:22 +02:00
m038 82d6da48e1 test: add global teardown — sweep ui-test entries from 02.post and dailies 2026-06-25 07:32:32 +02:00
m038 7b93fbc5a3 docs: mark asset pipeline plan as complete 2026-06-25 00:13:25 +02:00
m038 41e303e6bc docs: mark frontend polish plan as complete 2026-06-25 00:05:27 +02:00
m038andClaude Sonnet 4.6 b2e9dcadb9 docs: add template refactor implementation plan (Milestone 2)
Three tasks: stats/cycling macros, date-range macro, latent bug fixes.
Full code in every step, no placeholders.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-23 23:47:03 +02:00
m038andClaude Sonnet 4.6 aab783384f docs: add template refactor design spec (Milestone 2)
Three Twig macros (stats panel, cycling panel, date range), five template
modifications, and two latent bug fixes in inactive templates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-23 23:38:54 +02:00
m038andClaude Sonnet 4.6 5cf7e15219 build: add build-assets make target
Runs npm install + npm run build inside node:20-alpine Docker container,
mounting user/themes/intotheeast as the working directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr
2026-06-22 23:11:32 +02:00