Commit Graph

773 Commits

Author SHA1 Message Date
Jakub Zych
67434f5185 docs(05-05): record plan close-out in STATE and ROADMAP
- Advance to plan 6 of 6; mark DATA-11 and CLI-03 complete
2026-09-18 20:28:00 +02:00
Jakub Zych
62f3ae563f docs(05-05): complete remaining-models schema-diff fixture plan
- Record Task 1-3 commits, D-02 allow-list, and DATA-11 fixture isolation
2026-09-18 20:26:41 +02:00
Jakub Zych
4df7e016a2 feat(05-05): accept boolean validation token
- Treat Laravel boolean as a type-check no-op in lagoon.Validate
- Settings.search_use_typesense uses this rule string
2026-09-18 20:14:46 +02:00
Jakub Zych
678b216900 docs(05-04): record plan close-out in STATE and ROADMAP
- Advance to plan 5 of 6; DATA-08 marked complete
2026-09-18 20:05:58 +02:00
Jakub Zych
690aed2ea6 docs(05-04): complete attachments system_files blob and thumb plan
Tasks completed: 3/3
- Task 1: File, Thumb, bucket, system_files migration
- Task 2: delete lifecycle and static handler
- Task 3: Album/Collection MorphName

SUMMARY: .planning/phases/05-data-layer-full-fidelity/05-04-SUMMARY.md
2026-09-18 20:04:39 +02:00
Jakub Zych
d8ecb41981 feat(05-04): add attach delete lifecycle and static file handler
- DeleteForOwner removes system_files rows in-tx; blobs after commit
- Soft-delete of an owner keeps rows and blobs
- StaticHandler serves exact partition+disk_name keys and 404s traversal
2026-09-18 20:00:31 +02:00
Jakub Zych
ba9c99246e feat(05-04): implement attach File, Thumb, blob bucket, system_files migration
- Winter-exact thumb filename and 3x3 partition with lazy imaging resize
- gocloud.dev/blob fileblob/memblob; empty bucket_url fails boot
- lagoon.Migrate runs system_files before every plugin set
2026-09-18 19:55:15 +02:00
Jakub Zych
2d84ae4565 test(05-04): add failing tests for attach File, Thumb, and bucket
- ThumbFilename/PartitionDirectory/File.Thumb behavior tests
- OpenBucket fail-loud and memblob tests
- Migrate empty plugin list must create system_files
2026-09-18 19:53:00 +02:00
Jakub Zych
b1b740c333 docs(05-03): record plan close-out in STATE and ROADMAP 2026-09-18 19:44:42 +02:00
Jakub Zych
76852e2d55 docs(05-03): complete secrets-slice encrypted credentials plan
- AES-256-GCM Encrypted, key:generate, Laravel helper, organisations, OAuth tables
2026-09-18 19:43:02 +02:00
Jakub Zych
8d9109a771 feat(05-03): implement lagoon.Encrypted, key:generate, Laravel decrypt helper
- AES-256-GCM with stdlib HKDF column keys and previous_keys fallback
- Fail-loud LoadAppKey, redacting marshal paths, key:generate via crypto/rand
- Standalone DecryptLaravelPayload unwired from Scan/Value
2026-09-18 19:35:24 +02:00
Jakub Zych
06bad37c24 test(05-03): add failing tests for Encrypted, key:generate, Laravel decrypt
- Round-trip, fresh nonce, redaction, previous_keys fallback
- LoadAppKey rejects empty/short/undecodable keys
- key:generate prints 32-byte base64; DecryptLaravelPayload fixture
2026-09-18 19:32:30 +02:00
Jakub Zych
a46c153480 docs(05-02): record plan close-out in STATE and ROADMAP
- Advance to plan 3 of 6 and mark DATA-04/05/07/09 complete
2026-09-18 19:25:21 +02:00
Jakub Zych
628cffd66f docs(05-02): complete album-collection vertical slice plan
- Record migrations, Jsonable/MoneyString, Validate, write services, and hooks
2026-09-18 19:23:51 +02:00
Jakub Zych
2c5d92d659 feat(05-02): add lagoon.Validate rule-string engine
- Translate Laravel rule strings onto validator.Var and unique:table
- Custom money range via big.Rat; unique checks skip soft-deleted rows
- Fill zeros nil values and Scans jsonable columns
2026-09-18 19:22:04 +02:00
Jakub Zych
20b0199579 feat(05-02): add lagoon.Jsonable TEXT cast
- Scanner/Valuer JSON-text column preserving SQL NULL vs empty array
- Generic struct with gorm-ignored inner fields so GORM does not walk Data
2026-09-18 19:12:33 +02:00
Jakub Zych
06635f21cd docs(05-01): record plan close-out in STATE and ROADMAP
- Advance to plan 2 of 6; 05-01 marked complete
- DATA-03, DATA-06, DATA-10 checked in REQUIREMENTS.md
2026-09-18 18:53:33 +02:00
Jakub Zych
87006d12d9 docs(05-01): complete Winter layout and lagoon primitives plan
Tasks completed: 4/4
- Folded-todo models-leaf probe
- Winter-directory plugin restructure
- lagoon Fill and lifecycle cascade
- Paginate, RegisterJoinTable, DATA-09 wording

