Commit Graph

455 Commits

Author SHA1 Message Date
Jakub Zych
bae9de8788 test(06-04): add failing tests for SSRF-guarded Fetch
- Cover host allow-list, dotted-suffix bypass, dial-time private IP
- Cover no-follow redirects, streaming byte cap, and D-14 config defaults
2026-09-19 19:00:01 +02:00
Jakub Zych
d376b1be2d feat(06-01): grow router verbs, factories, and guard registry
- Add Post/Put/Patch/Delete on pact.Router and surf Router/Group
- Resolve name:param middleware via RegisterMiddlewareFactory
- Add bouncer.Registry with Guard, CredentialGuard, UnauthorizedWriter
- Re-express jwt as NewJWTGuard without changing Middleware bodies
2026-09-19 18:59:12 +02:00
Jakub Zych
d3630e7de0 feat(06-04): implement private/reserved IP classification table
- Port PHP PRIVATE_V4_CIDRS and PRIVATE_V6_PREFIXES onto netip.Prefix
- Fail closed on invalid addresses; Unmap remains the caller's job
2026-09-19 18:57:44 +02:00
Jakub Zych
f7e7ca7fa3 test(06-04): add failing test for private/reserved IP table
- Table-driven cases port PHP PRIVATE_V4_CIDRS/PRIVATE_V6_PREFIXES
- Document Unmap() as the caller responsibility for v4-mapped literals
2026-09-19 18:57:18 +02:00
Jakub Zych
ecab09c37a docs(06): finalize phase plan after verification 2026-09-19 17:16:58 +02:00
Jakub Zych
ad3d6f7f84 docs(06): revision pass 1 - resolve Limiter naming collision and add plugin-facing house-middleware capability 2026-09-19 17:13:02 +02:00
Jakub Zych
c4f406bb64 docs(06): create phase plan 2026-09-19 16:58:48 +02:00
Jakub Zych
6a9f5e1b47 docs(05): add code review fix report 2026-09-19 15:41:27 +02:00
Jakub Zych
56156ae7c3 fix(05): WR-05 gate public file serving on is_public 2026-09-19 15:39:19 +02:00
Jakub Zych
c12e6576f6 fix(05): WR-04 default File.IsPublic to true without trapping false 2026-09-19 15:39:19 +02:00
Jakub Zych
fb12b2237d fix(05): WR-03 numeric between/min/max without omitempty or length tags 2026-09-19 15:39:19 +02:00
Jakub Zych
e54f9d7f10 fix(05): WR-02 delete thumb blob after a failed encode 2026-09-19 15:39:19 +02:00
Jakub Zych
c211822448 fix(05): WR-01 bound thumb dimensions and decoded image size 2026-09-19 15:39:19 +02:00
Jakub Zych
44126cc935 fix(05): CR-01 serve thumb URLs from the validated path key 2026-09-19 15:39:19 +02:00
Jakub Zych
c0b2b6db08 docs(phase-6): add validation strategy 2026-09-19 15:36:23 +02:00
Jakub Zych
e9c2f25ebe docs(06): research HTTP routing, auth groups and rate limiting 2026-09-19 15:35:20 +02:00
Jakub Zych
07df9b1e74 docs(state): record phase 6 context session 2026-09-19 14:04:36 +02:00
Jakub Zych
820d17c6c3 docs(06): capture phase context 2026-09-19 14:04:36 +02:00
Jakub Zych
ab4ac856da docs(05): add code review report 2026-09-19 00:20:17 +02:00
Jakub Zych
bbee45c5f4 docs(05): add code review fix report 2026-09-18 23:53:21 +02:00
Jakub Zych
c84869270e test(05): WR-05 pin that the thumb delete prefix is ID-delimited 2026-09-18 23:48:49 +02:00
Jakub Zych
ced87a5608 fix(05): WR-04 restrict thumb mode and ext to [a-z0-9]+ before building blob keys 2026-09-18 23:48:22 +02:00
Jakub Zych
6d2262d95f fix(05): WR-02 fill Encrypted columns from plaintext, never Scan request input 2026-09-18 23:47:28 +02:00
Jakub Zych
3943ea3a2e fix(05): CR-01 accept pointer and whole JSON numbers in integer rule 2026-09-18 23:41:57 +02:00
Jakub Zych
ba8a822149 docs(phase-5): evolve PROJECT.md after phase completion 2026-09-18 21:11:43 +02:00
Jakub Zych
0056c35cb0 docs(phase-5): complete phase execution 2026-09-18 21:11:43 +02:00
Jakub Zych
cd546dae1d docs(05): add code review report 2026-09-18 21:11:11 +02:00
Jakub Zych
38cd4c6f50 docs(05-06): record plan close-out in STATE and ROADMAP
- Phase 5 plan 6 of 6 complete and ready for verification
- Record 23 min / 3 tasks / 12 files and the fill-boundary test decisions
2026-09-18 20:56:10 +02:00
Jakub Zych
ba3efccadd docs(05-06): complete fill-fuzz hidden-marshal security-review plan
- Record fuzz, hidden-marshal, public_token, attach, and security-review outcomes
- Note module-boundary placement of the models.All() walk
2026-09-18 20:54:10 +02:00
Jakub Zych
e0a11c3ea0 docs(05-06): security review of fill and encryption boundaries
- Map T-05-01 through T-05-24 to a passing test or restated accept rationale
- Enumerate every .Reveal() call site; none are on log or serialize paths
- Confirm zero AutoMigrate production calls and no Association Mode pivot writes
2026-09-18 20:51:35 +02:00
Jakub Zych
1fcf5abcdf test(05-06): assert HasHidden fields never marshal
- Fixture model with json:\"-\" keeps the sentinel out of JSON
- Registered-model walk stays in fonoteka.go so the framework stays app-agnostic
2026-09-18 20:48:21 +02:00
Jakub Zych
7ead5e0c2f test(05-06): add lagoon.Fill fuzz test
- FuzzFill seeds extra and server-owned keys against a fixture struct
- Non-allow-listed fields stay at their pre-Fill values with zero panics
2026-09-18 20:45:52 +02:00
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