| 09-backend-admin-authentication-and-schema-pipeline |
03 |
admin |
| yaml |
| goccy |
| phrasebook |
| cabana |
| admin-schema |
| scaffolding |
|
| phase |
provides |
| 09-backend-admin-authentication-and-schema-pipeline |
cabana list compiler, admin controller registry, and phrasebook translator |
|
|
| Typed Winter form schema compiled at activation with source order and JSON scalar types |
| Per-request localization of labels, comments, tabs, emptyOption, and option labels |
| make:admin-controller output that matches the Winter controller/model YAML split |
|
| 09-backend-admin-authentication-and-schema-pipeline |
| admin-api |
| phase-10-spa |
|
| tokens |
tasks |
commits |
| 13818 |
3 |
6 |
|
| added |
patterns |
|
|
| Form IR caches source phrase keys; Localize copies the schema per request |
| config_form.yaml is compiled only when the file is present, so list-only controllers still boot |
| Dropdown method names require DropdownOptions on the controller or its NewRecord model |
|
|
| created |
modified |
| cabana/schema_types.go |
| cabana/form_schema.go |
| cabana/form_schema_test.go |
|
| cabana/contracts.go |
| cabana/registry.go |
| cabana/schema.go |
| phrasebook/translator.go |
| internal/build/artifact.go |
| internal/build/stubs/artifacts.tmpl |
| internal/build/build_test.go |
|
|
| Cached form schemas keep source phrase keys; each response localizes a copy and records meta.locale |
| Absent config_form.yaml does not fail activation, so the 09-01 Genre list controller still boots |
| YAML option keys keep their JSON scalar type; method options call DropdownOptions(field) with the exact field name |
| make:admin-controller writes controllers/<name>/config_form.yaml and config_list.yaml pointing at models/<name>/fields.yaml and columns.yaml |
|
| Pattern: boot compiler walks the YAML AST so field order and option scalar types survive DisallowUnknownField |
| Pattern: a missing dropdown provider fails with plugin, controller, file, and the exact method name |
|
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
Every locked form field and layout hint compiles in source order with Winter JSON keys and typed scalars. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaCompile |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
Empty fields serialize as an array, a single field stays one element, and repeated compilation is byte-stable. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaEmpty |
pass |
|
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaSingle |
pass |
|
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaOrdering |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D3 |
Unknown keys, unknown types, duplicates, path escape, a mismatched modelClass, partials, and missing assets fail with plugin, controller, and file context. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaRejects |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D4 |
One cached schema localizes independently in pl and en, including Accept-Language parent fallback, app.locale, and raw-key fallback. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaLocalization |
pass |
|
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaLocaleIsolation |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D5 |
YAML option maps keep order and scalar type, and a string options method requires DropdownOptions at boot. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
cabana/form_schema_test.go#TestFormSchemaDropdownOptions |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D6 |
summer make:admin-controller emits the Winter controller/model YAML split, compiles through the strict loader, and refuses a duplicate without partial files. |
ADMIN-01 |
| kind |
ref |
status |
| unit |
internal/build/build_test.go#TestMakeAdminControllerLayout |
pass |
|
|
false |
|
|
25min |
2026-09-24 |
complete |
af3312aa92 |
68715fc260 |