SUMMARY: .planning/phases/05-data-layer-full-fidelity/05-01-SUMMARY.md
2026-09-18 18:49:59 +02:00
Jakub Zych
c85fa24936 docs(05-01): drop 27-migrations target and move HTTP fuzz to Phase 12
- DATA-09 and Phase 5 criteria follow D-01 squash and D-07 service-level fuzz
- Phase 12 inherits the write-endpoint DTO fuzz once HTTP exists
2026-09-18 18:48:08 +02:00
Jakub Zych
52638fb4e3 feat(05-01): add Paginate envelope and RegisterJoinTable
- Page/PageMeta emit {data, meta} with no links key
- RegisterJoinTable fails loud on nil db; document pivot-write contract
2026-09-18 18:47:42 +02:00
Jakub Zych
969a5f522a feat(05-01): implement Fill, hook interfaces, and cascade helper
- Allow-list copy with once-per-key non-production dropped-key log
- Winter-named Has* hook interfaces; WithSoftDeleteCascade names the tx
2026-09-18 18:46:37 +02:00
Jakub Zych
fec23e21c2 test(05-01): add failing tests for Fill and lifecycle cascade
- Fill allow-list, once-per-key dropped log, production silence
- BeforeCreate fires on real Postgres; cascade rollback on error
2026-09-18 18:45:46 +02:00
Jakub Zych
a9c77fcf49 docs(05-01): confirm models-leaf rule against three more plugins
- Probe keios.eu user, jz chat, and pxpx checkout for models→sibling uses
- Every live edge is a cast or service-calling hook; no "other" category
- Close folded todo verify-models-leaf-rule; bulk port may proceed
2026-09-18 18:37:26 +02:00
Jakub Zych
29b73b6892 docs(05): create phase plan 2026-09-18 18:06:55 +02:00
Jakub Zych
bbf49a910a fix(05): revise plans based on checker feedback 2026-09-18 17:31:53 +02:00
Jakub Zych
2191e7a6d5 docs(phase-5): add validation strategy 2026-09-18 15:47:30 +02:00
Jakub Zych
8d3d737682 docs(05): research data layer full fidelity phase 2026-09-18 15:46:29 +02:00
Jakub Zych
30c8cb46ab docs(state): record phase 5 context session 2026-09-18 15:23:21 +02:00
Jakub Zych
c3e9eae083 docs(05): capture phase context 2026-09-18 15:23:21 +02:00
Jakub Zych
e5f90c57c5 docs(phase-4): evolve PROJECT.md after phase completion 2026-09-18 14:23:56 +02:00
Jakub Zych
d08675aaff docs(phase-4): complete phase execution 2026-09-18 14:23:56 +02:00
Jakub Zych
6954c5e5f2 docs(04): add code review report 2026-09-18 14:19:37 +02:00
Jakub Zych
f6af510716 docs(state): record 04-04 completion and mark phase 04 complete
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:14:13 +02:00
Jakub Zych
9a69353220 docs(04-04): complete unit tests and Mailpit plan
Tasks completed: 3/3
- Close scaffold and CLI command boundary coverage
- Close translation lookup and catalog boundary coverage
- Close mail safety, driver, and Mailpit receipt coverage

