Files
summercms/.planning/WINDOWS.md
Jakub Zych c7a485177e docs(33-14): demo locale patches, release-note drafts and open items for the release checkpoint
- 33-14-vue-demo-app-locale.patch and 33-14-sm-demo-app-locale.patch move the
  demo to prefix_except_default on top of the 33-12 demo patches
- release-note drafts for the framework, the three plugins and four layers
- the read-only RISK-MAX query for production databases
- deferred items and the broken-windows ledger after the six fixes
2026-11-04 20:25:55 +01:00

28 KiB

schema_version, open_count, waived_count, fixed_count, total_count, last_updated
schema_version open_count waived_count fixed_count total_count last_updated
1 26 0 9 35 2026-11-04T19:19:01.124Z

Broken Windows Ledger

Cross-phase defect register. With workflow.windows_enforce enabled, /msd-ship blocks while open_count > 0. Waive with msd-tools windows waive <id> "<reason>" (reason required). Mark fixed with msd-tools windows fixed <id>.

id phase kind file line description status reason recorded_at resolved_at
1 09 deviation plugins/golem15/fonoteka/routes_cors_test.go Admin test secret also set on bootConfigWithHTTP and testConfigCORS so router assembly keeps failing closed fixed 2026-09-24T15:22:55.173Z 2026-09-24T15:23:23.945Z
2 10 stub admin/src/app/i18n.ts t() returns backend::lang keys until the bundle is served (10-02) and loaded (10-03); SPA copy renders raw keys fixed 2026-09-27T13:36:35.976Z 2026-09-27T15:01:16.955Z
3 10 stub admin/src/views/ListView.vue read-only tracer list without search, sort, paging or row links; full list screens in 10-03 fixed 2026-09-27T13:36:36.179Z 2026-09-27T15:01:17.178Z
4 10 stub admin/src/components/form/registry.ts relation-manager is not registered; the Collections editors tab renders the unsupported-field box until the relation manager lands in 10-04 fixed 2026-09-27T15:01:12.833Z 2026-09-27T15:27:25.933Z
5 10 deviation scripts/check-phase10.sh check-phase10.sh --go allow-lists exactly the two pre-existing fonoteka parity failures (TestMigrateSeedsCanonicalGenres, TestSchemaMatchesPHPSnapshot; deferred-items.md) and refuses once they pass; fix belongs to a Phase 9 follow-up open 2026-09-27T16:22:23.140Z
6 10.1 stub plugins/golem15/fonoteka/controllers/albums_admin_controller.go 71 fonoteka.go: discogsLookup widget action is a D-02 stub answering fixed fill {year: 1977, format: LP}; Phase 14 replaces it with the Discogs client open 2026-09-29T00:27:32.945Z
7 10.1 stub plugins/golem15/fonoteka/controllers/albums_admin_controller.go 82 fonoteka.go: discogsSync toolbar action is a D-02 stub answering stub_not_implemented and changing nothing; Phase 14 replaces it with the Discogs sync open 2026-09-29T00:27:33.153Z
8 11 skipped-test parity/broadcast_goldens_test.go fonoteka.go: TestBroadcastGoldens/created and /updated t.Skip as pending; Phase 12 turns the recorded PHP created/updated goldens into assertions (album subtree, literal created_at/updated_at and artist id handling) open 2026-09-30T11:32:37.302Z
9 12.1 stub admin/src/components/form/RecordActions.vue RecordActions.vue is built and tested but not mounted; plan 12.1-02 mounts it in the preview footer, until then meta.actions is served and no screen shows the buttons fixed 2026-10-04T21:55:30.405Z 2026-10-05T10:41:16.319Z
10 12.1 unmet-truth .planning/phases/12.1-user-plugin-admin-screens/deferred-items.md fonoteka.go: four application tests pin lists the user plugin's admin work changes (TestAdminMetadataFiltering nav list, TestHiddenNeverMarshals user model count, parity TestMigrateSeedsCanonicalGenres and TestRollbackLastIsolatesFonoteka migration ids); with the two from plan 12.1-02 they keep plan 12.1-03's application verify red until plan 12.1-04 updates them fixed 2026-10-05T11:31:36.781Z 2026-10-05T12:07:04.853Z
11 16.1 unrun-verify modules/cabana/query_relation_test.go TestListRelationSearchPostgres not run here (no Docker); run go test -count=1 ./modules/cabana on a Docker host before /msd-verify-work open 2026-10-09T20:51:22.934Z
12 16.1 unrun-verify .planning/phases/16.1-journal-admin-urgent-fixes-relation-search-list-state-post-f/16.1-VALIDATION.md sm-journal-plugin TestPostsAdminResaveKeepsHTML (posts_admin_smoke_test.go) not run here (no Docker); run go -C ../sm-journal-plugin test -count=1 ./... on a Docker host before /msd-verify-work open 2026-10-09T20:51:27.671Z
13 16.2 deviation tests/blogeditor/fixtures/imported-post.html sm-journal-plugin: 16.2-02 imported-post fixture is synthetic (same structure as the export post) because reading the journal export was refused by the environment's PII classifier; swap in the real export content if wanted open 2026-10-10T09:54:57.288Z
14 16.2 unrun-verify plugin_test.go sm-journal-plugin: TestJournalSVGEmbed now asserts AdminFS embeds assets/dist/blogeditor.js and .css; the root package TestMain needs Docker, so it was not run here; run go -C ../sm-journal-plugin test -count=1 . on a Docker host (plan 06) open 2026-10-10T09:54:57.583Z
15 16.2 unrun-verify .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md sm-journal-plugin posts_admin_smoke_test.go: TestPostsFormCompiles, TestPostsAdminCreateSmoke, TestPostsAdminResaveKeepsHTML, TestPostsAdminSaveSanitizesHTML compile under go vet but need a Docker host (plan 06) open 2026-10-10T10:12:10.725Z
16 16.2 unrun-verify .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md sm-journal-plugin journal_api_categories_test.go TestCategoriesAdminContent (strip assertions) and journal_api_task3_test.go media upload route tests after the StoreMedia refactor need a Docker host (plan 06) open 2026-10-10T10:12:10.986Z
17 16.2 unmet-truth .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md 16.2-05 D-03 on an HTML post unproven on UAT: post 1 (HTML_POST) was not written after RESTART_TS (updated_at still 2026-10-09), so posts-unchanged passed vacuously for it; a human must re-save post 1 untouched and the SELECT be re-run fixed 2026-10-10T11:35:56.721Z 2026-10-10T12:04:50.783Z
18 16.2 unmet-truth .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md 16.2-05 D-19 human check pending: a one-word category edit in the Blog Editor saves without a removal notice and shows on the site; post 1 source tab shows the stored HTML unchanged open 2026-10-10T11:35:56.955Z
19 16.2 todo .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md 16.2-05 UAT root step: install the staging vhost with frame-src https://www.youtube-nocookie.com, nginx -t and reload; unpublish or delete test post uat-16-2-blog-editor (id 105) open 2026-10-10T11:35:57.234Z
20 16.2 unrun-verify modules/cabana/field_type_postgres_test.go 16.2-06 TestFieldTypeSavePostgres (real-database save, show, untouched and refused update, upload in and out of scope) compiles under go vet but needs a Docker host; run bash scripts/check-phase16.2.sh postgres open 2026-10-10T14:17:06.378Z
21 16.2 unrun-verify .planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-06-PLAN.md sm-journal-plugin: 16.2-06 TestCategoriesAdminBlogEditor (categories_admin_editor_test.go) and the rewritten three-stage TestPostsAdminResaveKeepsHTML compile under go vet but need a Docker host; run bash scripts/check-phase16.2.sh postgres open 2026-10-10T14:17:06.621Z
22 19.1 deviation sm-forum-plugin/go.mod go.mod lists bluemonday and goldmark as // indirect via breakwater; no direct require open 2026-10-18T13:42:54.900Z
23 19.1 deviation classes/lifecycle.go Task 4 methods besides DeleteContext live in classes/lifecycle.go open 2026-10-18T13:42:55.096Z
24 19.7 deviation modules/cabana 19.7-01: capabilities_test field-count assertion updated 2->3 for AdminRecordActionInput.Value open 2026-10-22T14:44:56.001Z
25 19.7 deviation modules/cabana 19.7-01: admin route inventories (phase09Routes, tokenRouteClasses, CSRF walk 35, phase10 want list, conformCases) extended for the two account contribution routes open 2026-10-22T14:44:56.218Z
26 19.7 deviation modules/cabana 19.7-01: TestRecordActionPromptRun added on Postgres to prove Run receives the trimmed prompt value open 2026-10-22T14:44:56.449Z
27 19.7 unrun-verify scripts/check-phase19.6.1.sh 19.7-01: check-phase19.6.1.sh --all stopped by the host (memory pressure) after the cabana and surf Postgres suites passed; re-run on the Docker host open 2026-10-22T14:44:56.679Z
28 33 deviation modules/lagoon/validate.go 33-02: lagoon.Validate rejects the string and url rule tokens, so the Journal admin settings save answers 500 (pre-existing); the Headings and links switch is saved through the settings API/MCP until fixed open 2026-11-04T09:39:12.905Z
29 33 stub contract/contract.go sm-sitemap-plugin: contract.ListingSettings HTMLEnabled, HTMLPaths, HTMLPageSize and KeyFile stay zero and golem15_sitemap_urls.images stays [] until 33-04 adds the HTML sitemap, IndexNow and image settings fixed 2026-11-04T10:26:56.754Z 2026-11-04T11:41:58.774Z
30 33 deviation models/settings/fields.yaml sm-sitemap-plugin: the Additional addresses lastmod is a text field read as YYYY-MM-DD (server-checked, errors.lastmod) because the framework repeater accepts no datepicker column; swap to a datepicker once cabana supports it in repeaters open 2026-11-04T10:26:56.940Z
31 33 deviation models/settings/fields.yaml sm-sitemap-plugin: News sources is a taglist with custom tags and no options (values listed by the news_sources partial, server-checked) because cabana taglist options are a fixed YAML list and form extensions take no taglist; switch to options from the article types and categories once the framework offers per-request taglist options open 2026-11-04T11:42:13.158Z
32 33 deviation controllers/issues/config_filter.yaml sm-seo-plugin: the Site audit status filter cannot default to Open (cabana list filters have no default value), so the list shows ignored issues too, badged Ignored; GET /_seo/api/v1/issues and seo_list_issues default to status open; set the default once cabana filters accept one open 2026-11-04T15:03:28.372Z
33 33 deviation controllers/issues/_issue_details.htm sm-seo-plugin: P7 shows Open the page and the Rich Results Test as labelled addresses, not links, because the partial allowlist keeps only same-origin hrefs; make them links once partials may carry an external link (new tab) open 2026-11-04T15:03:28.619Z
34 33 deviation vue-demo-app/nuxt.config.ts 33-12: the demo serves Polish by cookie at one address (no_prefix), but the CMS names /pl/... alternates and sitemap addresses, which answer 404; i18n strategy decision before 33-14 applies the demo patches open 2026-11-04T17:10:13.946Z
35 33 todo sm-sitemap-plugin/classes/rebuild.go 33-12: additional addresses are not de-duplicated against content records (migrated /, /blog, /faq listed twice on rome-like data); the demo DEPLOY step works around it fixed 2026-11-04T17:10:14.144Z 2026-11-04T19:19:01.124Z
[
  {
    "id": 1,
    "kind": "deviation",
    "phase": "09",
    "file": "plugins/golem15/fonoteka/routes_cors_test.go",
    "line": null,
    "description": "Admin test secret also set on bootConfigWithHTTP and testConfigCORS so router assembly keeps failing closed",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-24T15:22:55.173Z",
    "resolved_at": "2026-09-24T15:23:23.945Z",
    "milestone": "v1.0"
  },
  {
    "id": 2,
    "kind": "stub",
    "phase": "10",
    "file": "admin/src/app/i18n.ts",
    "line": null,
    "description": "t() returns backend::lang keys until the bundle is served (10-02) and loaded (10-03); SPA copy renders raw keys",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-27T13:36:35.976Z",
    "resolved_at": "2026-09-27T15:01:16.955Z",
    "milestone": "v1.0"
  },
  {
    "id": 3,
    "kind": "stub",
    "phase": "10",
    "file": "admin/src/views/ListView.vue",
    "line": null,
    "description": "read-only tracer list without search, sort, paging or row links; full list screens in 10-03",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-27T13:36:36.179Z",
    "resolved_at": "2026-09-27T15:01:17.178Z",
    "milestone": "v1.0"
  },
  {
    "id": 4,
    "kind": "stub",
    "phase": "10",
    "file": "admin/src/components/form/registry.ts",
    "line": null,
    "description": "relation-manager is not registered; the Collections editors tab renders the unsupported-field box until the relation manager lands in 10-04",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-27T15:01:12.833Z",
    "resolved_at": "2026-09-27T15:27:25.933Z",
    "milestone": "v1.0"
  },
  {
    "id": 5,
    "kind": "deviation",
    "phase": "10",
    "file": "scripts/check-phase10.sh",
    "line": null,
    "description": "check-phase10.sh --go allow-lists exactly the two pre-existing fonoteka parity failures (TestMigrateSeedsCanonicalGenres, TestSchemaMatchesPHPSnapshot; deferred-items.md) and refuses once they pass; fix belongs to a Phase 9 follow-up",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-27T16:22:23.140Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 6,
    "kind": "stub",
    "phase": "10.1",
    "file": "plugins/golem15/fonoteka/controllers/albums_admin_controller.go",
    "line": 71,
    "description": "fonoteka.go: discogsLookup widget action is a D-02 stub answering fixed fill {year: 1977, format: LP}; Phase 14 replaces it with the Discogs client",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-29T00:27:32.945Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 7,
    "kind": "stub",
    "phase": "10.1",
    "file": "plugins/golem15/fonoteka/controllers/albums_admin_controller.go",
    "line": 82,
    "description": "fonoteka.go: discogsSync toolbar action is a D-02 stub answering stub_not_implemented and changing nothing; Phase 14 replaces it with the Discogs sync",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-29T00:27:33.153Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 8,
    "kind": "skipped-test",
    "phase": "11",
    "file": "parity/broadcast_goldens_test.go",
    "line": null,
    "description": "fonoteka.go: TestBroadcastGoldens/created and /updated t.Skip as pending; Phase 12 turns the recorded PHP created/updated goldens into assertions (album subtree, literal created_at/updated_at and artist id handling)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-30T11:32:37.302Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 9,
    "kind": "stub",
    "phase": "12.1",
    "file": "admin/src/components/form/RecordActions.vue",
    "line": null,
    "description": "RecordActions.vue is built and tested but not mounted; plan 12.1-02 mounts it in the preview footer, until then meta.actions is served and no screen shows the buttons",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-10-04T21:55:30.405Z",
    "resolved_at": "2026-10-05T10:41:16.319Z",
    "milestone": "v1.0"
  },
  {
    "id": 10,
    "kind": "unmet-truth",
    "phase": "12.1",
    "file": ".planning/phases/12.1-user-plugin-admin-screens/deferred-items.md",
    "line": null,
    "description": "fonoteka.go: four application tests pin lists the user plugin's admin work changes (TestAdminMetadataFiltering nav list, TestHiddenNeverMarshals user model count, parity TestMigrateSeedsCanonicalGenres and TestRollbackLastIsolatesFonoteka migration ids); with the two from plan 12.1-02 they keep plan 12.1-03's application verify red until plan 12.1-04 updates them",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-10-05T11:31:36.781Z",
    "resolved_at": "2026-10-05T12:07:04.853Z",
    "milestone": "v1.0"
  },
  {
    "id": 11,
    "kind": "unrun-verify",
    "phase": "16.1",
    "file": "modules/cabana/query_relation_test.go",
    "line": null,
    "description": "TestListRelationSearchPostgres not run here (no Docker); run go test -count=1 ./modules/cabana on a Docker host before /msd-verify-work",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-09T20:51:22.934Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 12,
    "kind": "unrun-verify",
    "phase": "16.1",
    "file": ".planning/phases/16.1-journal-admin-urgent-fixes-relation-search-list-state-post-f/16.1-VALIDATION.md",
    "line": null,
    "description": "sm-journal-plugin TestPostsAdminResaveKeepsHTML (posts_admin_smoke_test.go) not run here (no Docker); run go -C ../sm-journal-plugin test -count=1 ./... on a Docker host before /msd-verify-work",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-09T20:51:27.671Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 13,
    "kind": "deviation",
    "phase": "16.2",
    "file": "tests/blogeditor/fixtures/imported-post.html",
    "line": null,
    "description": "sm-journal-plugin: 16.2-02 imported-post fixture is synthetic (same structure as the export post) because reading the journal export was refused by the environment's PII classifier; swap in the real export content if wanted",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T09:54:57.288Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 14,
    "kind": "unrun-verify",
    "phase": "16.2",
    "file": "plugin_test.go",
    "line": null,
    "description": "sm-journal-plugin: TestJournalSVGEmbed now asserts AdminFS embeds assets/dist/blogeditor.js and .css; the root package TestMain needs Docker, so it was not run here; run go -C ../sm-journal-plugin test -count=1 . on a Docker host (plan 06)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T09:54:57.583Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 15,
    "kind": "unrun-verify",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md",
    "line": null,
    "description": "sm-journal-plugin posts_admin_smoke_test.go: TestPostsFormCompiles, TestPostsAdminCreateSmoke, TestPostsAdminResaveKeepsHTML, TestPostsAdminSaveSanitizesHTML compile under go vet but need a Docker host (plan 06)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T10:12:10.725Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 16,
    "kind": "unrun-verify",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-03-PLAN.md",
    "line": null,
    "description": "sm-journal-plugin journal_api_categories_test.go TestCategoriesAdminContent (strip assertions) and journal_api_task3_test.go media upload route tests after the StoreMedia refactor need a Docker host (plan 06)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T10:12:10.986Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 17,
    "kind": "unmet-truth",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md",
    "line": null,
    "description": "16.2-05 D-03 on an HTML post unproven on UAT: post 1 (HTML_POST) was not written after RESTART_TS (updated_at still 2026-10-09), so posts-unchanged passed vacuously for it; a human must re-save post 1 untouched and the SELECT be re-run",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-10-10T11:35:56.721Z",
    "resolved_at": "2026-10-10T12:04:50.783Z",
    "milestone": "v1.0"
  },
  {
    "id": 18,
    "kind": "unmet-truth",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md",
    "line": null,
    "description": "16.2-05 D-19 human check pending: a one-word category edit in the Blog Editor saves without a removal notice and shows on the site; post 1 source tab shows the stored HTML unchanged",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T11:35:56.955Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 19,
    "kind": "todo",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-05-SUMMARY.md",
    "line": null,
    "description": "16.2-05 UAT root step: install the staging vhost with frame-src https://www.youtube-nocookie.com, nginx -t and reload; unpublish or delete test post uat-16-2-blog-editor (id 105)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T11:35:57.234Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 20,
    "kind": "unrun-verify",
    "phase": "16.2",
    "file": "modules/cabana/field_type_postgres_test.go",
    "line": null,
    "description": "16.2-06 TestFieldTypeSavePostgres (real-database save, show, untouched and refused update, upload in and out of scope) compiles under go vet but needs a Docker host; run bash scripts/check-phase16.2.sh postgres",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T14:17:06.378Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 21,
    "kind": "unrun-verify",
    "phase": "16.2",
    "file": ".planning/phases/16.2-plugin-provided-field-types-and-the-blog-editor-formwidget/16.2-06-PLAN.md",
    "line": null,
    "description": "sm-journal-plugin: 16.2-06 TestCategoriesAdminBlogEditor (categories_admin_editor_test.go) and the rewritten three-stage TestPostsAdminResaveKeepsHTML compile under go vet but need a Docker host; run bash scripts/check-phase16.2.sh postgres",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-10T14:17:06.621Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 22,
    "kind": "deviation",
    "phase": "19.1",
    "file": "sm-forum-plugin/go.mod",
    "line": null,
    "description": "go.mod lists bluemonday and goldmark as // indirect via breakwater; no direct require",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-18T13:42:54.900Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 23,
    "kind": "deviation",
    "phase": "19.1",
    "file": "classes/lifecycle.go",
    "line": null,
    "description": "Task 4 methods besides DeleteContext live in classes/lifecycle.go",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-18T13:42:55.096Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 24,
    "kind": "deviation",
    "phase": "19.7",
    "file": "modules/cabana",
    "line": null,
    "description": "19.7-01: capabilities_test field-count assertion updated 2->3 for AdminRecordActionInput.Value",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-22T14:44:56.001Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 25,
    "kind": "deviation",
    "phase": "19.7",
    "file": "modules/cabana",
    "line": null,
    "description": "19.7-01: admin route inventories (phase09Routes, tokenRouteClasses, CSRF walk 35, phase10 want list, conformCases) extended for the two account contribution routes",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-22T14:44:56.218Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 26,
    "kind": "deviation",
    "phase": "19.7",
    "file": "modules/cabana",
    "line": null,
    "description": "19.7-01: TestRecordActionPromptRun added on Postgres to prove Run receives the trimmed prompt value",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-22T14:44:56.449Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 27,
    "kind": "unrun-verify",
    "phase": "19.7",
    "file": "scripts/check-phase19.6.1.sh",
    "line": null,
    "description": "19.7-01: check-phase19.6.1.sh --all stopped by the host (memory pressure) after the cabana and surf Postgres suites passed; re-run on the Docker host",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-10-22T14:44:56.679Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 28,
    "kind": "deviation",
    "phase": "33",
    "file": "modules/lagoon/validate.go",
    "line": null,
    "description": "33-02: lagoon.Validate rejects the string and url rule tokens, so the Journal admin settings save answers 500 (pre-existing); the Headings and links switch is saved through the settings API/MCP until fixed",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T09:39:12.905Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 29,
    "kind": "stub",
    "phase": "33",
    "file": "contract/contract.go",
    "line": null,
    "description": "sm-sitemap-plugin: contract.ListingSettings HTMLEnabled, HTMLPaths, HTMLPageSize and KeyFile stay zero and golem15_sitemap_urls.images stays [] until 33-04 adds the HTML sitemap, IndexNow and image settings",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-11-04T10:26:56.754Z",
    "resolved_at": "2026-11-04T11:41:58.774Z",
    "milestone": "v1.0"
  },
  {
    "id": 30,
    "kind": "deviation",
    "phase": "33",
    "file": "models/settings/fields.yaml",
    "line": null,
    "description": "sm-sitemap-plugin: the Additional addresses lastmod is a text field read as YYYY-MM-DD (server-checked, errors.lastmod) because the framework repeater accepts no datepicker column; swap to a datepicker once cabana supports it in repeaters",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T10:26:56.940Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 31,
    "kind": "deviation",
    "phase": "33",
    "file": "models/settings/fields.yaml",
    "line": null,
    "description": "sm-sitemap-plugin: News sources is a taglist with custom tags and no options (values listed by the news_sources partial, server-checked) because cabana taglist options are a fixed YAML list and form extensions take no taglist; switch to options from the article types and categories once the framework offers per-request taglist options",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T11:42:13.158Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 32,
    "kind": "deviation",
    "phase": "33",
    "file": "controllers/issues/config_filter.yaml",
    "line": null,
    "description": "sm-seo-plugin: the Site audit status filter cannot default to Open (cabana list filters have no default value), so the list shows ignored issues too, badged Ignored; GET /_seo/api/v1/issues and seo_list_issues default to status open; set the default once cabana filters accept one",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T15:03:28.372Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 33,
    "kind": "deviation",
    "phase": "33",
    "file": "controllers/issues/_issue_details.htm",
    "line": null,
    "description": "sm-seo-plugin: P7 shows Open the page and the Rich Results Test as labelled addresses, not links, because the partial allowlist keeps only same-origin hrefs; make them links once partials may carry an external link (new tab)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T15:03:28.619Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 34,
    "kind": "deviation",
    "phase": "33",
    "file": "vue-demo-app/nuxt.config.ts",
    "line": null,
    "description": "33-12: the demo serves Polish by cookie at one address (no_prefix), but the CMS names /pl/... alternates and sitemap addresses, which answer 404; i18n strategy decision before 33-14 applies the demo patches",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-11-04T17:10:13.946Z",
    "resolved_at": null,
    "milestone": "v1.0"
  },
  {
    "id": 35,
    "kind": "todo",
    "phase": "33",
    "file": "sm-sitemap-plugin/classes/rebuild.go",
    "line": null,
    "description": "33-12: additional addresses are not de-duplicated against content records (migrated /, /blog, /faq listed twice on rome-like data); the demo DEPLOY step works around it",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-11-04T17:10:14.144Z",
    "resolved_at": "2026-11-04T19:19:01.124Z",
    "milestone": "v1.0"
  }
]