| 09-backend-admin-authentication-and-schema-pipeline |
08 |
admin |
| cabana |
| genres |
| winter-yaml |
| permissions |
| postgres |
| crud |
|
| phase |
provides |
| 09-backend-admin-authentication-and-schema-pipeline |
Genre list tracer, compiled schema registry, permission gates, and shared CRUD/bulk services |
|
|
| Complete Genre form plus the tracer-proven list under the original controller identity |
| Duplicate-controller rejection proof and permission-first form/write routing |
| PostgreSQL list, projected CRUD, lifecycle, atomic bulk, and retry-safety coverage |
|
| 09-backend-admin-authentication-and-schema-pipeline |
| admin-api |
| phase-10-spa |
|
| tokens |
tasks |
commits |
| 3703 |
2 |
0 |
|
| added |
patterns |
|
|
| Tracer controllers are enriched in place; controller ID, model, route, and permission remain immutable |
| Duplicate admin controller IDs fail activation before any last-write-wins replacement |
|
|
| created |
modified |
| ../fonoteka.go/plugins/golem15/fonoteka/controllers/genres/config_form.yaml |
| ../fonoteka.go/plugins/golem15/fonoteka/models/genre/fields.yaml |
| ../fonoteka.go/plugins/golem15/fonoteka/admin_genres_test.go |
|
| ../fonoteka.go/plugins/golem15/fonoteka/admin.go |
|
|
| The Phase 9 Genre tracer remains the one production controller; form capability was added without a parallel route or identity |
| The tracer list and columns were already byte-equivalent to the tracked Winter source, so Task 2 added behavioral proof rather than rewriting them |
| Genre slug remains lifecycle-derived and outside the writable form projection |
|
| Pattern: app-level duplicate registration tests invoke cabana activation with the same plugin twice and assert the first duplicate controller ID |
|
| ADMIN-01 |
| ADMIN-02 |
| ADMIN-04 |
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
Genre form fields, layout hints, and locale keys compile in source order under the original tracer identity. |
ADMIN-01 |
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminForm |
pass |
|
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminTracerIdentity |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
Duplicate Genre registrations fail activation and unauthorized form/create/update requests are denied before Genre SQL. |
ADMIN-01 |
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminDuplicateRegistration |
pass |
|
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminWritePermissions |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D3 |
Genre list routes preserve complete source columns, actions, exact identifiers, empty arrays, stable order, and adjacent pages. |
ADMIN-02 |
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminList |
pass |
|
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminEdges |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D4 |
Genre CRUD projects form fields, derives slug through lifecycle hooks, and rejects protected request keys. |
ADMIN-04 |
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminCRUD |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D5 |
Genre bulk deletion validates empty input, normalizes duplicates, rolls back mixed selections, runs AfterDelete, and is retry-safe. |
ADMIN-04 |
| kind |
ref |
status |
| integration |
plugins/golem15/fonoteka/admin_genres_test.go#TestGenresAdminBulk |
pass |
|
|
false |
|
|
2h 28m |
2026-09-26 |
complete |
e6d013717f |
e6d013717f |