SUMMARY: .planning/phases/04-cli-scaffolding-i18n-and-mail/04-04-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:13:14 +02:00
Jakub Zych
9f6fbadce8 test(04-04): close mail safety and Mailpit SMTP receipt coverage
- Assert memory recipients, HTML safety, and SMTP TLS without credential leaks
- Prove real SMTP delivery through Mailpit HTTP API when Docker is available
- Add scripts/check-phase4.sh as the phase vet, test, race, and SMTP gate

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:12:28 +02:00
Jakub Zych
918e941e69 test(04-04): close translation lookup and catalog boundary coverage
- Cover nested groups, malformed paths, invalid pipes, and compass locale
- Name plugin, file, and key on activation catalog failures
- Prove hello activation reads the translator through towel.WithLocale

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:10:29 +02:00
Jakub Zych
85bdb51c36 test(04-04): close scaffold and CLI command boundary coverage
- Compile and vet every generated artifact in a copied hello workspace
- Reject malformed names, traversal, and duplicates through public Make*
- Cover CLI argument forms, --no-migration, and one-arg make inside a plugin

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:09:14 +02:00
Jakub Zych
71f13f5620 docs(state): record 04-03 completion and advance to plan 04
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:03:43 +02:00
Jakub Zych
3b476cbf55 docs(04-03): complete postcard mail plan
Tasks completed: 3/3
- Render and send one registered template through memory
- Register plugin layouts and publish the mailer at Boot
- Add config-selected log and SMTP delivery

SUMMARY: .planning/phases/04-cli-scaffolding-i18n-and-mail/04-03-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:03:11 +02:00
Jakub Zych
1b7245661d feat(04-03): select memory, log, and SMTP mail drivers from config
- Load mail.* and SUMMER_MAIL__ overrides to pick memory, log, or smtp
- Log headers and text without credentials; SMTP uses explicit TLS and go-mail
- Reject CR/LF headers and invalid addresses and surface driver errors once

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:02:23 +02:00
Jakub Zych
1e515971c9 feat(04-03): register plugin mail layouts and publish the mailer at boot
- Map short layout names onto dotted layout files and wrap text/HTML
- party.Activate publishes postcard.Mailer before Boot and names missing files
- Hello plugin sends through the app-scoped mailer

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:59:52 +02:00
Jakub Zych
b4fd8339fe feat(04-03): render registered mail templates through memory
- Parse Winter INI + == Markdown templates and Goldmark HTML
- Memory driver stores rendered subject, text, and HTML
- Caller selects -en siblings by full dotted name

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:58:02 +02:00
Jakub Zych
a6555c4606 docs(state): record 04-02 completion and advance to plan 03
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:54:05 +02:00
Jakub Zych
c203bdfc54 docs(04-02): complete i18n phrasebook plan
Tasks completed: 3/3
- Load a namespaced translation from an embedded plugin
- Select CLDR and Laravel plural forms with PHP parameters
- Apply configured locale fallback and missing-key behavior

SUMMARY: .planning/phases/04-cli-scaffolding-i18n-and-mail/04-02-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:53:31 +02:00
Jakub Zych
8a4e0ef79b feat(04-02): apply locale fallback and missing-key logging
- Resolve pl-PL then parent then app.fallback_locale then the raw key
- Read towel.Locale from request context and default app.locale/fallback to en
- Log each missing key once outside production and never log parameters

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:52:42 +02:00
Jakub Zych
6d8786a2af feat(04-02): select CLDR and Laravel plural forms with PHP parameters
- Use go-i18n only to pick a category label, then substitute :name/:Name/:NAME
- Treat YAML maps as plurals when all keys are locale CLDR categories
- Parse pipe strings with {n} and [a,b]/[a,*] conditions at catalog load

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:51:15 +02:00
Jakub Zych
f824e55c81 feat(04-02): load namespaced translations from embedded plugins
- Walk HasLang FS for lang/<locale>/<group>.yaml and flatten nested keys
- Publish one phrasebook.Translator before Boot with en/en defaults
- Hello plugin resolves en/pl vendor.plugin::group.key after Activate

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:47:45 +02:00
Jakub Zych
e7dba5c4fb docs(state): record 04-01 completion and advance to plan 02
Mark CLI-02 complete, log scaffolding registry and leaf-check
decisions, and move Phase 4 progress to 1/4 plans.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:42:34 +02:00
Jakub Zych
6ce67a5d5b docs(04-01): complete CLI scaffolding plan
Tasks completed: 3/3
- Prove and create the compiling Winter-shaped plugin path
- Generate model, migration, and command slices
- Generate jobs and admin controllers, then enforce model imports

SUMMARY: .planning/phases/04-cli-scaffolding-i18n-and-mail/04-01-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:42:00 +02:00
Jakub Zych
c87bbc37fb feat(04-01): generate jobs and admin controllers, reject model imports
Scaffold pact.Job and pact.AdminController stubs with Winter YAML
assets, and fail summer build when models imports a sibling package.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:41:13 +02:00