diff --git a/.playwright-mcp/page-2026-05-31T21-49-48-037Z.yml b/.playwright-mcp/page-2026-05-31T21-49-48-037Z.yml new file mode 100644 index 00000000..16d7c6bf --- /dev/null +++ b/.playwright-mcp/page-2026-05-31T21-49-48-037Z.yml @@ -0,0 +1,251 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - generic [ref=e43]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "12" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: wp" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "wp" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - heading "Decision register" [level=1] [ref=e165] + - generic [ref=e167]: + - generic [ref=e171]: + - generic [ref=e172]: + - img [ref=e173] + - text: Decision register + - generic [ref=e175]: + - heading "Decision register" [level=1] [ref=e176] + - paragraph [ref=e177]: This workspace register shows the current exception and accepted-risk decisions that need follow-through without opening a second approval lane. + - generic [ref=e178]: + - generic [ref=e179]: "Workspace: wp" + - generic [ref=e180]: "Scope: Open decisions" + - generic [ref=e181]: "Visible rows: 0" + - generic [ref=e182]: "Environment: YPTW2" + - generic [ref=e183]: + - generic [ref=e184]: "Environment filter:" + - generic [ref=e185]: YPTW2 + - link "Clear filter" [ref=e186] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - generic [ref=e187]: + - link "Open decisions 0" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=4 + - text: Open decisions + - generic [ref=e189]: "0" + - link "Recently closed 0" [ref=e190] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=4®ister_state=recently_closed + - text: Recently closed + - generic [ref=e191]: "0" + - generic [ref=e194]: + - generic [ref=e197]: + - generic [ref=e198]: + - generic [ref=e199]: Search + - generic [ref=e200]: + - img [ref=e202] + - searchbox "Search" [ref=e205] + - button "Column manager" [ref=e208] [cursor=pointer]: + - img [ref=e209] + - table [ref=e212]: + - rowgroup [ref=e213]: + - row "Environment Status Impact Owner Review due Proof Operation Next action" [ref=e214]: + - columnheader "Environment" [ref=e215]: + - button "Environment" [ref=e216] [cursor=pointer]: + - text: Environment + - img [ref=e217] + - columnheader "Status" [ref=e219]: + - button "Status" [ref=e220] [cursor=pointer]: + - text: Status + - img [ref=e221] + - columnheader "Impact" [ref=e223] + - columnheader "Owner" [ref=e224] + - columnheader "Review due" [ref=e225]: + - button "Review due" [ref=e226] [cursor=pointer]: + - text: Review due + - img [ref=e227] + - columnheader "Proof" [ref=e229] + - columnheader "Operation" [ref=e230] + - columnheader "Next action" [ref=e231] + - generic [ref=e233]: + - img [ref=e235] + - heading "No open decisions match this filter right now." [level=2] [ref=e237] + - paragraph [ref=e238]: Try widening the environment scope or switch to recently closed decisions if you are checking what was just finished. + - generic: + - status + - generic [ref=e239]: + - generic [ref=e241]: + - generic [ref=e243]: + - generic [ref=e244] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e245] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e246] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e247]: "15" + - generic [ref=e248] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e249]: "64" + - generic [ref=e250] [cursor=pointer]: + - text:  + - generic: Models + - generic [ref=e251]: "57" + - generic [ref=e252] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e253]: "6" + - text:  + - generic [ref=e254] [cursor=pointer]: + - text:  + - generic: Gate + - generic [ref=e255]: "11" + - generic [ref=e256]: + - generic [ref=e259] [cursor=pointer]: + - generic:  + - generic [ref=e261] [cursor=pointer]: + - generic:  + - generic [ref=e262] [cursor=pointer]: + - generic:  + - generic: 1.03s + - generic [ref=e263]: + - generic:  + - generic: 13MB + - generic [ref=e264]: + - generic:  + - generic: 12.x + - generic [ref=e265] [cursor=pointer]: + - generic:  + - generic: GET admin/governance/decisions + - text:                                                                                                                                                                                                                                                                                                                                                                                                                                                                         + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-31T21-56-43-814Z.yml b/.playwright-mcp/page-2026-05-31T21-56-43-814Z.yml new file mode 100644 index 00000000..c0d3cea4 --- /dev/null +++ b/.playwright-mcp/page-2026-05-31T21-56-43-814Z.yml @@ -0,0 +1,262 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - button "Notifications" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e48]: "12" + - button "User menu" [ref=e51] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e52] + - generic [ref=e53]: + - complementary [ref=e55]: + - navigation [ref=e56]: + - 'link "Workspace: wp" [ref=e57] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e59] + - generic [ref=e61]: + - generic [ref=e62]: Workspace + - generic "wp" [ref=e63] + - generic [ref=e64]: 1 environment + - img [ref=e65] + - list [ref=e67]: + - listitem [ref=e68]: + - list [ref=e69]: + - listitem [ref=e70]: + - link "Overview" [ref=e71] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e72] + - generic [ref=e74]: Overview + - listitem [ref=e75]: + - generic [ref=e76] [cursor=pointer]: + - generic [ref=e77]: Monitoring + - button "Monitoring" [expanded] [ref=e78]: + - img [ref=e79] + - list [ref=e81]: + - listitem [ref=e82]: + - link "Finding exceptions" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e84] + - generic [ref=e86]: Finding exceptions + - listitem [ref=e87]: + - link "Operations" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e89] + - generic [ref=e91]: Operations + - listitem [ref=e92]: + - link "Alerts" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e94] + - generic [ref=e96]: Alerts + - listitem [ref=e97]: + - link "Evidence" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e99] + - generic [ref=e101]: Evidence + - listitem [ref=e102]: + - link "Audit Log" [ref=e103] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e104] + - generic [ref=e106]: Audit Log + - listitem [ref=e107]: + - generic [ref=e108] [cursor=pointer]: + - generic [ref=e109]: Reporting + - button "Reporting" [expanded] [ref=e110]: + - img [ref=e111] + - list [ref=e113]: + - listitem [ref=e114]: + - link "Reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e116] + - generic [ref=e118]: Reviews + - listitem [ref=e119]: + - link "Customer reviews" [ref=e120] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e121] + - generic [ref=e123]: Customer reviews + - listitem [ref=e124]: + - generic [ref=e125] [cursor=pointer]: + - generic [ref=e126]: Settings + - button "Settings" [expanded] [ref=e127]: + - img [ref=e128] + - list [ref=e130]: + - listitem [ref=e131]: + - link "Manage workspaces" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e133] + - generic [ref=e135]: Manage workspaces + - listitem [ref=e136]: + - link "Integrations" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e138] + - generic [ref=e140]: Integrations + - listitem [ref=e141]: + - link "Settings" [ref=e142] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e143] + - generic [ref=e146]: Settings + - listitem [ref=e147]: + - generic [ref=e148] [cursor=pointer]: + - generic [ref=e149]: Governance + - button "Governance" [expanded] [ref=e150]: + - img [ref=e151] + - list [ref=e153]: + - listitem [ref=e154]: + - link "Governance inbox" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e156] + - generic [ref=e158]: Governance inbox + - listitem [ref=e159]: + - link "Decision register" [ref=e160] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e161] + - generic [ref=e163]: Decision register + - main [ref=e165]: + - generic [ref=e167]: + - heading "Decision register" [level=1] [ref=e170] + - generic [ref=e172]: + - generic [ref=e176]: + - generic [ref=e177]: + - img [ref=e178] + - text: Decision register + - generic [ref=e180]: + - heading "Decision register" [level=1] [ref=e181] + - paragraph [ref=e182]: This workspace register shows the current exception and accepted-risk decisions that need follow-through without opening a second approval lane. + - generic [ref=e183]: + - generic [ref=e184]: "Workspace: wp" + - generic [ref=e185]: "Scope: Open decisions" + - generic [ref=e186]: "Visible rows: 0" + - generic [ref=e187]: "Environment: YPTW2" + - generic [ref=e188]: + - generic [ref=e189]: "Environment filter:" + - generic [ref=e190]: YPTW2 + - link "Clear filter" [ref=e191] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - generic [ref=e192]: + - link "Open decisions 0" [ref=e193] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=4 + - text: Open decisions + - generic [ref=e194]: "0" + - link "Recently closed 0" [ref=e195] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=4®ister_state=recently_closed + - text: Recently closed + - generic [ref=e196]: "0" + - generic [ref=e199]: + - generic [ref=e202]: + - generic [ref=e203]: + - generic [ref=e204]: Search + - generic [ref=e205]: + - img [ref=e207] + - searchbox "Search" [ref=e210] + - button "Filter" [ref=e213] [cursor=pointer]: + - img [ref=e214] + - generic [ref=e217]: "1" + - button "Column manager" [ref=e220] [cursor=pointer]: + - img [ref=e221] + - generic [ref=e223]: + - generic [ref=e224]: + - generic [ref=e225]: Active filters + - generic [ref=e227]: + - generic [ref=e229]: "Environment: YPTW2" + - button "Remove filter" [ref=e230] [cursor=pointer]: + - img [ref=e231] + - generic [ref=e233]: Remove filter + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - table [ref=e238]: + - rowgroup [ref=e239]: + - row "Environment Status Impact Owner Review due Proof Operation Next action" [ref=e240]: + - columnheader "Environment" [ref=e241]: + - button "Environment" [ref=e242] [cursor=pointer]: + - text: Environment + - img [ref=e243] + - columnheader "Status" [ref=e245]: + - button "Status" [ref=e246] [cursor=pointer]: + - text: Status + - img [ref=e247] + - columnheader "Impact" [ref=e249] + - columnheader "Owner" [ref=e250] + - columnheader "Review due" [ref=e251]: + - button "Review due" [ref=e252] [cursor=pointer]: + - text: Review due + - img [ref=e253] + - columnheader "Proof" [ref=e255] + - columnheader "Operation" [ref=e256] + - columnheader "Next action" [ref=e257] + - generic [ref=e259]: + - img [ref=e261] + - heading "No open decisions match this filter right now." [level=2] [ref=e263] + - paragraph [ref=e264]: Try widening the environment scope or switch to recently closed decisions if you are checking what was just finished. + - generic: + - status + - generic [ref=e265]: + - generic [ref=e267]: + - generic [ref=e269]: + - generic [ref=e270] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e271] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e272] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e273]: "17" + - generic [ref=e274] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e275]: "64" + - generic [ref=e276] [cursor=pointer]: + - text:  + - generic: Models + - generic [ref=e277]: "57" + - generic [ref=e278] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e279]: "6" + - text:  + - generic [ref=e280] [cursor=pointer]: + - text:  + - generic: Gate + - generic [ref=e281]: "11" + - generic [ref=e282]: + - generic [ref=e285] [cursor=pointer]: + - generic:  + - generic [ref=e287] [cursor=pointer]: + - generic:  + - generic [ref=e288] [cursor=pointer]: + - generic:  + - generic: 635ms + - generic [ref=e289]: + - generic:  + - generic: 13MB + - generic [ref=e290]: + - generic:  + - generic: 12.x + - generic [ref=e291] [cursor=pointer]: + - generic:  + - generic: GET admin/governance/decisions + - text:                                                                                                                                                                                                                                                                                                                                                                                                                                                                               + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-45-50-858Z.yml b/.playwright-mcp/page-2026-06-01T21-45-50-858Z.yml new file mode 100644 index 00000000..33523bd6 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-45-50-858Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 398ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-46-30-392Z.yml b/.playwright-mcp/page-2026-06-01T21-46-30-392Z.yml new file mode 100644 index 00000000..6ad69635 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-46-30-392Z.yml @@ -0,0 +1,26 @@ +- generic [ref=e5]: + - img "Hintergrundbild der Organisation" [ref=e6] + - generic [ref=e7]: + - generic [ref=e13]: + - img "Microsoft" [ref=e16] + - main [ref=e17]: + - generic [ref=e20]: + - heading "Anmelden" [level=1] [ref=e24] + - generic [ref=e25]: + - alert + - generic [ref=e27]: + - textbox "E-Mail-Adresse oder Telefonnummer eingeben" [active] [ref=e28]: + - /placeholder: E-Mail-Adresse oder Telefonnummer + - textbox [ref=e29] + - link "Sie können nicht auf Ihr Konto zugreifen?" [ref=e35] [cursor=pointer]: + - /url: "#" + - button "Weiter" [ref=e38] [cursor=pointer] + - contentinfo [ref=e39]: + - generic [ref=e40]: + - link "Nutzungsbedingungen" [ref=e41] [cursor=pointer]: + - /url: https://www.microsoft.com/de-DE/servicesagreement/ + - link "Datenschutz und Cookies" [ref=e42] [cursor=pointer]: + - /url: https://privacy.microsoft.com/de-DE/privacystatement + - link "Haftungsausschluss" [ref=e43] [cursor=pointer]: + - /url: https://www.microsoft.com/de-de/corporate/rechtliche-hinweise/impressum.aspx + - button "Klicken Sie hier, um weitere Informationen zur Problembehandlung zu erhalten." [ref=e44] [cursor=pointer]: ... \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-46-42-593Z.yml b/.playwright-mcp/page-2026-06-01T21-46-42-593Z.yml new file mode 100644 index 00000000..a0044906 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-46-42-593Z.yml @@ -0,0 +1,62 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38]: "2" + - combobox [ref=e39] [cursor=pointer]: + - option "#1 redirect (stacked) (21:46:29)" + - option "#2 login (21:46:42)" [selected] + - generic [ref=e40] [cursor=pointer]: + - generic:  + - generic: 371ms + - generic [ref=e41]: + - generic:  + - generic: 13MB + - generic [ref=e42]: + - generic:  + - generic: 12.x + - generic [ref=e43] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                    + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-47-41-834Z.yml b/.playwright-mcp/page-2026-06-01T21-47-41-834Z.yml new file mode 100644 index 00000000..24ac6285 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-47-41-834Z.yml @@ -0,0 +1 @@ +- img [ref=e2] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-47-47-421Z.yml b/.playwright-mcp/page-2026-06-01T21-47-47-421Z.yml new file mode 100644 index 00000000..35b4c118 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-47-47-421Z.yml @@ -0,0 +1,20 @@ +- generic [active] [ref=e1]: + - heading "Directory listing for /" [level=1] [ref=e2] + - separator [ref=e3] + - list [ref=e4]: + - listitem [ref=e5]: + - link "01-operator-summary.png" [ref=e6] [cursor=pointer]: + - /url: 01-operator-summary.png + - listitem [ref=e7]: + - link "02-acknowledgement-prominent.png" [ref=e8] [cursor=pointer]: + - /url: 02-acknowledgement-prominent.png + - listitem [ref=e9]: + - link "03-supporting-details-demoted.png" [ref=e10] [cursor=pointer]: + - /url: 03-supporting-details-demoted.png + - listitem [ref=e11]: + - link "04-diagnostics-collapsed.png" [ref=e12] [cursor=pointer]: + - /url: 04-diagnostics-collapsed.png + - listitem [ref=e13]: + - link "05-dark-mode.png" [ref=e14] [cursor=pointer]: + - /url: 05-dark-mode.png + - separator [ref=e15] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-47-54-520Z.yml b/.playwright-mcp/page-2026-06-01T21-47-54-520Z.yml new file mode 100644 index 00000000..24ac6285 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-47-54-520Z.yml @@ -0,0 +1 @@ +- img [ref=e2] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-48-03-659Z.yml b/.playwright-mcp/page-2026-06-01T21-48-03-659Z.yml new file mode 100644 index 00000000..24ac6285 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-48-03-659Z.yml @@ -0,0 +1 @@ +- img [ref=e2] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-48-03-739Z.yml b/.playwright-mcp/page-2026-06-01T21-48-03-739Z.yml new file mode 100644 index 00000000..24ac6285 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-48-03-739Z.yml @@ -0,0 +1 @@ +- img [ref=e2] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-48-03-806Z.yml b/.playwright-mcp/page-2026-06-01T21-48-03-806Z.yml new file mode 100644 index 00000000..24ac6285 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-48-03-806Z.yml @@ -0,0 +1 @@ +- img [ref=e2] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T21-48-07-626Z.yml b/.playwright-mcp/page-2026-06-01T21-48-07-626Z.yml new file mode 100644 index 00000000..35b4c118 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T21-48-07-626Z.yml @@ -0,0 +1,20 @@ +- generic [active] [ref=e1]: + - heading "Directory listing for /" [level=1] [ref=e2] + - separator [ref=e3] + - list [ref=e4]: + - listitem [ref=e5]: + - link "01-operator-summary.png" [ref=e6] [cursor=pointer]: + - /url: 01-operator-summary.png + - listitem [ref=e7]: + - link "02-acknowledgement-prominent.png" [ref=e8] [cursor=pointer]: + - /url: 02-acknowledgement-prominent.png + - listitem [ref=e9]: + - link "03-supporting-details-demoted.png" [ref=e10] [cursor=pointer]: + - /url: 03-supporting-details-demoted.png + - listitem [ref=e11]: + - link "04-diagnostics-collapsed.png" [ref=e12] [cursor=pointer]: + - /url: 04-diagnostics-collapsed.png + - listitem [ref=e13]: + - link "05-dark-mode.png" [ref=e14] [cursor=pointer]: + - /url: 05-dark-mode.png + - separator [ref=e15] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-01T23-47-07-653Z.yml b/.playwright-mcp/page-2026-06-01T23-47-07-653Z.yml new file mode 100644 index 00000000..61dc84b9 --- /dev/null +++ b/.playwright-mcp/page-2026-06-01T23-47-07-653Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 332ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-02T12-56-18-700Z.yml b/.playwright-mcp/page-2026-06-02T12-56-18-700Z.yml new file mode 100644 index 00000000..2ea9fa53 --- /dev/null +++ b/.playwright-mcp/page-2026-06-02T12-56-18-700Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 460ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-02T12-56-59-780Z.yml b/.playwright-mcp/page-2026-06-02T12-56-59-780Z.yml new file mode 100644 index 00000000..d39b198c --- /dev/null +++ b/.playwright-mcp/page-2026-06-02T12-56-59-780Z.yml @@ -0,0 +1,174 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 180 Backup Health Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 180 Backup Health Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - generic [ref=e43]: + - button "Notifications" [disabled]: + - img + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 180 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 180 Backup Health Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 180 Backup Health Smoke" [ref=e58] + - generic [ref=e59]: 2 environments + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/4/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e164]: + - heading "Governance Inbox" [level=1] [ref=e165] + - paragraph [ref=e166]: Daily operator queue for governance follow-up, accepted risk, evidence gaps, and review handoff. + - generic [ref=e169]: + - generic [ref=e170]: + - generic [ref=e171]: + - generic [ref=e172]: + - generic [ref=e173]: + - paragraph [ref=e174]: Open governance work + - heading "0 open governance items need attention" [level=2] [ref=e175] + - paragraph [ref=e176]: The inbox turns current findings, accepted-risk records, evidence gaps, review follow-up, and blocked operations into one operator queue. + - generic [ref=e177]: + - generic [ref=e178]: "Workspace: Spec 180 Backup Health Smoke" + - generic [ref=e179]: "Source focus: All source families" + - generic [ref=e180]: + - generic [ref=e181]: + - text: Needs triage + - generic [ref=e182]: Clear + - generic [ref=e183]: + - text: Requires decision + - generic [ref=e184]: Clear + - generic [ref=e185]: + - text: Risk / exception review + - generic [ref=e186]: Clear + - generic [ref=e187]: + - text: Evidence required + - generic [ref=e188]: Clear + - generic [ref=e189]: + - text: Blocked + - generic [ref=e190]: Clear + - generic [ref=e191]: + - heading "No governance items need attention." [level=2] [ref=e192] + - paragraph [ref=e193]: Findings, decisions, accepted-risk reviews, evidence gaps, and review follow-ups will appear here when they need operator attention. + - group [ref=e194]: + - generic "Source detail" [ref=e195] [cursor=pointer] + - group [ref=e196]: + - generic "Diagnostics / source detail · Collapsed" [ref=e197] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-03T00-32-44-139Z.yml b/.playwright-mcp/page-2026-06-03T00-32-44-139Z.yml new file mode 100644 index 00000000..66615aed --- /dev/null +++ b/.playwright-mcp/page-2026-06-03T00-32-44-139Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 257ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-03T17-57-35-220Z.yml b/.playwright-mcp/page-2026-06-03T17-57-35-220Z.yml new file mode 100644 index 00000000..1c3b4130 --- /dev/null +++ b/.playwright-mcp/page-2026-06-03T17-57-35-220Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 210ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-13-57-369Z.yml b/.playwright-mcp/page-2026-06-04T00-13-57-369Z.yml new file mode 100644 index 00000000..6011f717 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-13-57-369Z.yml @@ -0,0 +1,615 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - generic [ref=e44]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Recent operation updates that may need review. + - generic [ref=e282]: + - link "View operation" [ref=e283] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/52 + - link "Show all operations" [ref=e284] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Execution failed + - generic [ref=e293]: Automatically reconciled + - paragraph [ref=e294]: Completed · 12 seconds ago + - paragraph [ref=e295]: No action needed. + - generic [ref=e296]: + - generic [ref=e297]: + - generic [ref=e298]: + - navigation [ref=e299]: + - list [ref=e300]: + - listitem [ref=e301]: + - link "Reviews" [ref=e302] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e303]: + - img [ref=e304] + - generic [ref=e306]: View + - heading "View Review" [level=1] [ref=e307] + - generic [ref=e309]: + - button "Publish review" [ref=e310] [cursor=pointer]: + - img [ref=e311] + - text: Publish review + - button "More" [ref=e315] [cursor=pointer]: + - img [ref=e316] + - button "Danger" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - generic [ref=e328]: + - generic [ref=e332]: + - heading "Outcome summary" [level=2] [ref=e335] + - generic [ref=e340]: + - generic [ref=e341]: + - generic [ref=e343]: + - img [ref=e344] + - generic [ref=e347]: Publishable + - generic [ref=e348]: + - generic [ref=e349]: Publishable + - paragraph [ref=e350]: This review is ready for publication and executive-pack export. + - paragraph [ref=e351]: Technical truth detail remains available below the primary explanation. + - generic [ref=e352]: + - generic [ref=e353]: + - term [ref=e354]: Next step + - definition [ref=e355]: No action needed + - generic [ref=e356]: + - term [ref=e357]: Artifact reference + - definition [ref=e358]: "Review #17" + - generic [ref=e359]: + - term [ref=e360]: Lifecycle + - definition [ref=e361]: + - generic [ref=e362]: + - img [ref=e363] + - generic [ref=e366]: Current + - generic [ref=e367]: + - term [ref=e368]: Retention + - definition [ref=e369]: + - generic [ref=e370]: + - img [ref=e371] + - generic [ref=e375]: Retained + - generic [ref=e376]: + - term [ref=e377]: Result meaning + - definition [ref=e378]: + - generic [ref=e379]: + - img [ref=e380] + - generic [ref=e383]: No issues detected + - generic [ref=e384]: + - term [ref=e385]: Result trust + - definition [ref=e386]: + - generic [ref=e387]: + - img [ref=e388] + - generic [ref=e391]: Trustworthy + - generic [ref=e395]: + - heading "Review" [level=2] [ref=e398] + - generic [ref=e400]: + - generic [ref=e403]: + - term [ref=e406]: Review status + - definition [ref=e408]: + - generic [ref=e411]: + - img [ref=e412] + - text: Ready + - generic [ref=e416]: + - term [ref=e419]: Completeness + - definition [ref=e421]: + - generic [ref=e424]: + - img [ref=e425] + - text: Review inputs ready + - generic [ref=e429]: + - term [ref=e432]: Environment + - definition [ref=e434]: + - generic [ref=e436]: Spec 351 Browser Ready Draft + - generic [ref=e439]: + - term [ref=e442]: Generated at + - definition [ref=e444]: + - generic [ref=e446]: Jun 4, 2026 00:13:41 + - generic [ref=e449]: + - term [ref=e452]: Published at + - definition [ref=e454]: + - paragraph [ref=e457]: — + - generic [ref=e460]: + - term [ref=e463]: Evidence snapshot + - definition [ref=e465]: + - link "#15" [ref=e466] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - generic [ref=e467]: "#15" + - generic [ref=e470]: + - term [ref=e473]: Current export + - generic: + - definition + - generic [ref=e476]: + - term [ref=e479]: Fingerprint + - definition [ref=e481]: + - generic [ref=e483]: d1b5410e249c2468d5ac519a35d603ec6781ee2044f8e3fbf687d5074df7aced + - generic [ref=e487]: + - heading "Output guidance" [level=2] [ref=e490] + - generic [ref=e495]: + - generic [ref=e496]: + - generic [ref=e497]: + - generic [ref=e500]: Export not ready + - generic [ref=e503]: Not ready + - generic [ref=e504]: + - generic [ref=e505]: + - generic [ref=e506]: Output readiness + - generic [ref=e507]: Export not ready + - generic [ref=e508]: + - generic [ref=e509]: Publication/sharing state + - generic [ref=e510]: Not ready + - generic [ref=e511]: + - generic [ref=e512]: Next step + - generic [ref=e513]: Publish review + - generic [ref=e514]: + - heading "Export not ready" [level=3] [ref=e515] + - paragraph [ref=e516]: The current export is not ready yet. + - paragraph [ref=e517]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e518]: + - link "Review output limitations" [ref=e519] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e520] + - text: Review output limitations + - link "Open evidence basis" [ref=e522] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e523] + - text: Open evidence basis + - link "Open review" [ref=e525] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e526] + - text: Open review + - group [ref=e528]: + - generic "Output limitations 2 limitations require review" [ref=e529] [cursor=pointer] + - group [ref=e530]: + - generic "Technical details" [ref=e531] [cursor=pointer] + - generic [ref=e535]: + - heading "Executive posture" [level=2] [ref=e538] + - generic [ref=e543]: + - generic [ref=e544]: + - generic [ref=e545]: No follow-up was detected from this result. + - generic [ref=e546]: Trustworthiness is high for the intended operator task. + - generic [ref=e547]: No action needed + - generic [ref=e548]: + - generic [ref=e549]: + - term [ref=e550]: Findings + - definition [ref=e551]: "0" + - generic [ref=e552]: + - term [ref=e553]: Reports + - definition [ref=e554]: "2" + - generic [ref=e555]: + - term [ref=e556]: Operations + - definition [ref=e557]: "1" + - generic [ref=e558]: + - term [ref=e559]: Sections + - definition [ref=e560]: "7" + - generic [ref=e561]: + - term [ref=e562]: Pending verification + - definition [ref=e563]: "0" + - generic [ref=e564]: + - term [ref=e565]: Verified cleared + - definition [ref=e566]: "0" + - generic [ref=e567]: + - generic [ref=e568]: Highlights + - list [ref=e569]: + - listitem [ref=e570]: 0 open risks from 0 tracked findings. + - listitem [ref=e571]: Permission posture score is 92. + - listitem [ref=e572]: 0 baseline drift findings remain open. + - listitem [ref=e573]: 0 recent operations failed and 0 completed with warnings. + - listitem [ref=e574]: 0 risk-accepted findings are currently governed. + - listitem [ref=e575]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e576]: + - generic [ref=e577]: Next actions + - list [ref=e578]: + - listitem [ref=e579]: No immediate corrective action is required beyond the normal review cadence. + - generic [ref=e580]: + - generic [ref=e581]: Related context + - generic [ref=e582]: + - generic [ref=e583]: + - generic [ref=e584]: Operation + - link "Open operation" [ref=e586] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/52 + - img [ref=e587] + - text: Open operation + - generic [ref=e590]: Inspect the latest review composition or refresh run. + - generic [ref=e591]: + - generic [ref=e592]: Customer workspace + - link "Open customer workspace" [ref=e594] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e595] + - text: Open customer workspace + - generic [ref=e598]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e599]: + - generic [ref=e600]: Evidence snapshot + - link "View evidence snapshot" [ref=e602] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e603] + - text: View evidence snapshot + - generic [ref=e606]: Return to the evidence basis behind this review. + - generic [ref=e607]: + - generic [ref=e608]: Publication readiness + - generic [ref=e609]: This review is ready for publication and executive-pack export. + - generic [ref=e613]: + - heading "Sections" [level=2] [ref=e616] + - definition [ref=e623]: + - list [ref=e625]: + - listitem [ref=e626]: + - generic [ref=e627]: + - generic [ref=e630]: + - term [ref=e633]: Title + - definition [ref=e635]: + - generic [ref=e637]: Executive summary + - generic [ref=e640]: + - term [ref=e643]: Completeness + - definition [ref=e645]: + - generic [ref=e648]: + - img [ref=e649] + - text: Review inputs ready + - generic [ref=e653]: + - term [ref=e656]: Measured at + - definition [ref=e658]: + - generic [ref=e660]: Jun 4, 2026 00:09:41 + - generic [ref=e665] [cursor=pointer]: + - heading "Details" [level=3] [ref=e667] + - button [ref=e668]: + - img [ref=e669] + - listitem [ref=e671]: + - generic [ref=e672]: + - generic [ref=e675]: + - term [ref=e678]: Title + - definition [ref=e680]: + - generic [ref=e682]: Control readiness interpretation + - generic [ref=e685]: + - term [ref=e688]: Completeness + - definition [ref=e690]: + - generic [ref=e693]: + - img [ref=e694] + - text: Review inputs ready + - generic [ref=e698]: + - term [ref=e701]: Measured at + - definition [ref=e703]: + - generic [ref=e705]: Jun 4, 2026 00:09:41 + - generic [ref=e710] [cursor=pointer]: + - heading "Details" [level=3] [ref=e712] + - button [ref=e713]: + - img [ref=e714] + - listitem [ref=e716]: + - generic [ref=e717]: + - generic [ref=e720]: + - term [ref=e723]: Title + - definition [ref=e725]: + - generic [ref=e727]: Open risk highlights + - generic [ref=e730]: + - term [ref=e733]: Completeness + - definition [ref=e735]: + - generic [ref=e738]: + - img [ref=e739] + - text: Review inputs ready + - generic [ref=e743]: + - term [ref=e746]: Measured at + - definition [ref=e748]: + - paragraph [ref=e751]: — + - generic [ref=e756] [cursor=pointer]: + - heading "Details" [level=3] [ref=e758] + - button [ref=e759]: + - img [ref=e760] + - listitem [ref=e762]: + - generic [ref=e763]: + - generic [ref=e766]: + - term [ref=e769]: Title + - definition [ref=e771]: + - generic [ref=e773]: Accepted risk summary + - generic [ref=e776]: + - term [ref=e779]: Completeness + - definition [ref=e781]: + - generic [ref=e784]: + - img [ref=e785] + - text: Review inputs ready + - generic [ref=e789]: + - term [ref=e792]: Measured at + - definition [ref=e794]: + - paragraph [ref=e797]: — + - generic [ref=e802] [cursor=pointer]: + - heading "Details" [level=3] [ref=e804] + - button [ref=e805]: + - img [ref=e806] + - listitem [ref=e808]: + - generic [ref=e809]: + - generic [ref=e812]: + - term [ref=e815]: Title + - definition [ref=e817]: + - generic [ref=e819]: Permission posture + - generic [ref=e822]: + - term [ref=e825]: Completeness + - definition [ref=e827]: + - generic [ref=e830]: + - img [ref=e831] + - text: Review inputs ready + - generic [ref=e835]: + - term [ref=e838]: Measured at + - definition [ref=e840]: + - generic [ref=e842]: Jun 4, 2026 00:13:41 + - generic [ref=e847] [cursor=pointer]: + - heading "Details" [level=3] [ref=e849] + - button [ref=e850]: + - img [ref=e851] + - listitem [ref=e853]: + - generic [ref=e854]: + - generic [ref=e857]: + - term [ref=e860]: Title + - definition [ref=e862]: + - generic [ref=e864]: Baseline drift posture + - generic [ref=e867]: + - term [ref=e870]: Completeness + - definition [ref=e872]: + - generic [ref=e875]: + - img [ref=e876] + - text: Review inputs ready + - generic [ref=e880]: + - term [ref=e883]: Measured at + - definition [ref=e885]: + - paragraph [ref=e888]: — + - generic [ref=e893] [cursor=pointer]: + - heading "Details" [level=3] [ref=e895] + - button [ref=e896]: + - img [ref=e897] + - listitem [ref=e899]: + - generic [ref=e900]: + - generic [ref=e903]: + - term [ref=e906]: Title + - definition [ref=e908]: + - generic [ref=e910]: Operations health + - generic [ref=e913]: + - term [ref=e916]: Completeness + - definition [ref=e918]: + - generic [ref=e921]: + - img [ref=e922] + - text: Review inputs ready + - generic [ref=e926]: + - term [ref=e929]: Measured at + - definition [ref=e931]: + - generic [ref=e933]: Jun 4, 2026 00:13:41 + - generic [ref=e938] [cursor=pointer]: + - heading "Details" [level=3] [ref=e940] + - button [ref=e941]: + - img [ref=e942] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-13-59-492Z.yml b/.playwright-mcp/page-2026-06-04T00-13-59-492Z.yml new file mode 100644 index 00000000..8c0c6e60 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-13-59-492Z.yml @@ -0,0 +1,608 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e946] [cursor=pointer]: + - img [ref=e947] + - generic [ref=e950]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Execution failed + - generic [ref=e293]: Automatically reconciled + - paragraph [ref=e294]: Completed · 13 seconds ago + - paragraph [ref=e295]: No action needed. + - generic [ref=e296]: + - generic [ref=e297]: + - generic [ref=e298]: + - navigation [ref=e299]: + - list [ref=e300]: + - listitem [ref=e301]: + - link "Reviews" [ref=e302] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e303]: + - img [ref=e304] + - generic [ref=e306]: View + - heading "View Review" [level=1] [ref=e307] + - generic [ref=e309]: + - button "Publish review" [ref=e310] [cursor=pointer]: + - img [ref=e311] + - text: Publish review + - button "More" [ref=e315] [cursor=pointer]: + - img [ref=e316] + - button "Danger" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - generic [ref=e328]: + - generic [ref=e332]: + - heading "Outcome summary" [level=2] [ref=e335] + - generic [ref=e340]: + - generic [ref=e341]: + - generic [ref=e343]: + - img [ref=e344] + - generic [ref=e347]: Publishable + - generic [ref=e348]: + - generic [ref=e349]: Publishable + - paragraph [ref=e350]: This review is ready for publication and executive-pack export. + - paragraph [ref=e351]: Technical truth detail remains available below the primary explanation. + - generic [ref=e352]: + - generic [ref=e353]: + - term [ref=e354]: Next step + - definition [ref=e355]: No action needed + - generic [ref=e356]: + - term [ref=e357]: Artifact reference + - definition [ref=e358]: "Review #17" + - generic [ref=e359]: + - term [ref=e360]: Lifecycle + - definition [ref=e361]: + - generic [ref=e362]: + - img [ref=e363] + - generic [ref=e366]: Current + - generic [ref=e367]: + - term [ref=e368]: Retention + - definition [ref=e369]: + - generic [ref=e370]: + - img [ref=e371] + - generic [ref=e375]: Retained + - generic [ref=e376]: + - term [ref=e377]: Result meaning + - definition [ref=e378]: + - generic [ref=e379]: + - img [ref=e380] + - generic [ref=e383]: No issues detected + - generic [ref=e384]: + - term [ref=e385]: Result trust + - definition [ref=e386]: + - generic [ref=e387]: + - img [ref=e388] + - generic [ref=e391]: Trustworthy + - generic [ref=e395]: + - heading "Review" [level=2] [ref=e398] + - generic [ref=e400]: + - generic [ref=e403]: + - term [ref=e406]: Review status + - definition [ref=e408]: + - generic [ref=e411]: + - img [ref=e412] + - text: Ready + - generic [ref=e416]: + - term [ref=e419]: Completeness + - definition [ref=e421]: + - generic [ref=e424]: + - img [ref=e425] + - text: Review inputs ready + - generic [ref=e429]: + - term [ref=e432]: Environment + - definition [ref=e434]: + - generic [ref=e436]: Spec 351 Browser Ready Draft + - generic [ref=e439]: + - term [ref=e442]: Generated at + - definition [ref=e444]: + - generic [ref=e446]: Jun 4, 2026 00:13:41 + - generic [ref=e449]: + - term [ref=e452]: Published at + - definition [ref=e454]: + - paragraph [ref=e457]: — + - generic [ref=e460]: + - term [ref=e463]: Evidence snapshot + - definition [ref=e465]: + - link "#15" [ref=e466] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - generic [ref=e467]: "#15" + - generic [ref=e470]: + - term [ref=e473]: Current export + - generic: + - definition + - generic [ref=e476]: + - term [ref=e479]: Fingerprint + - definition [ref=e481]: + - generic [ref=e483]: d1b5410e249c2468d5ac519a35d603ec6781ee2044f8e3fbf687d5074df7aced + - generic [ref=e487]: + - heading "Output guidance" [level=2] [ref=e490] + - generic [ref=e495]: + - generic [ref=e496]: + - generic [ref=e497]: + - generic [ref=e500]: Export not ready + - generic [ref=e503]: Not ready + - generic [ref=e504]: + - generic [ref=e505]: + - generic [ref=e506]: Output readiness + - generic [ref=e507]: Export not ready + - generic [ref=e508]: + - generic [ref=e509]: Publication/sharing state + - generic [ref=e510]: Not ready + - generic [ref=e511]: + - generic [ref=e512]: Next step + - generic [ref=e513]: Publish review + - generic [ref=e514]: + - heading "Export not ready" [level=3] [ref=e515] + - paragraph [ref=e516]: The current export is not ready yet. + - paragraph [ref=e517]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e518]: + - link "Review output limitations" [ref=e519] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e520] + - text: Review output limitations + - link "Open evidence basis" [ref=e522] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e523] + - text: Open evidence basis + - link "Open review" [ref=e525] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e526] + - text: Open review + - group [ref=e528]: + - generic "Output limitations 2 limitations require review" [ref=e529] [cursor=pointer] + - group [ref=e530]: + - generic "Technical details" [ref=e531] [cursor=pointer] + - generic [ref=e535]: + - heading "Executive posture" [level=2] [ref=e538] + - generic [ref=e543]: + - generic [ref=e544]: + - generic [ref=e545]: No follow-up was detected from this result. + - generic [ref=e546]: Trustworthiness is high for the intended operator task. + - generic [ref=e547]: No action needed + - generic [ref=e548]: + - generic [ref=e549]: + - term [ref=e550]: Findings + - definition [ref=e551]: "0" + - generic [ref=e552]: + - term [ref=e553]: Reports + - definition [ref=e554]: "2" + - generic [ref=e555]: + - term [ref=e556]: Operations + - definition [ref=e557]: "1" + - generic [ref=e558]: + - term [ref=e559]: Sections + - definition [ref=e560]: "7" + - generic [ref=e561]: + - term [ref=e562]: Pending verification + - definition [ref=e563]: "0" + - generic [ref=e564]: + - term [ref=e565]: Verified cleared + - definition [ref=e566]: "0" + - generic [ref=e567]: + - generic [ref=e568]: Highlights + - list [ref=e569]: + - listitem [ref=e570]: 0 open risks from 0 tracked findings. + - listitem [ref=e571]: Permission posture score is 92. + - listitem [ref=e572]: 0 baseline drift findings remain open. + - listitem [ref=e573]: 0 recent operations failed and 0 completed with warnings. + - listitem [ref=e574]: 0 risk-accepted findings are currently governed. + - listitem [ref=e575]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e576]: + - generic [ref=e577]: Next actions + - list [ref=e578]: + - listitem [ref=e579]: No immediate corrective action is required beyond the normal review cadence. + - generic [ref=e580]: + - generic [ref=e581]: Related context + - generic [ref=e582]: + - generic [ref=e583]: + - generic [ref=e584]: Operation + - link "Open operation" [ref=e586] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/52 + - img [ref=e587] + - text: Open operation + - generic [ref=e590]: Inspect the latest review composition or refresh run. + - generic [ref=e591]: + - generic [ref=e592]: Customer workspace + - link "Open customer workspace" [ref=e594] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e595] + - text: Open customer workspace + - generic [ref=e598]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e599]: + - generic [ref=e600]: Evidence snapshot + - link "View evidence snapshot" [ref=e602] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e603] + - text: View evidence snapshot + - generic [ref=e606]: Return to the evidence basis behind this review. + - generic [ref=e607]: + - generic [ref=e608]: Publication readiness + - generic [ref=e609]: This review is ready for publication and executive-pack export. + - generic [ref=e613]: + - heading "Sections" [level=2] [ref=e616] + - definition [ref=e623]: + - list [ref=e625]: + - listitem [ref=e626]: + - generic [ref=e627]: + - generic [ref=e630]: + - term [ref=e633]: Title + - definition [ref=e635]: + - generic [ref=e637]: Executive summary + - generic [ref=e640]: + - term [ref=e643]: Completeness + - definition [ref=e645]: + - generic [ref=e648]: + - img [ref=e649] + - text: Review inputs ready + - generic [ref=e653]: + - term [ref=e656]: Measured at + - definition [ref=e658]: + - generic [ref=e660]: Jun 4, 2026 00:09:41 + - generic [ref=e665] [cursor=pointer]: + - heading "Details" [level=3] [ref=e667] + - button [ref=e668]: + - img [ref=e669] + - listitem [ref=e671]: + - generic [ref=e672]: + - generic [ref=e675]: + - term [ref=e678]: Title + - definition [ref=e680]: + - generic [ref=e682]: Control readiness interpretation + - generic [ref=e685]: + - term [ref=e688]: Completeness + - definition [ref=e690]: + - generic [ref=e693]: + - img [ref=e694] + - text: Review inputs ready + - generic [ref=e698]: + - term [ref=e701]: Measured at + - definition [ref=e703]: + - generic [ref=e705]: Jun 4, 2026 00:09:41 + - generic [ref=e710] [cursor=pointer]: + - heading "Details" [level=3] [ref=e712] + - button [ref=e713]: + - img [ref=e714] + - listitem [ref=e716]: + - generic [ref=e717]: + - generic [ref=e720]: + - term [ref=e723]: Title + - definition [ref=e725]: + - generic [ref=e727]: Open risk highlights + - generic [ref=e730]: + - term [ref=e733]: Completeness + - definition [ref=e735]: + - generic [ref=e738]: + - img [ref=e739] + - text: Review inputs ready + - generic [ref=e743]: + - term [ref=e746]: Measured at + - definition [ref=e748]: + - paragraph [ref=e751]: — + - generic [ref=e756] [cursor=pointer]: + - heading "Details" [level=3] [ref=e758] + - button [ref=e759]: + - img [ref=e760] + - listitem [ref=e762]: + - generic [ref=e763]: + - generic [ref=e766]: + - term [ref=e769]: Title + - definition [ref=e771]: + - generic [ref=e773]: Accepted risk summary + - generic [ref=e776]: + - term [ref=e779]: Completeness + - definition [ref=e781]: + - generic [ref=e784]: + - img [ref=e785] + - text: Review inputs ready + - generic [ref=e789]: + - term [ref=e792]: Measured at + - definition [ref=e794]: + - paragraph [ref=e797]: — + - generic [ref=e802] [cursor=pointer]: + - heading "Details" [level=3] [ref=e804] + - button [ref=e805]: + - img [ref=e806] + - listitem [ref=e808]: + - generic [ref=e809]: + - generic [ref=e812]: + - term [ref=e815]: Title + - definition [ref=e817]: + - generic [ref=e819]: Permission posture + - generic [ref=e822]: + - term [ref=e825]: Completeness + - definition [ref=e827]: + - generic [ref=e830]: + - img [ref=e831] + - text: Review inputs ready + - generic [ref=e835]: + - term [ref=e838]: Measured at + - definition [ref=e840]: + - generic [ref=e842]: Jun 4, 2026 00:13:41 + - generic [ref=e847] [cursor=pointer]: + - heading "Details" [level=3] [ref=e849] + - button [ref=e850]: + - img [ref=e851] + - listitem [ref=e853]: + - generic [ref=e854]: + - generic [ref=e857]: + - term [ref=e860]: Title + - definition [ref=e862]: + - generic [ref=e864]: Baseline drift posture + - generic [ref=e867]: + - term [ref=e870]: Completeness + - definition [ref=e872]: + - generic [ref=e875]: + - img [ref=e876] + - text: Review inputs ready + - generic [ref=e880]: + - term [ref=e883]: Measured at + - definition [ref=e885]: + - paragraph [ref=e888]: — + - generic [ref=e893] [cursor=pointer]: + - heading "Details" [level=3] [ref=e895] + - button [ref=e896]: + - img [ref=e897] + - listitem [ref=e899]: + - generic [ref=e900]: + - generic [ref=e903]: + - term [ref=e906]: Title + - definition [ref=e908]: + - generic [ref=e910]: Operations health + - generic [ref=e913]: + - term [ref=e916]: Completeness + - definition [ref=e918]: + - generic [ref=e921]: + - img [ref=e922] + - text: Review inputs ready + - generic [ref=e926]: + - term [ref=e929]: Measured at + - definition [ref=e931]: + - generic [ref=e933]: Jun 4, 2026 00:13:41 + - generic [ref=e938] [cursor=pointer]: + - heading "Details" [level=3] [ref=e940] + - button [ref=e941]: + - img [ref=e942] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-14-07-989Z.yml b/.playwright-mcp/page-2026-06-04T00-14-07-989Z.yml new file mode 100644 index 00000000..29288add --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-14-07-989Z.yml @@ -0,0 +1,608 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e946] [cursor=pointer]: + - img [ref=e947] + - generic [ref=e950]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Execution failed + - generic [ref=e293]: Automatically reconciled + - paragraph [ref=e294]: Completed · 23 seconds ago + - paragraph [ref=e295]: No action needed. + - generic [ref=e296]: + - generic [ref=e297]: + - generic [ref=e298]: + - navigation [ref=e299]: + - list [ref=e300]: + - listitem [ref=e301]: + - link "Reviews" [ref=e302] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e303]: + - img [ref=e304] + - generic [ref=e306]: View + - heading "View Review" [level=1] [ref=e307] + - generic [ref=e309]: + - button "Publish review" [ref=e310] [cursor=pointer]: + - img [ref=e311] + - text: Publish review + - button "More" [ref=e315] [cursor=pointer]: + - img [ref=e316] + - button "Danger" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - generic [ref=e328]: + - generic [ref=e332]: + - heading "Outcome summary" [level=2] [ref=e335] + - generic [ref=e340]: + - generic [ref=e341]: + - generic [ref=e343]: + - img [ref=e344] + - generic [ref=e347]: Publishable + - generic [ref=e348]: + - generic [ref=e349]: Publishable + - paragraph [ref=e350]: This review is ready for publication and executive-pack export. + - paragraph [ref=e351]: Technical truth detail remains available below the primary explanation. + - generic [ref=e352]: + - generic [ref=e353]: + - term [ref=e354]: Next step + - definition [ref=e355]: No action needed + - generic [ref=e356]: + - term [ref=e357]: Artifact reference + - definition [ref=e358]: "Review #17" + - generic [ref=e359]: + - term [ref=e360]: Lifecycle + - definition [ref=e361]: + - generic [ref=e362]: + - img [ref=e363] + - generic [ref=e366]: Current + - generic [ref=e367]: + - term [ref=e368]: Retention + - definition [ref=e369]: + - generic [ref=e370]: + - img [ref=e371] + - generic [ref=e375]: Retained + - generic [ref=e376]: + - term [ref=e377]: Result meaning + - definition [ref=e378]: + - generic [ref=e379]: + - img [ref=e380] + - generic [ref=e383]: No issues detected + - generic [ref=e384]: + - term [ref=e385]: Result trust + - definition [ref=e386]: + - generic [ref=e387]: + - img [ref=e388] + - generic [ref=e391]: Trustworthy + - generic [ref=e395]: + - heading "Review" [level=2] [ref=e398] + - generic [ref=e400]: + - generic [ref=e403]: + - term [ref=e406]: Review status + - definition [ref=e408]: + - generic [ref=e411]: + - img [ref=e412] + - text: Ready + - generic [ref=e416]: + - term [ref=e419]: Completeness + - definition [ref=e421]: + - generic [ref=e424]: + - img [ref=e425] + - text: Review inputs ready + - generic [ref=e429]: + - term [ref=e432]: Environment + - definition [ref=e434]: + - generic [ref=e436]: Spec 351 Browser Ready Draft + - generic [ref=e439]: + - term [ref=e442]: Generated at + - definition [ref=e444]: + - generic [ref=e446]: Jun 4, 2026 00:13:41 + - generic [ref=e449]: + - term [ref=e452]: Published at + - definition [ref=e454]: + - paragraph [ref=e457]: — + - generic [ref=e460]: + - term [ref=e463]: Evidence snapshot + - definition [ref=e465]: + - link "#15" [ref=e466] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - generic [ref=e467]: "#15" + - generic [ref=e470]: + - term [ref=e473]: Current export + - generic: + - definition + - generic [ref=e476]: + - term [ref=e479]: Fingerprint + - definition [ref=e481]: + - generic [ref=e483]: d1b5410e249c2468d5ac519a35d603ec6781ee2044f8e3fbf687d5074df7aced + - generic [ref=e487]: + - heading "Output guidance" [level=2] [ref=e490] + - generic [ref=e495]: + - generic [ref=e496]: + - generic [ref=e497]: + - generic [ref=e500]: Export not ready + - generic [ref=e503]: Not ready + - generic [ref=e504]: + - generic [ref=e505]: + - generic [ref=e506]: Output readiness + - generic [ref=e507]: Export not ready + - generic [ref=e508]: + - generic [ref=e509]: Publication/sharing state + - generic [ref=e510]: Not ready + - generic [ref=e511]: + - generic [ref=e512]: Next step + - generic [ref=e513]: Publish review + - generic [ref=e514]: + - heading "Export not ready" [level=3] [ref=e515] + - paragraph [ref=e516]: The current export is not ready yet. + - paragraph [ref=e517]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e518]: + - link "Review output limitations" [ref=e519] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e520] + - text: Review output limitations + - link "Open evidence basis" [ref=e522] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e523] + - text: Open evidence basis + - link "Open review" [ref=e525] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/17 + - img [ref=e526] + - text: Open review + - group [ref=e528]: + - generic "Output limitations 2 limitations require review" [ref=e529] [cursor=pointer] + - group [ref=e530]: + - generic "Technical details" [ref=e531] [cursor=pointer] + - generic [ref=e535]: + - heading "Executive posture" [level=2] [ref=e538] + - generic [ref=e543]: + - generic [ref=e544]: + - generic [ref=e545]: No follow-up was detected from this result. + - generic [ref=e546]: Trustworthiness is high for the intended operator task. + - generic [ref=e547]: No action needed + - generic [ref=e548]: + - generic [ref=e549]: + - term [ref=e550]: Findings + - definition [ref=e551]: "0" + - generic [ref=e552]: + - term [ref=e553]: Reports + - definition [ref=e554]: "2" + - generic [ref=e555]: + - term [ref=e556]: Operations + - definition [ref=e557]: "1" + - generic [ref=e558]: + - term [ref=e559]: Sections + - definition [ref=e560]: "7" + - generic [ref=e561]: + - term [ref=e562]: Pending verification + - definition [ref=e563]: "0" + - generic [ref=e564]: + - term [ref=e565]: Verified cleared + - definition [ref=e566]: "0" + - generic [ref=e567]: + - generic [ref=e568]: Highlights + - list [ref=e569]: + - listitem [ref=e570]: 0 open risks from 0 tracked findings. + - listitem [ref=e571]: Permission posture score is 92. + - listitem [ref=e572]: 0 baseline drift findings remain open. + - listitem [ref=e573]: 0 recent operations failed and 0 completed with warnings. + - listitem [ref=e574]: 0 risk-accepted findings are currently governed. + - listitem [ref=e575]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e576]: + - generic [ref=e577]: Next actions + - list [ref=e578]: + - listitem [ref=e579]: No immediate corrective action is required beyond the normal review cadence. + - generic [ref=e580]: + - generic [ref=e581]: Related context + - generic [ref=e582]: + - generic [ref=e583]: + - generic [ref=e584]: Operation + - link "Open operation" [ref=e586] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/52 + - img [ref=e587] + - text: Open operation + - generic [ref=e590]: Inspect the latest review composition or refresh run. + - generic [ref=e591]: + - generic [ref=e592]: Customer workspace + - link "Open customer workspace" [ref=e594] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e595] + - text: Open customer workspace + - generic [ref=e598]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e599]: + - generic [ref=e600]: Evidence snapshot + - link "View evidence snapshot" [ref=e602] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/15 + - img [ref=e603] + - text: View evidence snapshot + - generic [ref=e606]: Return to the evidence basis behind this review. + - generic [ref=e607]: + - generic [ref=e608]: Publication readiness + - generic [ref=e609]: This review is ready for publication and executive-pack export. + - generic [ref=e613]: + - heading "Sections" [level=2] [ref=e616] + - definition [ref=e623]: + - list [ref=e625]: + - listitem [ref=e626]: + - generic [ref=e627]: + - generic [ref=e630]: + - term [ref=e633]: Title + - definition [ref=e635]: + - generic [ref=e637]: Executive summary + - generic [ref=e640]: + - term [ref=e643]: Completeness + - definition [ref=e645]: + - generic [ref=e648]: + - img [ref=e649] + - text: Review inputs ready + - generic [ref=e653]: + - term [ref=e656]: Measured at + - definition [ref=e658]: + - generic [ref=e660]: Jun 4, 2026 00:09:41 + - generic [ref=e665] [cursor=pointer]: + - heading "Details" [level=3] [ref=e667] + - button [ref=e668]: + - img [ref=e669] + - listitem [ref=e671]: + - generic [ref=e672]: + - generic [ref=e675]: + - term [ref=e678]: Title + - definition [ref=e680]: + - generic [ref=e682]: Control readiness interpretation + - generic [ref=e685]: + - term [ref=e688]: Completeness + - definition [ref=e690]: + - generic [ref=e693]: + - img [ref=e694] + - text: Review inputs ready + - generic [ref=e698]: + - term [ref=e701]: Measured at + - definition [ref=e703]: + - generic [ref=e705]: Jun 4, 2026 00:09:41 + - generic [ref=e710] [cursor=pointer]: + - heading "Details" [level=3] [ref=e712] + - button [ref=e713]: + - img [ref=e714] + - listitem [ref=e716]: + - generic [ref=e717]: + - generic [ref=e720]: + - term [ref=e723]: Title + - definition [ref=e725]: + - generic [ref=e727]: Open risk highlights + - generic [ref=e730]: + - term [ref=e733]: Completeness + - definition [ref=e735]: + - generic [ref=e738]: + - img [ref=e739] + - text: Review inputs ready + - generic [ref=e743]: + - term [ref=e746]: Measured at + - definition [ref=e748]: + - paragraph [ref=e751]: — + - generic [ref=e756] [cursor=pointer]: + - heading "Details" [level=3] [ref=e758] + - button [ref=e759]: + - img [ref=e760] + - listitem [ref=e762]: + - generic [ref=e763]: + - generic [ref=e766]: + - term [ref=e769]: Title + - definition [ref=e771]: + - generic [ref=e773]: Accepted risk summary + - generic [ref=e776]: + - term [ref=e779]: Completeness + - definition [ref=e781]: + - generic [ref=e784]: + - img [ref=e785] + - text: Review inputs ready + - generic [ref=e789]: + - term [ref=e792]: Measured at + - definition [ref=e794]: + - paragraph [ref=e797]: — + - generic [ref=e802] [cursor=pointer]: + - heading "Details" [level=3] [ref=e804] + - button [ref=e805]: + - img [ref=e806] + - listitem [ref=e808]: + - generic [ref=e809]: + - generic [ref=e812]: + - term [ref=e815]: Title + - definition [ref=e817]: + - generic [ref=e819]: Permission posture + - generic [ref=e822]: + - term [ref=e825]: Completeness + - definition [ref=e827]: + - generic [ref=e830]: + - img [ref=e831] + - text: Review inputs ready + - generic [ref=e835]: + - term [ref=e838]: Measured at + - definition [ref=e840]: + - generic [ref=e842]: Jun 4, 2026 00:13:41 + - generic [ref=e847] [cursor=pointer]: + - heading "Details" [level=3] [ref=e849] + - button [ref=e850]: + - img [ref=e851] + - listitem [ref=e853]: + - generic [ref=e854]: + - generic [ref=e857]: + - term [ref=e860]: Title + - definition [ref=e862]: + - generic [ref=e864]: Baseline drift posture + - generic [ref=e867]: + - term [ref=e870]: Completeness + - definition [ref=e872]: + - generic [ref=e875]: + - img [ref=e876] + - text: Review inputs ready + - generic [ref=e880]: + - term [ref=e883]: Measured at + - definition [ref=e885]: + - paragraph [ref=e888]: — + - generic [ref=e893] [cursor=pointer]: + - heading "Details" [level=3] [ref=e895] + - button [ref=e896]: + - img [ref=e897] + - listitem [ref=e899]: + - generic [ref=e900]: + - generic [ref=e903]: + - term [ref=e906]: Title + - definition [ref=e908]: + - generic [ref=e910]: Operations health + - generic [ref=e913]: + - term [ref=e916]: Completeness + - definition [ref=e918]: + - generic [ref=e921]: + - img [ref=e922] + - text: Review inputs ready + - generic [ref=e926]: + - term [ref=e929]: Measured at + - definition [ref=e931]: + - generic [ref=e933]: Jun 4, 2026 00:13:41 + - generic [ref=e938] [cursor=pointer]: + - heading "Details" [level=3] [ref=e940] + - button [ref=e941]: + - img [ref=e942] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-14-12-617Z.yml b/.playwright-mcp/page-2026-06-04T00-14-12-617Z.yml new file mode 100644 index 00000000..a3031e6a --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-14-12-617Z.yml @@ -0,0 +1,195 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - generic [ref=e43]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 351 Review Output Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 351 Review Output Smoke" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e163]: + - heading "Customer Review Workspace" [level=1] [ref=e165] + - button "Clear filters" [ref=e168] [cursor=pointer]: + - img [ref=e169] + - text: Clear filters + - generic [ref=e173]: + - generic [ref=e175]: + - generic [ref=e176]: + - heading "Customer-safe review packages" [level=2] [ref=e177] + - paragraph [ref=e178]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e179]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec 351 Browser Ready Draft + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e185]: + - generic [ref=e186]: + - heading "Review package index" [level=2] [ref=e187] + - paragraph [ref=e188]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e191]: + - generic [ref=e194]: + - generic [ref=e195]: + - generic [ref=e196]: Search + - generic [ref=e197]: + - img [ref=e199] + - searchbox "Search" [ref=e202] + - button "Filter" [ref=e205] [cursor=pointer]: + - img [ref=e206] + - generic [ref=e209]: "1" + - generic [ref=e210]: + - generic [ref=e211]: + - generic [ref=e212]: Active filters + - generic [ref=e214]: + - generic [ref=e216]: "Environment: Spec 351 Browser Ready Draft" + - button "Remove filter" [ref=e217] [cursor=pointer]: + - img [ref=e218] + - generic [ref=e220]: Remove filter + - button [ref=e221] [cursor=pointer]: + - img [ref=e222] + - table [ref=e225]: + - rowgroup [ref=e226]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e227]: + - columnheader "Environment" [ref=e228] + - columnheader "Governance package" [ref=e229] + - columnheader "Status" [ref=e230] + - columnheader "Evidence" [ref=e231] + - columnheader "Next step" [ref=e232] + - columnheader "Open" [ref=e233] + - generic [ref=e235]: + - img [ref=e237] + - heading "No released customer reviews match this view" [level=2] [ref=e239] + - paragraph [ref=e240]: Publish an environment review before it appears in the customer-safe workspace. + - button "Clear filters" [ref=e242] [cursor=pointer]: + - img [ref=e243] + - text: Clear filters + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-16-21-955Z.yml b/.playwright-mcp/page-2026-06-04T00-16-21-955Z.yml new file mode 100644 index 00000000..147a1c20 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-16-21-955Z.yml @@ -0,0 +1,14 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-15-289Z.yml b/.playwright-mcp/page-2026-06-04T00-41-15-289Z.yml new file mode 100644 index 00000000..92f52597 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-15-289Z.yml @@ -0,0 +1,622 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - generic [ref=e44]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - generic [ref=e282]: + - link "Review operations" [ref=e283] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - link "Show all operations" [ref=e284] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 27 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "Publish review" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - text: Publish review + - button "More" [ref=e325] [cursor=pointer]: + - img [ref=e326] + - button "Danger" [ref=e330] [cursor=pointer]: + - img [ref=e331] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Ready + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - paragraph [ref=e467]: — + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Publish review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-24-347Z.yml b/.playwright-mcp/page-2026-06-04T00-41-24-347Z.yml new file mode 100644 index 00000000..67ef86b4 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-24-347Z.yml @@ -0,0 +1,615 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e956] [cursor=pointer]: + - img [ref=e957] + - generic [ref=e960]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 27 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "Publish review" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - text: Publish review + - button "More" [ref=e325] [cursor=pointer]: + - img [ref=e326] + - button "Danger" [ref=e330] [cursor=pointer]: + - img [ref=e331] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Ready + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - paragraph [ref=e467]: — + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Publish review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-32-978Z.yml b/.playwright-mcp/page-2026-06-04T00-41-32-978Z.yml new file mode 100644 index 00000000..73fab5da --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-32-978Z.yml @@ -0,0 +1,634 @@ +- generic [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e956] [cursor=pointer]: + - img [ref=e957] + - generic [ref=e960]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 27 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "Publish review" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - text: Publish review + - button "More" [ref=e325] [cursor=pointer]: + - img [ref=e326] + - button "Danger" [ref=e330] [cursor=pointer]: + - img [ref=e331] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Ready + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - paragraph [ref=e467]: — + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Publish review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - dialog: + - generic [ref=e963]: + - generic [ref=e964]: + - button "Close" [ref=e965] [cursor=pointer]: + - img [ref=e966] + - img [ref=e970] + - generic [ref=e972]: + - heading "Publish review" [level=2] [ref=e973] + - paragraph [ref=e974]: Publish this environment review as the current governed review outcome for this tenant. TenantPilot records the publication decision only. + - generic [ref=e979]: + - generic [ref=e983]: + - text: Publication reason + - superscript [ref=e984]: "*" + - textbox "Publication reason*" [active] [ref=e989] + - generic [ref=e991]: + - button "Cancel" [ref=e992] [cursor=pointer] + - button "Confirm" [ref=e993] [cursor=pointer]: + - generic [ref=e994]: Confirm + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-33-067Z.yml b/.playwright-mcp/page-2026-06-04T00-41-33-067Z.yml new file mode 100644 index 00000000..73fab5da --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-33-067Z.yml @@ -0,0 +1,634 @@ +- generic [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e956] [cursor=pointer]: + - img [ref=e957] + - generic [ref=e960]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 27 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "Publish review" [ref=e320] [cursor=pointer]: + - img [ref=e321] + - text: Publish review + - button "More" [ref=e325] [cursor=pointer]: + - img [ref=e326] + - button "Danger" [ref=e330] [cursor=pointer]: + - img [ref=e331] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Ready + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - paragraph [ref=e467]: — + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Publish review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - dialog: + - generic [ref=e963]: + - generic [ref=e964]: + - button "Close" [ref=e965] [cursor=pointer]: + - img [ref=e966] + - img [ref=e970] + - generic [ref=e972]: + - heading "Publish review" [level=2] [ref=e973] + - paragraph [ref=e974]: Publish this environment review as the current governed review outcome for this tenant. TenantPilot records the publication decision only. + - generic [ref=e979]: + - generic [ref=e983]: + - text: Publication reason + - superscript [ref=e984]: "*" + - textbox "Publication reason*" [active] [ref=e989] + - generic [ref=e991]: + - button "Cancel" [ref=e992] [cursor=pointer] + - button "Confirm" [ref=e993] [cursor=pointer]: + - generic [ref=e994]: Confirm + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-44-795Z.yml b/.playwright-mcp/page-2026-06-04T00-41-44-795Z.yml new file mode 100644 index 00000000..154d708c --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-44-795Z.yml @@ -0,0 +1,617 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - button "Notifications" [ref=e956] [cursor=pointer]: + - img [ref=e957] + - generic [ref=e960]: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 27 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "More" [ref=e997] [cursor=pointer]: + - img [ref=e998] + - button "Danger" [ref=e1000] [cursor=pointer]: + - img [ref=e326] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Published + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - generic [ref=e466]: Jun 4, 2026 00:41:43 + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Create next review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - status: + - generic [ref=e1001]: + - img [ref=e1002] + - heading "Review published" [level=3] [ref=e1006] + - button [ref=e1007] [cursor=pointer]: + - img [ref=e1008] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-50-464Z.yml b/.playwright-mcp/page-2026-06-04T00-41-50-464Z.yml new file mode 100644 index 00000000..c4c87dd7 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-50-464Z.yml @@ -0,0 +1,614 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 351 Browser Ready Draft + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - link "TenantPilot" [ref=e26] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e28]: + - img [ref=e29] + - generic [ref=e32]: TenantPilot + - generic [ref=e33]: + - generic [ref=e36]: + - generic [ref=e37]: Global search + - generic [ref=e38]: + - img [ref=e40] + - searchbox "Global search" [ref=e43] + - generic [ref=e955]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e48] + - generic [ref=e49]: + - complementary [ref=e51]: + - navigation [ref=e52]: + - 'link "Environment: Spec 351 Browser Ready Draft" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Environment + - generic "Spec 351 Browser Ready Draft" [ref=e59] + - generic [ref=e60]: "Workspace: Spec 351 Review Output Smoke" + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Inventory + - button "Inventory" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Items" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory + - img [ref=e80] + - generic [ref=e82]: Items + - listitem [ref=e83]: + - link "Policies" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policies + - img [ref=e85] + - generic [ref=e87]: Policies + - listitem [ref=e88]: + - link "Policy Versions" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/policy-versions + - img [ref=e90] + - generic [ref=e92]: Policy Versions + - listitem [ref=e93]: + - link "Coverage" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/inventory/inventory-coverage + - img [ref=e95] + - generic [ref=e97]: Coverage + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Stored reports" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/stored-reports + - img [ref=e112] + - generic [ref=e114]: Stored reports + - listitem [ref=e115]: + - link "Review Packs" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/review-packs + - img [ref=e117] + - generic [ref=e119]: Review Packs + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Governance + - button "Governance" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Findings" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/findings + - img [ref=e129] + - generic [ref=e131]: Findings + - listitem [ref=e132]: + - link "Baselines" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e134] + - generic [ref=e136]: Baselines + - listitem [ref=e137]: + - link "Baseline Snapshots" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e139] + - generic [ref=e142]: Baseline Snapshots + - listitem [ref=e143]: + - link "Baseline Compare" [ref=e144] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-351-review-output-smoke/environments/spec-351-browser-ready-draft/baseline-compare + - img [ref=e145] + - generic [ref=e147]: Baseline Compare + - listitem [ref=e148]: + - link "Evidence" [ref=e149] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence + - img [ref=e150] + - generic [ref=e152]: Evidence + - listitem [ref=e153]: + - link "Risk exceptions" [ref=e154] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/finding-exceptions + - img [ref=e155] + - generic [ref=e157]: Risk exceptions + - listitem [ref=e158]: + - generic [ref=e159] [cursor=pointer]: + - generic [ref=e160]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e161]: + - img [ref=e162] + - list [ref=e164]: + - listitem [ref=e165]: + - link "Backup Schedules" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-schedules + - img [ref=e167] + - generic [ref=e169]: Backup Schedules + - listitem [ref=e170]: + - link "Backup Sets" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/backup-sets + - img [ref=e172] + - generic [ref=e174]: Backup Sets + - listitem [ref=e175]: + - link "Restore Runs" [ref=e176] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/restore-runs + - img [ref=e177] + - generic [ref=e179]: Restore Runs + - listitem [ref=e180]: + - generic [ref=e181] [cursor=pointer]: + - generic [ref=e182]: Directory + - button "Directory" [expanded] [ref=e183]: + - img [ref=e184] + - list [ref=e186]: + - listitem [ref=e187]: + - link "Groups" [ref=e188] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/entra-groups + - img [ref=e189] + - generic [ref=e191]: Groups + - listitem [ref=e192]: + - generic [ref=e193] [cursor=pointer]: + - generic [ref=e194]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e195]: + - img [ref=e196] + - list [ref=e198]: + - listitem [ref=e199]: + - link "Finding exceptions" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=50 + - img [ref=e201] + - generic [ref=e203]: Finding exceptions + - listitem [ref=e204]: + - link "Reviews" [ref=e205] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=50 + - img [ref=e206] + - generic [ref=e208]: Reviews + - listitem [ref=e209]: + - link "Governance inbox" [ref=e210] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=50 + - img [ref=e211] + - generic [ref=e213]: Governance inbox + - listitem [ref=e214]: + - link "Decision register" [ref=e215] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=50 + - img [ref=e216] + - generic [ref=e218]: Decision register + - listitem [ref=e219]: + - link "Operations" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations?environment_id=50 + - img [ref=e221] + - generic [ref=e223]: Operations + - listitem [ref=e224]: + - link "Alerts" [ref=e225] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=50 + - img [ref=e226] + - generic [ref=e228]: Alerts + - listitem [ref=e229]: + - link "Evidence" [ref=e230] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=50 + - img [ref=e231] + - generic [ref=e233]: Evidence + - listitem [ref=e234]: + - link "Audit Log" [ref=e235] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=50 + - img [ref=e236] + - generic [ref=e238]: Audit Log + - listitem [ref=e239]: + - link "Customer reviews" [ref=e240] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e241] + - generic [ref=e243]: Customer reviews + - listitem [ref=e244]: + - generic [ref=e245] [cursor=pointer]: + - generic [ref=e246]: Workspace admin + - button "Workspace admin" [expanded] [ref=e247]: + - img [ref=e248] + - list [ref=e250]: + - listitem [ref=e251]: + - link "Manage workspaces" [ref=e252] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e253] + - generic [ref=e255]: Manage workspaces + - listitem [ref=e256]: + - link "Integrations" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=50 + - img [ref=e258] + - generic [ref=e260]: Integrations + - listitem [ref=e261]: + - link "Settings" [ref=e262] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e263] + - generic [ref=e266]: Settings + - main [ref=e268]: + - generic [ref=e269]: + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: + - img [ref=e277] + - generic [ref=e279]: + - paragraph [ref=e280]: Operation updates + - paragraph [ref=e281]: Active and recent operation updates that may need review. + - button "Acknowledge" [ref=e285] [cursor=pointer] + - generic [ref=e287]: + - generic [ref=e289]: + - generic [ref=e290]: + - heading "Review composition" [level=4] [ref=e291] + - generic [ref=e292]: Queued for execution + - generic [ref=e293]: Likely stale + - paragraph [ref=e294]: Queued · now · Waiting for worker. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review composition" [level=4] [ref=e301] + - generic [ref=e302]: Execution failed + - generic [ref=e303]: Automatically reconciled + - paragraph [ref=e304]: Completed · 28 minutes ago + - paragraph [ref=e305]: Review worker health and logs before retrying this operation. + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: + - navigation [ref=e309]: + - list [ref=e310]: + - listitem [ref=e311]: + - link "Reviews" [ref=e312] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews + - listitem [ref=e313]: + - img [ref=e314] + - generic [ref=e316]: View + - heading "View Review" [level=1] [ref=e317] + - generic [ref=e319]: + - button "More" [ref=e997] [cursor=pointer]: + - img [ref=e998] + - button "Danger" [ref=e1000] [cursor=pointer]: + - img [ref=e326] + - generic [ref=e338]: + - generic [ref=e342]: + - heading "Outcome summary" [level=2] [ref=e345] + - generic [ref=e350]: + - generic [ref=e351]: + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Publishable + - generic [ref=e358]: + - generic [ref=e359]: Publishable + - paragraph [ref=e360]: This review is ready for publication and executive-pack export. + - paragraph [ref=e361]: Technical truth detail remains available below the primary explanation. + - generic [ref=e362]: + - generic [ref=e363]: + - term [ref=e364]: Next step + - definition [ref=e365]: No action needed + - generic [ref=e366]: + - term [ref=e367]: Artifact reference + - definition [ref=e368]: "Review #19" + - generic [ref=e369]: + - term [ref=e370]: Lifecycle + - definition [ref=e371]: + - generic [ref=e372]: + - img [ref=e373] + - generic [ref=e376]: Current + - generic [ref=e377]: + - term [ref=e378]: Retention + - definition [ref=e379]: + - generic [ref=e380]: + - img [ref=e381] + - generic [ref=e385]: Retained + - generic [ref=e386]: + - term [ref=e387]: Result meaning + - definition [ref=e388]: + - generic [ref=e389]: + - img [ref=e390] + - generic [ref=e393]: No issues detected + - generic [ref=e394]: + - term [ref=e395]: Result trust + - definition [ref=e396]: + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Trustworthy + - generic [ref=e405]: + - heading "Review" [level=2] [ref=e408] + - generic [ref=e410]: + - generic [ref=e413]: + - term [ref=e416]: Review status + - definition [ref=e418]: + - generic [ref=e421]: + - img [ref=e422] + - text: Published + - generic [ref=e426]: + - term [ref=e429]: Completeness + - definition [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Review inputs ready + - generic [ref=e439]: + - term [ref=e442]: Environment + - definition [ref=e444]: + - generic [ref=e446]: Spec 351 Browser Ready Draft + - generic [ref=e449]: + - term [ref=e452]: Generated at + - definition [ref=e454]: + - generic [ref=e456]: Jun 4, 2026 00:16:09 + - generic [ref=e459]: + - term [ref=e462]: Published at + - definition [ref=e464]: + - generic [ref=e466]: Jun 4, 2026 00:41:43 + - generic [ref=e470]: + - term [ref=e473]: Evidence snapshot + - definition [ref=e475]: + - link "#16" [ref=e476] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e477]: "#16" + - generic [ref=e480]: + - term [ref=e483]: Current export + - generic: + - definition + - generic [ref=e486]: + - term [ref=e489]: Fingerprint + - definition [ref=e491]: + - generic [ref=e493]: 8820d05a30fc7851bafc8001e84840c756472779faa3ac9f8247d08a94767d9d + - generic [ref=e497]: + - heading "Output guidance" [level=2] [ref=e500] + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e510]: Export not ready + - generic [ref=e513]: Not ready + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: Output readiness + - generic [ref=e517]: Export not ready + - generic [ref=e518]: + - generic [ref=e519]: Publication/sharing state + - generic [ref=e520]: Not ready + - generic [ref=e521]: + - generic [ref=e522]: Next step + - generic [ref=e523]: Create next review + - generic [ref=e524]: + - heading "Export not ready" [level=3] [ref=e525] + - paragraph [ref=e526]: The current export is not ready yet. + - paragraph [ref=e527]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e528]: + - link "Review output limitations" [ref=e529] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e530] + - text: Review output limitations + - link "Open evidence basis" [ref=e532] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e533] + - text: Open evidence basis + - link "Open review" [ref=e535] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19 + - img [ref=e536] + - text: Open review + - group [ref=e538]: + - generic "Output limitations 2 limitations require review" [ref=e539] [cursor=pointer] + - group [ref=e540]: + - generic "Technical details" [ref=e541] [cursor=pointer] + - generic [ref=e545]: + - heading "Executive posture" [level=2] [ref=e548] + - generic [ref=e553]: + - generic [ref=e554]: + - generic [ref=e555]: No follow-up was detected from this result. + - generic [ref=e556]: Trustworthiness is high for the intended operator task. + - generic [ref=e557]: No action needed + - generic [ref=e558]: + - generic [ref=e559]: + - term [ref=e560]: Findings + - definition [ref=e561]: "0" + - generic [ref=e562]: + - term [ref=e563]: Reports + - definition [ref=e564]: "2" + - generic [ref=e565]: + - term [ref=e566]: Operations + - definition [ref=e567]: "3" + - generic [ref=e568]: + - term [ref=e569]: Sections + - definition [ref=e570]: "7" + - generic [ref=e571]: + - term [ref=e572]: Pending verification + - definition [ref=e573]: "0" + - generic [ref=e574]: + - term [ref=e575]: Verified cleared + - definition [ref=e576]: "0" + - generic [ref=e577]: + - generic [ref=e578]: Highlights + - list [ref=e579]: + - listitem [ref=e580]: 0 open risks from 0 tracked findings. + - listitem [ref=e581]: Permission posture score is 92. + - listitem [ref=e582]: 0 baseline drift findings remain open. + - listitem [ref=e583]: 1 recent operations failed and 0 completed with warnings. + - listitem [ref=e584]: 0 risk-accepted findings are currently governed. + - listitem [ref=e585]: 1 privileged Entra roles are captured in the evidence basis. + - generic [ref=e586]: + - generic [ref=e587]: Next actions + - list [ref=e588]: + - listitem [ref=e589]: Inspect recent failed operations to confirm tenant management workflows are stable. + - generic [ref=e590]: + - generic [ref=e591]: Related context + - generic [ref=e592]: + - generic [ref=e593]: + - generic [ref=e594]: Operation + - link "Open operation" [ref=e596] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - img [ref=e597] + - text: Open operation + - generic [ref=e600]: Inspect the latest review composition or refresh run. + - generic [ref=e601]: + - generic [ref=e602]: Customer workspace + - link "Open customer workspace" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=50 + - img [ref=e605] + - text: Open customer workspace + - generic [ref=e608]: Open the customer-safe review workspace prefiltered to this environment. + - generic [ref=e609]: + - generic [ref=e610]: Evidence snapshot + - link "View evidence snapshot" [ref=e612] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e613] + - text: View evidence snapshot + - generic [ref=e616]: Return to the evidence basis behind this review. + - generic [ref=e617]: + - generic [ref=e618]: Publication readiness + - generic [ref=e619]: This review is ready for publication and executive-pack export. + - generic [ref=e623]: + - heading "Sections" [level=2] [ref=e626] + - definition [ref=e633]: + - list [ref=e635]: + - listitem [ref=e636]: + - generic [ref=e637]: + - generic [ref=e640]: + - term [ref=e643]: Title + - definition [ref=e645]: + - generic [ref=e647]: Executive summary + - generic [ref=e650]: + - term [ref=e653]: Completeness + - definition [ref=e655]: + - generic [ref=e658]: + - img [ref=e659] + - text: Review inputs ready + - generic [ref=e663]: + - term [ref=e666]: Measured at + - definition [ref=e668]: + - generic [ref=e670]: Jun 4, 2026 00:12:09 + - generic [ref=e675] [cursor=pointer]: + - heading "Details" [level=3] [ref=e677] + - button [ref=e678]: + - img [ref=e679] + - listitem [ref=e681]: + - generic [ref=e682]: + - generic [ref=e685]: + - term [ref=e688]: Title + - definition [ref=e690]: + - generic [ref=e692]: Control readiness interpretation + - generic [ref=e695]: + - term [ref=e698]: Completeness + - definition [ref=e700]: + - generic [ref=e703]: + - img [ref=e704] + - text: Review inputs ready + - generic [ref=e708]: + - term [ref=e711]: Measured at + - definition [ref=e713]: + - generic [ref=e715]: Jun 4, 2026 00:12:09 + - generic [ref=e720] [cursor=pointer]: + - heading "Details" [level=3] [ref=e722] + - button [ref=e723]: + - img [ref=e724] + - listitem [ref=e726]: + - generic [ref=e727]: + - generic [ref=e730]: + - term [ref=e733]: Title + - definition [ref=e735]: + - generic [ref=e737]: Open risk highlights + - generic [ref=e740]: + - term [ref=e743]: Completeness + - definition [ref=e745]: + - generic [ref=e748]: + - img [ref=e749] + - text: Review inputs ready + - generic [ref=e753]: + - term [ref=e756]: Measured at + - definition [ref=e758]: + - paragraph [ref=e761]: — + - generic [ref=e766] [cursor=pointer]: + - heading "Details" [level=3] [ref=e768] + - button [ref=e769]: + - img [ref=e770] + - listitem [ref=e772]: + - generic [ref=e773]: + - generic [ref=e776]: + - term [ref=e779]: Title + - definition [ref=e781]: + - generic [ref=e783]: Accepted risk summary + - generic [ref=e786]: + - term [ref=e789]: Completeness + - definition [ref=e791]: + - generic [ref=e794]: + - img [ref=e795] + - text: Review inputs ready + - generic [ref=e799]: + - term [ref=e802]: Measured at + - definition [ref=e804]: + - paragraph [ref=e807]: — + - generic [ref=e812] [cursor=pointer]: + - heading "Details" [level=3] [ref=e814] + - button [ref=e815]: + - img [ref=e816] + - listitem [ref=e818]: + - generic [ref=e819]: + - generic [ref=e822]: + - term [ref=e825]: Title + - definition [ref=e827]: + - generic [ref=e829]: Permission posture + - generic [ref=e832]: + - term [ref=e835]: Completeness + - definition [ref=e837]: + - generic [ref=e840]: + - img [ref=e841] + - text: Review inputs ready + - generic [ref=e845]: + - term [ref=e848]: Measured at + - definition [ref=e850]: + - generic [ref=e852]: Jun 4, 2026 00:16:09 + - generic [ref=e857] [cursor=pointer]: + - heading "Details" [level=3] [ref=e859] + - button [ref=e860]: + - img [ref=e861] + - listitem [ref=e863]: + - generic [ref=e864]: + - generic [ref=e867]: + - term [ref=e870]: Title + - definition [ref=e872]: + - generic [ref=e874]: Baseline drift posture + - generic [ref=e877]: + - term [ref=e880]: Completeness + - definition [ref=e882]: + - generic [ref=e885]: + - img [ref=e886] + - text: Review inputs ready + - generic [ref=e890]: + - term [ref=e893]: Measured at + - definition [ref=e895]: + - paragraph [ref=e898]: — + - generic [ref=e903] [cursor=pointer]: + - heading "Details" [level=3] [ref=e905] + - button [ref=e906]: + - img [ref=e907] + - listitem [ref=e909]: + - generic [ref=e910]: + - generic [ref=e913]: + - term [ref=e916]: Title + - definition [ref=e918]: + - generic [ref=e920]: Operations health + - generic [ref=e923]: + - term [ref=e926]: Completeness + - definition [ref=e928]: + - generic [ref=e931]: + - img [ref=e932] + - text: Review inputs ready + - generic [ref=e936]: + - term [ref=e939]: Measured at + - definition [ref=e941]: + - generic [ref=e943]: Jun 4, 2026 00:16:09 + - generic [ref=e948] [cursor=pointer]: + - heading "Details" [level=3] [ref=e950] + - button [ref=e951]: + - img [ref=e952] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-57-875Z.yml b/.playwright-mcp/page-2026-06-04T00-41-57-875Z.yml new file mode 100644 index 00000000..ab9b7b89 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-57-875Z.yml @@ -0,0 +1,444 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - generic [ref=e43]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 351 Review Output Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 351 Review Output Smoke" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e163]: + - heading "Customer Review Workspace" [level=1] [ref=e165] + - button "Clear filters" [ref=e168] [cursor=pointer]: + - img [ref=e169] + - text: Clear filters + - generic [ref=e173]: + - generic [ref=e175]: + - generic [ref=e176]: + - heading "Customer-safe review packages" [level=2] [ref=e177] + - paragraph [ref=e178]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e179]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec 351 Browser Ready Draft + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e187]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e193]: Export not ready + - generic [ref=e196]: Not ready + - generic [ref=e197]: + - generic [ref=e198]: What is the current review pack output state? + - heading "Export not ready" [level=2] [ref=e199] + - paragraph [ref=e200]: The current export is not ready yet. + - generic [ref=e201]: + - generic [ref=e202]: + - generic [ref=e203]: Impact + - paragraph [ref=e204]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e205]: + - generic [ref=e206]: Latest released review + - generic [ref=e207]: Spec 351 Browser Ready Draft + - generic [ref=e208]: Published Jun 4, 2026 00:41 + - generic [ref=e209]: + - button "Create next review" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - text: Create next review + - generic [ref=e214]: + - generic [ref=e215]: Supporting actions + - generic [ref=e216]: + - link "Review output limitations" [ref=e217] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e218] + - text: Review output limitations + - link "Open evidence basis" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e221] + - text: Open evidence basis + - link "Open review" [ref=e223] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e224] + - text: Open review + - paragraph [ref=e226]: Create the next review cycle from the latest eligible evidence basis. Use the supporting actions to inspect blockers, evidence, or the current package before moving forward. + - group [ref=e227]: + - generic "Output limitations 2 limitations require review" [ref=e228] [cursor=pointer]: + - generic [ref=e229]: Output limitations + - generic [ref=e230]: 2 limitations require review + - group [ref=e231]: + - generic "Technical details" [ref=e232] [cursor=pointer] + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: + - heading "Review acknowledgement" [level=2] [ref=e237] + - paragraph [ref=e238]: This published review has not been acknowledged yet. + - generic [ref=e241]: Acknowledgement required + - generic [ref=e242]: + - generic [ref=e243]: + - generic [ref=e244]: Impact + - paragraph [ref=e245]: Acknowledgement records review consumption for this published package. Customer-ready status is still determined by the output state above. + - generic [ref=e246]: + - generic [ref=e247]: Basis + - generic [ref=e248]: + - generic [ref=e249]: + - generic [ref=e250]: Review pack + - generic [ref=e253]: Not available yet + - generic [ref=e254]: + - generic [ref=e255]: Evidence + - generic [ref=e258]: Available + - generic [ref=e259]: + - generic [ref=e260]: Next step + - button "Acknowledge review" [ref=e261] [cursor=pointer] + - generic [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - heading "Findings needing attention" [level=2] [ref=e266] + - paragraph [ref=e267]: No open findings require customer action. + - generic [ref=e270]: No action needed + - generic [ref=e271]: + - generic [ref=e272]: + - generic [ref=e273]: Total findings + - generic [ref=e276]: "0" + - generic [ref=e277]: + - generic [ref=e278]: Open findings + - generic [ref=e281]: "0" + - generic [ref=e282]: + - generic [ref=e283]: High impact + - generic [ref=e286]: "0" + - generic [ref=e287]: + - generic [ref=e288]: Accepted risks + - generic [ref=e291]: "0" + - generic [ref=e292]: + - generic [ref=e294]: + - heading "Customer-safe follow-ups" [level=2] [ref=e296] + - paragraph [ref=e298]: No customer-safe follow-ups are listed for this released review. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review package index" [level=2] [ref=e301] + - paragraph [ref=e302]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e305]: + - generic [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: Search + - generic [ref=e311]: + - img [ref=e313] + - searchbox "Search" [ref=e316] + - button "Filter" [ref=e319] [cursor=pointer]: + - img [ref=e320] + - generic [ref=e323]: "1" + - generic [ref=e324]: + - generic [ref=e325]: + - generic [ref=e326]: Active filters + - generic [ref=e328]: + - generic [ref=e330]: "Environment: Spec 351 Browser Ready Draft" + - button "Remove filter" [ref=e331] [cursor=pointer]: + - img [ref=e332] + - generic [ref=e334]: Remove filter + - button [ref=e335] [cursor=pointer]: + - img [ref=e336] + - table [ref=e339]: + - rowgroup [ref=e340]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e341]: + - columnheader "Environment" [ref=e342] + - columnheader "Governance package" [ref=e343] + - columnheader "Status" [ref=e344] + - columnheader "Evidence" [ref=e345] + - columnheader "Next step" [ref=e346] + - columnheader "Open" [ref=e347] + - rowgroup [ref=e348]: + - row "Spec 351 Browser Ready Draft Not available yet Not ready Available Review evidence Open review" [ref=e349]: + - cell "Spec 351 Browser Ready Draft" [ref=e350]: + - generic [ref=e352]: Spec 351 Browser Ready Draft + - cell "Not available yet" [ref=e353]: + - generic [ref=e356]: Not available yet + - cell "Not ready" [ref=e357]: + - generic [ref=e360]: Not ready + - cell "Available" [ref=e361]: + - generic [ref=e364]: Available + - cell "Review evidence" [ref=e365]: + - generic [ref=e367]: Review evidence + - cell "Open review" [ref=e368]: + - link "Open review" [ref=e369] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - generic [ref=e370]: Open review + - navigation "Pagination navigation" [ref=e371]: + - generic [ref=e374]: + - generic [ref=e376]: Per page + - combobox "Per page" [ref=e378]: + - option "25" [selected] + - option "50" + - option "All" + - group [ref=e379]: + - generic "Supporting reference Review consumption flow Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above." [ref=e380] [cursor=pointer]: + - generic [ref=e381]: + - generic [ref=e382]: + - generic [ref=e383]: Supporting reference + - heading "Review consumption flow" [level=2] [ref=e384] + - paragraph [ref=e385]: Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above. + - img [ref=e386] + - complementary [ref=e388]: + - generic [ref=e389]: + - heading "Evidence path" [level=2] [ref=e390] + - generic [ref=e391]: + - generic [ref=e392]: + - term [ref=e393]: + - generic [ref=e394]: Evidence snapshot + - generic [ref=e398]: Available + - definition [ref=e399]: Generated Jun 4, 2026 00:12. + - definition [ref=e400]: + - link "View evidence snapshot" [ref=e401] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e402]: + - term [ref=e403]: + - generic [ref=e404]: Review pack + - generic [ref=e408]: Not available yet + - definition [ref=e409]: Review Pack has not been generated for this released review yet. + - generic [ref=e410]: + - term [ref=e411]: + - generic [ref=e412]: Decision trail + - generic [ref=e416]: Available + - definition [ref=e417]: No governance decisions require customer awareness in this released review. + - generic [ref=e418]: + - term [ref=e419]: + - generic [ref=e420]: Operation proof + - generic [ref=e424]: Available + - definition [ref=e425]: A related operation record exists for this review evidence path. Initiated by Spec 351 Requester. + - definition [ref=e426]: + - link "Open operation" [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - generic [ref=e428]: + - generic [ref=e429]: + - heading "Review pack state" [level=2] [ref=e430] + - generic [ref=e433]: Not available yet + - paragraph [ref=e434]: Review Pack has not been generated for this released review yet. + - generic [ref=e435]: + - generic [ref=e436]: + - generic [ref=e437]: + - generic [ref=e438]: + - heading "Package exists" [level=3] [ref=e439] + - paragraph [ref=e440]: No released review pack artifact exists yet for this review path. + - generic [ref=e443]: Unavailable + - generic [ref=e444]: + - generic [ref=e445]: + - term [ref=e446]: Last generated + - definition [ref=e447]: + - generic [ref=e448]: Unavailable + - generic [ref=e449]: + - term [ref=e450]: Evidence source + - definition [ref=e451]: + - generic [ref=e452]: Jun 4, 2026 00:12 + - generic [ref=e453]: + - term [ref=e454]: Operation proof + - definition [ref=e455]: + - generic [ref=e456]: No operation proof linked + - generic [ref=e457]: + - generic [ref=e458]: + - generic [ref=e459]: + - heading "Internal export" [level=3] [ref=e460] + - paragraph [ref=e461]: No current internal export is available from this review pack path. + - generic [ref=e464]: Export not ready + - generic [ref=e465]: + - generic [ref=e466]: + - term [ref=e467]: Export availability + - definition [ref=e468]: + - generic [ref=e469]: Export not ready + - generic [ref=e470]: + - term [ref=e471]: Evidence basis + - definition [ref=e472]: + - generic [ref=e473]: Not generated + - generic [ref=e474]: + - term [ref=e475]: Section completeness + - definition [ref=e476]: + - generic [ref=e477]: 7 of 7 required complete + - generic [ref=e478]: + - generic [ref=e479]: + - generic [ref=e480]: + - heading "Customer sharing" [level=3] [ref=e481] + - paragraph [ref=e482]: Customer sharing still depends on the readiness blockers and limitations shown in the main decision state. + - generic [ref=e485]: Not ready + - generic [ref=e486]: + - generic [ref=e487]: + - term [ref=e488]: Sharing boundary + - definition [ref=e489]: + - generic [ref=e490]: Not ready + - generic [ref=e491]: + - term [ref=e492]: PII + - definition [ref=e493]: + - generic [ref=e494]: Contains PII + - generic [ref=e495]: + - term [ref=e496]: Protected values + - definition [ref=e497]: + - generic [ref=e498]: Protected values hidden + - generic [ref=e499]: + - term [ref=e500]: Disclosure + - definition [ref=e501]: + - generic [ref=e502]: Disclosure present + - generic [ref=e503]: + - generic [ref=e504]: + - heading "Accepted risks" [level=2] [ref=e505] + - generic [ref=e508]: No action needed + - generic [ref=e509]: + - generic [ref=e510]: + - generic [ref=e511]: Accepted risks + - generic [ref=e514]: "0" + - generic [ref=e515]: + - generic [ref=e516]: Expiring soon + - generic [ref=e519]: "0" + - generic [ref=e520]: + - generic [ref=e521]: Expired + - generic [ref=e524]: "0" + - generic [ref=e525]: + - generic [ref=e526]: Pending approval + - generic [ref=e529]: "0" + - generic [ref=e530]: + - generic [ref=e531]: Needs review + - generic [ref=e534]: "0" + - paragraph [ref=e535]: No accepted risks recorded. + - generic [ref=e536]: + - heading "Disclosure rule" [level=2] [ref=e537] + - generic [ref=e538]: + - generic [ref=e539]: + - generic [ref=e540]: Decision + - generic [ref=e543]: Visible + - generic [ref=e544]: + - generic [ref=e545]: Evidence + - generic [ref=e548]: Visible + - generic [ref=e549]: + - generic [ref=e550]: Diagnostics + - generic [ref=e553]: Collapsed + - generic [ref=e554]: + - generic [ref=e555]: Raw/support + - generic [ref=e558]: Hidden + - group [ref=e559]: + - generic "Diagnostics" [ref=e560] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-41-57-941Z.yml b/.playwright-mcp/page-2026-06-04T00-41-57-941Z.yml new file mode 100644 index 00000000..ab9b7b89 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-41-57-941Z.yml @@ -0,0 +1,444 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - generic [ref=e43]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "1" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 351 Review Output Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 351 Review Output Smoke" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e163]: + - heading "Customer Review Workspace" [level=1] [ref=e165] + - button "Clear filters" [ref=e168] [cursor=pointer]: + - img [ref=e169] + - text: Clear filters + - generic [ref=e173]: + - generic [ref=e175]: + - generic [ref=e176]: + - heading "Customer-safe review packages" [level=2] [ref=e177] + - paragraph [ref=e178]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e179]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec 351 Browser Ready Draft + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e187]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e193]: Export not ready + - generic [ref=e196]: Not ready + - generic [ref=e197]: + - generic [ref=e198]: What is the current review pack output state? + - heading "Export not ready" [level=2] [ref=e199] + - paragraph [ref=e200]: The current export is not ready yet. + - generic [ref=e201]: + - generic [ref=e202]: + - generic [ref=e203]: Impact + - paragraph [ref=e204]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e205]: + - generic [ref=e206]: Latest released review + - generic [ref=e207]: Spec 351 Browser Ready Draft + - generic [ref=e208]: Published Jun 4, 2026 00:41 + - generic [ref=e209]: + - button "Create next review" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - text: Create next review + - generic [ref=e214]: + - generic [ref=e215]: Supporting actions + - generic [ref=e216]: + - link "Review output limitations" [ref=e217] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e218] + - text: Review output limitations + - link "Open evidence basis" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e221] + - text: Open evidence basis + - link "Open review" [ref=e223] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e224] + - text: Open review + - paragraph [ref=e226]: Create the next review cycle from the latest eligible evidence basis. Use the supporting actions to inspect blockers, evidence, or the current package before moving forward. + - group [ref=e227]: + - generic "Output limitations 2 limitations require review" [ref=e228] [cursor=pointer]: + - generic [ref=e229]: Output limitations + - generic [ref=e230]: 2 limitations require review + - group [ref=e231]: + - generic "Technical details" [ref=e232] [cursor=pointer] + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: + - heading "Review acknowledgement" [level=2] [ref=e237] + - paragraph [ref=e238]: This published review has not been acknowledged yet. + - generic [ref=e241]: Acknowledgement required + - generic [ref=e242]: + - generic [ref=e243]: + - generic [ref=e244]: Impact + - paragraph [ref=e245]: Acknowledgement records review consumption for this published package. Customer-ready status is still determined by the output state above. + - generic [ref=e246]: + - generic [ref=e247]: Basis + - generic [ref=e248]: + - generic [ref=e249]: + - generic [ref=e250]: Review pack + - generic [ref=e253]: Not available yet + - generic [ref=e254]: + - generic [ref=e255]: Evidence + - generic [ref=e258]: Available + - generic [ref=e259]: + - generic [ref=e260]: Next step + - button "Acknowledge review" [ref=e261] [cursor=pointer] + - generic [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - heading "Findings needing attention" [level=2] [ref=e266] + - paragraph [ref=e267]: No open findings require customer action. + - generic [ref=e270]: No action needed + - generic [ref=e271]: + - generic [ref=e272]: + - generic [ref=e273]: Total findings + - generic [ref=e276]: "0" + - generic [ref=e277]: + - generic [ref=e278]: Open findings + - generic [ref=e281]: "0" + - generic [ref=e282]: + - generic [ref=e283]: High impact + - generic [ref=e286]: "0" + - generic [ref=e287]: + - generic [ref=e288]: Accepted risks + - generic [ref=e291]: "0" + - generic [ref=e292]: + - generic [ref=e294]: + - heading "Customer-safe follow-ups" [level=2] [ref=e296] + - paragraph [ref=e298]: No customer-safe follow-ups are listed for this released review. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review package index" [level=2] [ref=e301] + - paragraph [ref=e302]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e305]: + - generic [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: Search + - generic [ref=e311]: + - img [ref=e313] + - searchbox "Search" [ref=e316] + - button "Filter" [ref=e319] [cursor=pointer]: + - img [ref=e320] + - generic [ref=e323]: "1" + - generic [ref=e324]: + - generic [ref=e325]: + - generic [ref=e326]: Active filters + - generic [ref=e328]: + - generic [ref=e330]: "Environment: Spec 351 Browser Ready Draft" + - button "Remove filter" [ref=e331] [cursor=pointer]: + - img [ref=e332] + - generic [ref=e334]: Remove filter + - button [ref=e335] [cursor=pointer]: + - img [ref=e336] + - table [ref=e339]: + - rowgroup [ref=e340]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e341]: + - columnheader "Environment" [ref=e342] + - columnheader "Governance package" [ref=e343] + - columnheader "Status" [ref=e344] + - columnheader "Evidence" [ref=e345] + - columnheader "Next step" [ref=e346] + - columnheader "Open" [ref=e347] + - rowgroup [ref=e348]: + - row "Spec 351 Browser Ready Draft Not available yet Not ready Available Review evidence Open review" [ref=e349]: + - cell "Spec 351 Browser Ready Draft" [ref=e350]: + - generic [ref=e352]: Spec 351 Browser Ready Draft + - cell "Not available yet" [ref=e353]: + - generic [ref=e356]: Not available yet + - cell "Not ready" [ref=e357]: + - generic [ref=e360]: Not ready + - cell "Available" [ref=e361]: + - generic [ref=e364]: Available + - cell "Review evidence" [ref=e365]: + - generic [ref=e367]: Review evidence + - cell "Open review" [ref=e368]: + - link "Open review" [ref=e369] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - generic [ref=e370]: Open review + - navigation "Pagination navigation" [ref=e371]: + - generic [ref=e374]: + - generic [ref=e376]: Per page + - combobox "Per page" [ref=e378]: + - option "25" [selected] + - option "50" + - option "All" + - group [ref=e379]: + - generic "Supporting reference Review consumption flow Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above." [ref=e380] [cursor=pointer]: + - generic [ref=e381]: + - generic [ref=e382]: + - generic [ref=e383]: Supporting reference + - heading "Review consumption flow" [level=2] [ref=e384] + - paragraph [ref=e385]: Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above. + - img [ref=e386] + - complementary [ref=e388]: + - generic [ref=e389]: + - heading "Evidence path" [level=2] [ref=e390] + - generic [ref=e391]: + - generic [ref=e392]: + - term [ref=e393]: + - generic [ref=e394]: Evidence snapshot + - generic [ref=e398]: Available + - definition [ref=e399]: Generated Jun 4, 2026 00:12. + - definition [ref=e400]: + - link "View evidence snapshot" [ref=e401] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e402]: + - term [ref=e403]: + - generic [ref=e404]: Review pack + - generic [ref=e408]: Not available yet + - definition [ref=e409]: Review Pack has not been generated for this released review yet. + - generic [ref=e410]: + - term [ref=e411]: + - generic [ref=e412]: Decision trail + - generic [ref=e416]: Available + - definition [ref=e417]: No governance decisions require customer awareness in this released review. + - generic [ref=e418]: + - term [ref=e419]: + - generic [ref=e420]: Operation proof + - generic [ref=e424]: Available + - definition [ref=e425]: A related operation record exists for this review evidence path. Initiated by Spec 351 Requester. + - definition [ref=e426]: + - link "Open operation" [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - generic [ref=e428]: + - generic [ref=e429]: + - heading "Review pack state" [level=2] [ref=e430] + - generic [ref=e433]: Not available yet + - paragraph [ref=e434]: Review Pack has not been generated for this released review yet. + - generic [ref=e435]: + - generic [ref=e436]: + - generic [ref=e437]: + - generic [ref=e438]: + - heading "Package exists" [level=3] [ref=e439] + - paragraph [ref=e440]: No released review pack artifact exists yet for this review path. + - generic [ref=e443]: Unavailable + - generic [ref=e444]: + - generic [ref=e445]: + - term [ref=e446]: Last generated + - definition [ref=e447]: + - generic [ref=e448]: Unavailable + - generic [ref=e449]: + - term [ref=e450]: Evidence source + - definition [ref=e451]: + - generic [ref=e452]: Jun 4, 2026 00:12 + - generic [ref=e453]: + - term [ref=e454]: Operation proof + - definition [ref=e455]: + - generic [ref=e456]: No operation proof linked + - generic [ref=e457]: + - generic [ref=e458]: + - generic [ref=e459]: + - heading "Internal export" [level=3] [ref=e460] + - paragraph [ref=e461]: No current internal export is available from this review pack path. + - generic [ref=e464]: Export not ready + - generic [ref=e465]: + - generic [ref=e466]: + - term [ref=e467]: Export availability + - definition [ref=e468]: + - generic [ref=e469]: Export not ready + - generic [ref=e470]: + - term [ref=e471]: Evidence basis + - definition [ref=e472]: + - generic [ref=e473]: Not generated + - generic [ref=e474]: + - term [ref=e475]: Section completeness + - definition [ref=e476]: + - generic [ref=e477]: 7 of 7 required complete + - generic [ref=e478]: + - generic [ref=e479]: + - generic [ref=e480]: + - heading "Customer sharing" [level=3] [ref=e481] + - paragraph [ref=e482]: Customer sharing still depends on the readiness blockers and limitations shown in the main decision state. + - generic [ref=e485]: Not ready + - generic [ref=e486]: + - generic [ref=e487]: + - term [ref=e488]: Sharing boundary + - definition [ref=e489]: + - generic [ref=e490]: Not ready + - generic [ref=e491]: + - term [ref=e492]: PII + - definition [ref=e493]: + - generic [ref=e494]: Contains PII + - generic [ref=e495]: + - term [ref=e496]: Protected values + - definition [ref=e497]: + - generic [ref=e498]: Protected values hidden + - generic [ref=e499]: + - term [ref=e500]: Disclosure + - definition [ref=e501]: + - generic [ref=e502]: Disclosure present + - generic [ref=e503]: + - generic [ref=e504]: + - heading "Accepted risks" [level=2] [ref=e505] + - generic [ref=e508]: No action needed + - generic [ref=e509]: + - generic [ref=e510]: + - generic [ref=e511]: Accepted risks + - generic [ref=e514]: "0" + - generic [ref=e515]: + - generic [ref=e516]: Expiring soon + - generic [ref=e519]: "0" + - generic [ref=e520]: + - generic [ref=e521]: Expired + - generic [ref=e524]: "0" + - generic [ref=e525]: + - generic [ref=e526]: Pending approval + - generic [ref=e529]: "0" + - generic [ref=e530]: + - generic [ref=e531]: Needs review + - generic [ref=e534]: "0" + - paragraph [ref=e535]: No accepted risks recorded. + - generic [ref=e536]: + - heading "Disclosure rule" [level=2] [ref=e537] + - generic [ref=e538]: + - generic [ref=e539]: + - generic [ref=e540]: Decision + - generic [ref=e543]: Visible + - generic [ref=e544]: + - generic [ref=e545]: Evidence + - generic [ref=e548]: Visible + - generic [ref=e549]: + - generic [ref=e550]: Diagnostics + - generic [ref=e553]: Collapsed + - generic [ref=e554]: + - generic [ref=e555]: Raw/support + - generic [ref=e558]: Hidden + - group [ref=e559]: + - generic "Diagnostics" [ref=e560] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-42-15-074Z.yml b/.playwright-mcp/page-2026-06-04T00-42-15-074Z.yml new file mode 100644 index 00000000..35dd5139 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-42-15-074Z.yml @@ -0,0 +1,442 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - button "Notifications" [ref=e563] [cursor=pointer]: + - img [ref=e564] + - generic [ref=e567]: "1" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 351 Review Output Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 351 Review Output Smoke" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e163]: + - heading "Customer Review Workspace" [level=1] [ref=e165] + - button "Clear filters" [ref=e168] [cursor=pointer]: + - img [ref=e169] + - text: Clear filters + - generic [ref=e173]: + - generic [ref=e175]: + - generic [ref=e176]: + - heading "Customer-safe review packages" [level=2] [ref=e177] + - paragraph [ref=e178]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e179]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec 351 Browser Ready Draft + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e187]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e193]: Export not ready + - generic [ref=e196]: Not ready + - generic [ref=e197]: + - generic [ref=e198]: What is the current review pack output state? + - heading "Export not ready" [level=2] [ref=e199] + - paragraph [ref=e200]: The current export is not ready yet. + - generic [ref=e201]: + - generic [ref=e202]: + - generic [ref=e203]: Impact + - paragraph [ref=e204]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e205]: + - generic [ref=e206]: Latest released review + - generic [ref=e207]: Spec 351 Browser Ready Draft + - generic [ref=e208]: Published Jun 4, 2026 00:41 + - generic [ref=e209]: + - button "Create next review" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - text: Create next review + - generic [ref=e214]: + - generic [ref=e215]: Supporting actions + - generic [ref=e216]: + - link "Review output limitations" [ref=e217] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e218] + - text: Review output limitations + - link "Open evidence basis" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e221] + - text: Open evidence basis + - link "Open review" [ref=e223] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e224] + - text: Open review + - paragraph [ref=e226]: Create the next review cycle from the latest eligible evidence basis. Use the supporting actions to inspect blockers, evidence, or the current package before moving forward. + - group [ref=e227]: + - generic "Output limitations 2 limitations require review" [ref=e228] [cursor=pointer]: + - generic [ref=e229]: Output limitations + - generic [ref=e230]: 2 limitations require review + - group [ref=e231]: + - generic "Technical details" [ref=e232] [cursor=pointer] + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: + - heading "Review acknowledgement" [level=2] [ref=e237] + - paragraph [ref=e238]: This published review has not been acknowledged yet. + - generic [ref=e241]: Acknowledgement required + - generic [ref=e242]: + - generic [ref=e243]: + - generic [ref=e244]: Impact + - paragraph [ref=e245]: Acknowledgement records review consumption for this published package. Customer-ready status is still determined by the output state above. + - generic [ref=e246]: + - generic [ref=e247]: Basis + - generic [ref=e248]: + - generic [ref=e249]: + - generic [ref=e250]: Review pack + - generic [ref=e253]: Not available yet + - generic [ref=e254]: + - generic [ref=e255]: Evidence + - generic [ref=e258]: Available + - generic [ref=e259]: + - generic [ref=e260]: Next step + - button "Acknowledge review" [ref=e261] [cursor=pointer] + - generic [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - heading "Findings needing attention" [level=2] [ref=e266] + - paragraph [ref=e267]: No open findings require customer action. + - generic [ref=e270]: No action needed + - generic [ref=e271]: + - generic [ref=e272]: + - generic [ref=e273]: Total findings + - generic [ref=e276]: "0" + - generic [ref=e277]: + - generic [ref=e278]: Open findings + - generic [ref=e281]: "0" + - generic [ref=e282]: + - generic [ref=e283]: High impact + - generic [ref=e286]: "0" + - generic [ref=e287]: + - generic [ref=e288]: Accepted risks + - generic [ref=e291]: "0" + - generic [ref=e292]: + - generic [ref=e294]: + - heading "Customer-safe follow-ups" [level=2] [ref=e296] + - paragraph [ref=e298]: No customer-safe follow-ups are listed for this released review. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review package index" [level=2] [ref=e301] + - paragraph [ref=e302]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e305]: + - generic [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: Search + - generic [ref=e311]: + - img [ref=e313] + - searchbox "Search" [ref=e316] + - button "Filter" [ref=e319] [cursor=pointer]: + - img [ref=e320] + - generic [ref=e323]: "1" + - generic [ref=e324]: + - generic [ref=e325]: + - generic [ref=e326]: Active filters + - generic [ref=e328]: + - generic [ref=e330]: "Environment: Spec 351 Browser Ready Draft" + - button "Remove filter" [ref=e331] [cursor=pointer]: + - img [ref=e332] + - generic [ref=e334]: Remove filter + - button [ref=e335] [cursor=pointer]: + - img [ref=e336] + - table [ref=e339]: + - rowgroup [ref=e340]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e341]: + - columnheader "Environment" [ref=e342] + - columnheader "Governance package" [ref=e343] + - columnheader "Status" [ref=e344] + - columnheader "Evidence" [ref=e345] + - columnheader "Next step" [ref=e346] + - columnheader "Open" [ref=e347] + - rowgroup [ref=e348]: + - row "Spec 351 Browser Ready Draft Not available yet Not ready Available Review evidence Open review" [ref=e349]: + - cell "Spec 351 Browser Ready Draft" [ref=e350]: + - generic [ref=e352]: Spec 351 Browser Ready Draft + - cell "Not available yet" [ref=e353]: + - generic [ref=e356]: Not available yet + - cell "Not ready" [ref=e357]: + - generic [ref=e360]: Not ready + - cell "Available" [ref=e361]: + - generic [ref=e364]: Available + - cell "Review evidence" [ref=e365]: + - generic [ref=e367]: Review evidence + - cell "Open review" [ref=e368]: + - link "Open review" [ref=e369] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - generic [ref=e370]: Open review + - navigation "Pagination navigation" [ref=e371]: + - generic [ref=e374]: + - generic [ref=e376]: Per page + - combobox "Per page" [ref=e378]: + - option "25" [selected] + - option "50" + - option "All" + - group [ref=e379]: + - generic "Supporting reference Review consumption flow Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above." [ref=e380] [cursor=pointer]: + - generic [ref=e381]: + - generic [ref=e382]: + - generic [ref=e383]: Supporting reference + - heading "Review consumption flow" [level=2] [ref=e384] + - paragraph [ref=e385]: Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above. + - img [ref=e386] + - complementary [ref=e388]: + - generic [ref=e389]: + - heading "Evidence path" [level=2] [ref=e390] + - generic [ref=e391]: + - generic [ref=e392]: + - term [ref=e393]: + - generic [ref=e394]: Evidence snapshot + - generic [ref=e398]: Available + - definition [ref=e399]: Generated Jun 4, 2026 00:12. + - definition [ref=e400]: + - link "View evidence snapshot" [ref=e401] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e402]: + - term [ref=e403]: + - generic [ref=e404]: Review pack + - generic [ref=e408]: Not available yet + - definition [ref=e409]: Review Pack has not been generated for this released review yet. + - generic [ref=e410]: + - term [ref=e411]: + - generic [ref=e412]: Decision trail + - generic [ref=e416]: Available + - definition [ref=e417]: No governance decisions require customer awareness in this released review. + - generic [ref=e418]: + - term [ref=e419]: + - generic [ref=e420]: Operation proof + - generic [ref=e424]: Available + - definition [ref=e425]: A related operation record exists for this review evidence path. Initiated by Spec 351 Requester. + - definition [ref=e426]: + - link "Open operation" [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - generic [ref=e428]: + - generic [ref=e429]: + - heading "Review pack state" [level=2] [ref=e430] + - generic [ref=e433]: Not available yet + - paragraph [ref=e434]: Review Pack has not been generated for this released review yet. + - generic [ref=e435]: + - generic [ref=e436]: + - generic [ref=e437]: + - generic [ref=e438]: + - heading "Package exists" [level=3] [ref=e439] + - paragraph [ref=e440]: No released review pack artifact exists yet for this review path. + - generic [ref=e443]: Unavailable + - generic [ref=e444]: + - generic [ref=e445]: + - term [ref=e446]: Last generated + - definition [ref=e447]: + - generic [ref=e448]: Unavailable + - generic [ref=e449]: + - term [ref=e450]: Evidence source + - definition [ref=e451]: + - generic [ref=e452]: Jun 4, 2026 00:12 + - generic [ref=e453]: + - term [ref=e454]: Operation proof + - definition [ref=e455]: + - generic [ref=e456]: No operation proof linked + - generic [ref=e457]: + - generic [ref=e458]: + - generic [ref=e459]: + - heading "Internal export" [level=3] [ref=e460] + - paragraph [ref=e461]: No current internal export is available from this review pack path. + - generic [ref=e464]: Export not ready + - generic [ref=e465]: + - generic [ref=e466]: + - term [ref=e467]: Export availability + - definition [ref=e468]: + - generic [ref=e469]: Export not ready + - generic [ref=e470]: + - term [ref=e471]: Evidence basis + - definition [ref=e472]: + - generic [ref=e473]: Not generated + - generic [ref=e474]: + - term [ref=e475]: Section completeness + - definition [ref=e476]: + - generic [ref=e477]: 7 of 7 required complete + - generic [ref=e478]: + - generic [ref=e479]: + - generic [ref=e480]: + - heading "Customer sharing" [level=3] [ref=e481] + - paragraph [ref=e482]: Customer sharing still depends on the readiness blockers and limitations shown in the main decision state. + - generic [ref=e485]: Not ready + - generic [ref=e486]: + - generic [ref=e487]: + - term [ref=e488]: Sharing boundary + - definition [ref=e489]: + - generic [ref=e490]: Not ready + - generic [ref=e491]: + - term [ref=e492]: PII + - definition [ref=e493]: + - generic [ref=e494]: Contains PII + - generic [ref=e495]: + - term [ref=e496]: Protected values + - definition [ref=e497]: + - generic [ref=e498]: Protected values hidden + - generic [ref=e499]: + - term [ref=e500]: Disclosure + - definition [ref=e501]: + - generic [ref=e502]: Disclosure present + - generic [ref=e503]: + - generic [ref=e504]: + - heading "Accepted risks" [level=2] [ref=e505] + - generic [ref=e508]: No action needed + - generic [ref=e509]: + - generic [ref=e510]: + - generic [ref=e511]: Accepted risks + - generic [ref=e514]: "0" + - generic [ref=e515]: + - generic [ref=e516]: Expiring soon + - generic [ref=e519]: "0" + - generic [ref=e520]: + - generic [ref=e521]: Expired + - generic [ref=e524]: "0" + - generic [ref=e525]: + - generic [ref=e526]: Pending approval + - generic [ref=e529]: "0" + - generic [ref=e530]: + - generic [ref=e531]: Needs review + - generic [ref=e534]: "0" + - paragraph [ref=e535]: No accepted risks recorded. + - generic [ref=e536]: + - heading "Disclosure rule" [level=2] [ref=e537] + - generic [ref=e538]: + - generic [ref=e539]: + - generic [ref=e540]: Decision + - generic [ref=e543]: Visible + - generic [ref=e544]: + - generic [ref=e545]: Evidence + - generic [ref=e548]: Visible + - generic [ref=e549]: + - generic [ref=e550]: Diagnostics + - generic [ref=e553]: Collapsed + - generic [ref=e554]: + - generic [ref=e555]: Raw/support + - generic [ref=e558]: Hidden + - group [ref=e559]: + - generic "Diagnostics" [ref=e560] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T00-42-15-075Z.yml b/.playwright-mcp/page-2026-06-04T00-42-15-075Z.yml new file mode 100644 index 00000000..35dd5139 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T00-42-15-075Z.yml @@ -0,0 +1,442 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 351 Review Output Smoke" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 351 Review Output Smoke + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - link "TenantPilot" [ref=e25] [cursor=pointer]: + - /url: http://localhost/admin + - generic [ref=e27]: + - img [ref=e28] + - generic [ref=e31]: TenantPilot + - generic [ref=e32]: + - generic [ref=e35]: + - generic [ref=e36]: Global search + - generic [ref=e37]: + - img [ref=e39] + - searchbox "Global search" [ref=e42] + - button "Notifications" [ref=e563] [cursor=pointer]: + - img [ref=e564] + - generic [ref=e567]: "1" + - button "User menu" [ref=e46] [cursor=pointer]: + - img "Avatar of Spec 351 Requester" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e50]: + - navigation [ref=e51]: + - 'link "Workspace: Spec 351 Review Output Smoke" [ref=e52] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e54] + - generic [ref=e56]: + - generic [ref=e57]: Workspace + - generic "Spec 351 Review Output Smoke" [ref=e58] + - generic [ref=e59]: 1 environment + - img [ref=e60] + - list [ref=e62]: + - listitem [ref=e63]: + - list [ref=e64]: + - listitem [ref=e65]: + - link "Overview" [ref=e66] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e67] + - generic [ref=e69]: Overview + - listitem [ref=e70]: + - generic [ref=e71] [cursor=pointer]: + - generic [ref=e72]: Monitoring + - button "Monitoring" [expanded] [ref=e73]: + - img [ref=e74] + - list [ref=e76]: + - listitem [ref=e77]: + - link "Finding exceptions" [ref=e78] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e79] + - generic [ref=e81]: Finding exceptions + - listitem [ref=e82]: + - link "Operations" [ref=e83] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations + - img [ref=e84] + - generic [ref=e86]: Operations + - listitem [ref=e87]: + - link "Alerts" [ref=e88] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e89] + - generic [ref=e91]: Alerts + - listitem [ref=e92]: + - link "Evidence" [ref=e93] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e94] + - generic [ref=e96]: Evidence + - listitem [ref=e97]: + - link "Audit Log" [ref=e98] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e99] + - generic [ref=e101]: Audit Log + - listitem [ref=e102]: + - generic [ref=e103] [cursor=pointer]: + - generic [ref=e104]: Reporting + - button "Reporting" [expanded] [ref=e105]: + - img [ref=e106] + - list [ref=e108]: + - listitem [ref=e109]: + - link "Reviews" [ref=e110] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e111] + - generic [ref=e113]: Reviews + - listitem [ref=e114]: + - link "Customer reviews" [ref=e115] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e116] + - generic [ref=e118]: Customer reviews + - listitem [ref=e119]: + - generic [ref=e120] [cursor=pointer]: + - generic [ref=e121]: Settings + - button "Settings" [expanded] [ref=e122]: + - img [ref=e123] + - list [ref=e125]: + - listitem [ref=e126]: + - link "Manage workspaces" [ref=e127] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e128] + - generic [ref=e130]: Manage workspaces + - listitem [ref=e131]: + - link "Integrations" [ref=e132] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e133] + - generic [ref=e135]: Integrations + - listitem [ref=e136]: + - link "Settings" [ref=e137] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e138] + - generic [ref=e141]: Settings + - listitem [ref=e142]: + - generic [ref=e143] [cursor=pointer]: + - generic [ref=e144]: Governance + - button "Governance" [expanded] [ref=e145]: + - img [ref=e146] + - list [ref=e148]: + - listitem [ref=e149]: + - link "Governance inbox" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e151] + - generic [ref=e153]: Governance inbox + - listitem [ref=e154]: + - link "Decision register" [ref=e155] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e156] + - generic [ref=e158]: Decision register + - main [ref=e160]: + - generic [ref=e162]: + - generic [ref=e163]: + - heading "Customer Review Workspace" [level=1] [ref=e165] + - button "Clear filters" [ref=e168] [cursor=pointer]: + - img [ref=e169] + - text: Clear filters + - generic [ref=e173]: + - generic [ref=e175]: + - generic [ref=e176]: + - heading "Customer-safe review packages" [level=2] [ref=e177] + - paragraph [ref=e178]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e179]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec 351 Browser Ready Draft + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e187]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e193]: Export not ready + - generic [ref=e196]: Not ready + - generic [ref=e197]: + - generic [ref=e198]: What is the current review pack output state? + - heading "Export not ready" [level=2] [ref=e199] + - paragraph [ref=e200]: The current export is not ready yet. + - generic [ref=e201]: + - generic [ref=e202]: + - generic [ref=e203]: Impact + - paragraph [ref=e204]: Do not present this package as customer-ready until export readiness passes. + - generic [ref=e205]: + - generic [ref=e206]: Latest released review + - generic [ref=e207]: Spec 351 Browser Ready Draft + - generic [ref=e208]: Published Jun 4, 2026 00:41 + - generic [ref=e209]: + - button "Create next review" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - text: Create next review + - generic [ref=e214]: + - generic [ref=e215]: Supporting actions + - generic [ref=e216]: + - link "Review output limitations" [ref=e217] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e218] + - text: Review output limitations + - link "Open evidence basis" [ref=e220] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - img [ref=e221] + - text: Open evidence basis + - link "Open review" [ref=e223] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - img [ref=e224] + - text: Open review + - paragraph [ref=e226]: Create the next review cycle from the latest eligible evidence basis. Use the supporting actions to inspect blockers, evidence, or the current package before moving forward. + - group [ref=e227]: + - generic "Output limitations 2 limitations require review" [ref=e228] [cursor=pointer]: + - generic [ref=e229]: Output limitations + - generic [ref=e230]: 2 limitations require review + - group [ref=e231]: + - generic "Technical details" [ref=e232] [cursor=pointer] + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: + - heading "Review acknowledgement" [level=2] [ref=e237] + - paragraph [ref=e238]: This published review has not been acknowledged yet. + - generic [ref=e241]: Acknowledgement required + - generic [ref=e242]: + - generic [ref=e243]: + - generic [ref=e244]: Impact + - paragraph [ref=e245]: Acknowledgement records review consumption for this published package. Customer-ready status is still determined by the output state above. + - generic [ref=e246]: + - generic [ref=e247]: Basis + - generic [ref=e248]: + - generic [ref=e249]: + - generic [ref=e250]: Review pack + - generic [ref=e253]: Not available yet + - generic [ref=e254]: + - generic [ref=e255]: Evidence + - generic [ref=e258]: Available + - generic [ref=e259]: + - generic [ref=e260]: Next step + - button "Acknowledge review" [ref=e261] [cursor=pointer] + - generic [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - heading "Findings needing attention" [level=2] [ref=e266] + - paragraph [ref=e267]: No open findings require customer action. + - generic [ref=e270]: No action needed + - generic [ref=e271]: + - generic [ref=e272]: + - generic [ref=e273]: Total findings + - generic [ref=e276]: "0" + - generic [ref=e277]: + - generic [ref=e278]: Open findings + - generic [ref=e281]: "0" + - generic [ref=e282]: + - generic [ref=e283]: High impact + - generic [ref=e286]: "0" + - generic [ref=e287]: + - generic [ref=e288]: Accepted risks + - generic [ref=e291]: "0" + - generic [ref=e292]: + - generic [ref=e294]: + - heading "Customer-safe follow-ups" [level=2] [ref=e296] + - paragraph [ref=e298]: No customer-safe follow-ups are listed for this released review. + - generic [ref=e299]: + - generic [ref=e300]: + - heading "Review package index" [level=2] [ref=e301] + - paragraph [ref=e302]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e305]: + - generic [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: Search + - generic [ref=e311]: + - img [ref=e313] + - searchbox "Search" [ref=e316] + - button "Filter" [ref=e319] [cursor=pointer]: + - img [ref=e320] + - generic [ref=e323]: "1" + - generic [ref=e324]: + - generic [ref=e325]: + - generic [ref=e326]: Active filters + - generic [ref=e328]: + - generic [ref=e330]: "Environment: Spec 351 Browser Ready Draft" + - button "Remove filter" [ref=e331] [cursor=pointer]: + - img [ref=e332] + - generic [ref=e334]: Remove filter + - button [ref=e335] [cursor=pointer]: + - img [ref=e336] + - table [ref=e339]: + - rowgroup [ref=e340]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e341]: + - columnheader "Environment" [ref=e342] + - columnheader "Governance package" [ref=e343] + - columnheader "Status" [ref=e344] + - columnheader "Evidence" [ref=e345] + - columnheader "Next step" [ref=e346] + - columnheader "Open" [ref=e347] + - rowgroup [ref=e348]: + - row "Spec 351 Browser Ready Draft Not available yet Not ready Available Review evidence Open review" [ref=e349]: + - cell "Spec 351 Browser Ready Draft" [ref=e350]: + - generic [ref=e352]: Spec 351 Browser Ready Draft + - cell "Not available yet" [ref=e353]: + - generic [ref=e356]: Not available yet + - cell "Not ready" [ref=e357]: + - generic [ref=e360]: Not ready + - cell "Available" [ref=e361]: + - generic [ref=e364]: Available + - cell "Review evidence" [ref=e365]: + - generic [ref=e367]: Review evidence + - cell "Open review" [ref=e368]: + - link "Open review" [ref=e369] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/environment-reviews/19?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=50 + - generic [ref=e370]: Open review + - navigation "Pagination navigation" [ref=e371]: + - generic [ref=e374]: + - generic [ref=e376]: Per page + - combobox "Per page" [ref=e378]: + - option "25" [selected] + - option "50" + - option "All" + - group [ref=e379]: + - generic "Supporting reference Review consumption flow Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above." [ref=e380] [cursor=pointer]: + - generic [ref=e381]: + - generic [ref=e382]: + - generic [ref=e383]: Supporting reference + - heading "Review consumption flow" [level=2] [ref=e384] + - paragraph [ref=e385]: Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above. + - img [ref=e386] + - complementary [ref=e388]: + - generic [ref=e389]: + - heading "Evidence path" [level=2] [ref=e390] + - generic [ref=e391]: + - generic [ref=e392]: + - term [ref=e393]: + - generic [ref=e394]: Evidence snapshot + - generic [ref=e398]: Available + - definition [ref=e399]: Generated Jun 4, 2026 00:12. + - definition [ref=e400]: + - link "View evidence snapshot" [ref=e401] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/environments/spec-351-browser-ready-draft/evidence/16 + - generic [ref=e402]: + - term [ref=e403]: + - generic [ref=e404]: Review pack + - generic [ref=e408]: Not available yet + - definition [ref=e409]: Review Pack has not been generated for this released review yet. + - generic [ref=e410]: + - term [ref=e411]: + - generic [ref=e412]: Decision trail + - generic [ref=e416]: Available + - definition [ref=e417]: No governance decisions require customer awareness in this released review. + - generic [ref=e418]: + - term [ref=e419]: + - generic [ref=e420]: Operation proof + - generic [ref=e424]: Available + - definition [ref=e425]: A related operation record exists for this review evidence path. Initiated by Spec 351 Requester. + - definition [ref=e426]: + - link "Open operation" [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/32/operations/54 + - generic [ref=e428]: + - generic [ref=e429]: + - heading "Review pack state" [level=2] [ref=e430] + - generic [ref=e433]: Not available yet + - paragraph [ref=e434]: Review Pack has not been generated for this released review yet. + - generic [ref=e435]: + - generic [ref=e436]: + - generic [ref=e437]: + - generic [ref=e438]: + - heading "Package exists" [level=3] [ref=e439] + - paragraph [ref=e440]: No released review pack artifact exists yet for this review path. + - generic [ref=e443]: Unavailable + - generic [ref=e444]: + - generic [ref=e445]: + - term [ref=e446]: Last generated + - definition [ref=e447]: + - generic [ref=e448]: Unavailable + - generic [ref=e449]: + - term [ref=e450]: Evidence source + - definition [ref=e451]: + - generic [ref=e452]: Jun 4, 2026 00:12 + - generic [ref=e453]: + - term [ref=e454]: Operation proof + - definition [ref=e455]: + - generic [ref=e456]: No operation proof linked + - generic [ref=e457]: + - generic [ref=e458]: + - generic [ref=e459]: + - heading "Internal export" [level=3] [ref=e460] + - paragraph [ref=e461]: No current internal export is available from this review pack path. + - generic [ref=e464]: Export not ready + - generic [ref=e465]: + - generic [ref=e466]: + - term [ref=e467]: Export availability + - definition [ref=e468]: + - generic [ref=e469]: Export not ready + - generic [ref=e470]: + - term [ref=e471]: Evidence basis + - definition [ref=e472]: + - generic [ref=e473]: Not generated + - generic [ref=e474]: + - term [ref=e475]: Section completeness + - definition [ref=e476]: + - generic [ref=e477]: 7 of 7 required complete + - generic [ref=e478]: + - generic [ref=e479]: + - generic [ref=e480]: + - heading "Customer sharing" [level=3] [ref=e481] + - paragraph [ref=e482]: Customer sharing still depends on the readiness blockers and limitations shown in the main decision state. + - generic [ref=e485]: Not ready + - generic [ref=e486]: + - generic [ref=e487]: + - term [ref=e488]: Sharing boundary + - definition [ref=e489]: + - generic [ref=e490]: Not ready + - generic [ref=e491]: + - term [ref=e492]: PII + - definition [ref=e493]: + - generic [ref=e494]: Contains PII + - generic [ref=e495]: + - term [ref=e496]: Protected values + - definition [ref=e497]: + - generic [ref=e498]: Protected values hidden + - generic [ref=e499]: + - term [ref=e500]: Disclosure + - definition [ref=e501]: + - generic [ref=e502]: Disclosure present + - generic [ref=e503]: + - generic [ref=e504]: + - heading "Accepted risks" [level=2] [ref=e505] + - generic [ref=e508]: No action needed + - generic [ref=e509]: + - generic [ref=e510]: + - generic [ref=e511]: Accepted risks + - generic [ref=e514]: "0" + - generic [ref=e515]: + - generic [ref=e516]: Expiring soon + - generic [ref=e519]: "0" + - generic [ref=e520]: + - generic [ref=e521]: Expired + - generic [ref=e524]: "0" + - generic [ref=e525]: + - generic [ref=e526]: Pending approval + - generic [ref=e529]: "0" + - generic [ref=e530]: + - generic [ref=e531]: Needs review + - generic [ref=e534]: "0" + - paragraph [ref=e535]: No accepted risks recorded. + - generic [ref=e536]: + - heading "Disclosure rule" [level=2] [ref=e537] + - generic [ref=e538]: + - generic [ref=e539]: + - generic [ref=e540]: Decision + - generic [ref=e543]: Visible + - generic [ref=e544]: + - generic [ref=e545]: Evidence + - generic [ref=e548]: Visible + - generic [ref=e549]: + - generic [ref=e550]: Diagnostics + - generic [ref=e553]: Collapsed + - generic [ref=e554]: + - generic [ref=e555]: Raw/support + - generic [ref=e558]: Hidden + - group [ref=e559]: + - generic "Diagnostics" [ref=e560] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T11-34-20-291Z.yml b/.playwright-mcp/page-2026-06-04T11-34-20-291Z.yml new file mode 100644 index 00000000..06d15858 --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T11-34-20-291Z.yml @@ -0,0 +1,46 @@ +- generic [active] [ref=e1]: + - main [ref=e2]: + - generic [ref=e4]: + - heading "404" [level=1] [ref=e5] + - generic [ref=e6]: Not Found + - generic [ref=e7]: + - generic [ref=e9]: + - generic [ref=e11]: + - generic [ref=e12] [cursor=pointer]: + - generic:  + - generic [ref=e13]: 404 Not Found + - text:  + - generic [ref=e14] [cursor=pointer]: + - generic:  + - generic [ref=e15] [cursor=pointer]: + - generic:  + - generic [ref=e16]: "1" + - generic [ref=e17] [cursor=pointer]: + - generic:  + - generic [ref=e18]: "2" + - generic [ref=e19] [cursor=pointer]: + - generic:  + - generic [ref=e20]: "7" + - generic [ref=e21] [cursor=pointer]: + - generic:  + - generic [ref=e22]: "3" + - text:    + - generic [ref=e23]: + - generic [ref=e26] [cursor=pointer]: + - generic:  + - generic [ref=e28] [cursor=pointer]: + - generic:  + - generic [ref=e29] [cursor=pointer]: + - generic:  + - generic: 397ms + - generic [ref=e30]: + - generic:  + - generic: 13MB + - generic [ref=e31]: + - generic:  + - generic: 12.x + - generic [ref=e32] [cursor=pointer]: + - generic:  + - generic: "GET admin/workspaces/{workspace}/environments/{environment}" + - text:                                                               + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T14-59-15-107Z.yml b/.playwright-mcp/page-2026-06-04T14-59-15-107Z.yml new file mode 100644 index 00000000..b69c1bbe --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T14-59-15-107Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 449ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T21-39-36-823Z.yml b/.playwright-mcp/page-2026-06-04T21-39-36-823Z.yml new file mode 100644 index 00000000..c198a50b --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T21-39-36-823Z.yml @@ -0,0 +1,418 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 352 Audit Provider Blocker + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Environment: Spec 352 Audit Provider Blocker" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Environment + - generic "Spec 352 Audit Provider Blocker" [ref=e55] + - generic [ref=e56]: "Workspace: Spec 352 Guidance Browser Audit" + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Inventory + - button "Inventory" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Items" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory + - img [ref=e76] + - generic [ref=e78]: Items + - listitem [ref=e79]: + - link "Policies" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policies + - img [ref=e81] + - generic [ref=e83]: Policies + - listitem [ref=e84]: + - link "Policy Versions" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policy-versions + - img [ref=e86] + - generic [ref=e88]: Policy Versions + - listitem [ref=e89]: + - link "Coverage" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory/inventory-coverage + - img [ref=e91] + - generic [ref=e93]: Coverage + - listitem [ref=e94]: + - generic [ref=e95] [cursor=pointer]: + - generic [ref=e96]: Reporting + - button "Reporting" [expanded] [ref=e97]: + - img [ref=e98] + - list [ref=e100]: + - listitem [ref=e101]: + - link "Reviews" [ref=e102] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/environment-reviews + - img [ref=e103] + - generic [ref=e105]: Reviews + - listitem [ref=e106]: + - link "Stored reports" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/stored-reports + - img [ref=e108] + - generic [ref=e110]: Stored reports + - listitem [ref=e111]: + - link "Review Packs" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/review-packs + - img [ref=e113] + - generic [ref=e115]: Review Packs + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Governance + - button "Governance" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Findings" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/findings + - img [ref=e125] + - generic [ref=e127]: Findings + - listitem [ref=e128]: + - link "Baselines" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e130] + - generic [ref=e132]: Baselines + - listitem [ref=e133]: + - link "Baseline Snapshots" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e135] + - generic [ref=e138]: Baseline Snapshots + - listitem [ref=e139]: + - link "Baseline Compare" [ref=e140] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/baseline-compare + - img [ref=e141] + - generic [ref=e143]: Baseline Compare + - listitem [ref=e144]: + - link "Evidence" [ref=e145] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/evidence + - img [ref=e146] + - generic [ref=e148]: Evidence + - listitem [ref=e149]: + - link "Risk exceptions" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/finding-exceptions + - img [ref=e151] + - generic [ref=e153]: Risk exceptions + - listitem [ref=e154]: + - generic [ref=e155] [cursor=pointer]: + - generic [ref=e156]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e157]: + - img [ref=e158] + - list [ref=e160]: + - listitem [ref=e161]: + - link "Backup Schedules" [ref=e162] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-schedules + - img [ref=e163] + - generic [ref=e165]: Backup Schedules + - listitem [ref=e166]: + - link "Backup Sets" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - img [ref=e168] + - generic [ref=e170]: Backup Sets + - listitem [ref=e171]: + - link "Restore Runs" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/restore-runs + - img [ref=e173] + - generic [ref=e175]: Restore Runs + - listitem [ref=e176]: + - generic [ref=e177] [cursor=pointer]: + - generic [ref=e178]: Directory + - button "Directory" [expanded] [ref=e179]: + - img [ref=e180] + - list [ref=e182]: + - listitem [ref=e183]: + - link "Groups" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/entra-groups + - img [ref=e185] + - generic [ref=e187]: Groups + - listitem [ref=e188]: + - generic [ref=e189] [cursor=pointer]: + - generic [ref=e190]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e191]: + - img [ref=e192] + - list [ref=e194]: + - listitem [ref=e195]: + - link "Finding exceptions" [ref=e196] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=51 + - img [ref=e197] + - generic [ref=e199]: Finding exceptions + - listitem [ref=e200]: + - link "Reviews" [ref=e201] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=51 + - img [ref=e202] + - generic [ref=e204]: Reviews + - listitem [ref=e205]: + - link "Governance inbox" [ref=e206] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=51 + - img [ref=e207] + - generic [ref=e209]: Governance inbox + - listitem [ref=e210]: + - link "Decision register" [ref=e211] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=51 + - img [ref=e212] + - generic [ref=e214]: Decision register + - listitem [ref=e215]: + - link "Operations" [ref=e216] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51 + - img [ref=e217] + - generic [ref=e219]: Operations + - listitem [ref=e220]: + - link "Alerts" [ref=e221] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=51 + - img [ref=e222] + - generic [ref=e224]: Alerts + - listitem [ref=e225]: + - link "Evidence" [ref=e226] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=51 + - img [ref=e227] + - generic [ref=e229]: Evidence + - listitem [ref=e230]: + - link "Audit Log" [ref=e231] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=51 + - img [ref=e232] + - generic [ref=e234]: Audit Log + - listitem [ref=e235]: + - link "Customer reviews" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=51 + - img [ref=e237] + - generic [ref=e239]: Customer reviews + - listitem [ref=e240]: + - generic [ref=e241] [cursor=pointer]: + - generic [ref=e242]: Workspace admin + - button "Workspace admin" [expanded] [ref=e243]: + - img [ref=e244] + - list [ref=e246]: + - listitem [ref=e247]: + - link "Manage workspaces" [ref=e248] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e249] + - generic [ref=e251]: Manage workspaces + - listitem [ref=e252]: + - link "Integrations" [ref=e253] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=51 + - img [ref=e254] + - generic [ref=e256]: Integrations + - listitem [ref=e257]: + - link "Settings" [ref=e258] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e259] + - generic [ref=e262]: Settings + - main [ref=e264]: + - generic [ref=e266]: + - generic [ref=e268]: + - heading "Spec 352 Audit Provider Blocker" [level=1] [ref=e269] + - paragraph [ref=e270]: Required permissions + - generic [ref=e273]: + - generic [ref=e274]: + - heading "Summary" [level=2] [ref=e277] + - generic [ref=e280]: + - generic [ref=e281]: + - generic [ref=e282]: + - generic [ref=e283]: + - img [ref=e284] + - generic [ref=e287]: Blocked + - generic [ref=e288]: Stored data · refreshed 9 hours ago + - generic [ref=e289]: + - generic [ref=e290]: + - generic [ref=e291]: Missing (app) + - generic [ref=e292]: "1" + - generic [ref=e293]: + - generic [ref=e294]: Missing (delegated) + - generic [ref=e295]: "0" + - generic [ref=e296]: + - generic [ref=e297]: Present + - generic [ref=e298]: "0" + - generic [ref=e299]: + - generic [ref=e300]: Errors + - generic [ref=e301]: "0" + - generic [ref=e302]: + - generic [ref=e304]: + - generic [ref=e305]: + - generic [ref=e308]: Blocked + - heading "Required permissions missing" [level=2] [ref=e309] + - generic [ref=e310]: + - generic [ref=e311]: Recommended next action + - button "Open admin consent" [ref=e312] [cursor=pointer] + - generic [ref=e313]: + - generic [ref=e314]: Secondary + - generic [ref=e315]: + - link "Open provider connection" [ref=e316] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - link "Open environment dashboard" [ref=e317] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e318]: + - generic [ref=e319]: Reason + - paragraph [ref=e320]: Required application permissions are missing. + - generic [ref=e321]: + - generic [ref=e322]: Impact + - paragraph [ref=e323]: TenantPilot cannot refresh evidence, permission posture, inventory, or review outputs reliably until the missing application permissions are granted. + - group [ref=e324]: + - generic "Details" [ref=e325] [cursor=pointer] + - generic [ref=e326]: + - generic [ref=e327]: + - generic [ref=e328]: + - generic [ref=e329]: Provider capabilities + - generic [ref=e330]: Capability-first view of the provider prerequisites used by operation start gates. + - generic [ref=e331]: + - img [ref=e332] + - generic [ref=e335]: "Provider connection check: Missing" + - generic [ref=e336]: + - generic [ref=e337]: + - generic [ref=e338]: + - generic [ref=e339]: + - generic [ref=e340]: Provider connection check + - generic [ref=e341]: Provider connection check capability is missing required provider permissions. + - generic [ref=e342]: + - img [ref=e343] + - generic [ref=e346]: Missing + - generic [ref=e347]: 1 missing, 0 error(s) + - generic [ref=e348]: + - generic [ref=e349]: + - generic [ref=e350]: + - generic [ref=e351]: Inventory read + - generic [ref=e352]: Inventory read capability is missing required provider permissions. + - generic [ref=e353]: + - img [ref=e354] + - generic [ref=e357]: Missing + - generic [ref=e358]: 1 missing, 0 error(s) + - generic [ref=e359]: + - generic [ref=e360]: + - generic [ref=e361]: + - generic [ref=e362]: Configuration read + - generic [ref=e363]: Configuration read capability is missing required provider permissions. + - generic [ref=e364]: + - img [ref=e365] + - generic [ref=e368]: Missing + - generic [ref=e369]: 1 missing, 0 error(s) + - generic [ref=e370]: + - generic [ref=e371]: + - generic [ref=e372]: + - generic [ref=e373]: Restore execute + - generic [ref=e374]: Restore execute capability is missing required provider permissions. + - generic [ref=e375]: + - img [ref=e376] + - generic [ref=e379]: Missing + - generic [ref=e380]: 1 missing, 0 error(s) + - generic [ref=e381]: + - generic [ref=e382]: + - generic [ref=e383]: + - generic [ref=e384]: Directory groups read + - generic [ref=e385]: Directory groups read capability is supported by stored permission evidence. + - generic [ref=e386]: + - img [ref=e387] + - generic [ref=e390]: Supported + - generic [ref=e391]: 0 missing, 0 error(s) + - generic [ref=e392]: + - generic [ref=e393]: + - generic [ref=e394]: + - generic [ref=e395]: Directory role definitions read + - generic [ref=e396]: Directory role definitions read capability is missing required provider permissions. + - generic [ref=e397]: + - img [ref=e398] + - generic [ref=e401]: Missing + - generic [ref=e402]: 1 missing, 0 error(s) + - generic [ref=e403]: + - generic [ref=e404]: Permission handoff + - generic [ref=e405]: + - generic [ref=e406]: Who can fix this? Global Administrator / Privileged Role Administrator. + - generic [ref=e407]: + - text: "Primary next step:" + - link "Open admin consent" [ref=e408] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - generic [ref=e409]: + - text: "After granting consent:" + - button "Run provider verification" [ref=e410] [cursor=pointer] + - generic [ref=e411]: + - button "Copy missing application permissions" [ref=e412] [cursor=pointer] + - button "Copy missing delegated permissions" [disabled] + - generic [ref=e413]: + - generic [ref=e415]: + - generic [ref=e416]: + - generic [ref=e417]: backup + - generic [ref=e418]: 1 missing + - generic [ref=e421]: Blocked + - generic [ref=e423]: + - generic [ref=e424]: + - generic [ref=e425]: drift + - generic [ref=e426]: 1 missing + - generic [ref=e429]: Blocked + - generic [ref=e431]: + - generic [ref=e432]: + - generic [ref=e433]: policy-sync + - generic [ref=e434]: 1 missing + - generic [ref=e437]: Blocked + - generic [ref=e439]: + - generic [ref=e440]: + - generic [ref=e441]: restore + - generic [ref=e442]: 1 missing + - generic [ref=e445]: Blocked + - generic [ref=e447]: + - generic [ref=e448]: + - generic [ref=e449]: settings-normalization + - generic [ref=e450]: 1 missing + - generic [ref=e453]: Blocked + - generic [ref=e454]: + - heading "Issues" [level=2] [ref=e457] + - generic [ref=e461]: + - generic [ref=e462]: + - generic [ref=e465]: Blocker + - generic [ref=e466]: Missing application permissions + - generic [ref=e467]: 1 required application permission(s) are missing. + - generic [ref=e468]: + - link "Open admin consent" [ref=e469] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - link "Manage provider connection" [ref=e470] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=51 + - link "Open environment dashboard" [ref=e471] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e472]: + - heading "Passed" [level=2] [ref=e475] + - generic [ref=e478]: + - generic [ref=e479]: 0 permission(s) currently pass. + - generic [ref=e480]: Out of 1 required permissions, 0 are currently granted. + - generic [ref=e481]: + - heading "Technical details" [level=2] [ref=e484] + - group [ref=e487]: + - generic "Expand technical details" [ref=e488] [cursor=pointer] + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-04T21-39-49-540Z.yml b/.playwright-mcp/page-2026-06-04T21-39-49-540Z.yml new file mode 100644 index 00000000..2ee8c1de --- /dev/null +++ b/.playwright-mcp/page-2026-06-04T21-39-49-540Z.yml @@ -0,0 +1,280 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: Spec 352 Guidance Browser Audit" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "Spec 352 Guidance Browser Audit" [ref=e54] + - generic [ref=e55]: 3 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - generic [ref=e160]: + - navigation [ref=e161]: + - list [ref=e162]: + - listitem [ref=e163]: + - link "Provider Connections" [ref=e164] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - listitem [ref=e165]: + - img [ref=e166] + - generic [ref=e168]: List + - heading "Provider Connections" [level=1] [ref=e169] + - link "New connection" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/create?environment_id=51 + - generic [ref=e175]: + - generic [ref=e178]: + - generic [ref=e179]: "Environment filter:" + - generic [ref=e180]: Spec 352 Audit Provider Blocker + - link "Clear filter" [ref=e181] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - generic [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - generic [ref=e190]: Blocked + - heading "Provider readiness blocked" [level=2] [ref=e191] + - generic [ref=e192]: + - generic [ref=e193]: Recommended next action + - link "Open required permissions" [ref=e194] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - generic [ref=e195]: + - generic [ref=e196]: Secondary + - generic [ref=e197]: + - link "Open admin consent" [ref=e198] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - link "Open provider connection" [ref=e199] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - link "Open environment dashboard" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e201]: + - generic [ref=e202]: Reason + - paragraph [ref=e203]: Required application permissions are missing. + - generic [ref=e204]: + - generic [ref=e205]: Impact + - paragraph [ref=e206]: TenantPilot cannot refresh evidence, permission posture, inventory, or review outputs reliably until the missing application permissions are granted. + - group [ref=e207]: + - generic "Details" [ref=e208] [cursor=pointer] + - generic [ref=e213]: + - generic [ref=e216]: + - generic [ref=e217]: + - generic [ref=e218]: Search + - generic [ref=e219]: + - img [ref=e221] + - searchbox "Search" [ref=e224] + - button "Filter" [ref=e227] [cursor=pointer]: + - img [ref=e228] + - generic [ref=e231]: "1" + - button "Column manager" [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e237]: + - generic [ref=e238]: + - generic [ref=e239]: Active filters + - generic [ref=e241]: + - generic [ref=e243]: "Environment: Spec 352 Audit Provider Blocker (DEV)" + - button "Remove filter" [ref=e244] [cursor=pointer]: + - img [ref=e245] + - generic [ref=e247]: Remove filter + - button [ref=e248] [cursor=pointer]: + - img [ref=e249] + - table [ref=e252]: + - rowgroup [ref=e253]: + - row "Environment Name Provider Target scope Connection type Lifecycle Consent Verification Provider capability Actions" [ref=e254]: + - columnheader "Environment" [ref=e255] + - columnheader "Name" [ref=e256]: + - button "Name" [ref=e257] [cursor=pointer]: + - text: Name + - img [ref=e258] + - columnheader "Provider" [ref=e260] + - columnheader "Target scope" [ref=e261] + - columnheader "Connection type" [ref=e262] + - columnheader "Lifecycle" [ref=e263] + - columnheader "Consent" [ref=e264] + - columnheader "Verification" [ref=e265] + - columnheader "Provider capability" [ref=e266] + - columnheader "Actions" [ref=e267] + - rowgroup [ref=e268]: + - 'row "Spec 352 Audit Provider Blocker DEV Spec 352 Audit Provider Blocker Microsoft Microsoft Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker) Dedicated Enabled Granted Healthy Missing Inventory read: Missing More" [ref=e269]': + - cell "Spec 352 Audit Provider Blocker DEV" [ref=e270]: + - link "Spec 352 Audit Provider Blocker DEV" [ref=e271] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e272]: + - paragraph [ref=e273]: Spec 352 Audit Provider Blocker + - paragraph [ref=e274]: DEV + - cell "Spec 352 Audit Provider Blocker Microsoft" [ref=e275]: + - link "Spec 352 Audit Provider Blocker Microsoft" [ref=e276] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e277]: Spec 352 Audit Provider Blocker Microsoft + - cell "Microsoft" [ref=e278]: + - link "Microsoft" [ref=e279] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e280]: Microsoft + - cell "Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker)" [ref=e281]: + - link "Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker)" [ref=e282] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e283]: Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker) + - cell "Dedicated" [ref=e284]: + - link "Dedicated" [ref=e285] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e287]: Dedicated + - cell "Enabled" [ref=e288]: + - link "Enabled" [ref=e289] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e291]: + - img [ref=e292] + - text: Enabled + - cell "Granted" [ref=e294]: + - link "Granted" [ref=e295] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e297]: + - img [ref=e298] + - text: Granted + - cell "Healthy" [ref=e300]: + - link "Healthy" [ref=e301] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e303]: + - img [ref=e304] + - text: Healthy + - 'cell "Missing Inventory read: Missing" [ref=e306]': + - 'link "Missing Inventory read: Missing" [ref=e307] [cursor=pointer]': + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e308]: + - paragraph [ref=e309]: + - generic [ref=e310]: + - img [ref=e311] + - text: Missing + - paragraph [ref=e313]: "Inventory read: Missing" + - cell "More" [ref=e314]: + - button "More" [ref=e318] [cursor=pointer]: + - img [ref=e319] + - navigation "Pagination navigation" [ref=e321]: + - generic [ref=e324]: + - generic [ref=e326]: Per page + - combobox "Per page" [ref=e328]: + - option "25" [selected] + - option "50" + - option "100" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-44-48-161Z.yml b/.playwright-mcp/page-2026-06-05T02-44-48-161Z.yml new file mode 100644 index 00000000..6c5f7150 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-44-48-161Z.yml @@ -0,0 +1,510 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 352 Audit Provider Blocker + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Environment: Spec 352 Audit Provider Blocker" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Environment + - generic "Spec 352 Audit Provider Blocker" [ref=e55] + - generic [ref=e56]: "Workspace: Spec 352 Guidance Browser Audit" + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Inventory + - button "Inventory" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Items" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory + - img [ref=e76] + - generic [ref=e78]: Items + - listitem [ref=e79]: + - link "Policies" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policies + - img [ref=e81] + - generic [ref=e83]: Policies + - listitem [ref=e84]: + - link "Policy Versions" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policy-versions + - img [ref=e86] + - generic [ref=e88]: Policy Versions + - listitem [ref=e89]: + - link "Coverage" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory/inventory-coverage + - img [ref=e91] + - generic [ref=e93]: Coverage + - listitem [ref=e94]: + - generic [ref=e95] [cursor=pointer]: + - generic [ref=e96]: Reporting + - button "Reporting" [expanded] [ref=e97]: + - img [ref=e98] + - list [ref=e100]: + - listitem [ref=e101]: + - link "Reviews" [ref=e102] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/environment-reviews + - img [ref=e103] + - generic [ref=e105]: Reviews + - listitem [ref=e106]: + - link "Stored reports" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/stored-reports + - img [ref=e108] + - generic [ref=e110]: Stored reports + - listitem [ref=e111]: + - link "Review Packs" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/review-packs + - img [ref=e113] + - generic [ref=e115]: Review Packs + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Governance + - button "Governance" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Findings" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/findings + - img [ref=e125] + - generic [ref=e127]: Findings + - listitem [ref=e128]: + - link "Baselines" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e130] + - generic [ref=e132]: Baselines + - listitem [ref=e133]: + - link "Baseline Snapshots" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e135] + - generic [ref=e138]: Baseline Snapshots + - listitem [ref=e139]: + - link "Baseline Compare" [ref=e140] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/baseline-compare + - img [ref=e141] + - generic [ref=e143]: Baseline Compare + - listitem [ref=e144]: + - link "Evidence" [ref=e145] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/evidence + - img [ref=e146] + - generic [ref=e148]: Evidence + - listitem [ref=e149]: + - link "Risk exceptions" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/finding-exceptions + - img [ref=e151] + - generic [ref=e153]: Risk exceptions + - listitem [ref=e154]: + - generic [ref=e155] [cursor=pointer]: + - generic [ref=e156]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e157]: + - img [ref=e158] + - list [ref=e160]: + - listitem [ref=e161]: + - link "Backup Schedules" [ref=e162] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-schedules + - img [ref=e163] + - generic [ref=e165]: Backup Schedules + - listitem [ref=e166]: + - link "Backup Sets" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - img [ref=e168] + - generic [ref=e170]: Backup Sets + - listitem [ref=e171]: + - link "Restore Runs" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/restore-runs + - img [ref=e173] + - generic [ref=e175]: Restore Runs + - listitem [ref=e176]: + - generic [ref=e177] [cursor=pointer]: + - generic [ref=e178]: Directory + - button "Directory" [expanded] [ref=e179]: + - img [ref=e180] + - list [ref=e182]: + - listitem [ref=e183]: + - link "Groups" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/entra-groups + - img [ref=e185] + - generic [ref=e187]: Groups + - listitem [ref=e188]: + - generic [ref=e189] [cursor=pointer]: + - generic [ref=e190]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e191]: + - img [ref=e192] + - list [ref=e194]: + - listitem [ref=e195]: + - link "Finding exceptions" [ref=e196] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=51 + - img [ref=e197] + - generic [ref=e199]: Finding exceptions + - listitem [ref=e200]: + - link "Reviews" [ref=e201] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=51 + - img [ref=e202] + - generic [ref=e204]: Reviews + - listitem [ref=e205]: + - link "Governance inbox" [ref=e206] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=51 + - img [ref=e207] + - generic [ref=e209]: Governance inbox + - listitem [ref=e210]: + - link "Decision register" [ref=e211] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=51 + - img [ref=e212] + - generic [ref=e214]: Decision register + - listitem [ref=e215]: + - link "Operations" [ref=e216] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51 + - img [ref=e217] + - generic [ref=e219]: Operations + - listitem [ref=e220]: + - link "Alerts" [ref=e221] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=51 + - img [ref=e222] + - generic [ref=e224]: Alerts + - listitem [ref=e225]: + - link "Evidence" [ref=e226] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=51 + - img [ref=e227] + - generic [ref=e229]: Evidence + - listitem [ref=e230]: + - link "Audit Log" [ref=e231] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=51 + - img [ref=e232] + - generic [ref=e234]: Audit Log + - listitem [ref=e235]: + - link "Customer reviews" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=51 + - img [ref=e237] + - generic [ref=e239]: Customer reviews + - listitem [ref=e240]: + - generic [ref=e241] [cursor=pointer]: + - generic [ref=e242]: Workspace admin + - button "Workspace admin" [expanded] [ref=e243]: + - img [ref=e244] + - list [ref=e246]: + - listitem [ref=e247]: + - link "Manage workspaces" [ref=e248] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e249] + - generic [ref=e251]: Manage workspaces + - listitem [ref=e252]: + - link "Integrations" [ref=e253] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=51 + - img [ref=e254] + - generic [ref=e256]: Integrations + - listitem [ref=e257]: + - link "Settings" [ref=e258] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e259] + - generic [ref=e262]: Settings + - main [ref=e264]: + - generic [ref=e265]: + - generic [ref=e269]: + - generic [ref=e270]: + - generic [ref=e271]: + - img [ref=e273] + - generic [ref=e275]: + - paragraph [ref=e276]: Operation updates + - paragraph [ref=e277]: Recent operation updates that may need review. + - generic [ref=e278]: + - link "View operation" [ref=e279] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations/65 + - link "Show all operations" [ref=e280] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51 + - button "Acknowledge" [ref=e281] [cursor=pointer] + - generic [ref=e285]: + - generic [ref=e286]: + - heading "Review composition" [level=4] [ref=e287] + - generic [ref=e288]: Execution failed + - generic [ref=e289]: Automatically reconciled + - paragraph [ref=e290]: Completed · 14 hours ago + - paragraph [ref=e291]: "Next step: Resolve the review blockers before publication." + - generic [ref=e292]: + - generic [ref=e293]: + - generic [ref=e294]: + - heading "Spec 352 Audit Provider Blocker Blocked" [level=1] [ref=e295]: + - generic [ref=e296]: + - generic [ref=e297]: Spec 352 Audit Provider Blocker + - generic [ref=e298]: Blocked + - paragraph [ref=e299]: Environment governance overview + - button "More" [ref=e304] [cursor=pointer]: + - img [ref=e305] + - generic [ref=e308]: + - generic [ref=e314]: + - generic [ref=e315]: + - img [ref=e316] + - 'generic "Workspace: Spec 352 Guidance Browser Audit" [ref=e318]' + - generic [ref=e319]: + - img [ref=e320] + - generic [ref=e325]: Microsoft environment + - generic [ref=e326]: + - img [ref=e327] + - generic [ref=e329]: "Latest activity: 14 hours ago" + - generic [ref=e334]: + - generic [ref=e342]: + - link "High severity findings 0 No active pressure" [ref=e345] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/findings?tab=needs_action&high_severity=1 + - generic [ref=e346]: + - generic [ref=e348]: High severity findings + - generic [ref=e349]: "0" + - generic [ref=e350]: + - generic [ref=e351]: No active pressure + - img [ref=e352] + - link "Overdue findings 0 None overdue" [ref=e356] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/findings?tab=overdue + - generic [ref=e357]: + - generic [ref=e359]: Overdue findings + - generic [ref=e360]: "0" + - generic [ref=e361]: + - generic [ref=e362]: None overdue + - img [ref=e363] + - link "Missing permissions 1 1 app missing" [ref=e367] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - generic [ref=e368]: + - generic [ref=e370]: Missing permissions + - generic [ref=e371]: "1" + - generic [ref=e372]: + - generic [ref=e373]: 1 app missing + - img [ref=e374] + - link "Operations needing attention 1 1 operation needs follow-up" [ref=e378] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic [ref=e379]: + - generic [ref=e381]: Operations needing attention + - generic [ref=e382]: "1" + - generic [ref=e383]: + - generic [ref=e384]: 1 operation needs follow-up + - img [ref=e385] + - generic [ref=e389]: + - generic [ref=e390]: + - generic [ref=e394]: + - generic [ref=e395]: + - generic [ref=e396]: + - heading "Is this environment ready, blocked, stale, or requiring review?" [level=2] [ref=e397] + - generic [ref=e398]: Blocked + - paragraph [ref=e400]: Provider readiness blocks evidence refresh + - generic [ref=e401]: + - generic [ref=e402]: + - term [ref=e403]: Status + - definition [ref=e404]: Blocked + - generic [ref=e405]: + - term [ref=e406]: Reason + - definition [ref=e407]: 1 application permission(s) are still missing. + - generic [ref=e408]: + - term [ref=e409]: Why this matters + - definition [ref=e410]: Provider-backed inventory, verification, and reporting flows stay blocked until consent is restored. + - generic [ref=e411]: + - generic [ref=e412]: + - generic [ref=e413]: Recommended next action + - generic [ref=e414]: Review permissions + - link "Review permissions" [ref=e415] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - generic [ref=e416]: + - heading "Readiness dimensions" [level=2] [ref=e419] + - generic [ref=e422]: + - generic [ref=e424]: + - generic [ref=e426]: Baseline compare + - generic [ref=e428]: Baseline missing + - paragraph [ref=e429]: This environment has no baseline assignment. A workspace manager can assign a baseline profile to this environment. + - generic [ref=e431]: + - generic [ref=e433]: Evidence coverage + - generic [ref=e435]: Not collected yet + - paragraph [ref=e436]: Latest evidence snapshot generated 14 hours ago. + - generic [ref=e438]: + - generic [ref=e440]: Review freshness + - generic [ref=e442]: Draft + - paragraph [ref=e443]: Latest review updated . + - generic [ref=e445]: + - generic [ref=e447]: Provider permissions + - generic [ref=e449]: Blocked + - paragraph [ref=e450]: 1 application permission(s) are still missing. + - generic [ref=e452]: + - generic [ref=e454]: Backup posture + - generic [ref=e456]: Absent + - paragraph [ref=e457]: Create or finish a backup set before relying on restore input. + - generic [ref=e459]: + - generic [ref=e461]: Current review + - generic [ref=e463]: Draft + - paragraph [ref=e464]: Latest review updated . + - generic [ref=e466]: + - generic [ref=e468]: Risk exceptions + - generic [ref=e470]: Calm + - paragraph [ref=e471]: No risk exceptions currently need attention. + - generic [ref=e473]: + - generic [ref=e475]: Provider Health + - generic [ref=e477]: Healthy + - paragraph [ref=e478]: 1 application permission(s) are still missing. + - generic [ref=e480]: + - generic [ref=e482]: Customer-safe output + - generic [ref=e484]: Ready + - paragraph [ref=e485]: Latest review pack updated 15 hours ago. + - generic [ref=e487]: + - generic [ref=e489]: Operation proof + - generic [ref=e491]: "1" + - paragraph [ref=e492]: Operations requiring attention must be reviewed before the environment is treated as calm. + - generic [ref=e493]: + - generic [ref=e495]: + - heading "Additional follow-ups" [level=2] [ref=e496] + - paragraph [ref=e497]: These follow-ups stay secondary to the dominant guidance above. + - generic [ref=e500]: + - generic [ref=e501]: + - generic [ref=e502]: + - generic [ref=e503]: + - img [ref=e504] + - heading "Review operations requiring attention" [level=3] [ref=e506] + - paragraph [ref=e507]: "Reason: One or more operations finished with an outcome that needs follow-up." + - link "Review operations" [ref=e508] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic [ref=e509]: + - generic [ref=e510]: + - generic [ref=e511]: + - img [ref=e512] + - heading "Review recovery posture" [level=3] [ref=e514] + - paragraph [ref=e515]: "Reason: Create or finish a backup set before relying on restore input." + - link "Open backup posture" [ref=e516] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - generic [ref=e517]: + - generic [ref=e519]: + - heading "Supporting signals" [level=2] [ref=e520] + - paragraph [ref=e521]: Additional readiness signals used to explain the current recommendation. + - table [ref=e526]: + - rowgroup [ref=e527]: + - row "Signal State Action" [ref=e528]: + - columnheader "Signal" [ref=e529] + - columnheader "State" [ref=e530] + - columnheader "Action" [ref=e531] + - rowgroup [ref=e532]: + - row "Baseline assignment Missing Open Baseline Compare" [ref=e533]: + - rowheader "Baseline assignment" [ref=e534] + - cell "Missing" [ref=e535]: + - generic [ref=e536]: Missing + - cell "Open Baseline Compare" [ref=e537]: + - link "Open Baseline Compare" [ref=e538] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/baseline-compare + - row "Evidence snapshot Available Open evidence" [ref=e539]: + - rowheader "Evidence snapshot" [ref=e540] + - cell "Available" [ref=e541]: + - generic [ref=e542]: Available + - cell "Open evidence" [ref=e543]: + - link "Open evidence" [ref=e544] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/evidence/21 + - row "Review freshness Ready Open reviews" [ref=e545]: + - rowheader "Review freshness" [ref=e546] + - cell "Ready" [ref=e547]: + - generic [ref=e548]: Ready + - cell "Open reviews" [ref=e549]: + - link "Open reviews" [ref=e550] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/environment-reviews/29 + - row "Provider permissions Missing Open required permissions" [ref=e551]: + - rowheader "Provider permissions" [ref=e552] + - cell "Missing" [ref=e553]: + - generic [ref=e554]: Missing + - cell "Open required permissions" [ref=e555]: + - link "Open required permissions" [ref=e556] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - row "Backup posture Absent Open backup posture" [ref=e557]: + - rowheader "Backup posture" [ref=e558] + - cell "Absent" [ref=e559]: + - generic [ref=e560]: Absent + - cell "Open backup posture" [ref=e561]: + - link "Open backup posture" [ref=e562] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - row "Operations follow-up 1 requires review Open operations hub" [ref=e563]: + - rowheader "Operations follow-up" [ref=e564] + - cell "1 requires review" [ref=e565]: + - generic [ref=e566]: 1 requires review + - cell "Open operations hub" [ref=e567]: + - link "Open operations hub" [ref=e568] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - group [ref=e572]: + - generic "Diagnostics - Collapsed" [ref=e573] [cursor=pointer] + - generic [ref=e575]: + - heading "Readiness proof" [level=2] [ref=e578] + - generic [ref=e581]: + - generic [ref=e582]: + - generic [ref=e583]: + - generic [ref=e585]: Baseline compare + - generic [ref=e587]: Baseline missing + - paragraph [ref=e588]: This environment has no baseline assignment. A workspace manager can assign a baseline profile to this environment. + - link "Open Baseline Compare" [ref=e590] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/baseline-compare + - generic [ref=e591]: + - generic [ref=e592]: + - generic [ref=e594]: Evidence coverage + - generic [ref=e596]: Not collected yet + - paragraph [ref=e597]: Latest evidence snapshot generated 14 hours ago. + - link "Open evidence" [ref=e599] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/evidence/21 + - generic [ref=e600]: + - generic [ref=e601]: + - generic [ref=e603]: Review freshness + - generic [ref=e605]: Draft + - paragraph [ref=e606]: Latest review updated . + - link "Continue review" [ref=e608] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/environment-reviews/29 + - generic [ref=e609]: + - generic [ref=e610]: + - generic [ref=e612]: Provider permissions + - generic [ref=e614]: Blocked + - paragraph [ref=e615]: 1 application permission(s) are still missing. + - link "Open required permissions" [ref=e617] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - generic [ref=e618]: + - generic [ref=e619]: + - generic [ref=e621]: Backup posture + - generic [ref=e623]: Absent + - paragraph [ref=e624]: Create or finish a backup set before relying on restore input. + - link "Open backup posture" [ref=e626] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - generic [ref=e627]: + - generic [ref=e628]: + - generic [ref=e630]: Review pack + - generic [ref=e632]: Ready + - paragraph [ref=e633]: Latest review pack updated 15 hours ago. + - link "Open review pack" [ref=e635] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/review-packs/19 + - generic [ref=e636]: + - generic [ref=e637]: + - generic [ref=e639]: Operation proof + - generic [ref=e641]: "1" + - paragraph [ref=e642]: Latest operation proof is available through the operations detail path. + - link "Open operations hub" [ref=e644] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-45-20-642Z.yml b/.playwright-mcp/page-2026-06-05T02-45-20-642Z.yml new file mode 100644 index 00000000..9108d01e --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-45-20-642Z.yml @@ -0,0 +1,417 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 352 Audit Provider Blocker + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - button "Notifications" [ref=e42] [cursor=pointer]: + - img [ref=e43] + - generic [ref=e46]: "6" + - button "User menu" [ref=e49] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e50] + - generic [ref=e51]: + - complementary [ref=e52]: + - navigation [ref=e55]: + - 'link "Environment: Spec 352 Audit Provider Blocker" [ref=e56] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e58] + - generic [ref=e60]: + - generic [ref=e61]: Environment + - generic "Spec 352 Audit Provider Blocker" [ref=e62] + - generic [ref=e63]: "Workspace: Spec 352 Guidance Browser Audit" + - img [ref=e64] + - list [ref=e66]: + - listitem [ref=e67]: + - list [ref=e68]: + - listitem [ref=e69]: + - link "Overview" [ref=e70] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - img [ref=e71] + - generic [ref=e73]: Overview + - listitem [ref=e74]: + - generic [ref=e75] [cursor=pointer]: + - generic [ref=e76]: Inventory + - button "Inventory" [expanded] [ref=e77]: + - img [ref=e78] + - list [ref=e80]: + - listitem [ref=e81]: + - link "Items" [ref=e82] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory + - img [ref=e83] + - generic [ref=e85]: Items + - listitem [ref=e86]: + - link "Policies" [ref=e87] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policies + - img [ref=e88] + - generic [ref=e90]: Policies + - listitem [ref=e91]: + - link "Policy Versions" [ref=e92] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/policy-versions + - img [ref=e93] + - generic [ref=e95]: Policy Versions + - listitem [ref=e96]: + - link "Coverage" [ref=e97] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/inventory/inventory-coverage + - img [ref=e98] + - generic [ref=e100]: Coverage + - listitem [ref=e101]: + - generic [ref=e102] [cursor=pointer]: + - generic [ref=e103]: Reporting + - button "Reporting" [expanded] [ref=e104]: + - img [ref=e105] + - list [ref=e107]: + - listitem [ref=e108]: + - link "Reviews" [ref=e109] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/environment-reviews + - img [ref=e110] + - generic [ref=e112]: Reviews + - listitem [ref=e113]: + - link "Stored reports" [ref=e114] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/stored-reports + - img [ref=e115] + - generic [ref=e117]: Stored reports + - listitem [ref=e118]: + - link "Review Packs" [ref=e119] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/review-packs + - img [ref=e120] + - generic [ref=e122]: Review Packs + - listitem [ref=e123]: + - generic [ref=e124] [cursor=pointer]: + - generic [ref=e125]: Governance + - button "Governance" [expanded] [ref=e126]: + - img [ref=e127] + - list [ref=e129]: + - listitem [ref=e130]: + - link "Findings" [ref=e131] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/findings + - img [ref=e132] + - generic [ref=e134]: Findings + - listitem [ref=e135]: + - link "Baselines" [ref=e136] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e137] + - generic [ref=e139]: Baselines + - listitem [ref=e140]: + - link "Baseline Snapshots" [ref=e141] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e142] + - generic [ref=e145]: Baseline Snapshots + - listitem [ref=e146]: + - link "Baseline Compare" [ref=e147] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/baseline-compare + - img [ref=e148] + - generic [ref=e150]: Baseline Compare + - listitem [ref=e151]: + - link "Evidence" [ref=e152] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/evidence + - img [ref=e153] + - generic [ref=e155]: Evidence + - listitem [ref=e156]: + - link "Risk exceptions" [ref=e157] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/finding-exceptions + - img [ref=e158] + - generic [ref=e160]: Risk exceptions + - listitem [ref=e161]: + - generic [ref=e162] [cursor=pointer]: + - generic [ref=e163]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e164]: + - img [ref=e165] + - list [ref=e167]: + - listitem [ref=e168]: + - link "Backup Schedules" [ref=e169] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-schedules + - img [ref=e170] + - generic [ref=e172]: Backup Schedules + - listitem [ref=e173]: + - link "Backup Sets" [ref=e174] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/backup-sets + - img [ref=e175] + - generic [ref=e177]: Backup Sets + - listitem [ref=e178]: + - link "Restore Runs" [ref=e179] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/restore-runs + - img [ref=e180] + - generic [ref=e182]: Restore Runs + - listitem [ref=e183]: + - generic [ref=e184] [cursor=pointer]: + - generic [ref=e185]: Directory + - button "Directory" [expanded] [ref=e186]: + - img [ref=e187] + - list [ref=e189]: + - listitem [ref=e190]: + - link "Groups" [ref=e191] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-provider-blocker/entra-groups + - img [ref=e192] + - generic [ref=e194]: Groups + - listitem [ref=e195]: + - generic [ref=e196] [cursor=pointer]: + - generic [ref=e197]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e198]: + - img [ref=e199] + - list [ref=e201]: + - listitem [ref=e202]: + - link "Finding exceptions" [ref=e203] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=51 + - img [ref=e204] + - generic [ref=e206]: Finding exceptions + - listitem [ref=e207]: + - link "Reviews" [ref=e208] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=51 + - img [ref=e209] + - generic [ref=e211]: Reviews + - listitem [ref=e212]: + - link "Governance inbox" [ref=e213] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=51 + - img [ref=e214] + - generic [ref=e216]: Governance inbox + - listitem [ref=e217]: + - link "Decision register" [ref=e218] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=51 + - img [ref=e219] + - generic [ref=e221]: Decision register + - listitem [ref=e222]: + - link "Operations" [ref=e223] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=51 + - img [ref=e224] + - generic [ref=e226]: Operations + - listitem [ref=e227]: + - link "Alerts" [ref=e228] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=51 + - img [ref=e229] + - generic [ref=e231]: Alerts + - listitem [ref=e232]: + - link "Evidence" [ref=e233] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=51 + - img [ref=e234] + - generic [ref=e236]: Evidence + - listitem [ref=e237]: + - link "Audit Log" [ref=e238] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=51 + - img [ref=e239] + - generic [ref=e241]: Audit Log + - listitem [ref=e242]: + - link "Customer reviews" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=51 + - img [ref=e244] + - generic [ref=e246]: Customer reviews + - listitem [ref=e247]: + - generic [ref=e248] [cursor=pointer]: + - generic [ref=e249]: Workspace admin + - button "Workspace admin" [expanded] [ref=e250]: + - img [ref=e251] + - list [ref=e253]: + - listitem [ref=e254]: + - link "Manage workspaces" [ref=e255] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e256] + - generic [ref=e258]: Manage workspaces + - listitem [ref=e259]: + - link "Integrations" [ref=e260] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=51 + - img [ref=e261] + - generic [ref=e263]: Integrations + - listitem [ref=e264]: + - link "Settings" [ref=e265] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e266] + - generic [ref=e269]: Settings + - main [ref=e271]: + - generic [ref=e273]: + - generic [ref=e275]: + - heading "Spec 352 Audit Provider Blocker" [level=1] [ref=e276] + - paragraph [ref=e277]: Required permissions + - generic [ref=e280]: + - generic [ref=e281]: + - heading "Summary" [level=2] [ref=e284] + - generic [ref=e287]: + - generic [ref=e288]: + - generic [ref=e289]: + - generic [ref=e290]: + - img [ref=e291] + - generic [ref=e294]: Blocked + - generic [ref=e295]: Stored data · refreshed 14 hours ago + - generic [ref=e296]: + - generic [ref=e297]: + - generic [ref=e298]: Missing (app) + - generic [ref=e299]: "1" + - generic [ref=e300]: + - generic [ref=e301]: Missing (delegated) + - generic [ref=e302]: "0" + - generic [ref=e303]: + - generic [ref=e304]: Present + - generic [ref=e305]: "0" + - generic [ref=e306]: + - generic [ref=e307]: Errors + - generic [ref=e308]: "0" + - generic [ref=e309]: + - generic [ref=e311]: + - generic [ref=e312]: + - generic [ref=e315]: Blocked + - heading "Required permissions missing" [level=2] [ref=e316] + - generic [ref=e317]: + - generic [ref=e318]: Recommended next action + - link "Open admin consent" [ref=e319] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - generic [ref=e320]: + - generic [ref=e321]: Secondary + - generic [ref=e322]: + - link "Open provider connection" [ref=e323] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - link "Open environment dashboard" [ref=e324] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e325]: + - generic [ref=e326]: Reason + - paragraph [ref=e327]: Required application permissions are missing. + - generic [ref=e328]: + - generic [ref=e329]: Impact + - paragraph [ref=e330]: TenantPilot cannot refresh evidence, permission posture, inventory, or review outputs reliably until the missing application permissions are granted. + - group [ref=e331]: + - generic "Details" [ref=e332] [cursor=pointer] + - generic [ref=e333]: + - generic [ref=e334]: + - generic [ref=e335]: + - generic [ref=e336]: Provider capabilities + - generic [ref=e337]: Capability-first view of the provider prerequisites used by operation start gates. + - generic [ref=e338]: + - img [ref=e339] + - generic [ref=e342]: "Provider connection check: Missing" + - generic [ref=e343]: + - generic [ref=e344]: + - generic [ref=e345]: + - generic [ref=e346]: + - generic [ref=e347]: Provider connection check + - generic [ref=e348]: Provider connection check capability is missing required provider permissions. + - generic [ref=e349]: + - img [ref=e350] + - generic [ref=e353]: Missing + - generic [ref=e354]: 1 missing, 0 error(s) + - generic [ref=e355]: + - generic [ref=e356]: + - generic [ref=e357]: + - generic [ref=e358]: Inventory read + - generic [ref=e359]: Inventory read capability is missing required provider permissions. + - generic [ref=e360]: + - img [ref=e361] + - generic [ref=e364]: Missing + - generic [ref=e365]: 1 missing, 0 error(s) + - generic [ref=e366]: + - generic [ref=e367]: + - generic [ref=e368]: + - generic [ref=e369]: Configuration read + - generic [ref=e370]: Configuration read capability is missing required provider permissions. + - generic [ref=e371]: + - img [ref=e372] + - generic [ref=e375]: Missing + - generic [ref=e376]: 1 missing, 0 error(s) + - generic [ref=e377]: + - generic [ref=e378]: + - generic [ref=e379]: + - generic [ref=e380]: Restore execute + - generic [ref=e381]: Restore execute capability is missing required provider permissions. + - generic [ref=e382]: + - img [ref=e383] + - generic [ref=e386]: Missing + - generic [ref=e387]: 1 missing, 0 error(s) + - generic [ref=e388]: + - generic [ref=e389]: + - generic [ref=e390]: + - generic [ref=e391]: Directory groups read + - generic [ref=e392]: Directory groups read capability is supported by stored permission evidence. + - generic [ref=e393]: + - img [ref=e394] + - generic [ref=e397]: Supported + - generic [ref=e398]: 0 missing, 0 error(s) + - generic [ref=e399]: + - generic [ref=e400]: + - generic [ref=e401]: + - generic [ref=e402]: Directory role definitions read + - generic [ref=e403]: Directory role definitions read capability is missing required provider permissions. + - generic [ref=e404]: + - img [ref=e405] + - generic [ref=e408]: Missing + - generic [ref=e409]: 1 missing, 0 error(s) + - generic [ref=e410]: + - generic [ref=e411]: Permission handoff + - generic [ref=e412]: + - generic [ref=e413]: Who can fix this? Global Administrator / Privileged Role Administrator. + - generic [ref=e414]: + - text: "Primary next step:" + - link "Open admin consent" [ref=e415] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - generic [ref=e416]: + - text: "After granting consent:" + - button "Run provider verification" [ref=e417] [cursor=pointer] + - generic [ref=e418]: + - button "Copy missing application permissions" [ref=e419] [cursor=pointer] + - button "Copy missing delegated permissions" [disabled] + - generic [ref=e420]: + - generic [ref=e422]: + - generic [ref=e423]: + - generic [ref=e424]: backup + - generic [ref=e425]: 1 missing + - generic [ref=e428]: Blocked + - generic [ref=e430]: + - generic [ref=e431]: + - generic [ref=e432]: drift + - generic [ref=e433]: 1 missing + - generic [ref=e436]: Blocked + - generic [ref=e438]: + - generic [ref=e439]: + - generic [ref=e440]: policy-sync + - generic [ref=e441]: 1 missing + - generic [ref=e444]: Blocked + - generic [ref=e446]: + - generic [ref=e447]: + - generic [ref=e448]: restore + - generic [ref=e449]: 1 missing + - generic [ref=e452]: Blocked + - generic [ref=e454]: + - generic [ref=e455]: + - generic [ref=e456]: settings-normalization + - generic [ref=e457]: 1 missing + - generic [ref=e460]: Blocked + - generic [ref=e461]: + - heading "Issues" [level=2] [ref=e464] + - generic [ref=e468]: + - generic [ref=e469]: + - generic [ref=e472]: Blocker + - generic [ref=e473]: Missing application permissions + - generic [ref=e474]: 1 required application permission(s) are missing. + - generic [ref=e475]: + - link "Open admin consent" [ref=e476] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - link "Manage provider connection" [ref=e477] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=51 + - link "Open environment dashboard" [ref=e478] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e479]: + - heading "Passed" [level=2] [ref=e482] + - generic [ref=e485]: + - generic [ref=e486]: 0 permission(s) currently pass. + - generic [ref=e487]: Out of 1 required permissions, 0 are currently granted. + - generic [ref=e488]: + - heading "Technical details" [level=2] [ref=e491] + - group [ref=e494]: + - generic "Expand technical details" [ref=e495] [cursor=pointer] + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-45-32-932Z.yml b/.playwright-mcp/page-2026-06-05T02-45-32-932Z.yml new file mode 100644 index 00000000..9536e07e --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-45-32-932Z.yml @@ -0,0 +1,517 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 352 Audit Review Output + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Environment: Spec 352 Audit Review Output" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Environment + - generic "Spec 352 Audit Review Output" [ref=e55] + - generic [ref=e56]: "Workspace: Spec 352 Guidance Browser Audit" + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Inventory + - button "Inventory" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Items" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/inventory + - img [ref=e76] + - generic [ref=e78]: Items + - listitem [ref=e79]: + - link "Policies" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/policies + - img [ref=e81] + - generic [ref=e83]: Policies + - listitem [ref=e84]: + - link "Policy Versions" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/policy-versions + - img [ref=e86] + - generic [ref=e88]: Policy Versions + - listitem [ref=e89]: + - link "Coverage" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/inventory/inventory-coverage + - img [ref=e91] + - generic [ref=e93]: Coverage + - listitem [ref=e94]: + - generic [ref=e95] [cursor=pointer]: + - generic [ref=e96]: Reporting + - button "Reporting" [expanded] [ref=e97]: + - img [ref=e98] + - list [ref=e100]: + - listitem [ref=e101]: + - link "Reviews" [ref=e102] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews + - img [ref=e103] + - generic [ref=e105]: Reviews + - listitem [ref=e106]: + - link "Stored reports" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/stored-reports + - img [ref=e108] + - generic [ref=e110]: Stored reports + - listitem [ref=e111]: + - link "Review Packs" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/review-packs + - img [ref=e113] + - generic [ref=e115]: Review Packs + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Governance + - button "Governance" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Findings" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/findings + - img [ref=e125] + - generic [ref=e127]: Findings + - listitem [ref=e128]: + - link "Baselines" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e130] + - generic [ref=e132]: Baselines + - listitem [ref=e133]: + - link "Baseline Snapshots" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e135] + - generic [ref=e138]: Baseline Snapshots + - listitem [ref=e139]: + - link "Baseline Compare" [ref=e140] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/baseline-compare + - img [ref=e141] + - generic [ref=e143]: Baseline Compare + - listitem [ref=e144]: + - link "Evidence" [ref=e145] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence + - img [ref=e146] + - generic [ref=e148]: Evidence + - listitem [ref=e149]: + - link "Risk exceptions" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/finding-exceptions + - img [ref=e151] + - generic [ref=e153]: Risk exceptions + - listitem [ref=e154]: + - generic [ref=e155] [cursor=pointer]: + - generic [ref=e156]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e157]: + - img [ref=e158] + - list [ref=e160]: + - listitem [ref=e161]: + - link "Backup Schedules" [ref=e162] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/backup-schedules + - img [ref=e163] + - generic [ref=e165]: Backup Schedules + - listitem [ref=e166]: + - link "Backup Sets" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/backup-sets + - img [ref=e168] + - generic [ref=e170]: Backup Sets + - listitem [ref=e171]: + - link "Restore Runs" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/restore-runs + - img [ref=e173] + - generic [ref=e175]: Restore Runs + - listitem [ref=e176]: + - generic [ref=e177] [cursor=pointer]: + - generic [ref=e178]: Directory + - button "Directory" [expanded] [ref=e179]: + - img [ref=e180] + - list [ref=e182]: + - listitem [ref=e183]: + - link "Groups" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/entra-groups + - img [ref=e185] + - generic [ref=e187]: Groups + - listitem [ref=e188]: + - generic [ref=e189] [cursor=pointer]: + - generic [ref=e190]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e191]: + - img [ref=e192] + - list [ref=e194]: + - listitem [ref=e195]: + - link "Finding exceptions" [ref=e196] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=52 + - img [ref=e197] + - generic [ref=e199]: Finding exceptions + - listitem [ref=e200]: + - link "Reviews" [ref=e201] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=52 + - img [ref=e202] + - generic [ref=e204]: Reviews + - listitem [ref=e205]: + - link "Governance inbox" [ref=e206] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=52 + - img [ref=e207] + - generic [ref=e209]: Governance inbox + - listitem [ref=e210]: + - link "Decision register" [ref=e211] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=52 + - img [ref=e212] + - generic [ref=e214]: Decision register + - listitem [ref=e215]: + - link "Operations" [ref=e216] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52 + - img [ref=e217] + - generic [ref=e219]: Operations + - listitem [ref=e220]: + - link "Alerts" [ref=e221] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=52 + - img [ref=e222] + - generic [ref=e224]: Alerts + - listitem [ref=e225]: + - link "Evidence" [ref=e226] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=52 + - img [ref=e227] + - generic [ref=e229]: Evidence + - listitem [ref=e230]: + - link "Audit Log" [ref=e231] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=52 + - img [ref=e232] + - generic [ref=e234]: Audit Log + - listitem [ref=e235]: + - link "Customer reviews" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=52 + - img [ref=e237] + - generic [ref=e239]: Customer reviews + - listitem [ref=e240]: + - generic [ref=e241] [cursor=pointer]: + - generic [ref=e242]: Workspace admin + - button "Workspace admin" [expanded] [ref=e243]: + - img [ref=e244] + - list [ref=e246]: + - listitem [ref=e247]: + - link "Manage workspaces" [ref=e248] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e249] + - generic [ref=e251]: Manage workspaces + - listitem [ref=e252]: + - link "Integrations" [ref=e253] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=52 + - img [ref=e254] + - generic [ref=e256]: Integrations + - listitem [ref=e257]: + - link "Settings" [ref=e258] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e259] + - generic [ref=e262]: Settings + - main [ref=e264]: + - generic [ref=e265]: + - generic [ref=e269]: + - generic [ref=e270]: + - generic [ref=e271]: + - img [ref=e273] + - generic [ref=e275]: + - paragraph [ref=e276]: Operation updates + - paragraph [ref=e277]: Recent operation updates that may need review. + - generic [ref=e278]: + - link "View operation" [ref=e279] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations/67 + - link "Show all operations" [ref=e280] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52 + - button "Acknowledge" [ref=e281] [cursor=pointer] + - generic [ref=e285]: + - generic [ref=e286]: + - heading "Review composition" [level=4] [ref=e287] + - generic [ref=e288]: Execution failed + - generic [ref=e289]: Automatically reconciled + - paragraph [ref=e290]: Completed · 14 hours ago + - paragraph [ref=e291]: "Next step: Resolve the review blockers before publication." + - generic [ref=e292]: + - generic [ref=e293]: + - generic [ref=e294]: + - heading "Spec 352 Audit Review Output Blocked" [level=1] [ref=e295]: + - generic [ref=e296]: + - generic [ref=e297]: Spec 352 Audit Review Output + - generic [ref=e298]: Blocked + - paragraph [ref=e299]: Environment governance overview + - button "More" [ref=e304] [cursor=pointer]: + - img [ref=e305] + - generic [ref=e308]: + - generic [ref=e314]: + - generic [ref=e315]: + - img [ref=e316] + - 'generic "Workspace: Spec 352 Guidance Browser Audit" [ref=e318]' + - generic [ref=e319]: + - img [ref=e320] + - generic [ref=e325]: Microsoft environment + - generic [ref=e326]: + - img [ref=e327] + - generic [ref=e329]: "Latest activity: 14 hours ago" + - generic [ref=e334]: + - generic [ref=e342]: + - link "High severity findings 0 No active pressure" [ref=e345] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/findings?tab=needs_action&high_severity=1 + - generic [ref=e346]: + - generic [ref=e348]: High severity findings + - generic [ref=e349]: "0" + - generic [ref=e350]: + - generic [ref=e351]: No active pressure + - img [ref=e352] + - link "Overdue findings 0 None overdue" [ref=e356] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/findings?tab=overdue + - generic [ref=e357]: + - generic [ref=e359]: Overdue findings + - generic [ref=e360]: "0" + - generic [ref=e361]: + - generic [ref=e362]: None overdue + - img [ref=e363] + - link "Missing permissions 0 Permission set complete" [ref=e367] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/required-permissions + - generic [ref=e368]: + - generic [ref=e370]: Missing permissions + - generic [ref=e371]: "0" + - generic [ref=e372]: + - generic [ref=e373]: Permission set complete + - img [ref=e374] + - link "Operations needing attention 1 1 operation needs follow-up" [ref=e378] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic [ref=e379]: + - generic [ref=e381]: Operations needing attention + - generic [ref=e382]: "1" + - generic [ref=e383]: + - generic [ref=e384]: 1 operation needs follow-up + - img [ref=e385] + - generic [ref=e389]: + - generic [ref=e390]: + - generic [ref=e394]: + - generic [ref=e395]: + - generic [ref=e396]: + - heading "Is this environment ready, blocked, stale, or requiring review?" [level=2] [ref=e397] + - generic [ref=e398]: Blocked + - paragraph [ref=e400]: Draft review exists + - generic [ref=e401]: + - generic [ref=e402]: + - term [ref=e403]: Status + - definition [ref=e404]: Blocked + - generic [ref=e405]: + - term [ref=e406]: Reason + - definition [ref=e407]: A successor draft review already exists for this released output and is ready for publication. Open the draft review to publish the next governed outcome. + - generic [ref=e408]: + - term [ref=e409]: Why this matters + - definition [ref=e410]: The next review cycle is already in progress. Open the draft review and publish it when you are ready to replace the prior released review. + - generic [ref=e411]: + - generic [ref=e412]: + - generic [ref=e413]: Recommended next action + - generic [ref=e414]: Open draft review + - link "Open draft review" [ref=e415] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/31 + - generic [ref=e417]: + - link "Inspect review blockers" [ref=e418] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=52 + - link "Open evidence basis" [ref=e419] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence/22 + - link "Open operation proof" [ref=e420] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations/67 + - generic [ref=e421]: + - heading "Readiness dimensions" [level=2] [ref=e424] + - generic [ref=e427]: + - generic [ref=e429]: + - generic [ref=e431]: Baseline compare + - generic [ref=e433]: Baseline missing + - paragraph [ref=e434]: This environment has no baseline assignment. A workspace manager can assign a baseline profile to this environment. + - generic [ref=e436]: + - generic [ref=e438]: Evidence coverage + - generic [ref=e440]: Not collected yet + - paragraph [ref=e441]: Latest evidence snapshot generated 14 hours ago. + - generic [ref=e443]: + - generic [ref=e445]: Review freshness + - generic [ref=e447]: Draft + - paragraph [ref=e448]: Latest review updated . + - generic [ref=e450]: + - generic [ref=e452]: Provider permissions + - generic [ref=e454]: Ready + - paragraph [ref=e455]: Required permissions currently look complete. + - generic [ref=e457]: + - generic [ref=e459]: Backup posture + - generic [ref=e461]: Absent + - paragraph [ref=e462]: Create or finish a backup set before relying on restore input. + - generic [ref=e464]: + - generic [ref=e466]: Current review + - generic [ref=e468]: Draft + - paragraph [ref=e469]: Latest review updated . + - generic [ref=e471]: + - generic [ref=e473]: Risk exceptions + - generic [ref=e475]: Calm + - paragraph [ref=e476]: No risk exceptions currently need attention. + - generic [ref=e478]: + - generic [ref=e480]: Provider Health + - generic [ref=e482]: Healthy + - paragraph [ref=e483]: Required permissions currently look complete. + - generic [ref=e485]: + - generic [ref=e487]: Customer-safe output + - generic [ref=e489]: Ready + - paragraph [ref=e490]: Latest review pack updated 15 hours ago. + - generic [ref=e492]: + - generic [ref=e494]: Operation proof + - generic [ref=e496]: "1" + - paragraph [ref=e497]: Operations requiring attention must be reviewed before the environment is treated as calm. + - generic [ref=e498]: + - generic [ref=e500]: + - heading "Additional follow-ups" [level=2] [ref=e501] + - paragraph [ref=e502]: These follow-ups stay secondary to the dominant guidance above. + - generic [ref=e505]: + - generic [ref=e506]: + - generic [ref=e507]: + - generic [ref=e508]: + - img [ref=e509] + - heading "Review operations requiring attention" [level=3] [ref=e511] + - paragraph [ref=e512]: "Reason: One or more operations finished with an outcome that needs follow-up." + - link "Review operations" [ref=e513] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic [ref=e514]: + - generic [ref=e515]: + - generic [ref=e516]: + - img [ref=e517] + - heading "Review recovery posture" [level=3] [ref=e519] + - paragraph [ref=e520]: "Reason: Create or finish a backup set before relying on restore input." + - link "Open backup posture" [ref=e521] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/backup-sets + - generic [ref=e522]: + - generic [ref=e524]: + - heading "Supporting signals" [level=2] [ref=e525] + - paragraph [ref=e526]: Additional readiness signals used to explain the current recommendation. + - table [ref=e531]: + - rowgroup [ref=e532]: + - row "Signal State Action" [ref=e533]: + - columnheader "Signal" [ref=e534] + - columnheader "State" [ref=e535] + - columnheader "Action" [ref=e536] + - rowgroup [ref=e537]: + - row "Baseline assignment Missing Open Baseline Compare" [ref=e538]: + - rowheader "Baseline assignment" [ref=e539] + - cell "Missing" [ref=e540]: + - generic [ref=e541]: Missing + - cell "Open Baseline Compare" [ref=e542]: + - link "Open Baseline Compare" [ref=e543] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/baseline-compare + - row "Evidence snapshot Available Open evidence" [ref=e544]: + - rowheader "Evidence snapshot" [ref=e545] + - cell "Available" [ref=e546]: + - generic [ref=e547]: Available + - cell "Open evidence" [ref=e548]: + - link "Open evidence" [ref=e549] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence/22 + - row "Review freshness Ready Open reviews" [ref=e550]: + - rowheader "Review freshness" [ref=e551] + - cell "Ready" [ref=e552]: + - generic [ref=e553]: Ready + - cell "Open reviews" [ref=e554]: + - link "Open reviews" [ref=e555] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/31 + - row "Provider permissions Ready Open required permissions" [ref=e556]: + - rowheader "Provider permissions" [ref=e557] + - cell "Ready" [ref=e558]: + - generic [ref=e559]: Ready + - cell "Open required permissions" [ref=e560]: + - link "Open required permissions" [ref=e561] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/required-permissions + - row "Backup posture Absent Open backup posture" [ref=e562]: + - rowheader "Backup posture" [ref=e563] + - cell "Absent" [ref=e564]: + - generic [ref=e565]: Absent + - cell "Open backup posture" [ref=e566]: + - link "Open backup posture" [ref=e567] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/backup-sets + - row "Operations follow-up 1 requires review Open operations hub" [ref=e568]: + - rowheader "Operations follow-up" [ref=e569] + - cell "1 requires review" [ref=e570]: + - generic [ref=e571]: 1 requires review + - cell "Open operations hub" [ref=e572]: + - link "Open operations hub" [ref=e573] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - group [ref=e577]: + - generic "Diagnostics - Collapsed" [ref=e578] [cursor=pointer] + - generic [ref=e580]: + - heading "Readiness proof" [level=2] [ref=e583] + - generic [ref=e586]: + - generic [ref=e587]: + - generic [ref=e588]: + - generic [ref=e590]: Baseline compare + - generic [ref=e592]: Baseline missing + - paragraph [ref=e593]: This environment has no baseline assignment. A workspace manager can assign a baseline profile to this environment. + - link "Open Baseline Compare" [ref=e595] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/baseline-compare + - generic [ref=e596]: + - generic [ref=e597]: + - generic [ref=e599]: Evidence coverage + - generic [ref=e601]: Not collected yet + - paragraph [ref=e602]: Latest evidence snapshot generated 14 hours ago. + - link "Open evidence" [ref=e604] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence/22 + - generic [ref=e605]: + - generic [ref=e606]: + - generic [ref=e608]: Review freshness + - generic [ref=e610]: Draft + - paragraph [ref=e611]: Latest review updated . + - link "Continue review" [ref=e613] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/31 + - generic [ref=e614]: + - generic [ref=e615]: + - generic [ref=e617]: Provider permissions + - generic [ref=e619]: Ready + - paragraph [ref=e620]: Required permissions currently look complete. + - link "Open required permissions" [ref=e622] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-review-output/required-permissions + - generic [ref=e623]: + - generic [ref=e624]: + - generic [ref=e626]: Backup posture + - generic [ref=e628]: Absent + - paragraph [ref=e629]: Create or finish a backup set before relying on restore input. + - link "Open backup posture" [ref=e631] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/backup-sets + - generic [ref=e632]: + - generic [ref=e633]: + - generic [ref=e635]: Review pack + - generic [ref=e637]: Ready + - paragraph [ref=e638]: Latest review pack updated 15 hours ago. + - link "Open review pack" [ref=e640] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/review-packs/20 + - generic [ref=e641]: + - generic [ref=e642]: + - generic [ref=e644]: Operation proof + - generic [ref=e646]: "1" + - paragraph [ref=e647]: Latest operation proof is available through the operations detail path. + - link "Open operations hub" [ref=e649] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=52&activeTab=terminal_follow_up&problemClass=terminal_follow_up + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-46-18-850Z.yml b/.playwright-mcp/page-2026-06-05T02-46-18-850Z.yml new file mode 100644 index 00000000..03709b8d --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-46-18-850Z.yml @@ -0,0 +1,446 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: Spec 352 Guidance Browser Audit" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "Spec 352 Guidance Browser Audit" [ref=e54] + - generic [ref=e55]: 3 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Customer Review Workspace" [level=1] [ref=e161] + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - generic [ref=e169]: + - generic [ref=e171]: + - generic [ref=e172]: + - heading "Customer-safe review packages" [level=2] [ref=e173] + - paragraph [ref=e174]: Review released governance packages, evidence readiness, accepted risks, and handoff status across entitled environments. + - paragraph [ref=e175]: Service delivery summary only. Does not replace formal audit opinion, certification, or legal attestation. + - generic [ref=e177]: + - generic [ref=e178]: "Environment filter:" + - generic [ref=e179]: Spec 352 Audit Review Output + - link "Clear filter" [ref=e180] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - generic [ref=e181]: + - main [ref=e182]: + - generic [ref=e183]: + - generic [ref=e185]: + - generic [ref=e186]: + - generic [ref=e189]: Output not customer-ready + - generic [ref=e192]: Requires review + - generic [ref=e193]: + - generic [ref=e194]: What is the current review pack output state? + - heading "Draft review exists" [level=2] [ref=e195] + - paragraph [ref=e196]: A successor draft review already exists for this released output and is ready for publication. Open the draft review to publish the next governed outcome. + - generic [ref=e197]: + - generic [ref=e198]: + - generic [ref=e199]: Impact + - paragraph [ref=e200]: The next review cycle is already in progress. Open the draft review and publish it when you are ready to replace the prior released review. + - generic [ref=e201]: + - generic [ref=e202]: Latest released review + - generic [ref=e203]: Spec 352 Audit Review Output + - generic [ref=e204]: Published Jun 4, 2026 10:50 + - generic [ref=e205]: + - link "Open draft review" [ref=e207] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/31?source_surface=customer_review_workspace&tenant_filter_id=52 + - img [ref=e208] + - text: Open draft review + - generic [ref=e210]: + - generic [ref=e211]: Supporting actions + - generic [ref=e212]: + - link "Inspect review blockers" [ref=e213] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/30?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=52 + - img [ref=e214] + - text: Inspect review blockers + - link "Download review pack with limitations" [ref=e216] [cursor=pointer]: + - /url: http://localhost/admin/review-packs/20/download?expires=1780631178&interpretation_version=compliance_evidence_mapping.v1&review_id=30&source_surface=customer_review_workspace&tenant_filter_id=52&signature=021216221053583c36e0451992d3cd41f4f13cf5cc584a38cebd24489a471532 + - img [ref=e217] + - text: Download review pack with limitations + - link "Open evidence basis" [ref=e219] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence/22 + - img [ref=e220] + - text: Open evidence basis + - link "Open operation proof" [ref=e222] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations/67 + - img [ref=e223] + - text: Open operation proof + - paragraph [ref=e225]: Open the existing draft review to continue the next review cycle. Refresh the draft if blockers remain, or publish it when the output is ready. + - group [ref=e226]: + - generic "Output limitations 3 limitations require review" [ref=e227] [cursor=pointer]: + - generic [ref=e228]: Output limitations + - generic [ref=e229]: 3 limitations require review + - group [ref=e230]: + - generic "Technical details" [ref=e231] [cursor=pointer] + - generic [ref=e233]: + - generic [ref=e234]: + - generic [ref=e235]: + - heading "Review acknowledgement" [level=2] [ref=e236] + - paragraph [ref=e237]: Acknowledgement is tracked only for published review packages. + - generic [ref=e240]: Acknowledgement unavailable + - generic [ref=e241]: + - generic [ref=e242]: + - generic [ref=e243]: Impact + - paragraph [ref=e244]: Publish a review package before recording acknowledgement. + - generic [ref=e245]: + - generic [ref=e246]: Basis + - generic [ref=e247]: + - generic [ref=e248]: + - generic [ref=e249]: Review pack + - generic [ref=e252]: Available + - generic [ref=e253]: + - generic [ref=e254]: Evidence + - generic [ref=e257]: Available + - generic [ref=e258]: + - generic [ref=e259]: Next step + - button "Review accepted risks" [disabled] + - generic [ref=e261]: + - generic [ref=e262]: + - generic [ref=e263]: + - heading "Findings needing attention" [level=2] [ref=e264] + - paragraph [ref=e265]: No open findings require customer action. + - generic [ref=e268]: No action needed + - generic [ref=e269]: + - generic [ref=e270]: + - generic [ref=e271]: Total findings + - generic [ref=e274]: "0" + - generic [ref=e275]: + - generic [ref=e276]: Open findings + - generic [ref=e279]: "0" + - generic [ref=e280]: + - generic [ref=e281]: High impact + - generic [ref=e284]: "0" + - generic [ref=e285]: + - generic [ref=e286]: Accepted risks + - generic [ref=e289]: "0" + - generic [ref=e290]: + - generic [ref=e292]: + - heading "Customer-safe follow-ups" [level=2] [ref=e294] + - paragraph [ref=e296]: No customer-safe follow-ups are listed for this released review. + - generic [ref=e297]: + - generic [ref=e298]: + - heading "Review package index" [level=2] [ref=e299] + - paragraph [ref=e300]: Released reviews and customer-safe package entries available in this workspace. + - generic [ref=e303]: + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: Search + - generic [ref=e309]: + - img [ref=e311] + - searchbox "Search" [ref=e314] + - button "Filter" [ref=e317] [cursor=pointer]: + - img [ref=e318] + - generic [ref=e321]: "1" + - generic [ref=e322]: + - generic [ref=e323]: + - generic [ref=e324]: Active filters + - generic [ref=e326]: + - generic [ref=e328]: "Environment: Spec 352 Audit Review Output" + - button "Remove filter" [ref=e329] [cursor=pointer]: + - img [ref=e330] + - generic [ref=e332]: Remove filter + - button [ref=e333] [cursor=pointer]: + - img [ref=e334] + - table [ref=e337]: + - rowgroup [ref=e338]: + - row "Environment Governance package Status Evidence Next step Open" [ref=e339]: + - columnheader "Environment" [ref=e340] + - columnheader "Governance package" [ref=e341] + - columnheader "Status" [ref=e342] + - columnheader "Evidence" [ref=e343] + - columnheader "Next step" [ref=e344] + - columnheader "Open" [ref=e345] + - rowgroup [ref=e346]: + - row "Spec 352 Audit Review Output Available Not ready Available Review control mapping Open review" [ref=e347]: + - cell "Spec 352 Audit Review Output" [ref=e348]: + - generic [ref=e350]: Spec 352 Audit Review Output + - cell "Available" [ref=e351]: + - generic [ref=e354]: Available + - cell "Not ready" [ref=e355]: + - generic [ref=e358]: Not ready + - cell "Available" [ref=e359]: + - generic [ref=e362]: Available + - cell "Review control mapping" [ref=e363]: + - generic [ref=e365]: Review control mapping + - cell "Open review" [ref=e366]: + - link "Open review" [ref=e367] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/environment-reviews/30?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=52 + - generic [ref=e368]: Open review + - navigation "Pagination navigation" [ref=e369]: + - generic [ref=e372]: + - generic [ref=e374]: Per page + - combobox "Per page" [ref=e376]: + - option "25" [selected] + - option "50" + - option "All" + - group [ref=e377]: + - generic "Supporting reference Review consumption flow Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above." [ref=e378] [cursor=pointer]: + - generic [ref=e379]: + - generic [ref=e380]: + - generic [ref=e381]: Supporting reference + - heading "Review consumption flow" [level=2] [ref=e382] + - paragraph [ref=e383]: Supporting reference for how the released review, evidence, findings, accepted risks, pack, and customer output line up after the decision above. + - img [ref=e384] + - complementary [ref=e386]: + - generic [ref=e387]: + - heading "Evidence path" [level=2] [ref=e388] + - generic [ref=e389]: + - generic [ref=e390]: + - term [ref=e391]: + - generic [ref=e392]: Evidence snapshot + - generic [ref=e396]: Available + - definition [ref=e397]: Generated Jun 4, 2026 11:46. + - definition [ref=e398]: + - link "View evidence snapshot" [ref=e399] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-review-output/evidence/22 + - generic [ref=e400]: + - term [ref=e401]: + - generic [ref=e402]: Review pack + - generic [ref=e406]: Available + - definition [ref=e407]: Current review pack is ready to download. + - generic [ref=e408]: + - term [ref=e409]: + - generic [ref=e410]: Decision trail + - generic [ref=e414]: Unavailable + - definition [ref=e415]: Decision evidence is incomplete for this released review; no customer-aware decisions can be confirmed from the current evidence basis. + - generic [ref=e416]: + - term [ref=e417]: + - generic [ref=e418]: Operation proof + - generic [ref=e422]: Available + - definition [ref=e423]: A related operation record exists for this review evidence path. Initiated by Spec 352 Requester. + - definition [ref=e424]: + - link "Open operation" [ref=e425] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations/67 + - generic [ref=e426]: + - generic [ref=e427]: + - heading "Review pack state" [level=2] [ref=e428] + - generic [ref=e431]: Available + - paragraph [ref=e432]: The review package exists, but evidence, section completeness, or publication limitations still need review. + - generic [ref=e433]: + - generic [ref=e434]: + - generic [ref=e435]: + - generic [ref=e436]: + - heading "Package exists" [level=3] [ref=e437] + - paragraph [ref=e438]: A released review pack artifact exists for this review path. + - generic [ref=e441]: Available + - generic [ref=e442]: + - generic [ref=e443]: + - term [ref=e444]: Last generated + - definition [ref=e445]: + - generic [ref=e446]: Jun 4, 2026 11:40 + - generic [ref=e447]: + - term [ref=e448]: Evidence source + - definition [ref=e449]: + - generic [ref=e450]: Jun 4, 2026 11:46 + - generic [ref=e451]: + - term [ref=e452]: Operation proof + - definition [ref=e453]: + - generic [ref=e454]: No operation proof linked + - generic [ref=e455]: + - generic [ref=e456]: + - generic [ref=e457]: + - heading "Internal export" [level=3] [ref=e458] + - paragraph [ref=e459]: An internal export can be opened or downloaded from the current review pack. + - generic [ref=e462]: Export ready + - generic [ref=e463]: + - generic [ref=e464]: + - term [ref=e465]: Export availability + - definition [ref=e466]: + - generic [ref=e467]: Export ready + - generic [ref=e468]: + - term [ref=e469]: Evidence basis + - definition [ref=e470]: + - generic [ref=e471]: Missing + - generic [ref=e472]: + - term [ref=e473]: Section completeness + - definition [ref=e474]: + - generic [ref=e475]: 2 of 7 required complete, 5 limited + - generic [ref=e476]: + - generic [ref=e477]: + - generic [ref=e478]: + - heading "Customer sharing" [level=3] [ref=e479] + - paragraph [ref=e480]: Customer sharing still depends on the readiness blockers and limitations shown in the main decision state. + - generic [ref=e483]: Requires review + - generic [ref=e484]: + - generic [ref=e485]: + - term [ref=e486]: Sharing boundary + - definition [ref=e487]: + - generic [ref=e488]: Requires review + - generic [ref=e489]: + - term [ref=e490]: PII + - definition [ref=e491]: + - generic [ref=e492]: PII excluded + - generic [ref=e493]: + - term [ref=e494]: Protected values + - definition [ref=e495]: + - generic [ref=e496]: Protected values hidden + - generic [ref=e497]: + - term [ref=e498]: Disclosure + - definition [ref=e499]: + - generic [ref=e500]: Disclosure present + - generic [ref=e501]: + - generic [ref=e502]: + - heading "Accepted risks" [level=2] [ref=e503] + - generic [ref=e506]: No action needed + - generic [ref=e507]: + - generic [ref=e508]: + - generic [ref=e509]: Accepted risks + - generic [ref=e512]: "0" + - generic [ref=e513]: + - generic [ref=e514]: Expiring soon + - generic [ref=e517]: "0" + - generic [ref=e518]: + - generic [ref=e519]: Expired + - generic [ref=e522]: "0" + - generic [ref=e523]: + - generic [ref=e524]: Pending approval + - generic [ref=e527]: "0" + - generic [ref=e528]: + - generic [ref=e529]: Needs review + - generic [ref=e532]: "0" + - paragraph [ref=e533]: No accepted risks recorded. + - generic [ref=e534]: + - heading "Disclosure rule" [level=2] [ref=e535] + - generic [ref=e536]: + - generic [ref=e537]: + - generic [ref=e538]: Decision + - generic [ref=e541]: Visible + - generic [ref=e542]: + - generic [ref=e543]: Evidence + - generic [ref=e546]: Visible + - generic [ref=e547]: + - generic [ref=e548]: Diagnostics + - generic [ref=e551]: Collapsed + - generic [ref=e552]: + - generic [ref=e553]: Raw/support + - generic [ref=e556]: Hidden + - group [ref=e557]: + - generic "Diagnostics" [ref=e558] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-47-02-170Z.yml b/.playwright-mcp/page-2026-06-05T02-47-02-170Z.yml new file mode 100644 index 00000000..2ee8c1de --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-47-02-170Z.yml @@ -0,0 +1,280 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: Spec 352 Guidance Browser Audit" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "Spec 352 Guidance Browser Audit" [ref=e54] + - generic [ref=e55]: 3 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - generic [ref=e160]: + - navigation [ref=e161]: + - list [ref=e162]: + - listitem [ref=e163]: + - link "Provider Connections" [ref=e164] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - listitem [ref=e165]: + - img [ref=e166] + - generic [ref=e168]: List + - heading "Provider Connections" [level=1] [ref=e169] + - link "New connection" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/create?environment_id=51 + - generic [ref=e175]: + - generic [ref=e178]: + - generic [ref=e179]: "Environment filter:" + - generic [ref=e180]: Spec 352 Audit Provider Blocker + - link "Clear filter" [ref=e181] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - generic [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - generic [ref=e190]: Blocked + - heading "Provider readiness blocked" [level=2] [ref=e191] + - generic [ref=e192]: + - generic [ref=e193]: Recommended next action + - link "Open required permissions" [ref=e194] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker/required-permissions + - generic [ref=e195]: + - generic [ref=e196]: Secondary + - generic [ref=e197]: + - link "Open admin consent" [ref=e198] [cursor=pointer]: + - /url: https://login.microsoftonline.com/spec-352-audit-provider-blocker/v2.0/adminconsent?client_id=2efe43af-e9aa-37e7-9a65-b8cd5a65affb&redirect_uri=http%3A%2F%2Flocalhost%2Fadmin%2Fconsent%2Fcallback&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&state=tenantpilot%7C51 + - link "Open provider connection" [ref=e199] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - link "Open environment dashboard" [ref=e200] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e201]: + - generic [ref=e202]: Reason + - paragraph [ref=e203]: Required application permissions are missing. + - generic [ref=e204]: + - generic [ref=e205]: Impact + - paragraph [ref=e206]: TenantPilot cannot refresh evidence, permission posture, inventory, or review outputs reliably until the missing application permissions are granted. + - group [ref=e207]: + - generic "Details" [ref=e208] [cursor=pointer] + - generic [ref=e213]: + - generic [ref=e216]: + - generic [ref=e217]: + - generic [ref=e218]: Search + - generic [ref=e219]: + - img [ref=e221] + - searchbox "Search" [ref=e224] + - button "Filter" [ref=e227] [cursor=pointer]: + - img [ref=e228] + - generic [ref=e231]: "1" + - button "Column manager" [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e237]: + - generic [ref=e238]: + - generic [ref=e239]: Active filters + - generic [ref=e241]: + - generic [ref=e243]: "Environment: Spec 352 Audit Provider Blocker (DEV)" + - button "Remove filter" [ref=e244] [cursor=pointer]: + - img [ref=e245] + - generic [ref=e247]: Remove filter + - button [ref=e248] [cursor=pointer]: + - img [ref=e249] + - table [ref=e252]: + - rowgroup [ref=e253]: + - row "Environment Name Provider Target scope Connection type Lifecycle Consent Verification Provider capability Actions" [ref=e254]: + - columnheader "Environment" [ref=e255] + - columnheader "Name" [ref=e256]: + - button "Name" [ref=e257] [cursor=pointer]: + - text: Name + - img [ref=e258] + - columnheader "Provider" [ref=e260] + - columnheader "Target scope" [ref=e261] + - columnheader "Connection type" [ref=e262] + - columnheader "Lifecycle" [ref=e263] + - columnheader "Consent" [ref=e264] + - columnheader "Verification" [ref=e265] + - columnheader "Provider capability" [ref=e266] + - columnheader "Actions" [ref=e267] + - rowgroup [ref=e268]: + - 'row "Spec 352 Audit Provider Blocker DEV Spec 352 Audit Provider Blocker Microsoft Microsoft Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker) Dedicated Enabled Granted Healthy Missing Inventory read: Missing More" [ref=e269]': + - cell "Spec 352 Audit Provider Blocker DEV" [ref=e270]: + - link "Spec 352 Audit Provider Blocker DEV" [ref=e271] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-provider-blocker + - generic [ref=e272]: + - paragraph [ref=e273]: Spec 352 Audit Provider Blocker + - paragraph [ref=e274]: DEV + - cell "Spec 352 Audit Provider Blocker Microsoft" [ref=e275]: + - link "Spec 352 Audit Provider Blocker Microsoft" [ref=e276] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e277]: Spec 352 Audit Provider Blocker Microsoft + - cell "Microsoft" [ref=e278]: + - link "Microsoft" [ref=e279] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e280]: Microsoft + - cell "Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker)" [ref=e281]: + - link "Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker)" [ref=e282] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e283]: Spec 352 Audit Provider Blocker (spec-352-audit-provider-blocker) + - cell "Dedicated" [ref=e284]: + - link "Dedicated" [ref=e285] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e287]: Dedicated + - cell "Enabled" [ref=e288]: + - link "Enabled" [ref=e289] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e291]: + - img [ref=e292] + - text: Enabled + - cell "Granted" [ref=e294]: + - link "Granted" [ref=e295] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e297]: + - img [ref=e298] + - text: Granted + - cell "Healthy" [ref=e300]: + - link "Healthy" [ref=e301] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e303]: + - img [ref=e304] + - text: Healthy + - 'cell "Missing Inventory read: Missing" [ref=e306]': + - 'link "Missing Inventory read: Missing" [ref=e307] [cursor=pointer]': + - /url: http://localhost/admin/provider-connections/15?environment_id=51 + - generic [ref=e308]: + - paragraph [ref=e309]: + - generic [ref=e310]: + - img [ref=e311] + - text: Missing + - paragraph [ref=e313]: "Inventory read: Missing" + - cell "More" [ref=e314]: + - button "More" [ref=e318] [cursor=pointer]: + - img [ref=e319] + - navigation "Pagination navigation" [ref=e321]: + - generic [ref=e324]: + - generic [ref=e326]: Per page + - combobox "Per page" [ref=e328]: + - option "25" [selected] + - option "50" + - option "100" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-47-16-285Z.yml b/.playwright-mcp/page-2026-06-05T02-47-16-285Z.yml new file mode 100644 index 00000000..147a1c20 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-47-16-285Z.yml @@ -0,0 +1,14 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-48-22-765Z.yml b/.playwright-mcp/page-2026-06-05T02-48-22-765Z.yml new file mode 100644 index 00000000..982b84cb --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-48-22-765Z.yml @@ -0,0 +1,270 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Finding Exceptions Queue" [level=1] [ref=e161] + - generic [ref=e163]: + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - link "View environment findings" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e168] + - text: View environment findings + - generic [ref=e171]: + - generic [ref=e175]: + - generic [ref=e176]: Canonical risk-acceptance approvals + - generic [ref=e177]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e178]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e179]: + - generic [ref=e180]: "Environment filter:" + - generic [ref=e181]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e182] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e183]: + - generic [ref=e185]: + - heading "Quiet monitoring mode" [level=2] [ref=e186] + - paragraph [ref=e187]: Inspect an exception to enter the focused review lane. Scope, filters, and environment drilldowns stay secondary until one request is actively under review. + - generic [ref=e190]: No exception is selected right now. Use Inspect exception from the queue to review one request in context. + - generic [ref=e193]: + - generic [ref=e196]: + - generic [ref=e197]: + - generic [ref=e198]: Search + - generic [ref=e199]: + - img [ref=e201] + - searchbox "Search" [ref=e204] + - button "Filter" [ref=e207] [cursor=pointer]: + - img [ref=e208] + - generic [ref=e211]: "1" + - generic [ref=e212]: + - generic [ref=e213]: + - generic [ref=e214]: Active filters + - generic [ref=e216]: + - generic [ref=e218]: "Environment: Spec342 Demo Accepted Risks" + - button "Remove filter" [ref=e219] [cursor=pointer]: + - img [ref=e220] + - generic [ref=e222]: Remove filter + - button [ref=e223] [cursor=pointer]: + - img [ref=e224] + - table [ref=e227]: + - rowgroup [ref=e228]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Action" [ref=e229]: + - columnheader "Status" [ref=e230] + - columnheader "Validity" [ref=e231] + - columnheader "Environment" [ref=e232] + - columnheader "Finding" [ref=e233] + - columnheader "Governance warning" [ref=e234] + - columnheader "Requested by" [ref=e235] + - columnheader "Owner" [ref=e236] + - columnheader "Review due" [ref=e237]: + - button "Review due" [ref=e238] [cursor=pointer]: + - text: Review due + - img [ref=e239] + - columnheader "Expires" [ref=e241]: + - button "Expires" [ref=e242] [cursor=pointer]: + - text: Expires + - img [ref=e243] + - columnheader "Requested" [ref=e245]: + - button "Requested" [ref=e246] [cursor=pointer]: + - text: Requested + - img [ref=e247] + - columnheader "Action" [ref=e249] + - rowgroup [ref=e250]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — May 29, 2026 01:05:16 Inspect exception" [ref=e251]': + - cell "Active" [ref=e252]: + - generic [ref=e255]: + - img [ref=e256] + - text: Active + - cell "Valid" [ref=e258]: + - generic [ref=e261]: + - img [ref=e262] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e264]: + - generic [ref=e266]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e267]': + - generic [ref=e269]: "Finding #3" + - cell [ref=e270] + - cell "Ahmed Darrazi" [ref=e273]: + - generic [ref=e275]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e276]: + - generic [ref=e278]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e279]: + - generic [ref=e281]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e282]: + - paragraph [ref=e285]: — + - cell "May 29, 2026 01:05:16" [ref=e286]: + - generic [ref=e288]: May 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e289]: + - link "Inspect exception" [ref=e291] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e292] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — May 31, 2026 01:05:16 Inspect exception" [ref=e295]': + - cell "Active" [ref=e296]: + - generic [ref=e299]: + - img [ref=e300] + - text: Active + - cell "Expiring" [ref=e302]: + - generic [ref=e305]: + - img [ref=e306] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e308]: + - generic [ref=e310]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e311]': + - generic [ref=e313]: "Finding #4" + - cell [ref=e314] + - cell "Ahmed Darrazi" [ref=e317]: + - generic [ref=e319]: Ahmed Darrazi + - cell "—" [ref=e320]: + - paragraph [ref=e323]: — + - cell "—" [ref=e324]: + - paragraph [ref=e327]: — + - cell "—" [ref=e328]: + - paragraph [ref=e331]: — + - cell "May 31, 2026 01:05:16" [ref=e332]: + - generic [ref=e334]: May 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e335]: + - link "Inspect exception" [ref=e337] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e338] + - text: Inspect exception + - navigation "Pagination navigation" [ref=e341]: + - generic [ref=e344]: + - generic [ref=e346]: Per page + - combobox "Per page" [ref=e348]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-48-57-084Z.yml b/.playwright-mcp/page-2026-06-05T02-48-57-084Z.yml new file mode 100644 index 00000000..dfbc1ef6 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-48-57-084Z.yml @@ -0,0 +1,412 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Finding Exceptions Queue" [level=1] [ref=e161] + - generic [ref=e163]: + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - link "View environment findings" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e168] + - text: View environment findings + - button "Focused review" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e176]: + - generic [ref=e180]: + - generic [ref=e181]: Canonical risk-acceptance approvals + - generic [ref=e182]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e183]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e184]: + - generic [ref=e185]: "Environment filter:" + - generic [ref=e186]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e187] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e188]: + - generic [ref=e190]: + - heading "Focused review lane" [level=2] [ref=e191] + - paragraph [ref=e192]: The selected exception defines the focused review context. The dominant guidance card explains what matters now before deeper decision history and evidence. + - generic [ref=e195]: + - generic [ref=e196]: + - generic [ref=e198]: + - generic [ref=e199]: + - generic [ref=e200]: + - generic [ref=e203]: Action required + - heading "Accepted-risk governance context is incomplete" [level=2] [ref=e204] + - generic [ref=e205]: + - generic [ref=e206]: Reason + - paragraph [ref=e207]: "The current exception record is missing: Owner, Review due." + - generic [ref=e208]: + - generic [ref=e209]: Impact + - paragraph [ref=e210]: Missing accountability or review data weakens the governance record even when the exception is still present. + - generic [ref=e211]: + - generic [ref=e212]: + - term [ref=e213]: Environment + - definition [ref=e214]: Spec342 Demo Accepted Risks + - generic [ref=e215]: + - term [ref=e216]: Lifecycle status + - definition [ref=e217]: Active + - generic [ref=e218]: + - term [ref=e219]: Governance validity + - definition [ref=e220]: Valid + - generic [ref=e221]: + - term [ref=e222]: Owner + - definition [ref=e223]: Missing + - generic [ref=e224]: + - term [ref=e225]: Review due + - definition [ref=e226]: Missing + - generic [ref=e227]: + - term [ref=e228]: Expires + - definition [ref=e229]: Not recorded + - generic [ref=e230]: + - term [ref=e231]: Current decision + - definition [ref=e232]: Not recorded + - generic [ref=e233]: + - term [ref=e234]: Request reason + - definition [ref=e235]: Pending owner confirmation. + - generic [ref=e236]: + - term [ref=e237]: Missing governance inputs + - definition [ref=e238]: Owner, Review due + - generic [ref=e239]: + - generic [ref=e240]: What to review + - generic [ref=e241]: Complete the missing governance context before relying on this accepted risk. + - generic [ref=e242]: + - generic [ref=e243]: Related context + - generic [ref=e244]: + - link "Open exception detail" [ref=e245] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions/2 + - link "Open finding" [ref=e246] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/findings/4 + - generic [ref=e247]: + - generic [ref=e248]: Focused review controls + - generic [ref=e249]: Existing review actions stay in the page header so approval, rejection, and navigation keep their current confirmation and authorization boundaries. + - generic [ref=e250]: + - generic [ref=e251]: + - generic [ref=e252]: Status + - generic [ref=e253]: Active + - generic [ref=e254]: Expiring + - generic [ref=e255]: + - generic [ref=e256]: Scope + - generic [ref=e257]: Spec342 Demo Accepted Risks + - generic [ref=e258]: "Finding #4" + - generic [ref=e259]: + - generic [ref=e260]: Review timing + - generic [ref=e261]: Review due — + - generic [ref=e262]: Expires — + - generic [ref=e263]: + - generic [ref=e264]: Request + - generic [ref=e265]: + - generic [ref=e266]: + - term [ref=e267]: Requested by + - definition [ref=e268]: Ahmed Darrazi + - generic [ref=e269]: + - term [ref=e270]: Owner + - definition [ref=e271]: Unassigned + - generic [ref=e272]: + - term [ref=e273]: Reason + - definition [ref=e274]: Pending owner confirmation. + - generic [ref=e275]: + - generic [ref=e276]: Decision history + - generic [ref=e277]: No decisions have been recorded yet. + - generic [ref=e280]: + - generic [ref=e283]: + - generic [ref=e284]: + - generic [ref=e285]: Search + - generic [ref=e286]: + - img [ref=e288] + - searchbox "Search" [ref=e291] + - button "Filter" [ref=e294] [cursor=pointer]: + - img [ref=e295] + - generic [ref=e298]: "1" + - generic [ref=e299]: + - generic [ref=e300]: + - generic [ref=e301]: Active filters + - generic [ref=e303]: + - generic [ref=e305]: "Environment: Spec342 Demo Accepted Risks" + - button "Remove filter" [ref=e306] [cursor=pointer]: + - img [ref=e307] + - generic [ref=e309]: Remove filter + - button [ref=e310] [cursor=pointer]: + - img [ref=e311] + - table [ref=e314]: + - rowgroup [ref=e315]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Action" [ref=e316]: + - columnheader "Status" [ref=e317] + - columnheader "Validity" [ref=e318] + - columnheader "Environment" [ref=e319] + - columnheader "Finding" [ref=e320] + - columnheader "Governance warning" [ref=e321] + - columnheader "Requested by" [ref=e322] + - columnheader "Owner" [ref=e323] + - columnheader "Review due" [ref=e324]: + - button "Review due" [ref=e325] [cursor=pointer]: + - text: Review due + - img [ref=e326] + - columnheader "Expires" [ref=e328]: + - button "Expires" [ref=e329] [cursor=pointer]: + - text: Expires + - img [ref=e330] + - columnheader "Requested" [ref=e332]: + - button "Requested" [ref=e333] [cursor=pointer]: + - text: Requested + - img [ref=e334] + - columnheader "Action" [ref=e336] + - rowgroup [ref=e337]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — May 29, 2026 01:05:16 Inspect exception" [ref=e338]': + - cell "Active" [ref=e339]: + - generic [ref=e342]: + - img [ref=e343] + - text: Active + - cell "Valid" [ref=e345]: + - generic [ref=e348]: + - img [ref=e349] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e351]: + - generic [ref=e353]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e354]': + - generic [ref=e356]: "Finding #3" + - cell [ref=e357] + - cell "Ahmed Darrazi" [ref=e360]: + - generic [ref=e362]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e363]: + - generic [ref=e365]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e366]: + - generic [ref=e368]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e369]: + - paragraph [ref=e372]: — + - cell "May 29, 2026 01:05:16" [ref=e373]: + - generic [ref=e375]: May 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e376]: + - link "Inspect exception" [ref=e378] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e379] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — May 31, 2026 01:05:16 Inspect exception" [ref=e382]': + - cell "Active" [ref=e383]: + - generic [ref=e386]: + - img [ref=e387] + - text: Active + - cell "Expiring" [ref=e389]: + - generic [ref=e392]: + - img [ref=e393] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e395]: + - generic [ref=e397]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e398]': + - generic [ref=e400]: "Finding #4" + - cell [ref=e401] + - cell "Ahmed Darrazi" [ref=e404]: + - generic [ref=e406]: Ahmed Darrazi + - cell "—" [ref=e407]: + - paragraph [ref=e410]: — + - cell "—" [ref=e411]: + - paragraph [ref=e414]: — + - cell "—" [ref=e415]: + - paragraph [ref=e418]: — + - cell "May 31, 2026 01:05:16" [ref=e419]: + - generic [ref=e421]: May 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e422]: + - link "Inspect exception" [ref=e424] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e425] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #13 The linked exception has expired and no longer governs accepted risk. Ahmed Darrazi Ahmed Darrazi Jun 3, 2026 02:48:49 Jun 4, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e428]': + - cell "Active" [ref=e429]: + - generic [ref=e432]: + - img [ref=e433] + - text: Active + - cell "Valid" [ref=e435]: + - generic [ref=e438]: + - img [ref=e439] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e441]: + - generic [ref=e443]: Spec342 Demo Accepted Risks + - 'cell "Finding #13" [ref=e444]': + - generic [ref=e446]: "Finding #13" + - cell "The linked exception has expired and no longer governs accepted risk." [ref=e447]: + - generic [ref=e449]: The linked exception has expired and no longer governs accepted risk. + - cell "Ahmed Darrazi" [ref=e450]: + - generic [ref=e452]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e453]: + - generic [ref=e455]: Ahmed Darrazi + - cell "Jun 3, 2026 02:48:49" [ref=e456]: + - generic [ref=e458]: Jun 3, 2026 02:48:49 + - cell "Jun 4, 2026 02:48:49" [ref=e459]: + - generic [ref=e461]: Jun 4, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e462]: + - generic [ref=e464]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e465]: + - link "Inspect exception" [ref=e467] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=7 + - img [ref=e468] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #14 Ahmed Darrazi — — Jul 5, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e471]': + - cell "Active" [ref=e472]: + - generic [ref=e475]: + - img [ref=e476] + - text: Active + - cell "Valid" [ref=e478]: + - generic [ref=e481]: + - img [ref=e482] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e484]: + - generic [ref=e486]: Spec342 Demo Accepted Risks + - 'cell "Finding #14" [ref=e487]': + - generic [ref=e489]: "Finding #14" + - cell [ref=e490] + - cell "Ahmed Darrazi" [ref=e493]: + - generic [ref=e495]: Ahmed Darrazi + - cell "—" [ref=e496]: + - paragraph [ref=e499]: — + - cell "—" [ref=e500]: + - paragraph [ref=e503]: — + - cell "Jul 5, 2026 02:48:49" [ref=e504]: + - generic [ref=e506]: Jul 5, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e507]: + - generic [ref=e509]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e510]: + - link "Inspect exception" [ref=e512] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=8 + - img [ref=e513] + - text: Inspect exception + - navigation "Pagination navigation" [ref=e516]: + - generic [ref=e519]: + - generic [ref=e521]: Per page + - combobox "Per page" [ref=e523]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-49-22-065Z.yml b/.playwright-mcp/page-2026-06-05T02-49-22-065Z.yml new file mode 100644 index 00000000..c39689e4 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-49-22-065Z.yml @@ -0,0 +1,443 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Finding Exceptions Queue" [level=1] [ref=e161] + - generic [ref=e163]: + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - link "View environment findings" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e168] + - text: View environment findings + - button "Focused review" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e176]: + - generic [ref=e180]: + - generic [ref=e181]: Canonical risk-acceptance approvals + - generic [ref=e182]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e183]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e184]: + - generic [ref=e185]: "Environment filter:" + - generic [ref=e186]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e187] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e188]: + - generic [ref=e190]: + - heading "Focused review lane" [level=2] [ref=e191] + - paragraph [ref=e192]: The selected exception defines the focused review context. The dominant guidance card explains what matters now before deeper decision history and evidence. + - generic [ref=e195]: + - generic [ref=e196]: + - generic [ref=e198]: + - generic [ref=e199]: + - generic [ref=e200]: + - generic [ref=e203]: Action required + - heading "Accepted-risk review window is nearing expiry" [level=2] [ref=e204] + - generic [ref=e205]: + - generic [ref=e206]: Reason + - paragraph [ref=e207]: The current accepted-risk governance window is still active, but it is nearing expiry and needs review. + - generic [ref=e208]: + - generic [ref=e209]: Impact + - paragraph [ref=e210]: If the current window is not reviewed in time, this accepted risk can no longer be treated as actively governed. + - generic [ref=e211]: + - generic [ref=e212]: + - term [ref=e213]: Environment + - definition [ref=e214]: Spec342 Demo Accepted Risks + - generic [ref=e215]: + - term [ref=e216]: Lifecycle status + - definition [ref=e217]: Expiring + - generic [ref=e218]: + - term [ref=e219]: Governance validity + - definition [ref=e220]: Expiring + - generic [ref=e221]: + - term [ref=e222]: Owner + - definition [ref=e223]: Ahmed Darrazi + - generic [ref=e224]: + - term [ref=e225]: Review due + - definition [ref=e226]: Sat, Jun 6, 2026 2:49 AM + - generic [ref=e227]: + - term [ref=e228]: Expires + - definition [ref=e229]: Sun, Jun 7, 2026 2:49 AM + - generic [ref=e230]: + - term [ref=e231]: Current decision + - definition [ref=e232]: Approved + - generic [ref=e233]: + - term [ref=e234]: Request reason + - definition [ref=e235]: Spec355 expiring local fixture + - generic [ref=e236]: + - generic [ref=e237]: What to review + - generic [ref=e238]: Review the active governance window before it lapses. + - generic [ref=e239]: + - generic [ref=e240]: Related context + - generic [ref=e241]: + - link "Open exception detail" [ref=e242] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions/9 + - link "Open finding" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/findings/15 + - generic [ref=e244]: + - generic [ref=e245]: Focused review controls + - generic [ref=e246]: Existing review actions stay in the page header so approval, rejection, and navigation keep their current confirmation and authorization boundaries. + - generic [ref=e247]: + - generic [ref=e248]: + - generic [ref=e249]: Status + - generic [ref=e250]: Active + - generic [ref=e251]: Valid + - generic [ref=e252]: The linked exception is still valid, but it is nearing expiry and needs review. + - generic [ref=e253]: + - generic [ref=e254]: Scope + - generic [ref=e255]: Spec342 Demo Accepted Risks + - generic [ref=e256]: "Finding #15" + - generic [ref=e257]: + - generic [ref=e258]: Review timing + - generic [ref=e259]: Review due Sat, Jun 6, 2026 2:49 AM + - generic [ref=e260]: Expires Sun, Jun 7, 2026 2:49 AM + - generic [ref=e261]: + - generic [ref=e262]: Request + - generic [ref=e263]: + - generic [ref=e264]: + - term [ref=e265]: Requested by + - definition [ref=e266]: Ahmed Darrazi + - generic [ref=e267]: + - term [ref=e268]: Owner + - definition [ref=e269]: Ahmed Darrazi + - generic [ref=e270]: + - term [ref=e271]: Reason + - definition [ref=e272]: Spec355 expiring local fixture + - generic [ref=e273]: + - generic [ref=e274]: Decision history + - generic [ref=e276]: + - generic [ref=e277]: Approved + - generic [ref=e278]: Ahmed Darrazi · Mon, Jun 1, 2026 2:49 AM + - generic [ref=e279]: Spec355 expiring local browser decision + - generic [ref=e282]: + - generic [ref=e285]: + - generic [ref=e286]: + - generic [ref=e287]: Search + - generic [ref=e288]: + - img [ref=e290] + - searchbox "Search" [ref=e293] + - button "Filter" [ref=e296] [cursor=pointer]: + - img [ref=e297] + - generic [ref=e300]: "1" + - generic [ref=e301]: + - generic [ref=e302]: + - generic [ref=e303]: Active filters + - generic [ref=e305]: + - generic [ref=e307]: "Environment: Spec342 Demo Accepted Risks" + - button "Remove filter" [ref=e308] [cursor=pointer]: + - img [ref=e309] + - generic [ref=e311]: Remove filter + - button [ref=e312] [cursor=pointer]: + - img [ref=e313] + - table [ref=e316]: + - rowgroup [ref=e317]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Action" [ref=e318]: + - columnheader "Status" [ref=e319] + - columnheader "Validity" [ref=e320] + - columnheader "Environment" [ref=e321] + - columnheader "Finding" [ref=e322] + - columnheader "Governance warning" [ref=e323] + - columnheader "Requested by" [ref=e324] + - columnheader "Owner" [ref=e325] + - columnheader "Review due" [ref=e326]: + - button "Review due" [ref=e327] [cursor=pointer]: + - text: Review due + - img [ref=e328] + - columnheader "Expires" [ref=e330]: + - button "Expires" [ref=e331] [cursor=pointer]: + - text: Expires + - img [ref=e332] + - columnheader "Requested" [ref=e334]: + - button "Requested" [ref=e335] [cursor=pointer]: + - text: Requested + - img [ref=e336] + - columnheader "Action" [ref=e338] + - rowgroup [ref=e339]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — May 29, 2026 01:05:16 Inspect exception" [ref=e340]': + - cell "Active" [ref=e341]: + - generic [ref=e344]: + - img [ref=e345] + - text: Active + - cell "Valid" [ref=e347]: + - generic [ref=e350]: + - img [ref=e351] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e353]: + - generic [ref=e355]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e356]': + - generic [ref=e358]: "Finding #3" + - cell [ref=e359] + - cell "Ahmed Darrazi" [ref=e362]: + - generic [ref=e364]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e365]: + - generic [ref=e367]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e368]: + - generic [ref=e370]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e371]: + - paragraph [ref=e374]: — + - cell "May 29, 2026 01:05:16" [ref=e375]: + - generic [ref=e377]: May 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e378]: + - link "Inspect exception" [ref=e380] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e381] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — May 31, 2026 01:05:16 Inspect exception" [ref=e384]': + - cell "Active" [ref=e385]: + - generic [ref=e388]: + - img [ref=e389] + - text: Active + - cell "Expiring" [ref=e391]: + - generic [ref=e394]: + - img [ref=e395] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e397]: + - generic [ref=e399]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e400]': + - generic [ref=e402]: "Finding #4" + - cell [ref=e403] + - cell "Ahmed Darrazi" [ref=e406]: + - generic [ref=e408]: Ahmed Darrazi + - cell "—" [ref=e409]: + - paragraph [ref=e412]: — + - cell "—" [ref=e413]: + - paragraph [ref=e416]: — + - cell "—" [ref=e417]: + - paragraph [ref=e420]: — + - cell "May 31, 2026 01:05:16" [ref=e421]: + - generic [ref=e423]: May 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e424]: + - link "Inspect exception" [ref=e426] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e427] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #13 The linked exception has expired and no longer governs accepted risk. Ahmed Darrazi Ahmed Darrazi Jun 3, 2026 02:48:49 Jun 4, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e430]': + - cell "Active" [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Active + - cell "Valid" [ref=e437]: + - generic [ref=e440]: + - img [ref=e441] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e443]: + - generic [ref=e445]: Spec342 Demo Accepted Risks + - 'cell "Finding #13" [ref=e446]': + - generic [ref=e448]: "Finding #13" + - cell "The linked exception has expired and no longer governs accepted risk." [ref=e449]: + - generic [ref=e451]: The linked exception has expired and no longer governs accepted risk. + - cell "Ahmed Darrazi" [ref=e452]: + - generic [ref=e454]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e455]: + - generic [ref=e457]: Ahmed Darrazi + - cell "Jun 3, 2026 02:48:49" [ref=e458]: + - generic [ref=e460]: Jun 3, 2026 02:48:49 + - cell "Jun 4, 2026 02:48:49" [ref=e461]: + - generic [ref=e463]: Jun 4, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e464]: + - generic [ref=e466]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e467]: + - link "Inspect exception" [ref=e469] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=7 + - img [ref=e470] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #14 Ahmed Darrazi — — Jul 5, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e473]': + - cell "Active" [ref=e474]: + - generic [ref=e477]: + - img [ref=e478] + - text: Active + - cell "Valid" [ref=e480]: + - generic [ref=e483]: + - img [ref=e484] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e486]: + - generic [ref=e488]: Spec342 Demo Accepted Risks + - 'cell "Finding #14" [ref=e489]': + - generic [ref=e491]: "Finding #14" + - cell [ref=e492] + - cell "Ahmed Darrazi" [ref=e495]: + - generic [ref=e497]: Ahmed Darrazi + - cell "—" [ref=e498]: + - paragraph [ref=e501]: — + - cell "—" [ref=e502]: + - paragraph [ref=e505]: — + - cell "Jul 5, 2026 02:48:49" [ref=e506]: + - generic [ref=e508]: Jul 5, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e509]: + - generic [ref=e511]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e512]: + - link "Inspect exception" [ref=e514] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=8 + - img [ref=e515] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #15 The linked exception is still valid, but it is nearing expiry and needs review. Ahmed Darrazi Ahmed Darrazi Jun 6, 2026 02:49:16 Jun 7, 2026 02:49:16 May 31, 2026 02:49:16 Inspect exception" [ref=e518]': + - cell "Active" [ref=e519]: + - generic [ref=e522]: + - img [ref=e523] + - text: Active + - cell "Valid" [ref=e525]: + - generic [ref=e528]: + - img [ref=e529] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e531]: + - generic [ref=e533]: Spec342 Demo Accepted Risks + - 'cell "Finding #15" [ref=e534]': + - generic [ref=e536]: "Finding #15" + - cell "The linked exception is still valid, but it is nearing expiry and needs review." [ref=e537]: + - generic [ref=e539]: The linked exception is still valid, but it is nearing expiry and needs review. + - cell "Ahmed Darrazi" [ref=e540]: + - generic [ref=e542]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e543]: + - generic [ref=e545]: Ahmed Darrazi + - cell "Jun 6, 2026 02:49:16" [ref=e546]: + - generic [ref=e548]: Jun 6, 2026 02:49:16 + - cell "Jun 7, 2026 02:49:16" [ref=e549]: + - generic [ref=e551]: Jun 7, 2026 02:49:16 + - cell "May 31, 2026 02:49:16" [ref=e552]: + - generic [ref=e554]: May 31, 2026 02:49:16 + - cell "Inspect exception" [ref=e555]: + - link "Inspect exception" [ref=e557] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=9 + - img [ref=e558] + - text: Inspect exception + - navigation "Pagination navigation" [ref=e561]: + - generic [ref=e564]: + - generic [ref=e566]: Per page + - combobox "Per page" [ref=e568]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-49-34-391Z.yml b/.playwright-mcp/page-2026-06-05T02-49-34-391Z.yml new file mode 100644 index 00000000..a66e808e --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-49-34-391Z.yml @@ -0,0 +1,443 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Finding Exceptions Queue" [level=1] [ref=e161] + - generic [ref=e163]: + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - link "View environment findings" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e168] + - text: View environment findings + - button "Focused review" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e176]: + - generic [ref=e180]: + - generic [ref=e181]: Canonical risk-acceptance approvals + - generic [ref=e182]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e183]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e184]: + - generic [ref=e185]: "Environment filter:" + - generic [ref=e186]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e187] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e188]: + - generic [ref=e190]: + - heading "Focused review lane" [level=2] [ref=e191] + - paragraph [ref=e192]: The selected exception defines the focused review context. The dominant guidance card explains what matters now before deeper decision history and evidence. + - generic [ref=e195]: + - generic [ref=e196]: + - generic [ref=e198]: + - generic [ref=e199]: + - generic [ref=e200]: + - generic [ref=e203]: Blocked + - heading "Accepted-risk governance has expired" [level=2] [ref=e204] + - generic [ref=e205]: + - generic [ref=e206]: Reason + - paragraph [ref=e207]: The current accepted-risk governance window has lapsed and no longer provides active coverage. + - generic [ref=e208]: + - generic [ref=e209]: Impact + - paragraph [ref=e210]: This accepted risk no longer has current governance coverage and should not be treated as safely governed. + - generic [ref=e211]: + - generic [ref=e212]: + - term [ref=e213]: Environment + - definition [ref=e214]: Spec342 Demo Accepted Risks + - generic [ref=e215]: + - term [ref=e216]: Lifecycle status + - definition [ref=e217]: Expired + - generic [ref=e218]: + - term [ref=e219]: Governance validity + - definition [ref=e220]: Expired + - generic [ref=e221]: + - term [ref=e222]: Owner + - definition [ref=e223]: Ahmed Darrazi + - generic [ref=e224]: + - term [ref=e225]: Review due + - definition [ref=e226]: Wed, Jun 3, 2026 2:48 AM + - generic [ref=e227]: + - term [ref=e228]: Expires + - definition [ref=e229]: Thu, Jun 4, 2026 2:48 AM + - generic [ref=e230]: + - term [ref=e231]: Current decision + - definition [ref=e232]: Approved + - generic [ref=e233]: + - term [ref=e234]: Request reason + - definition [ref=e235]: Spec355 local browser fixture + - generic [ref=e236]: + - generic [ref=e237]: What to review + - generic [ref=e238]: Review whether this accepted-risk window should be renewed or whether the finding must return to active remediation. + - generic [ref=e239]: + - generic [ref=e240]: Related context + - generic [ref=e241]: + - link "Open exception detail" [ref=e242] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions/7 + - link "Open finding" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/findings/13 + - generic [ref=e244]: + - generic [ref=e245]: Focused review controls + - generic [ref=e246]: Existing review actions stay in the page header so approval, rejection, and navigation keep their current confirmation and authorization boundaries. + - generic [ref=e247]: + - generic [ref=e248]: + - generic [ref=e249]: Status + - generic [ref=e250]: Active + - generic [ref=e251]: Valid + - generic [ref=e252]: The linked exception has expired and no longer governs accepted risk. + - generic [ref=e253]: + - generic [ref=e254]: Scope + - generic [ref=e255]: Spec342 Demo Accepted Risks + - generic [ref=e256]: "Finding #13" + - generic [ref=e257]: + - generic [ref=e258]: Review timing + - generic [ref=e259]: Review due Wed, Jun 3, 2026 2:48 AM + - generic [ref=e260]: Expires Thu, Jun 4, 2026 2:48 AM + - generic [ref=e261]: + - generic [ref=e262]: Request + - generic [ref=e263]: + - generic [ref=e264]: + - term [ref=e265]: Requested by + - definition [ref=e266]: Ahmed Darrazi + - generic [ref=e267]: + - term [ref=e268]: Owner + - definition [ref=e269]: Ahmed Darrazi + - generic [ref=e270]: + - term [ref=e271]: Reason + - definition [ref=e272]: Spec355 local browser fixture + - generic [ref=e273]: + - generic [ref=e274]: Decision history + - generic [ref=e276]: + - generic [ref=e277]: Approved + - generic [ref=e278]: Ahmed Darrazi · Mon, Jun 1, 2026 2:48 AM + - generic [ref=e279]: Spec355 local browser decision + - generic [ref=e282]: + - generic [ref=e285]: + - generic [ref=e286]: + - generic [ref=e287]: Search + - generic [ref=e288]: + - img [ref=e290] + - searchbox "Search" [ref=e293] + - button "Filter" [ref=e296] [cursor=pointer]: + - img [ref=e297] + - generic [ref=e300]: "1" + - generic [ref=e301]: + - generic [ref=e302]: + - generic [ref=e303]: Active filters + - generic [ref=e305]: + - generic [ref=e307]: "Environment: Spec342 Demo Accepted Risks" + - button "Remove filter" [ref=e308] [cursor=pointer]: + - img [ref=e309] + - generic [ref=e311]: Remove filter + - button [ref=e312] [cursor=pointer]: + - img [ref=e313] + - table [ref=e316]: + - rowgroup [ref=e317]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Action" [ref=e318]: + - columnheader "Status" [ref=e319] + - columnheader "Validity" [ref=e320] + - columnheader "Environment" [ref=e321] + - columnheader "Finding" [ref=e322] + - columnheader "Governance warning" [ref=e323] + - columnheader "Requested by" [ref=e324] + - columnheader "Owner" [ref=e325] + - columnheader "Review due" [ref=e326]: + - button "Review due" [ref=e327] [cursor=pointer]: + - text: Review due + - img [ref=e328] + - columnheader "Expires" [ref=e330]: + - button "Expires" [ref=e331] [cursor=pointer]: + - text: Expires + - img [ref=e332] + - columnheader "Requested" [ref=e334]: + - button "Requested" [ref=e335] [cursor=pointer]: + - text: Requested + - img [ref=e336] + - columnheader "Action" [ref=e338] + - rowgroup [ref=e339]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — May 29, 2026 01:05:16 Inspect exception" [ref=e340]': + - cell "Active" [ref=e341]: + - generic [ref=e344]: + - img [ref=e345] + - text: Active + - cell "Valid" [ref=e347]: + - generic [ref=e350]: + - img [ref=e351] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e353]: + - generic [ref=e355]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e356]': + - generic [ref=e358]: "Finding #3" + - cell [ref=e359] + - cell "Ahmed Darrazi" [ref=e362]: + - generic [ref=e364]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e365]: + - generic [ref=e367]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e368]: + - generic [ref=e370]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e371]: + - paragraph [ref=e374]: — + - cell "May 29, 2026 01:05:16" [ref=e375]: + - generic [ref=e377]: May 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e378]: + - link "Inspect exception" [ref=e380] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e381] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — May 31, 2026 01:05:16 Inspect exception" [ref=e384]': + - cell "Active" [ref=e385]: + - generic [ref=e388]: + - img [ref=e389] + - text: Active + - cell "Expiring" [ref=e391]: + - generic [ref=e394]: + - img [ref=e395] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e397]: + - generic [ref=e399]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e400]': + - generic [ref=e402]: "Finding #4" + - cell [ref=e403] + - cell "Ahmed Darrazi" [ref=e406]: + - generic [ref=e408]: Ahmed Darrazi + - cell "—" [ref=e409]: + - paragraph [ref=e412]: — + - cell "—" [ref=e413]: + - paragraph [ref=e416]: — + - cell "—" [ref=e417]: + - paragraph [ref=e420]: — + - cell "May 31, 2026 01:05:16" [ref=e421]: + - generic [ref=e423]: May 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e424]: + - link "Inspect exception" [ref=e426] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e427] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #13 The linked exception has expired and no longer governs accepted risk. Ahmed Darrazi Ahmed Darrazi Jun 3, 2026 02:48:49 Jun 4, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e430]': + - cell "Active" [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Active + - cell "Valid" [ref=e437]: + - generic [ref=e440]: + - img [ref=e441] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e443]: + - generic [ref=e445]: Spec342 Demo Accepted Risks + - 'cell "Finding #13" [ref=e446]': + - generic [ref=e448]: "Finding #13" + - cell "The linked exception has expired and no longer governs accepted risk." [ref=e449]: + - generic [ref=e451]: The linked exception has expired and no longer governs accepted risk. + - cell "Ahmed Darrazi" [ref=e452]: + - generic [ref=e454]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e455]: + - generic [ref=e457]: Ahmed Darrazi + - cell "Jun 3, 2026 02:48:49" [ref=e458]: + - generic [ref=e460]: Jun 3, 2026 02:48:49 + - cell "Jun 4, 2026 02:48:49" [ref=e461]: + - generic [ref=e463]: Jun 4, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e464]: + - generic [ref=e466]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e467]: + - link "Inspect exception" [ref=e469] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=7 + - img [ref=e470] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #14 Ahmed Darrazi — — Jul 5, 2026 02:48:49 May 31, 2026 02:48:49 Inspect exception" [ref=e473]': + - cell "Active" [ref=e474]: + - generic [ref=e477]: + - img [ref=e478] + - text: Active + - cell "Valid" [ref=e480]: + - generic [ref=e483]: + - img [ref=e484] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e486]: + - generic [ref=e488]: Spec342 Demo Accepted Risks + - 'cell "Finding #14" [ref=e489]': + - generic [ref=e491]: "Finding #14" + - cell [ref=e492] + - cell "Ahmed Darrazi" [ref=e495]: + - generic [ref=e497]: Ahmed Darrazi + - cell "—" [ref=e498]: + - paragraph [ref=e501]: — + - cell "—" [ref=e502]: + - paragraph [ref=e505]: — + - cell "Jul 5, 2026 02:48:49" [ref=e506]: + - generic [ref=e508]: Jul 5, 2026 02:48:49 + - cell "May 31, 2026 02:48:49" [ref=e509]: + - generic [ref=e511]: May 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e512]: + - link "Inspect exception" [ref=e514] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=8 + - img [ref=e515] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #15 The linked exception is still valid, but it is nearing expiry and needs review. Ahmed Darrazi Ahmed Darrazi Jun 6, 2026 02:49:16 Jun 7, 2026 02:49:16 May 31, 2026 02:49:16 Inspect exception" [ref=e518]': + - cell "Active" [ref=e519]: + - generic [ref=e522]: + - img [ref=e523] + - text: Active + - cell "Valid" [ref=e525]: + - generic [ref=e528]: + - img [ref=e529] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e531]: + - generic [ref=e533]: Spec342 Demo Accepted Risks + - 'cell "Finding #15" [ref=e534]': + - generic [ref=e536]: "Finding #15" + - cell "The linked exception is still valid, but it is nearing expiry and needs review." [ref=e537]: + - generic [ref=e539]: The linked exception is still valid, but it is nearing expiry and needs review. + - cell "Ahmed Darrazi" [ref=e540]: + - generic [ref=e542]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e543]: + - generic [ref=e545]: Ahmed Darrazi + - cell "Jun 6, 2026 02:49:16" [ref=e546]: + - generic [ref=e548]: Jun 6, 2026 02:49:16 + - cell "Jun 7, 2026 02:49:16" [ref=e549]: + - generic [ref=e551]: Jun 7, 2026 02:49:16 + - cell "May 31, 2026 02:49:16" [ref=e552]: + - generic [ref=e554]: May 31, 2026 02:49:16 + - cell "Inspect exception" [ref=e555]: + - link "Inspect exception" [ref=e557] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=9 + - img [ref=e558] + - text: Inspect exception + - navigation "Pagination navigation" [ref=e561]: + - generic [ref=e564]: + - generic [ref=e566]: Per page + - combobox "Per page" [ref=e568]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-49-49-929Z.yml b/.playwright-mcp/page-2026-06-05T02-49-49-929Z.yml new file mode 100644 index 00000000..daf3bc34 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-49-49-929Z.yml @@ -0,0 +1,226 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e160]: + - heading "Governance Inbox" [level=1] [ref=e161] + - paragraph [ref=e162]: Daily operator queue for governance follow-up, accepted risk, evidence gaps, and review handoff. + - generic [ref=e165]: + - generic [ref=e166]: + - generic [ref=e167]: + - generic [ref=e168]: + - generic [ref=e169]: + - paragraph [ref=e170]: Open governance work + - heading "1 open governance item needs attention" [level=2] [ref=e171] + - paragraph [ref=e172]: The inbox turns current findings, accepted-risk records, evidence gaps, review follow-up, and blocked operations into one operator queue. + - generic [ref=e173]: + - generic [ref=e176]: "Workspace: wp" + - generic [ref=e179]: "Source focus: All source families" + - generic [ref=e182]: "Environment: Spec342 Demo Accepted Risks" + - generic [ref=e184]: + - generic [ref=e185]: "Environment filter:" + - generic [ref=e186]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e187] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: Next recommended action + - 'heading "Review accepted risk: Finding #4" [level=3] [ref=e193]' + - generic [ref=e194]: + - generic [ref=e197]: Risk / exception review + - generic [ref=e200]: Expiring + - generic [ref=e203]: Spec342 Demo Accepted Risks + - generic [ref=e204]: + - generic [ref=e205]: + - term [ref=e206]: Reason + - definition [ref=e207]: Pending owner confirmation. + - generic [ref=e208]: + - term [ref=e209]: Impact + - definition [ref=e210]: Accepted risk expiring + - generic [ref=e211]: + - link "Review accepted risk" [ref=e212] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2&nav%5Bsource_surface%5D=governance.inbox&nav%5Bcanonical_route_name%5D=filament.admin.pages.governance.inbox&nav%5Benvironment_id%5D=41&nav%5Bback_label%5D=Back+to+governance+inbox&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fgovernance%2Finbox%3Fenvironment_id%3D41 + - img [ref=e213] + - text: Review accepted risk + - link "View lane" [ref=e215] [cursor=pointer]: + - /url: "#lane-risk_exception_review" + - generic [ref=e217]: + - generic [ref=e218]: + - paragraph [ref=e219]: Risk / exception review + - generic [ref=e222]: "1" + - paragraph [ref=e223]: Accepted-risk and exception records that need approval, renewal, closure, or support review. + - generic [ref=e224]: + - generic [ref=e227]: Needs triage · Clear + - generic [ref=e230]: Requires decision · Clear + - generic [ref=e233]: Evidence required · Clear + - generic [ref=e236]: Blocked · Clear + - generic [ref=e237]: + - generic [ref=e238]: + - heading "Primary inbox lanes" [level=2] [ref=e239] + - paragraph [ref=e240]: Active operator work stays grouped by the next path needed to clear it. Supporting source context stays below the fold. + - generic [ref=e241]: + - generic [ref=e243]: + - generic [ref=e244]: + - heading "Risk / exception review" [level=3] [ref=e245] + - generic [ref=e248]: "1" + - paragraph [ref=e249]: Accepted-risk and exception records that need approval, renewal, closure, or support review. + - list [ref=e250]: + - listitem [ref=e251]: + - generic [ref=e252]: + - generic [ref=e253]: + - generic [ref=e254]: + - generic [ref=e257]: Risk / exception review + - generic [ref=e260]: Expiring + - generic [ref=e263]: Spec342 Demo Accepted Risks + - 'heading "Finding #4" [level=4] [ref=e264]' + - paragraph [ref=e265]: Pending owner confirmation. + - link "Review accepted risk" [ref=e266] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2&nav%5Bsource_surface%5D=governance.inbox&nav%5Bcanonical_route_name%5D=filament.admin.pages.governance.inbox&nav%5Benvironment_id%5D=41&nav%5Bback_label%5D=Back+to+governance+inbox&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fgovernance%2Finbox%3Fenvironment_id%3D41 + - img [ref=e267] + - text: Review accepted risk + - generic [ref=e269]: + - generic [ref=e270]: + - term [ref=e271]: Reason + - definition [ref=e272]: Pending owner confirmation. + - generic [ref=e273]: + - term [ref=e274]: Impact + - definition [ref=e275]: Accepted risk expiring + - group [ref=e276]: + - generic "More context" [ref=e277] [cursor=pointer] + - group [ref=e278]: + - generic "Source detail" [ref=e279] [cursor=pointer] + - group [ref=e280]: + - generic "Diagnostics / source detail · Collapsed" [ref=e281] [cursor=pointer] + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-50-06-577Z.yml b/.playwright-mcp/page-2026-06-05T02-50-06-577Z.yml new file mode 100644 index 00000000..52ac5685 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-50-06-577Z.yml @@ -0,0 +1,394 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Evidence Overview" [level=1] [ref=e161] + - button "Clear filters" [ref=e164] [cursor=pointer] + - generic [ref=e167]: + - generic [ref=e169]: + - generic [ref=e170]: + - generic [ref=e171]: + - generic [ref=e174]: Environment proof scope + - generic [ref=e177]: Evidence proof workbench + - heading "Is this evidence package ready for customer or auditor consumption?" [level=2] [ref=e178] + - paragraph [ref=e179]: What proof is available for this scope? Filtered to Spec342 Demo Evidence Incomplete. Proof states below are derived from records directly attributed to this environment. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec342 Demo Evidence Incomplete + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e188]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e191]: Primary proof path + - generic [ref=e192]: Customer-safe review required + - link "Review customer output" [ref=e193] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=38 + - img [ref=e194] + - text: Review customer output + - generic [ref=e196]: + - generic [ref=e197]: + - heading "Spec342 Demo Evidence Incomplete" [level=3] [ref=e198] + - paragraph [ref=e199]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e200]: + - generic [ref=e201]: + - term [ref=e202]: Status + - definition [ref=e203]: Customer-safe review required + - generic [ref=e204]: + - term [ref=e205]: Reason + - definition [ref=e206]: A review pack exists, but customer-safe output has not been confirmed by repo-backed review/package readiness. + - generic [ref=e207]: + - term [ref=e208]: Impact + - definition [ref=e209]: Do not share the pack externally until it has been reviewed. + - generic [ref=e210]: + - term [ref=e211]: Evidence path + - definition [ref=e212]: "Environment scope selected · Snapshot: Available · Stored report: Available · Review pack: Available · Customer-safe output: Needs review · Export: Available · Operation #24" + - generic [ref=e213]: + - term [ref=e214]: Primary next action + - definition [ref=e215]: + - generic [ref=e216]: Review customer output + - paragraph [ref=e217]: Opens the customer review workspace before any external sharing decision. + - complementary [ref=e218]: + - generic [ref=e219]: + - generic [ref=e220]: + - heading "Evidence proof" [level=3] [ref=e221] + - paragraph [ref=e222]: Evidence path rows list only repo-supported proof sources. Missing pieces stay explicit. + - generic [ref=e223]: + - generic [ref=e225]: + - generic [ref=e226]: + - generic [ref=e227]: Source data + - paragraph [ref=e228]: Workspace and environment scope are established. + - generic [ref=e229]: Available + - generic [ref=e230]: + - generic [ref=e231]: + - generic [ref=e232]: + - generic [ref=e233]: Evidence snapshot + - paragraph [ref=e234]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e235]: Partially complete + - link "Open proof" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e237]: + - generic [ref=e238]: + - generic [ref=e239]: + - generic [ref=e240]: Stored report / export + - paragraph [ref=e241]: Entra admin roles report + - generic [ref=e242]: Available + - link "Open proof" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/stored-reports/5 + - generic [ref=e244]: + - generic [ref=e245]: + - generic [ref=e246]: + - generic [ref=e247]: Review pack + - paragraph [ref=e248]: Customer-review artifact exists for this evidence path. + - generic [ref=e249]: Ready + - link "Open proof" [ref=e250] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/review-packs/4 + - generic [ref=e251]: + - generic [ref=e252]: + - generic [ref=e253]: + - generic [ref=e254]: Operation proof + - paragraph [ref=e255]: environment.review_pack.generate · Succeeded · Started 2026-06-01 00:57:15 · Completed 2026-06-01 00:59:15 · Requested by Spec342 Demo Operator + - generic [ref=e256]: Available + - link "Open operation" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations/24 + - generic [ref=e258]: + - generic [ref=e259]: + - generic [ref=e260]: + - generic [ref=e261]: Export artifact + - paragraph [ref=e262]: Signed download is available for authorized users. + - generic [ref=e263]: Available + - link "Download export" [ref=e264] [cursor=pointer]: + - /url: http://localhost/admin/review-packs/4/download?expires=1780631406&signature=1deea69dd3b9c33ed033b1b2117eeae3fe4789d98d1cd84ecfd03d1ffecf1f7a + - generic [ref=e265]: + - generic [ref=e266]: + - generic [ref=e267]: + - generic [ref=e268]: Customer-safe state + - paragraph [ref=e269]: Readiness is not confirmed. + - generic [ref=e270]: Needs review + - link "Open customer workspace" [ref=e271] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=38 + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: Diagnostics + - paragraph [ref=e276]: Raw report metadata, raw evidence payloads, generation diagnostics, export diagnostics, provider diagnostics, stack traces, and internal exceptions stay collapsed by default. + - generic [ref=e277]: Collapsed + - group [ref=e278]: + - generic "Diagnostics - Collapsed" [ref=e279] [cursor=pointer] + - generic [ref=e281]: + - generic [ref=e282]: + - heading "Evidence readiness flow" [level=2] [ref=e283] + - paragraph [ref=e284]: Customer-safe evidence requires source data, evidence snapshot, stored report, review pack, and export readiness. + - list "Evidence readiness pipeline" [ref=e285]: + - listitem [ref=e286]: + - generic [ref=e287]: + - generic [ref=e288]: + - generic [ref=e289]: "1" + - generic [ref=e290]: + - generic [ref=e291]: Source data selected + - generic [ref=e293]: Available + - paragraph [ref=e294]: Environment scope is established from the workspace context. + - generic [ref=e296]: → + - listitem [ref=e297]: + - generic [ref=e298]: + - generic [ref=e299]: + - generic [ref=e300]: "2" + - generic [ref=e301]: + - generic [ref=e302]: Evidence snapshot + - generic [ref=e304]: Available + - paragraph [ref=e305]: Snapshot proof exists. + - generic [ref=e307]: → + - listitem [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: + - generic [ref=e311]: "3" + - generic [ref=e312]: + - generic [ref=e313]: Stored report + - generic [ref=e315]: Available + - paragraph [ref=e316]: Stored report exists. + - generic [ref=e318]: → + - listitem [ref=e319]: + - generic [ref=e320]: + - generic [ref=e321]: + - generic [ref=e322]: "4" + - generic [ref=e323]: + - generic [ref=e324]: Review pack + - generic [ref=e326]: Available + - paragraph [ref=e327]: Review pack exists. + - generic [ref=e329]: → + - listitem [ref=e330]: + - generic [ref=e331]: + - generic [ref=e332]: + - generic [ref=e333]: "5" + - generic [ref=e334]: + - generic [ref=e335]: Customer-safe output + - generic [ref=e337]: Needs review + - paragraph [ref=e338]: Readiness is not confirmed. + - generic [ref=e340]: → + - listitem [ref=e341]: + - generic [ref=e342]: + - generic [ref=e343]: + - generic [ref=e344]: "6" + - generic [ref=e345]: + - generic [ref=e346]: Export / delivery + - generic [ref=e348]: Available + - paragraph [ref=e349]: Authorized download is available. + - generic [ref=e350]: + - generic [ref=e351]: + - heading "Review pack contents / coverage" [level=3] [ref=e352] + - paragraph [ref=e353]: Repo-backed values only. + - paragraph [ref=e354]: Coverage values are derived from the generated review-pack summary and file metadata. + - generic [ref=e355]: + - generic [ref=e356]: + - generic [ref=e357]: Findings included + - generic [ref=e358]: "87" + - generic [ref=e359]: + - generic [ref=e360]: Reports included + - generic [ref=e361]: "0" + - generic [ref=e362]: + - generic [ref=e363]: Generated files + - generic [ref=e364]: "1" + - generic [ref=e365]: + - generic [ref=e366]: + - heading "Evidence inventory" [level=2] [ref=e367] + - paragraph [ref=e368]: Secondary context for scanning historical proof records after the current path is clear. + - generic [ref=e371]: + - generic [ref=e374]: + - generic [ref=e375]: + - generic [ref=e376]: Search + - generic [ref=e377]: + - img [ref=e379] + - searchbox "Search" [ref=e382] + - button "Filter" [ref=e385] [cursor=pointer]: + - img [ref=e386] + - generic [ref=e389]: "1" + - generic [ref=e390]: + - generic [ref=e391]: + - generic [ref=e392]: Active filters + - generic [ref=e394]: + - generic [ref=e396]: "Environment: Spec342 Demo Evidence Incomplete" + - button "Remove filter" [ref=e397] [cursor=pointer]: + - img [ref=e398] + - generic [ref=e400]: Remove filter + - button [ref=e401] [cursor=pointer]: + - img [ref=e402] + - table [ref=e405]: + - rowgroup [ref=e406]: + - row "Environment Outcome Generated Next step" [ref=e407]: + - columnheader "Environment" [ref=e408]: + - button "Environment" [ref=e409] [cursor=pointer]: + - text: Environment + - img [ref=e410] + - columnheader "Outcome" [ref=e412]: + - button "Outcome" [ref=e413] [cursor=pointer]: + - text: Outcome + - img [ref=e414] + - columnheader "Generated" [ref=e416]: + - button "Generated" [ref=e417] [cursor=pointer]: + - text: Generated + - img [ref=e418] + - columnheader "Next step" [ref=e420] + - rowgroup [ref=e421]: + - row "Spec342 Demo Evidence Incomplete Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow. 2026-06-01 00:53:15 Refresh evidence before using this snapshot" [ref=e422]: + - cell "Spec342 Demo Evidence Incomplete" [ref=e423]: + - link "Spec342 Demo Evidence Incomplete" [ref=e424] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e425]: Spec342 Demo Evidence Incomplete + - cell "Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow." [ref=e426]: + - link "Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow." [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e428]: + - paragraph [ref=e429]: + - generic [ref=e430]: + - img [ref=e431] + - text: Partially complete + - paragraph [ref=e433]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - cell "2026-06-01 00:53:15" [ref=e434]: + - link "2026-06-01 00:53:15" [ref=e435] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e436]: 2026-06-01 00:53:15 + - cell "Refresh evidence before using this snapshot" [ref=e437]: + - link "Refresh evidence before using this snapshot" [ref=e438] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e439]: Refresh evidence before using this snapshot + - navigation "Pagination navigation" [ref=e440]: + - generic [ref=e443]: + - generic [ref=e445]: Per page + - combobox "Per page" [ref=e447]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-50-32-422Z.yml b/.playwright-mcp/page-2026-06-05T02-50-32-422Z.yml new file mode 100644 index 00000000..b16e33a0 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-50-32-422Z.yml @@ -0,0 +1,337 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec342 Demo Accepted Risks + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Workspace: wp" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Workspace + - generic "wp" [ref=e55] + - generic [ref=e56]: 5 environments + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Monitoring + - button "Monitoring" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Finding exceptions" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e76] + - generic [ref=e78]: Finding exceptions + - listitem [ref=e79]: + - link "Operations" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e81] + - generic [ref=e83]: Operations + - listitem [ref=e84]: + - link "Alerts" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e86] + - generic [ref=e88]: Alerts + - listitem [ref=e89]: + - link "Evidence" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e91] + - generic [ref=e93]: Evidence + - listitem [ref=e94]: + - link "Audit Log" [ref=e95] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e96] + - generic [ref=e98]: Audit Log + - listitem [ref=e99]: + - generic [ref=e100] [cursor=pointer]: + - generic [ref=e101]: Reporting + - button "Reporting" [expanded] [ref=e102]: + - img [ref=e103] + - list [ref=e105]: + - listitem [ref=e106]: + - link "Reviews" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e108] + - generic [ref=e110]: Reviews + - listitem [ref=e111]: + - link "Customer reviews" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e113] + - generic [ref=e115]: Customer reviews + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Settings + - button "Settings" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Manage workspaces" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e125] + - generic [ref=e127]: Manage workspaces + - listitem [ref=e128]: + - link "Integrations" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e130] + - generic [ref=e132]: Integrations + - listitem [ref=e133]: + - link "Settings" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e135] + - generic [ref=e138]: Settings + - listitem [ref=e139]: + - generic [ref=e140] [cursor=pointer]: + - generic [ref=e141]: Governance + - button "Governance" [expanded] [ref=e142]: + - img [ref=e143] + - list [ref=e145]: + - listitem [ref=e146]: + - link "Governance inbox" [ref=e147] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e148] + - generic [ref=e150]: Governance inbox + - listitem [ref=e151]: + - link "Decision register" [ref=e152] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e153] + - generic [ref=e155]: Decision register + - main [ref=e157]: + - generic [ref=e159]: + - generic [ref=e160]: + - 'heading "Operation #24" [level=1] [ref=e162]' + - generic [ref=e164]: + - 'button "Environment scope: Spec342 Demo Accepted Risks" [disabled]' + - link "Back to Operations" [ref=e165] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - link "Show all operations" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - link "Refresh" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations/24 + - img [ref=e168] + - text: Refresh + - button "More" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e177]: + - generic [ref=e178]: + - paragraph [ref=e179]: Current environment context differs from this operation + - paragraph [ref=e180]: "Current environment context: Spec342 Demo Accepted Risks. Operation environment: Spec342 Demo Evidence Incomplete. This canonical workspace view remains valid without switching environment context." + - generic [ref=e184]: + - generic [ref=e185]: + - generic [ref=e187]: + - heading "Review pack generation" [level=2] [ref=e188] + - paragraph [ref=e189]: "Operation #24" + - generic [ref=e192]: + - generic [ref=e193]: + - generic [ref=e194]: + - img [ref=e195] + - generic [ref=e198]: Operation finished + - generic [ref=e199]: + - img [ref=e200] + - generic [ref=e203]: Completed successfully + - generic [ref=e204]: Decision guidance and high-signal context stay ahead of diagnostic payloads and raw JSON. + - generic [ref=e206]: + - generic [ref=e207]: + - generic [ref=e208]: Target + - generic [ref=e210]: No target scope details were recorded for this operation. + - generic [ref=e211]: + - generic [ref=e212]: Elapsed + - generic [ref=e214]: 2 minutes + - generic [ref=e215]: + - generic [ref=e217]: + - heading "Decision" [level=2] [ref=e218] + - paragraph [ref=e219]: Start here to see what happened, how reliable the resulting artifact is, what was affected, and the one next step. + - generic [ref=e222]: + - generic [ref=e225]: + - generic [ref=e226]: + - generic [ref=e227]: Execution state + - generic [ref=e229]: + - img [ref=e230] + - generic [ref=e233]: Operation finished + - generic [ref=e234]: + - generic [ref=e235]: Outcome + - generic [ref=e237]: + - img [ref=e238] + - generic [ref=e241]: Completed successfully + - generic [ref=e242]: + - generic [ref=e243]: Artifact impact + - generic [ref=e245]: + - img [ref=e246] + - generic [ref=e250]: Internal only + - generic [ref=e251]: The pack finished, but it should stay internal until the source review is refreshed. + - generic [ref=e252]: + - generic [ref=e253]: Dominant cause + - generic [ref=e255]: Review Pack Missing Snapshot + - generic [ref=e256]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e257]: + - generic [ref=e258]: Result trust + - generic [ref=e260]: Not usable yet + - generic [ref=e261]: This output is not reliable enough to support the intended operator action yet. + - generic [ref=e262]: + - generic [ref=e263]: Sharing scope + - generic [ref=e265]: The pack is suitable for internal follow-up only in its current state. + - generic [ref=e266]: Backed by related artifact truth. + - generic [ref=e268]: + - generic [ref=e269]: Primary next step + - generic [ref=e270]: Refresh the source review before sharing this pack. + - generic [ref=e271]: + - generic [ref=e272]: + - generic [ref=e273]: Guidance + - generic [ref=e274]: + - generic [ref=e276]: + - heading "Guidance" [level=2] [ref=e277] + - paragraph [ref=e278]: Secondary guidance explains caveats and context without competing with the primary next step. + - generic [ref=e283]: + - generic [ref=e284]: + - generic [ref=e285]: Result trust + - generic [ref=e287]: Not usable yet + - generic [ref=e288]: This output is not reliable enough to support the intended operator action yet. + - generic [ref=e289]: + - generic [ref=e290]: Result meaning + - generic [ref=e292]: Result unavailable + - generic [ref=e293]: The artifact exists, but freshness limits how confidently it should be used. + - generic [ref=e294]: + - generic [ref=e295]: Secondary causes + - generic [ref=e297]: Source review is stale · Internal-only outcome + - generic [ref=e298]: Additional contributing causes stay visible without replacing the dominant cause. + - generic [ref=e299]: + - generic [ref=e300]: Coverage + - generic [ref=e302]: The artifact exists, but freshness limits how confidently it should be used. + - generic [ref=e303]: + - generic [ref=e304]: Diagnostics summary + - generic [ref=e306]: Technical truth detail remains available below the primary explanation. + - generic [ref=e307]: + - generic [ref=e308]: Lifecycle + - generic [ref=e309]: + - generic [ref=e311]: + - heading "Lifecycle" [level=2] [ref=e312] + - paragraph [ref=e313]: Lifecycle context explains freshness, reconciliation, and tenant-scoped caveats. + - generic [ref=e318]: + - generic [ref=e319]: + - generic [ref=e320]: ManagedEnvironment lifecycle + - generic [ref=e322]: + - img [ref=e323] + - generic [ref=e326]: Active + - generic [ref=e327]: + - generic [ref=e328]: Freshness + - generic [ref=e330]: Terminal truth confirmed + - generic [ref=e331]: + - generic [ref=e332]: Timing + - generic [ref=e333]: + - heading "Timing" [level=2] [ref=e336] + - generic [ref=e341]: + - generic [ref=e342]: + - generic [ref=e343]: Created + - generic [ref=e345]: Mon, Jun 1, 2026 1:05 AM + - generic [ref=e346]: + - generic [ref=e347]: Started + - generic [ref=e349]: Mon, Jun 1, 2026 12:57 AM + - generic [ref=e350]: + - generic [ref=e351]: Completed + - generic [ref=e353]: Mon, Jun 1, 2026 12:59 AM + - generic [ref=e354]: + - generic [ref=e355]: Elapsed + - generic [ref=e357]: 2 minutes + - generic [ref=e358]: + - generic [ref=e359]: Metadata + - generic [ref=e360]: + - generic [ref=e362]: + - heading "Metadata" [level=2] [ref=e363] + - paragraph [ref=e364]: Secondary metadata remains visible without crowding the top decision surface. + - generic [ref=e369]: + - generic [ref=e370]: + - generic [ref=e371]: Initiator + - generic [ref=e373]: Spec342 Demo Operator + - generic [ref=e374]: + - generic [ref=e375]: Expected duration + - generic [ref=e377]: Typically ~1 min + - generic [ref=e378]: + - generic [ref=e379]: + - heading "Related context" [level=2] [ref=e382] + - generic [ref=e387]: + - generic [ref=e388]: Operations + - generic [ref=e389]: + - generic [ref=e390]: + - link "Operations" [ref=e391] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=38&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F3%2Foperations%3Fenvironment_id%3D38&environment_id=38 + - generic [ref=e392]: Spec342 Demo Evidence Incomplete + - generic [ref=e393]: + - generic [ref=e396]: ManagedEnvironment context + - link "Open operations" [ref=e397] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=38&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F3%2Foperations%3Fenvironment_id%3D38&environment_id=38 + - img [ref=e398] + - text: Open operations + - generic [ref=e402] [cursor=pointer]: + - generic [ref=e403]: + - heading "Artifact truth details" [level=2] [ref=e404] + - paragraph [ref=e405]: Detailed artifact-truth context explains evidence quality and caveats without repeating the top decision summary. + - button [ref=e406]: + - img [ref=e407] + - generic [ref=e411] [cursor=pointer]: + - generic [ref=e412]: + - heading "Context" [level=2] [ref=e413] + - paragraph [ref=e414]: Stored run context stays available for debugging without dominating the default reading path. + - button [ref=e415]: + - img [ref=e416] + - generic [ref=e418]: + - heading "Monitoring detail" [level=2] [ref=e421] + - generic [ref=e423]: + - paragraph [ref=e424]: Scope context, return navigation, utility, related drilldowns, and run-specific follow-up stay in separate lanes on this viewer. + - generic [ref=e425]: + - generic [ref=e426]: + - paragraph [ref=e427]: Scope context + - paragraph [ref=e428]: "Environment scope: Spec342 Demo Accepted Risks" + - paragraph [ref=e429]: The current workspace or tenant scope remains visible without behaving like a primary task action. + - generic [ref=e430]: + - paragraph [ref=e431]: Navigation lane + - paragraph [ref=e432]: Back to Operations + - paragraph [ref=e433]: Return to the operations landing when this review is complete. + - generic [ref=e434]: + - paragraph [ref=e435]: Utility lane + - paragraph [ref=e436]: Refresh + - paragraph [ref=e437]: Refresh keeps the current run state accurate without changing scope. + - generic [ref=e438]: + - paragraph [ref=e439]: Related drilldown + - paragraph [ref=e440]: Open + - paragraph [ref=e441]: Open keeps secondary drilldowns grouped under one control when downstream context exists. + - generic [ref=e442]: + - paragraph [ref=e443]: Follow-up lane + - paragraph [ref=e444]: No follow-up action + - paragraph [ref=e445]: No run-specific follow-up is currently available. + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-50-46-333Z.yml b/.playwright-mcp/page-2026-06-05T02-50-46-333Z.yml new file mode 100644 index 00000000..d040443f --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-50-46-333Z.yml @@ -0,0 +1,463 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 352 Guidance Browser Audit" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 352 Guidance Browser Audit + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 352 Audit No Urgent Action + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "6" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Spec 352 Requester" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Environment: Spec 352 Audit No Urgent Action" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Environment + - generic "Spec 352 Audit No Urgent Action" [ref=e55] + - generic [ref=e56]: "Workspace: Spec 352 Guidance Browser Audit" + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Inventory + - button "Inventory" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Items" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/inventory + - img [ref=e76] + - generic [ref=e78]: Items + - listitem [ref=e79]: + - link "Policies" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/policies + - img [ref=e81] + - generic [ref=e83]: Policies + - listitem [ref=e84]: + - link "Policy Versions" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/policy-versions + - img [ref=e86] + - generic [ref=e88]: Policy Versions + - listitem [ref=e89]: + - link "Coverage" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/inventory/inventory-coverage + - img [ref=e91] + - generic [ref=e93]: Coverage + - listitem [ref=e94]: + - generic [ref=e95] [cursor=pointer]: + - generic [ref=e96]: Reporting + - button "Reporting" [expanded] [ref=e97]: + - img [ref=e98] + - list [ref=e100]: + - listitem [ref=e101]: + - link "Reviews" [ref=e102] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/environment-reviews + - img [ref=e103] + - generic [ref=e105]: Reviews + - listitem [ref=e106]: + - link "Stored reports" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/stored-reports + - img [ref=e108] + - generic [ref=e110]: Stored reports + - listitem [ref=e111]: + - link "Review Packs" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/review-packs + - img [ref=e113] + - generic [ref=e115]: Review Packs + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Governance + - button "Governance" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Findings" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/findings + - img [ref=e125] + - generic [ref=e127]: Findings + - listitem [ref=e128]: + - link "Baselines" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/baseline-profiles + - img [ref=e130] + - generic [ref=e132]: Baselines + - listitem [ref=e133]: + - link "Baseline Snapshots" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/baseline-snapshots + - img [ref=e135] + - generic [ref=e138]: Baseline Snapshots + - listitem [ref=e139]: + - link "Baseline Compare" [ref=e140] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/baseline-compare + - img [ref=e141] + - generic [ref=e143]: Baseline Compare + - listitem [ref=e144]: + - link "Evidence" [ref=e145] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/evidence + - img [ref=e146] + - generic [ref=e148]: Evidence + - listitem [ref=e149]: + - link "Risk exceptions" [ref=e150] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/finding-exceptions + - img [ref=e151] + - generic [ref=e153]: Risk exceptions + - listitem [ref=e154]: + - generic [ref=e155] [cursor=pointer]: + - generic [ref=e156]: Backups & Restore + - button "Backups & Restore" [expanded] [ref=e157]: + - img [ref=e158] + - list [ref=e160]: + - listitem [ref=e161]: + - link "Backup Schedules" [ref=e162] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/backup-schedules + - img [ref=e163] + - generic [ref=e165]: Backup Schedules + - listitem [ref=e166]: + - link "Backup Sets" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/backup-sets + - img [ref=e168] + - generic [ref=e170]: Backup Sets + - listitem [ref=e171]: + - link "Restore Runs" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/restore-runs + - img [ref=e173] + - generic [ref=e175]: Restore Runs + - listitem [ref=e176]: + - generic [ref=e177] [cursor=pointer]: + - generic [ref=e178]: Directory + - button "Directory" [expanded] [ref=e179]: + - img [ref=e180] + - list [ref=e182]: + - listitem [ref=e183]: + - link "Groups" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/entra-groups + - img [ref=e185] + - generic [ref=e187]: Groups + - listitem [ref=e188]: + - generic [ref=e189] [cursor=pointer]: + - generic [ref=e190]: Workspace-wide + - button "Workspace-wide" [expanded] [ref=e191]: + - img [ref=e192] + - list [ref=e194]: + - listitem [ref=e195]: + - link "Finding exceptions" [ref=e196] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=53 + - img [ref=e197] + - generic [ref=e199]: Finding exceptions + - listitem [ref=e200]: + - link "Reviews" [ref=e201] [cursor=pointer]: + - /url: http://localhost/admin/reviews?environment_id=53 + - img [ref=e202] + - generic [ref=e204]: Reviews + - listitem [ref=e205]: + - link "Governance inbox" [ref=e206] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox?environment_id=53 + - img [ref=e207] + - generic [ref=e209]: Governance inbox + - listitem [ref=e210]: + - link "Decision register" [ref=e211] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions?environment_id=53 + - img [ref=e212] + - generic [ref=e214]: Decision register + - listitem [ref=e215]: + - link "Operations" [ref=e216] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=53 + - img [ref=e217] + - generic [ref=e219]: Operations + - listitem [ref=e220]: + - link "Alerts" [ref=e221] [cursor=pointer]: + - /url: http://localhost/admin/alerts?environment_id=53 + - img [ref=e222] + - generic [ref=e224]: Alerts + - listitem [ref=e225]: + - link "Evidence" [ref=e226] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview?environment_id=53 + - img [ref=e227] + - generic [ref=e229]: Evidence + - listitem [ref=e230]: + - link "Audit Log" [ref=e231] [cursor=pointer]: + - /url: http://localhost/admin/audit-log?environment_id=53 + - img [ref=e232] + - generic [ref=e234]: Audit Log + - listitem [ref=e235]: + - link "Customer reviews" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=53 + - img [ref=e237] + - generic [ref=e239]: Customer reviews + - listitem [ref=e240]: + - generic [ref=e241] [cursor=pointer]: + - generic [ref=e242]: Workspace admin + - button "Workspace admin" [expanded] [ref=e243]: + - img [ref=e244] + - list [ref=e246]: + - listitem [ref=e247]: + - link "Manage workspaces" [ref=e248] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e249] + - generic [ref=e251]: Manage workspaces + - listitem [ref=e252]: + - link "Integrations" [ref=e253] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections?environment_id=53 + - img [ref=e254] + - generic [ref=e256]: Integrations + - listitem [ref=e257]: + - link "Settings" [ref=e258] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e259] + - generic [ref=e262]: Settings + - main [ref=e264]: + - generic [ref=e266]: + - generic [ref=e267]: + - generic [ref=e268]: + - heading "Spec 352 Audit No Urgent Action Calm" [level=1] [ref=e269]: + - generic [ref=e270]: + - generic [ref=e271]: Spec 352 Audit No Urgent Action + - generic [ref=e272]: Calm + - paragraph [ref=e273]: Environment governance overview + - button "More" [ref=e278] [cursor=pointer]: + - img [ref=e279] + - generic [ref=e282]: + - generic [ref=e288]: + - generic [ref=e289]: + - img [ref=e290] + - 'generic "Workspace: Spec 352 Guidance Browser Audit" [ref=e292]' + - generic [ref=e293]: + - img [ref=e294] + - generic [ref=e299]: Microsoft environment + - generic [ref=e300]: + - img [ref=e301] + - generic [ref=e303]: "Latest activity: 15 hours ago" + - generic [ref=e308]: + - generic [ref=e316]: + - link "High severity findings 0 No active pressure" [ref=e319] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/findings?tab=needs_action&high_severity=1 + - generic [ref=e320]: + - generic [ref=e322]: High severity findings + - generic [ref=e323]: "0" + - generic [ref=e324]: + - generic [ref=e325]: No active pressure + - img [ref=e326] + - link "Overdue findings 0 None overdue" [ref=e330] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/findings?tab=overdue + - generic [ref=e331]: + - generic [ref=e333]: Overdue findings + - generic [ref=e334]: "0" + - generic [ref=e335]: + - generic [ref=e336]: None overdue + - img [ref=e337] + - link "Missing permissions 0 Permission set complete" [ref=e341] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/required-permissions + - generic [ref=e342]: + - generic [ref=e344]: Missing permissions + - generic [ref=e345]: "0" + - generic [ref=e346]: + - generic [ref=e347]: Permission set complete + - img [ref=e348] + - link "Operations needing attention 0 No operations need attention" [ref=e352] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=53&activeTab=active + - generic [ref=e353]: + - generic [ref=e355]: Operations needing attention + - generic [ref=e356]: "0" + - generic [ref=e357]: + - generic [ref=e358]: No operations need attention + - img [ref=e359] + - generic [ref=e361]: + - generic [ref=e362]: + - generic [ref=e366]: + - generic [ref=e367]: + - generic [ref=e368]: + - heading "Is this environment ready, blocked, stale, or requiring review?" [level=2] [ref=e369] + - generic [ref=e370]: Calm + - paragraph [ref=e372]: No urgent operator action + - generic [ref=e373]: + - generic [ref=e374]: + - term [ref=e375]: Status + - definition [ref=e376]: Calm + - generic [ref=e377]: + - term [ref=e378]: Reason + - definition [ref=e379]: No immediate environment blocker is visible. + - generic [ref=e380]: + - term [ref=e381]: Why this matters + - definition [ref=e382]: Current findings, permissions, recovery posture, and recent operations do not show an urgent follow-up path. + - generic [ref=e383]: + - generic [ref=e384]: + - generic [ref=e385]: Recommended next action + - generic [ref=e386]: Review environment + - link "Review environment" [ref=e387] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/environment-reviews + - generic [ref=e388]: + - heading "Readiness dimensions" [level=2] [ref=e391] + - generic [ref=e394]: + - generic [ref=e396]: + - generic [ref=e398]: Baseline compare + - generic [ref=e400]: Ready + - paragraph [ref=e401]: Last compared 15 hours ago. + - generic [ref=e403]: + - generic [ref=e405]: Evidence coverage + - generic [ref=e407]: Unavailable + - paragraph [ref=e408]: No evidence snapshot is currently available for customer-safe output. + - generic [ref=e410]: + - generic [ref=e412]: Review freshness + - generic [ref=e414]: Not ready + - paragraph [ref=e415]: No review is currently available for this environment. + - generic [ref=e417]: + - generic [ref=e419]: Provider permissions + - generic [ref=e421]: Ready + - paragraph [ref=e422]: Required permissions currently look complete. + - generic [ref=e424]: + - generic [ref=e426]: Backup posture + - generic [ref=e428]: Healthy + - paragraph [ref=e429]: The latest completed backup was 15 hours and 20 minutes ago. Backup health reflects backup inputs only and does not prove restore success. + - generic [ref=e431]: + - generic [ref=e433]: Current review + - generic [ref=e435]: No active review + - paragraph [ref=e436]: There is currently no review in progress for this environment. + - generic [ref=e438]: + - generic [ref=e440]: Risk exceptions + - generic [ref=e442]: Calm + - paragraph [ref=e443]: No risk exceptions currently need attention. + - generic [ref=e445]: + - generic [ref=e447]: Provider Health + - generic [ref=e449]: Healthy + - paragraph [ref=e450]: Required permissions currently look complete. + - generic [ref=e452]: + - generic [ref=e454]: Customer-safe output + - generic [ref=e456]: No customer-safe output + - paragraph [ref=e457]: Generate a review pack once review and evidence are ready for handoff. + - generic [ref=e458]: + - generic [ref=e460]: + - heading "Recommended next actions" [level=2] [ref=e461] + - paragraph [ref=e462]: Recommended next actions are derived from repo-backed blockers and proof gaps. + - generic [ref=e465]: + - generic [ref=e466]: No immediate action is waiting. + - paragraph [ref=e467]: The environment currently looks calm. Use the status and readiness sections below to confirm what is healthy and what is simply unavailable. + - generic [ref=e468]: + - generic [ref=e470]: + - heading "Supporting signals" [level=2] [ref=e471] + - paragraph [ref=e472]: Additional readiness signals used to explain the current recommendation. + - table [ref=e477]: + - rowgroup [ref=e478]: + - row "Signal State Action" [ref=e479]: + - columnheader "Signal" [ref=e480] + - columnheader "State" [ref=e481] + - columnheader "Action" [ref=e482] + - rowgroup [ref=e483]: + - row "Baseline assignment Ready Open Baseline Compare" [ref=e484]: + - rowheader "Baseline assignment" [ref=e485] + - cell "Ready" [ref=e486]: + - generic [ref=e487]: Ready + - cell "Open Baseline Compare" [ref=e488]: + - link "Open Baseline Compare" [ref=e489] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/baseline-compare + - row "Evidence snapshot Unavailable Open evidence" [ref=e490]: + - rowheader "Evidence snapshot" [ref=e491] + - cell "Unavailable" [ref=e492]: + - generic [ref=e493]: Unavailable + - cell "Open evidence" [ref=e494]: + - link "Open evidence" [ref=e495] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/evidence + - row "Review freshness Not ready Open reviews" [ref=e496]: + - rowheader "Review freshness" [ref=e497] + - cell "Not ready" [ref=e498]: + - generic [ref=e499]: Not ready + - cell "Open reviews" [ref=e500]: + - link "Open reviews" [ref=e501] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/environment-reviews + - row "Provider permissions Ready Open required permissions" [ref=e502]: + - rowheader "Provider permissions" [ref=e503] + - cell "Ready" [ref=e504]: + - generic [ref=e505]: Ready + - cell "Open required permissions" [ref=e506]: + - link "Open required permissions" [ref=e507] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/required-permissions + - row "Backup posture Present Open backup posture" [ref=e508]: + - rowheader "Backup posture" [ref=e509] + - cell "Present" [ref=e510]: + - generic [ref=e511]: Present + - cell "Open backup posture" [ref=e512]: + - button "Open backup posture" [disabled] + - row "Operations follow-up None require review Open operations hub" [ref=e513]: + - rowheader "Operations follow-up" [ref=e514] + - cell "None require review" [ref=e515]: + - generic [ref=e516]: None require review + - cell "Open operations hub" [ref=e517]: + - link "Open operations hub" [ref=e518] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/operations?environment_id=53&activeTab=active + - group [ref=e522]: + - generic "Diagnostics - Collapsed" [ref=e523] [cursor=pointer] + - generic [ref=e525]: + - heading "Readiness proof" [level=2] [ref=e528] + - generic [ref=e531]: + - generic [ref=e532]: + - generic [ref=e533]: + - generic [ref=e535]: Baseline compare + - generic [ref=e537]: Ready + - paragraph [ref=e538]: Last compared 15 hours ago. + - link "Open Baseline Compare" [ref=e540] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/baseline-compare + - generic [ref=e541]: + - generic [ref=e542]: + - generic [ref=e544]: Evidence coverage + - generic [ref=e546]: Unavailable + - paragraph [ref=e547]: No evidence snapshot is currently available for customer-safe output. + - link "Open evidence" [ref=e549] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/evidence + - generic [ref=e550]: + - generic [ref=e551]: + - generic [ref=e553]: Review freshness + - generic [ref=e555]: Not ready + - paragraph [ref=e556]: No review is currently available for this environment. + - link "Open reviews" [ref=e558] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/33/environments/spec-352-audit-no-urgent/environment-reviews + - generic [ref=e559]: + - generic [ref=e560]: + - generic [ref=e562]: Provider permissions + - generic [ref=e564]: Ready + - paragraph [ref=e565]: Required permissions currently look complete. + - link "Open required permissions" [ref=e567] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/spec-352-guidance-browser-audit/environments/spec-352-audit-no-urgent/required-permissions + - generic [ref=e568]: + - generic [ref=e569]: + - generic [ref=e571]: Backup posture + - generic [ref=e573]: Healthy + - paragraph [ref=e574]: The latest completed backup was 15 hours and 20 minutes ago. Backup health reflects backup inputs only and does not prove restore success. + - generic [ref=e575]: + - button "Open backup posture" [disabled] + - generic [ref=e576]: + - generic [ref=e577]: + - generic [ref=e579]: Review pack + - generic [ref=e581]: No customer-safe output + - paragraph [ref=e582]: Generate a review pack once review and evidence are ready for handoff. + - link "View export artifacts" [ref=e584] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=53 + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-51-50-881Z.yml b/.playwright-mcp/page-2026-06-05T02-51-50-881Z.yml new file mode 100644 index 00000000..1771078d --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-51-50-881Z.yml @@ -0,0 +1,394 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 environments + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Evidence Overview" [level=1] [ref=e161] + - button "Clear filters" [ref=e164] [cursor=pointer] + - generic [ref=e167]: + - generic [ref=e169]: + - generic [ref=e170]: + - generic [ref=e171]: + - generic [ref=e174]: Environment proof scope + - generic [ref=e177]: Evidence proof workbench + - heading "Is this evidence package ready for customer or auditor consumption?" [level=2] [ref=e178] + - paragraph [ref=e179]: What proof is available for this scope? Filtered to Spec342 Demo Evidence Incomplete. Proof states below are derived from records directly attributed to this environment. + - generic [ref=e181]: + - generic [ref=e182]: "Environment filter:" + - generic [ref=e183]: Spec342 Demo Evidence Incomplete + - link "Clear filter" [ref=e184] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - generic [ref=e185]: + - main [ref=e186]: + - generic [ref=e188]: + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e191]: Primary proof path + - generic [ref=e192]: Customer-safe review required + - link "Review customer output" [ref=e193] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=38 + - img [ref=e194] + - text: Review customer output + - generic [ref=e196]: + - generic [ref=e197]: + - heading "Spec342 Demo Evidence Incomplete" [level=3] [ref=e198] + - paragraph [ref=e199]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e200]: + - generic [ref=e201]: + - term [ref=e202]: Status + - definition [ref=e203]: Customer-safe review required + - generic [ref=e204]: + - term [ref=e205]: Reason + - definition [ref=e206]: A review pack exists, but customer-safe output has not been confirmed by repo-backed review/package readiness. + - generic [ref=e207]: + - term [ref=e208]: Impact + - definition [ref=e209]: Do not share the pack externally until it has been reviewed. + - generic [ref=e210]: + - term [ref=e211]: Evidence path + - definition [ref=e212]: "Environment scope selected · Snapshot: Available · Stored report: Available · Review pack: Available · Customer-safe output: Needs review · Export: Available · Operation #24" + - generic [ref=e213]: + - term [ref=e214]: Primary next action + - definition [ref=e215]: + - generic [ref=e216]: Review customer output + - paragraph [ref=e217]: Opens the customer review workspace before any external sharing decision. + - complementary [ref=e218]: + - generic [ref=e219]: + - generic [ref=e220]: + - heading "Evidence proof" [level=3] [ref=e221] + - paragraph [ref=e222]: Evidence path rows list only repo-supported proof sources. Missing pieces stay explicit. + - generic [ref=e223]: + - generic [ref=e225]: + - generic [ref=e226]: + - generic [ref=e227]: Source data + - paragraph [ref=e228]: Workspace and environment scope are established. + - generic [ref=e229]: Available + - generic [ref=e230]: + - generic [ref=e231]: + - generic [ref=e232]: + - generic [ref=e233]: Evidence snapshot + - paragraph [ref=e234]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e235]: Partially complete + - link "Open proof" [ref=e236] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e237]: + - generic [ref=e238]: + - generic [ref=e239]: + - generic [ref=e240]: Stored report / export + - paragraph [ref=e241]: Entra admin roles report + - generic [ref=e242]: Available + - link "Open proof" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/stored-reports/5 + - generic [ref=e244]: + - generic [ref=e245]: + - generic [ref=e246]: + - generic [ref=e247]: Review pack + - paragraph [ref=e248]: Customer-review artifact exists for this evidence path. + - generic [ref=e249]: Ready + - link "Open proof" [ref=e250] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/review-packs/4 + - generic [ref=e251]: + - generic [ref=e252]: + - generic [ref=e253]: + - generic [ref=e254]: Operation proof + - paragraph [ref=e255]: environment.review_pack.generate · Succeeded · Started 2026-06-01 00:57:15 · Completed 2026-06-01 00:59:15 · Requested by Spec342 Demo Operator + - generic [ref=e256]: Available + - link "Open operation" [ref=e257] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations/24 + - generic [ref=e258]: + - generic [ref=e259]: + - generic [ref=e260]: + - generic [ref=e261]: Export artifact + - paragraph [ref=e262]: Signed download is available for authorized users. + - generic [ref=e263]: Available + - link "Download export" [ref=e264] [cursor=pointer]: + - /url: http://localhost/admin/review-packs/4/download?expires=1780631510&signature=24e7d9a72e40ed4df6aa02f230b7f4e256315224b9edc556a7f1db2438f17058 + - generic [ref=e265]: + - generic [ref=e266]: + - generic [ref=e267]: + - generic [ref=e268]: Customer-safe state + - paragraph [ref=e269]: Readiness is not confirmed. + - generic [ref=e270]: Needs review + - link "Open customer workspace" [ref=e271] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace?environment_id=38 + - generic [ref=e273]: + - generic [ref=e274]: + - generic [ref=e275]: Diagnostics + - paragraph [ref=e276]: Raw report metadata, raw evidence payloads, generation diagnostics, export diagnostics, provider diagnostics, stack traces, and internal exceptions stay collapsed by default. + - generic [ref=e277]: Collapsed + - group [ref=e278]: + - generic "Diagnostics - Collapsed" [ref=e279] [cursor=pointer] + - generic [ref=e281]: + - generic [ref=e282]: + - heading "Evidence readiness flow" [level=2] [ref=e283] + - paragraph [ref=e284]: Customer-safe evidence requires source data, evidence snapshot, stored report, review pack, and export readiness. + - list "Evidence readiness pipeline" [ref=e285]: + - listitem [ref=e286]: + - generic [ref=e287]: + - generic [ref=e288]: + - generic [ref=e289]: "1" + - generic [ref=e290]: + - generic [ref=e291]: Source data selected + - generic [ref=e293]: Available + - paragraph [ref=e294]: Environment scope is established from the workspace context. + - generic [ref=e296]: → + - listitem [ref=e297]: + - generic [ref=e298]: + - generic [ref=e299]: + - generic [ref=e300]: "2" + - generic [ref=e301]: + - generic [ref=e302]: Evidence snapshot + - generic [ref=e304]: Available + - paragraph [ref=e305]: Snapshot proof exists. + - generic [ref=e307]: → + - listitem [ref=e308]: + - generic [ref=e309]: + - generic [ref=e310]: + - generic [ref=e311]: "3" + - generic [ref=e312]: + - generic [ref=e313]: Stored report + - generic [ref=e315]: Available + - paragraph [ref=e316]: Stored report exists. + - generic [ref=e318]: → + - listitem [ref=e319]: + - generic [ref=e320]: + - generic [ref=e321]: + - generic [ref=e322]: "4" + - generic [ref=e323]: + - generic [ref=e324]: Review pack + - generic [ref=e326]: Available + - paragraph [ref=e327]: Review pack exists. + - generic [ref=e329]: → + - listitem [ref=e330]: + - generic [ref=e331]: + - generic [ref=e332]: + - generic [ref=e333]: "5" + - generic [ref=e334]: + - generic [ref=e335]: Customer-safe output + - generic [ref=e337]: Needs review + - paragraph [ref=e338]: Readiness is not confirmed. + - generic [ref=e340]: → + - listitem [ref=e341]: + - generic [ref=e342]: + - generic [ref=e343]: + - generic [ref=e344]: "6" + - generic [ref=e345]: + - generic [ref=e346]: Export / delivery + - generic [ref=e348]: Available + - paragraph [ref=e349]: Authorized download is available. + - generic [ref=e350]: + - generic [ref=e351]: + - heading "Review pack contents / coverage" [level=3] [ref=e352] + - paragraph [ref=e353]: Repo-backed values only. + - paragraph [ref=e354]: Coverage values are derived from the generated review-pack summary and file metadata. + - generic [ref=e355]: + - generic [ref=e356]: + - generic [ref=e357]: Findings included + - generic [ref=e358]: "87" + - generic [ref=e359]: + - generic [ref=e360]: Reports included + - generic [ref=e361]: "0" + - generic [ref=e362]: + - generic [ref=e363]: Generated files + - generic [ref=e364]: "1" + - generic [ref=e365]: + - generic [ref=e366]: + - heading "Evidence inventory" [level=2] [ref=e367] + - paragraph [ref=e368]: Secondary context for scanning historical proof records after the current path is clear. + - generic [ref=e371]: + - generic [ref=e374]: + - generic [ref=e375]: + - generic [ref=e376]: Search + - generic [ref=e377]: + - img [ref=e379] + - searchbox "Search" [ref=e382] + - button "Filter" [ref=e385] [cursor=pointer]: + - img [ref=e386] + - generic [ref=e389]: "1" + - generic [ref=e390]: + - generic [ref=e391]: + - generic [ref=e392]: Active filters + - generic [ref=e394]: + - generic [ref=e396]: "Environment: Spec342 Demo Evidence Incomplete" + - button "Remove filter" [ref=e397] [cursor=pointer]: + - img [ref=e398] + - generic [ref=e400]: Remove filter + - button [ref=e401] [cursor=pointer]: + - img [ref=e402] + - table [ref=e405]: + - rowgroup [ref=e406]: + - row "Environment Outcome Generated Next step" [ref=e407]: + - columnheader "Environment" [ref=e408]: + - button "Environment" [ref=e409] [cursor=pointer]: + - text: Environment + - img [ref=e410] + - columnheader "Outcome" [ref=e412]: + - button "Outcome" [ref=e413] [cursor=pointer]: + - text: Outcome + - img [ref=e414] + - columnheader "Generated" [ref=e416]: + - button "Generated" [ref=e417] [cursor=pointer]: + - text: Generated + - img [ref=e418] + - columnheader "Next step" [ref=e420] + - rowgroup [ref=e421]: + - row "Spec342 Demo Evidence Incomplete Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow. 2026-06-01 00:53:15 Refresh evidence before using this snapshot" [ref=e422]: + - cell "Spec342 Demo Evidence Incomplete" [ref=e423]: + - link "Spec342 Demo Evidence Incomplete" [ref=e424] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e425]: Spec342 Demo Evidence Incomplete + - cell "Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow." [ref=e426]: + - link "Partially complete TenantPilot recorded a missing or invalid prerequisite for this workflow." [ref=e427] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e428]: + - paragraph [ref=e429]: + - generic [ref=e430]: + - img [ref=e431] + - text: Partially complete + - paragraph [ref=e433]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - cell "2026-06-01 00:53:15" [ref=e434]: + - link "2026-06-01 00:53:15" [ref=e435] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e436]: 2026-06-01 00:53:15 + - cell "Refresh evidence before using this snapshot" [ref=e437]: + - link "Refresh evidence before using this snapshot" [ref=e438] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 + - generic [ref=e439]: Refresh evidence before using this snapshot + - navigation "Pagination navigation" [ref=e440]: + - generic [ref=e443]: + - generic [ref=e445]: Per page + - combobox "Per page" [ref=e447]: + - option "25" [selected] + - option "50" + - option "All" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-51-56-064Z.yml b/.playwright-mcp/page-2026-06-05T02-51-56-064Z.yml new file mode 100644 index 00000000..c9a55db3 --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-51-56-064Z.yml @@ -0,0 +1,334 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec342 Demo Evidence Incomplete + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - generic [ref=e39]: + - button "Notifications" [disabled]: + - img + - generic: + - generic: "20" + - button "User menu" [ref=e42] [cursor=pointer]: + - img "Avatar of Ahmed Darrazi" [ref=e43] + - generic [ref=e44]: + - complementary [ref=e45]: + - navigation [ref=e48]: + - 'link "Workspace: wp" [ref=e49] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e51] + - generic [ref=e53]: + - generic [ref=e54]: Workspace + - generic "wp" [ref=e55] + - generic [ref=e56]: 5 environments + - img [ref=e57] + - list [ref=e59]: + - listitem [ref=e60]: + - list [ref=e61]: + - listitem [ref=e62]: + - link "Overview" [ref=e63] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e64] + - generic [ref=e66]: Overview + - listitem [ref=e67]: + - generic [ref=e68] [cursor=pointer]: + - generic [ref=e69]: Monitoring + - button "Monitoring" [expanded] [ref=e70]: + - img [ref=e71] + - list [ref=e73]: + - listitem [ref=e74]: + - link "Finding exceptions" [ref=e75] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e76] + - generic [ref=e78]: Finding exceptions + - listitem [ref=e79]: + - link "Operations" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e81] + - generic [ref=e83]: Operations + - listitem [ref=e84]: + - link "Alerts" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e86] + - generic [ref=e88]: Alerts + - listitem [ref=e89]: + - link "Evidence" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e91] + - generic [ref=e93]: Evidence + - listitem [ref=e94]: + - link "Audit Log" [ref=e95] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e96] + - generic [ref=e98]: Audit Log + - listitem [ref=e99]: + - generic [ref=e100] [cursor=pointer]: + - generic [ref=e101]: Reporting + - button "Reporting" [expanded] [ref=e102]: + - img [ref=e103] + - list [ref=e105]: + - listitem [ref=e106]: + - link "Reviews" [ref=e107] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e108] + - generic [ref=e110]: Reviews + - listitem [ref=e111]: + - link "Customer reviews" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e113] + - generic [ref=e115]: Customer reviews + - listitem [ref=e116]: + - generic [ref=e117] [cursor=pointer]: + - generic [ref=e118]: Settings + - button "Settings" [expanded] [ref=e119]: + - img [ref=e120] + - list [ref=e122]: + - listitem [ref=e123]: + - link "Manage workspaces" [ref=e124] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e125] + - generic [ref=e127]: Manage workspaces + - listitem [ref=e128]: + - link "Integrations" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e130] + - generic [ref=e132]: Integrations + - listitem [ref=e133]: + - link "Settings" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e135] + - generic [ref=e138]: Settings + - listitem [ref=e139]: + - generic [ref=e140] [cursor=pointer]: + - generic [ref=e141]: Governance + - button "Governance" [expanded] [ref=e142]: + - img [ref=e143] + - list [ref=e145]: + - listitem [ref=e146]: + - link "Governance inbox" [ref=e147] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e148] + - generic [ref=e150]: Governance inbox + - listitem [ref=e151]: + - link "Decision register" [ref=e152] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e153] + - generic [ref=e155]: Decision register + - main [ref=e157]: + - generic [ref=e159]: + - generic [ref=e160]: + - 'heading "Operation #24" [level=1] [ref=e162]' + - generic [ref=e164]: + - 'button "Environment scope: Spec342 Demo Evidence Incomplete" [disabled]' + - link "Back to Operations" [ref=e165] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - link "Show all operations" [ref=e166] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - link "Refresh" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations/24 + - img [ref=e168] + - text: Refresh + - button "More" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e177]: + - generic [ref=e181]: + - generic [ref=e182]: + - generic [ref=e184]: + - heading "Review pack generation" [level=2] [ref=e185] + - paragraph [ref=e186]: "Operation #24" + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e191]: + - img [ref=e192] + - generic [ref=e195]: Operation finished + - generic [ref=e196]: + - img [ref=e197] + - generic [ref=e200]: Completed successfully + - generic [ref=e201]: Decision guidance and high-signal context stay ahead of diagnostic payloads and raw JSON. + - generic [ref=e203]: + - generic [ref=e204]: + - generic [ref=e205]: Target + - generic [ref=e207]: No target scope details were recorded for this operation. + - generic [ref=e208]: + - generic [ref=e209]: Elapsed + - generic [ref=e211]: 2 minutes + - generic [ref=e212]: + - generic [ref=e214]: + - heading "Decision" [level=2] [ref=e215] + - paragraph [ref=e216]: Start here to see what happened, how reliable the resulting artifact is, what was affected, and the one next step. + - generic [ref=e219]: + - generic [ref=e222]: + - generic [ref=e223]: + - generic [ref=e224]: Execution state + - generic [ref=e226]: + - img [ref=e227] + - generic [ref=e230]: Operation finished + - generic [ref=e231]: + - generic [ref=e232]: Outcome + - generic [ref=e234]: + - img [ref=e235] + - generic [ref=e238]: Completed successfully + - generic [ref=e239]: + - generic [ref=e240]: Artifact impact + - generic [ref=e242]: + - img [ref=e243] + - generic [ref=e247]: Internal only + - generic [ref=e248]: The pack finished, but it should stay internal until the source review is refreshed. + - generic [ref=e249]: + - generic [ref=e250]: Dominant cause + - generic [ref=e252]: Review Pack Missing Snapshot + - generic [ref=e253]: TenantPilot recorded a missing or invalid prerequisite for this workflow. + - generic [ref=e254]: + - generic [ref=e255]: Result trust + - generic [ref=e257]: Not usable yet + - generic [ref=e258]: This output is not reliable enough to support the intended operator action yet. + - generic [ref=e259]: + - generic [ref=e260]: Sharing scope + - generic [ref=e262]: The pack is suitable for internal follow-up only in its current state. + - generic [ref=e263]: Backed by related artifact truth. + - generic [ref=e265]: + - generic [ref=e266]: Primary next step + - generic [ref=e267]: Refresh the source review before sharing this pack. + - generic [ref=e268]: + - generic [ref=e269]: + - generic [ref=e270]: Guidance + - generic [ref=e271]: + - generic [ref=e273]: + - heading "Guidance" [level=2] [ref=e274] + - paragraph [ref=e275]: Secondary guidance explains caveats and context without competing with the primary next step. + - generic [ref=e280]: + - generic [ref=e281]: + - generic [ref=e282]: Result trust + - generic [ref=e284]: Not usable yet + - generic [ref=e285]: This output is not reliable enough to support the intended operator action yet. + - generic [ref=e286]: + - generic [ref=e287]: Result meaning + - generic [ref=e289]: Result unavailable + - generic [ref=e290]: The artifact exists, but freshness limits how confidently it should be used. + - generic [ref=e291]: + - generic [ref=e292]: Secondary causes + - generic [ref=e294]: Source review is stale · Internal-only outcome + - generic [ref=e295]: Additional contributing causes stay visible without replacing the dominant cause. + - generic [ref=e296]: + - generic [ref=e297]: Coverage + - generic [ref=e299]: The artifact exists, but freshness limits how confidently it should be used. + - generic [ref=e300]: + - generic [ref=e301]: Diagnostics summary + - generic [ref=e303]: Technical truth detail remains available below the primary explanation. + - generic [ref=e304]: + - generic [ref=e305]: Lifecycle + - generic [ref=e306]: + - generic [ref=e308]: + - heading "Lifecycle" [level=2] [ref=e309] + - paragraph [ref=e310]: Lifecycle context explains freshness, reconciliation, and tenant-scoped caveats. + - generic [ref=e315]: + - generic [ref=e316]: + - generic [ref=e317]: ManagedEnvironment lifecycle + - generic [ref=e319]: + - img [ref=e320] + - generic [ref=e323]: Active + - generic [ref=e324]: + - generic [ref=e325]: Freshness + - generic [ref=e327]: Terminal truth confirmed + - generic [ref=e328]: + - generic [ref=e329]: Timing + - generic [ref=e330]: + - heading "Timing" [level=2] [ref=e333] + - generic [ref=e338]: + - generic [ref=e339]: + - generic [ref=e340]: Created + - generic [ref=e342]: Mon, Jun 1, 2026 1:05 AM + - generic [ref=e343]: + - generic [ref=e344]: Started + - generic [ref=e346]: Mon, Jun 1, 2026 12:57 AM + - generic [ref=e347]: + - generic [ref=e348]: Completed + - generic [ref=e350]: Mon, Jun 1, 2026 12:59 AM + - generic [ref=e351]: + - generic [ref=e352]: Elapsed + - generic [ref=e354]: 2 minutes + - generic [ref=e355]: + - generic [ref=e356]: Metadata + - generic [ref=e357]: + - generic [ref=e359]: + - heading "Metadata" [level=2] [ref=e360] + - paragraph [ref=e361]: Secondary metadata remains visible without crowding the top decision surface. + - generic [ref=e366]: + - generic [ref=e367]: + - generic [ref=e368]: Initiator + - generic [ref=e370]: Spec342 Demo Operator + - generic [ref=e371]: + - generic [ref=e372]: Expected duration + - generic [ref=e374]: Typically ~1 min + - generic [ref=e375]: + - generic [ref=e376]: + - heading "Related context" [level=2] [ref=e379] + - generic [ref=e384]: + - generic [ref=e385]: Operations + - generic [ref=e386]: + - generic [ref=e387]: + - link "Operations" [ref=e388] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=38&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F3%2Foperations%3Fenvironment_id%3D38&environment_id=38 + - generic [ref=e389]: Spec342 Demo Evidence Incomplete + - generic [ref=e390]: + - generic [ref=e393]: ManagedEnvironment context + - link "Open operations" [ref=e394] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=38&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F3%2Foperations%3Fenvironment_id%3D38&environment_id=38 + - img [ref=e395] + - text: Open operations + - generic [ref=e399] [cursor=pointer]: + - generic [ref=e400]: + - heading "Artifact truth details" [level=2] [ref=e401] + - paragraph [ref=e402]: Detailed artifact-truth context explains evidence quality and caveats without repeating the top decision summary. + - button [ref=e403]: + - img [ref=e404] + - generic [ref=e408] [cursor=pointer]: + - generic [ref=e409]: + - heading "Context" [level=2] [ref=e410] + - paragraph [ref=e411]: Stored run context stays available for debugging without dominating the default reading path. + - button [ref=e412]: + - img [ref=e413] + - generic [ref=e415]: + - heading "Monitoring detail" [level=2] [ref=e418] + - generic [ref=e420]: + - paragraph [ref=e421]: Scope context, return navigation, utility, related drilldowns, and run-specific follow-up stay in separate lanes on this viewer. + - generic [ref=e422]: + - generic [ref=e423]: + - paragraph [ref=e424]: Scope context + - paragraph [ref=e425]: "Environment scope: Spec342 Demo Evidence Incomplete" + - paragraph [ref=e426]: The current workspace or tenant scope remains visible without behaving like a primary task action. + - generic [ref=e427]: + - paragraph [ref=e428]: Navigation lane + - paragraph [ref=e429]: Back to Operations + - paragraph [ref=e430]: Return to the operations landing when this review is complete. + - generic [ref=e431]: + - paragraph [ref=e432]: Utility lane + - paragraph [ref=e433]: Refresh + - paragraph [ref=e434]: Refresh keeps the current run state accurate without changing scope. + - generic [ref=e435]: + - paragraph [ref=e436]: Related drilldown + - paragraph [ref=e437]: Open + - paragraph [ref=e438]: Open keeps secondary drilldowns grouped under one control when downstream context exists. + - generic [ref=e439]: + - paragraph [ref=e440]: Follow-up lane + - paragraph [ref=e441]: No follow-up action + - paragraph [ref=e442]: No run-specific follow-up is currently available. + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-52-27-491Z.yml b/.playwright-mcp/page-2026-06-05T02-52-27-491Z.yml new file mode 100644 index 00000000..8ebb300e --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-52-27-491Z.yml @@ -0,0 +1,443 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Umgebung auswählen" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Sprache" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: DE + - img [ref=e22] + - button "Seitenleiste ausklappen" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Globale Suche + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Globale Suche" [ref=e37] + - generic [ref=e38]: + - button "Benachrichtigungen öffnen" [disabled]: + - img + - generic: + - generic: "20" + - button "Benutzermenü" [ref=e41] [cursor=pointer]: + - img "Avatar von Ahmed Darrazi" [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: wp" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "wp" [ref=e54] + - generic [ref=e55]: 5 Umgebungen + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operationen" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e80] + - generic [ref=e82]: Operationen + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Nachweise" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Nachweise + - listitem [ref=e93]: + - link "Audit-Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit-Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Berichte + - button "Berichte" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Kundenreviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Kundenreviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Einstellungen + - button "Einstellungen" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Workspaces verwalten" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Workspaces verwalten + - listitem [ref=e127]: + - link "Integrationen" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrationen + - listitem [ref=e132]: + - link "Einstellungen" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Einstellungen + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - generic [ref=e159]: + - heading "Finding Exceptions Queue" [level=1] [ref=e161] + - generic [ref=e163]: + - button "Clear filters" [ref=e164] [cursor=pointer]: + - img [ref=e165] + - text: Clear filters + - link "View environment findings" [ref=e167] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e168] + - text: View environment findings + - button "Focused review" [ref=e172] [cursor=pointer]: + - img [ref=e173] + - generic [ref=e176]: + - generic [ref=e180]: + - generic [ref=e181]: Canonical risk-acceptance approvals + - generic [ref=e182]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e183]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e184]: + - generic [ref=e185]: "Environment filter:" + - generic [ref=e186]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e187] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e188]: + - generic [ref=e190]: + - heading "Focused review lane" [level=2] [ref=e191] + - paragraph [ref=e192]: The selected exception defines the focused review context. The dominant guidance card explains what matters now before deeper decision history and evidence. + - generic [ref=e195]: + - generic [ref=e196]: + - generic [ref=e198]: + - generic [ref=e199]: + - generic [ref=e200]: + - generic [ref=e203]: Aktion erforderlich + - heading "Das Accepted-Risk-Prüffenster läuft bald ab" [level=2] [ref=e204] + - generic [ref=e205]: + - generic [ref=e206]: Grund + - paragraph [ref=e207]: Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden. + - generic [ref=e208]: + - generic [ref=e209]: Auswirkung + - paragraph [ref=e210]: Wenn das aktuelle Fenster nicht rechtzeitig geprüft wird, kann dieses Accepted Risk nicht länger als aktiv gesteuert gelten. + - generic [ref=e211]: + - generic [ref=e212]: + - term [ref=e213]: Umgebung + - definition [ref=e214]: Spec342 Demo Accepted Risks + - generic [ref=e215]: + - term [ref=e216]: Lifecycle-Status + - definition [ref=e217]: Expiring + - generic [ref=e218]: + - term [ref=e219]: Governance-Gültigkeit + - definition [ref=e220]: Expiring + - generic [ref=e221]: + - term [ref=e222]: Owner + - definition [ref=e223]: Ahmed Darrazi + - generic [ref=e224]: + - term [ref=e225]: Review fällig + - definition [ref=e226]: Sat, Jun 6, 2026 2:49 AM + - generic [ref=e227]: + - term [ref=e228]: Läuft ab + - definition [ref=e229]: Sun, Jun 7, 2026 2:49 AM + - generic [ref=e230]: + - term [ref=e231]: Aktuelle Entscheidung + - definition [ref=e232]: Approved + - generic [ref=e233]: + - term [ref=e234]: Anfragebegründung + - definition [ref=e235]: Spec355 expiring local fixture + - generic [ref=e236]: + - generic [ref=e237]: Was zu prüfen ist + - generic [ref=e238]: Prüfen Sie das aktive Governance-Fenster, bevor es abläuft. + - generic [ref=e239]: + - generic [ref=e240]: Verwandter Kontext + - generic [ref=e241]: + - link "Ausnahmedetail öffnen" [ref=e242] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions/9 + - link "Finding öffnen" [ref=e243] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/findings/15 + - generic [ref=e244]: + - generic [ref=e245]: Focused review controls + - generic [ref=e246]: Existing review actions stay in the page header so approval, rejection, and navigation keep their current confirmation and authorization boundaries. + - generic [ref=e247]: + - generic [ref=e248]: + - generic [ref=e249]: Status + - generic [ref=e250]: Active + - generic [ref=e251]: Valid + - generic [ref=e252]: The linked exception is still valid, but it is nearing expiry and needs review. + - generic [ref=e253]: + - generic [ref=e254]: Scope + - generic [ref=e255]: Spec342 Demo Accepted Risks + - generic [ref=e256]: "Finding #15" + - generic [ref=e257]: + - generic [ref=e258]: Review timing + - generic [ref=e259]: Review due Sat, Jun 6, 2026 2:49 AM + - generic [ref=e260]: Expires Sun, Jun 7, 2026 2:49 AM + - generic [ref=e261]: + - generic [ref=e262]: Request + - generic [ref=e263]: + - generic [ref=e264]: + - term [ref=e265]: Requested by + - definition [ref=e266]: Ahmed Darrazi + - generic [ref=e267]: + - term [ref=e268]: Owner + - definition [ref=e269]: Ahmed Darrazi + - generic [ref=e270]: + - term [ref=e271]: Reason + - definition [ref=e272]: Spec355 expiring local fixture + - generic [ref=e273]: + - generic [ref=e274]: Decision history + - generic [ref=e276]: + - generic [ref=e277]: Approved + - generic [ref=e278]: Ahmed Darrazi · Mon, Jun 1, 2026 2:49 AM + - generic [ref=e279]: Spec355 expiring local browser decision + - generic [ref=e282]: + - generic [ref=e285]: + - generic [ref=e286]: + - generic [ref=e287]: Suche + - generic [ref=e288]: + - img [ref=e290] + - searchbox "Suche" [ref=e293] + - button "Filtern" [ref=e296] [cursor=pointer]: + - img [ref=e297] + - generic [ref=e300]: "1" + - generic [ref=e301]: + - generic [ref=e302]: + - generic [ref=e303]: Aktive Filter + - generic [ref=e305]: + - generic [ref=e307]: "Environment: Spec342 Demo Accepted Risks" + - button "Filter löschen" [ref=e308] [cursor=pointer]: + - img [ref=e309] + - generic [ref=e311]: Filter löschen + - button [ref=e312] [cursor=pointer]: + - img [ref=e313] + - table [ref=e316]: + - rowgroup [ref=e317]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Aktion" [ref=e318]: + - columnheader "Status" [ref=e319] + - columnheader "Validity" [ref=e320] + - columnheader "Environment" [ref=e321] + - columnheader "Finding" [ref=e322] + - columnheader "Governance warning" [ref=e323] + - columnheader "Requested by" [ref=e324] + - columnheader "Owner" [ref=e325] + - columnheader "Review due" [ref=e326]: + - button "Review due" [ref=e327] [cursor=pointer]: + - text: Review due + - img [ref=e328] + - columnheader "Expires" [ref=e330]: + - button "Expires" [ref=e331] [cursor=pointer]: + - text: Expires + - img [ref=e332] + - columnheader "Requested" [ref=e334]: + - button "Requested" [ref=e335] [cursor=pointer]: + - text: Requested + - img [ref=e336] + - columnheader "Aktion" [ref=e338] + - rowgroup [ref=e339]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — Mai 29, 2026 01:05:16 Inspect exception" [ref=e340]': + - cell "Active" [ref=e341]: + - generic [ref=e344]: + - img [ref=e345] + - text: Active + - cell "Valid" [ref=e347]: + - generic [ref=e350]: + - img [ref=e351] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e353]: + - generic [ref=e355]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e356]': + - generic [ref=e358]: "Finding #3" + - cell [ref=e359] + - cell "Ahmed Darrazi" [ref=e362]: + - generic [ref=e364]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e365]: + - generic [ref=e367]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e368]: + - generic [ref=e370]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e371]: + - paragraph [ref=e374]: — + - cell "Mai 29, 2026 01:05:16" [ref=e375]: + - generic [ref=e377]: Mai 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e378]: + - link "Inspect exception" [ref=e380] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e381] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — Mai 31, 2026 01:05:16 Inspect exception" [ref=e384]': + - cell "Active" [ref=e385]: + - generic [ref=e388]: + - img [ref=e389] + - text: Active + - cell "Expiring" [ref=e391]: + - generic [ref=e394]: + - img [ref=e395] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e397]: + - generic [ref=e399]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e400]': + - generic [ref=e402]: "Finding #4" + - cell [ref=e403] + - cell "Ahmed Darrazi" [ref=e406]: + - generic [ref=e408]: Ahmed Darrazi + - cell "—" [ref=e409]: + - paragraph [ref=e412]: — + - cell "—" [ref=e413]: + - paragraph [ref=e416]: — + - cell "—" [ref=e417]: + - paragraph [ref=e420]: — + - cell "Mai 31, 2026 01:05:16" [ref=e421]: + - generic [ref=e423]: Mai 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e424]: + - link "Inspect exception" [ref=e426] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e427] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #13 The linked exception has expired and no longer governs accepted risk. Ahmed Darrazi Ahmed Darrazi Jun 3, 2026 02:48:49 Jun 4, 2026 02:48:49 Mai 31, 2026 02:48:49 Inspect exception" [ref=e430]': + - cell "Active" [ref=e431]: + - generic [ref=e434]: + - img [ref=e435] + - text: Active + - cell "Valid" [ref=e437]: + - generic [ref=e440]: + - img [ref=e441] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e443]: + - generic [ref=e445]: Spec342 Demo Accepted Risks + - 'cell "Finding #13" [ref=e446]': + - generic [ref=e448]: "Finding #13" + - cell "The linked exception has expired and no longer governs accepted risk." [ref=e449]: + - generic [ref=e451]: The linked exception has expired and no longer governs accepted risk. + - cell "Ahmed Darrazi" [ref=e452]: + - generic [ref=e454]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e455]: + - generic [ref=e457]: Ahmed Darrazi + - cell "Jun 3, 2026 02:48:49" [ref=e458]: + - generic [ref=e460]: Jun 3, 2026 02:48:49 + - cell "Jun 4, 2026 02:48:49" [ref=e461]: + - generic [ref=e463]: Jun 4, 2026 02:48:49 + - cell "Mai 31, 2026 02:48:49" [ref=e464]: + - generic [ref=e466]: Mai 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e467]: + - link "Inspect exception" [ref=e469] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=7 + - img [ref=e470] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #14 Ahmed Darrazi — — Jul 5, 2026 02:48:49 Mai 31, 2026 02:48:49 Inspect exception" [ref=e473]': + - cell "Active" [ref=e474]: + - generic [ref=e477]: + - img [ref=e478] + - text: Active + - cell "Valid" [ref=e480]: + - generic [ref=e483]: + - img [ref=e484] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e486]: + - generic [ref=e488]: Spec342 Demo Accepted Risks + - 'cell "Finding #14" [ref=e489]': + - generic [ref=e491]: "Finding #14" + - cell [ref=e492] + - cell "Ahmed Darrazi" [ref=e495]: + - generic [ref=e497]: Ahmed Darrazi + - cell "—" [ref=e498]: + - paragraph [ref=e501]: — + - cell "—" [ref=e502]: + - paragraph [ref=e505]: — + - cell "Jul 5, 2026 02:48:49" [ref=e506]: + - generic [ref=e508]: Jul 5, 2026 02:48:49 + - cell "Mai 31, 2026 02:48:49" [ref=e509]: + - generic [ref=e511]: Mai 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e512]: + - link "Inspect exception" [ref=e514] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=8 + - img [ref=e515] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #15 The linked exception is still valid, but it is nearing expiry and needs review. Ahmed Darrazi Ahmed Darrazi Jun 6, 2026 02:49:16 Jun 7, 2026 02:49:16 Mai 31, 2026 02:49:16 Inspect exception" [ref=e518]': + - cell "Active" [ref=e519]: + - generic [ref=e522]: + - img [ref=e523] + - text: Active + - cell "Valid" [ref=e525]: + - generic [ref=e528]: + - img [ref=e529] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e531]: + - generic [ref=e533]: Spec342 Demo Accepted Risks + - 'cell "Finding #15" [ref=e534]': + - generic [ref=e536]: "Finding #15" + - cell "The linked exception is still valid, but it is nearing expiry and needs review." [ref=e537]: + - generic [ref=e539]: The linked exception is still valid, but it is nearing expiry and needs review. + - cell "Ahmed Darrazi" [ref=e540]: + - generic [ref=e542]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e543]: + - generic [ref=e545]: Ahmed Darrazi + - cell "Jun 6, 2026 02:49:16" [ref=e546]: + - generic [ref=e548]: Jun 6, 2026 02:49:16 + - cell "Jun 7, 2026 02:49:16" [ref=e549]: + - generic [ref=e551]: Jun 7, 2026 02:49:16 + - cell "Mai 31, 2026 02:49:16" [ref=e552]: + - generic [ref=e554]: Mai 31, 2026 02:49:16 + - cell "Inspect exception" [ref=e555]: + - link "Inspect exception" [ref=e557] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=9 + - img [ref=e558] + - text: Inspect exception + - navigation "Seitennavigation" [ref=e561]: + - generic [ref=e564]: + - generic [ref=e566]: pro Seite + - combobox "pro Seite" [ref=e568]: + - option "25" [selected] + - option "50" + - option "Alle" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-05T02-55-52-319Z.yml b/.playwright-mcp/page-2026-06-05T02-55-52-319Z.yml new file mode 100644 index 00000000..8c23a8eb --- /dev/null +++ b/.playwright-mcp/page-2026-06-05T02-55-52-319Z.yml @@ -0,0 +1,441 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "wp" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: wp + - button "Umgebung auswählen" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Sprache" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: DE + - img [ref=e22] + - button "Seitenleiste ausklappen" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Globale Suche + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Globale Suche" [ref=e37] + - button "Benachrichtigungen öffnen" [ref=e39] [cursor=pointer]: + - img [ref=e40] + - generic [ref=e43]: "20" + - button "Benutzermenü" [ref=e46] [cursor=pointer]: + - img "Avatar von Ahmed Darrazi" [ref=e47] + - generic [ref=e48]: + - complementary [ref=e49]: + - navigation [ref=e52]: + - 'link "Workspace: wp" [ref=e53] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e55] + - generic [ref=e57]: + - generic [ref=e58]: Workspace + - generic "wp" [ref=e59] + - generic [ref=e60]: 5 Umgebungen + - img [ref=e61] + - list [ref=e63]: + - listitem [ref=e64]: + - list [ref=e65]: + - listitem [ref=e66]: + - link "Overview" [ref=e67] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e68] + - generic [ref=e70]: Overview + - listitem [ref=e71]: + - generic [ref=e72] [cursor=pointer]: + - generic [ref=e73]: Monitoring + - button "Monitoring" [expanded] [ref=e74]: + - img [ref=e75] + - list [ref=e77]: + - listitem [ref=e78]: + - link "Finding exceptions" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e80] + - generic [ref=e82]: Finding exceptions + - listitem [ref=e83]: + - link "Operationen" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/operations + - img [ref=e85] + - generic [ref=e87]: Operationen + - listitem [ref=e88]: + - link "Alerts" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e90] + - generic [ref=e92]: Alerts + - listitem [ref=e93]: + - link "Nachweise" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e95] + - generic [ref=e97]: Nachweise + - listitem [ref=e98]: + - link "Audit-Log" [ref=e99] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e100] + - generic [ref=e102]: Audit-Log + - listitem [ref=e103]: + - generic [ref=e104] [cursor=pointer]: + - generic [ref=e105]: Berichte + - button "Berichte" [expanded] [ref=e106]: + - img [ref=e107] + - list [ref=e109]: + - listitem [ref=e110]: + - link "Reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e112] + - generic [ref=e114]: Reviews + - listitem [ref=e115]: + - link "Kundenreviews" [ref=e116] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e117] + - generic [ref=e119]: Kundenreviews + - listitem [ref=e120]: + - generic [ref=e121] [cursor=pointer]: + - generic [ref=e122]: Einstellungen + - button "Einstellungen" [expanded] [ref=e123]: + - img [ref=e124] + - list [ref=e126]: + - listitem [ref=e127]: + - link "Workspaces verwalten" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e129] + - generic [ref=e131]: Workspaces verwalten + - listitem [ref=e132]: + - link "Integrationen" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e134] + - generic [ref=e136]: Integrationen + - listitem [ref=e137]: + - link "Einstellungen" [ref=e138] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e139] + - generic [ref=e142]: Einstellungen + - listitem [ref=e143]: + - generic [ref=e144] [cursor=pointer]: + - generic [ref=e145]: Governance + - button "Governance" [expanded] [ref=e146]: + - img [ref=e147] + - list [ref=e149]: + - listitem [ref=e150]: + - link "Governance inbox" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e152] + - generic [ref=e154]: Governance inbox + - listitem [ref=e155]: + - link "Decision register" [ref=e156] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e157] + - generic [ref=e159]: Decision register + - main [ref=e161]: + - generic [ref=e163]: + - generic [ref=e164]: + - heading "Finding Exceptions Queue" [level=1] [ref=e166] + - generic [ref=e168]: + - button "Clear filters" [ref=e169] [cursor=pointer]: + - img [ref=e170] + - text: Clear filters + - link "View environment findings" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions + - img [ref=e173] + - text: View environment findings + - button "Focused review" [ref=e177] [cursor=pointer]: + - img [ref=e178] + - generic [ref=e181]: + - generic [ref=e185]: + - generic [ref=e186]: Canonical risk-acceptance approvals + - generic [ref=e187]: Review pending requests, expiring governance, and lapsed exception coverage across entitled environments without leaving the Monitoring area. + - generic [ref=e188]: The focused review lane is bound to the exception query parameter. If that exception drops out of the current queue view, the page falls back to quiet monitoring mode without stale decision state. + - generic [ref=e189]: + - generic [ref=e190]: "Environment filter:" + - generic [ref=e191]: Spec342 Demo Accepted Risks + - link "Clear filter" [ref=e192] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - generic [ref=e193]: + - generic [ref=e195]: + - heading "Focused review lane" [level=2] [ref=e196] + - paragraph [ref=e197]: The selected exception defines the focused review context. The dominant guidance card explains what matters now before deeper decision history and evidence. + - generic [ref=e200]: + - generic [ref=e201]: + - generic [ref=e203]: + - generic [ref=e204]: + - generic [ref=e205]: + - generic [ref=e208]: Aktion erforderlich + - heading "Das Accepted-Risk-Prüffenster läuft bald ab" [level=2] [ref=e209] + - generic [ref=e210]: + - generic [ref=e211]: Grund + - paragraph [ref=e212]: Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden. + - generic [ref=e213]: + - generic [ref=e214]: Auswirkung + - paragraph [ref=e215]: Wenn das aktuelle Fenster nicht rechtzeitig geprüft wird, kann dieses Accepted Risk nicht länger als aktiv gesteuert gelten. + - generic [ref=e216]: + - generic [ref=e217]: + - term [ref=e218]: Umgebung + - definition [ref=e219]: Spec342 Demo Accepted Risks + - generic [ref=e220]: + - term [ref=e221]: Lifecycle-Status + - definition [ref=e222]: Expiring + - generic [ref=e223]: + - term [ref=e224]: Governance-Gültigkeit + - definition [ref=e225]: Expiring + - generic [ref=e226]: + - term [ref=e227]: Owner + - definition [ref=e228]: Ahmed Darrazi + - generic [ref=e229]: + - term [ref=e230]: Review fällig + - definition [ref=e231]: Sat, Jun 6, 2026 2:49 AM + - generic [ref=e232]: + - term [ref=e233]: Läuft ab + - definition [ref=e234]: Sun, Jun 7, 2026 2:49 AM + - generic [ref=e235]: + - term [ref=e236]: Aktuelle Entscheidung + - definition [ref=e237]: Approved + - generic [ref=e238]: + - term [ref=e239]: Anfragebegründung + - definition [ref=e240]: Spec355 expiring local fixture + - generic [ref=e241]: + - generic [ref=e242]: Was zu prüfen ist + - generic [ref=e243]: Prüfen Sie das aktive Governance-Fenster, bevor es abläuft. + - generic [ref=e244]: + - generic [ref=e245]: Verwandter Kontext + - generic [ref=e246]: + - link "Ausnahmedetail öffnen" [ref=e247] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/finding-exceptions/9 + - link "Finding öffnen" [ref=e248] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/3/environments/spec342-demo-accepted-risks/findings/15 + - generic [ref=e249]: + - generic [ref=e250]: Focused review controls + - generic [ref=e251]: Existing review actions stay in the page header so approval, rejection, and navigation keep their current confirmation and authorization boundaries. + - generic [ref=e252]: + - generic [ref=e253]: + - generic [ref=e254]: Status + - generic [ref=e255]: Active + - generic [ref=e256]: Valid + - generic [ref=e257]: Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden. + - generic [ref=e258]: + - generic [ref=e259]: Scope + - generic [ref=e260]: Spec342 Demo Accepted Risks + - generic [ref=e261]: "Finding #15" + - generic [ref=e262]: + - generic [ref=e263]: Review timing + - generic [ref=e264]: Review due Sat, Jun 6, 2026 2:49 AM + - generic [ref=e265]: Expires Sun, Jun 7, 2026 2:49 AM + - generic [ref=e266]: + - generic [ref=e267]: Request + - generic [ref=e268]: + - generic [ref=e269]: + - term [ref=e270]: Requested by + - definition [ref=e271]: Ahmed Darrazi + - generic [ref=e272]: + - term [ref=e273]: Owner + - definition [ref=e274]: Ahmed Darrazi + - generic [ref=e275]: + - term [ref=e276]: Reason + - definition [ref=e277]: Spec355 expiring local fixture + - generic [ref=e278]: + - generic [ref=e279]: Decision history + - generic [ref=e281]: + - generic [ref=e282]: Approved + - generic [ref=e283]: Ahmed Darrazi · Mon, Jun 1, 2026 2:49 AM + - generic [ref=e284]: Spec355 expiring local browser decision + - generic [ref=e287]: + - generic [ref=e290]: + - generic [ref=e291]: + - generic [ref=e292]: Suche + - generic [ref=e293]: + - img [ref=e295] + - searchbox "Suche" [ref=e298] + - button "Filtern" [ref=e301] [cursor=pointer]: + - img [ref=e302] + - generic [ref=e305]: "1" + - generic [ref=e306]: + - generic [ref=e307]: + - generic [ref=e308]: Aktive Filter + - generic [ref=e310]: + - generic [ref=e312]: "Environment: Spec342 Demo Accepted Risks" + - button "Filter löschen" [ref=e313] [cursor=pointer]: + - img [ref=e314] + - generic [ref=e316]: Filter löschen + - button [ref=e317] [cursor=pointer]: + - img [ref=e318] + - table [ref=e321]: + - rowgroup [ref=e322]: + - row "Status Validity Environment Finding Governance warning Requested by Owner Review due Expires Requested Aktion" [ref=e323]: + - columnheader "Status" [ref=e324] + - columnheader "Validity" [ref=e325] + - columnheader "Environment" [ref=e326] + - columnheader "Finding" [ref=e327] + - columnheader "Governance warning" [ref=e328] + - columnheader "Requested by" [ref=e329] + - columnheader "Owner" [ref=e330] + - columnheader "Review due" [ref=e331]: + - button "Review due" [ref=e332] [cursor=pointer]: + - text: Review due + - img [ref=e333] + - columnheader "Expires" [ref=e335]: + - button "Expires" [ref=e336] [cursor=pointer]: + - text: Expires + - img [ref=e337] + - columnheader "Requested" [ref=e339]: + - button "Requested" [ref=e340] [cursor=pointer]: + - text: Requested + - img [ref=e341] + - columnheader "Aktion" [ref=e343] + - rowgroup [ref=e344]: + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #3 Ahmed Darrazi Spec342 Demo Risk Owner Jul 1, 2026 01:05:16 — Mai 29, 2026 01:05:16 Inspect exception" [ref=e345]': + - cell "Active" [ref=e346]: + - generic [ref=e349]: + - img [ref=e350] + - text: Active + - cell "Valid" [ref=e352]: + - generic [ref=e355]: + - img [ref=e356] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e358]: + - generic [ref=e360]: Spec342 Demo Accepted Risks + - 'cell "Finding #3" [ref=e361]': + - generic [ref=e363]: "Finding #3" + - cell [ref=e364] + - cell "Ahmed Darrazi" [ref=e367]: + - generic [ref=e369]: Ahmed Darrazi + - cell "Spec342 Demo Risk Owner" [ref=e370]: + - generic [ref=e372]: Spec342 Demo Risk Owner + - cell "Jul 1, 2026 01:05:16" [ref=e373]: + - generic [ref=e375]: Jul 1, 2026 01:05:16 + - cell "—" [ref=e376]: + - paragraph [ref=e379]: — + - cell "Mai 29, 2026 01:05:16" [ref=e380]: + - generic [ref=e382]: Mai 29, 2026 01:05:16 + - cell "Inspect exception" [ref=e383]: + - link "Inspect exception" [ref=e385] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=1 + - img [ref=e386] + - text: Inspect exception + - 'row "Active Expiring Spec342 Demo Accepted Risks Finding #4 Ahmed Darrazi — — — Mai 31, 2026 01:05:16 Inspect exception" [ref=e389]': + - cell "Active" [ref=e390]: + - generic [ref=e393]: + - img [ref=e394] + - text: Active + - cell "Expiring" [ref=e396]: + - generic [ref=e399]: + - img [ref=e400] + - text: Expiring + - cell "Spec342 Demo Accepted Risks" [ref=e402]: + - generic [ref=e404]: Spec342 Demo Accepted Risks + - 'cell "Finding #4" [ref=e405]': + - generic [ref=e407]: "Finding #4" + - cell [ref=e408] + - cell "Ahmed Darrazi" [ref=e411]: + - generic [ref=e413]: Ahmed Darrazi + - cell "—" [ref=e414]: + - paragraph [ref=e417]: — + - cell "—" [ref=e418]: + - paragraph [ref=e421]: — + - cell "—" [ref=e422]: + - paragraph [ref=e425]: — + - cell "Mai 31, 2026 01:05:16" [ref=e426]: + - generic [ref=e428]: Mai 31, 2026 01:05:16 + - cell "Inspect exception" [ref=e429]: + - link "Inspect exception" [ref=e431] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=2 + - img [ref=e432] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #13 Das aktuelle Accepted-Risk-Governance-Fenster ist abgelaufen und bietet keine aktive Abdeckung mehr. Ahmed Darrazi Ahmed Darrazi Jun 3, 2026 02:48:49 Jun 4, 2026 02:48:49 Mai 31, 2026 02:48:49 Inspect exception" [ref=e435]': + - cell "Active" [ref=e436]: + - generic [ref=e439]: + - img [ref=e440] + - text: Active + - cell "Valid" [ref=e442]: + - generic [ref=e445]: + - img [ref=e446] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e448]: + - generic [ref=e450]: Spec342 Demo Accepted Risks + - 'cell "Finding #13" [ref=e451]': + - generic [ref=e453]: "Finding #13" + - cell "Das aktuelle Accepted-Risk-Governance-Fenster ist abgelaufen und bietet keine aktive Abdeckung mehr." [ref=e454]: + - generic [ref=e456]: Das aktuelle Accepted-Risk-Governance-Fenster ist abgelaufen und bietet keine aktive Abdeckung mehr. + - cell "Ahmed Darrazi" [ref=e457]: + - generic [ref=e459]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e460]: + - generic [ref=e462]: Ahmed Darrazi + - cell "Jun 3, 2026 02:48:49" [ref=e463]: + - generic [ref=e465]: Jun 3, 2026 02:48:49 + - cell "Jun 4, 2026 02:48:49" [ref=e466]: + - generic [ref=e468]: Jun 4, 2026 02:48:49 + - cell "Mai 31, 2026 02:48:49" [ref=e469]: + - generic [ref=e471]: Mai 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e472]: + - link "Inspect exception" [ref=e474] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=7 + - img [ref=e475] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #14 Ahmed Darrazi — — Jul 5, 2026 02:48:49 Mai 31, 2026 02:48:49 Inspect exception" [ref=e478]': + - cell "Active" [ref=e479]: + - generic [ref=e482]: + - img [ref=e483] + - text: Active + - cell "Valid" [ref=e485]: + - generic [ref=e488]: + - img [ref=e489] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e491]: + - generic [ref=e493]: Spec342 Demo Accepted Risks + - 'cell "Finding #14" [ref=e494]': + - generic [ref=e496]: "Finding #14" + - cell [ref=e497] + - cell "Ahmed Darrazi" [ref=e500]: + - generic [ref=e502]: Ahmed Darrazi + - cell "—" [ref=e503]: + - paragraph [ref=e506]: — + - cell "—" [ref=e507]: + - paragraph [ref=e510]: — + - cell "Jul 5, 2026 02:48:49" [ref=e511]: + - generic [ref=e513]: Jul 5, 2026 02:48:49 + - cell "Mai 31, 2026 02:48:49" [ref=e514]: + - generic [ref=e516]: Mai 31, 2026 02:48:49 + - cell "Inspect exception" [ref=e517]: + - link "Inspect exception" [ref=e519] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=8 + - img [ref=e520] + - text: Inspect exception + - 'row "Active Valid Spec342 Demo Accepted Risks Finding #15 Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden. Ahmed Darrazi Ahmed Darrazi Jun 6, 2026 02:49:16 Jun 7, 2026 02:49:16 Mai 31, 2026 02:49:16 Inspect exception" [ref=e523]': + - cell "Active" [ref=e524]: + - generic [ref=e527]: + - img [ref=e528] + - text: Active + - cell "Valid" [ref=e530]: + - generic [ref=e533]: + - img [ref=e534] + - text: Valid + - cell "Spec342 Demo Accepted Risks" [ref=e536]: + - generic [ref=e538]: Spec342 Demo Accepted Risks + - 'cell "Finding #15" [ref=e539]': + - generic [ref=e541]: "Finding #15" + - cell "Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden." [ref=e542]: + - generic [ref=e544]: Das aktuelle Accepted-Risk-Governance-Fenster ist noch aktiv, läuft aber bald ab und muss geprüft werden. + - cell "Ahmed Darrazi" [ref=e545]: + - generic [ref=e547]: Ahmed Darrazi + - cell "Ahmed Darrazi" [ref=e548]: + - generic [ref=e550]: Ahmed Darrazi + - cell "Jun 6, 2026 02:49:16" [ref=e551]: + - generic [ref=e553]: Jun 6, 2026 02:49:16 + - cell "Jun 7, 2026 02:49:16" [ref=e554]: + - generic [ref=e556]: Jun 7, 2026 02:49:16 + - cell "Mai 31, 2026 02:49:16" [ref=e557]: + - generic [ref=e559]: Mai 31, 2026 02:49:16 + - cell "Inspect exception" [ref=e560]: + - link "Inspect exception" [ref=e562] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue?environment_id=41&exception=9 + - img [ref=e563] + - text: Inspect exception + - navigation "Seitennavigation" [ref=e566]: + - generic [ref=e569]: + - generic [ref=e571]: pro Seite + - combobox "pro Seite" [ref=e573]: + - option "25" [selected] + - option "50" + - option "Alle" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T11-21-15-187Z.yml b/.playwright-mcp/page-2026-06-06T11-21-15-187Z.yml new file mode 100644 index 00000000..78827027 --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T11-21-15-187Z.yml @@ -0,0 +1,319 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 358 Smoke Workspace X69MOA" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 358 Smoke Workspace X69MOA + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - generic [ref=e38]: + - button "Notifications" [disabled]: + - img + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ms. Kaylah Kohler Jr." [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: Spec 358 Smoke Workspace X69MOA" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "Spec 358 Smoke Workspace X69MOA" [ref=e54] + - generic [ref=e55]: 1 environment + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - heading "Operations" [level=1] [ref=e161] + - generic [ref=e164]: + - generic [ref=e165]: + - generic [ref=e166]: + - generic [ref=e167]: + - paragraph [ref=e168]: Operations Hub + - heading "Execution follow-up workbench" [level=2] [ref=e169] + - paragraph [ref=e170]: OperationRuns are execution truth. This page prioritizes stored operation outcomes, proof paths, and follow-up without claiming environment or governance health. + - generic [ref=e172]: Operations Hub is showing workspace-wide execution records across all entitled environments. + - generic [ref=e181]: + - generic [ref=e185]: + - generic [ref=e187]: Needs attention + - generic [ref=e188]: "1" + - generic [ref=e189]: + - img [ref=e190] + - generic [ref=e192]: Failed, blocked, partial, or stale OperationRuns in scope. + - generic [ref=e196]: + - generic [ref=e198]: Active operations + - generic [ref=e199]: "1" + - generic [ref=e200]: + - img [ref=e201] + - generic [ref=e203]: Queued or running records with trusted progress only. + - generic [ref=e207]: + - generic [ref=e209]: Failed or blocked + - generic [ref=e210]: "0" + - generic [ref=e211]: + - img [ref=e212] + - generic [ref=e214]: Terminal execution records that need review before retrying. + - generic [ref=e218]: + - generic [ref=e220]: Completed recently + - generic [ref=e221]: "0" + - generic [ref=e222]: + - img [ref=e223] + - generic [ref=e225]: Recent execution results, not environment or governance health. + - generic [ref=e226]: + - generic [ref=e227]: + - generic [ref=e228]: + - generic [ref=e229]: + - paragraph [ref=e230]: Decision workbench + - heading "Which operation needs attention now?" [level=2] [ref=e231] + - generic [ref=e232]: Needs attention + - generic [ref=e233]: + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: "Operation #82" + - generic [ref=e237]: "Environment: Spec 358 Smoke Environment X69MOA" + - heading "Inventory sync" [level=3] [ref=e238] + - paragraph [ref=e239]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e240]: + - generic [ref=e241]: + - term [ref=e242]: Outcome + - definition [ref=e243]: Pending · Running + - generic [ref=e244]: + - term [ref=e245]: Timing + - definition [ref=e246]: Started 2 weeks ago + - generic [ref=e247]: + - term [ref=e248]: Reason + - definition [ref=e249]: "Still active: Yes. Automatic reconciliation: No. This run is past its lifecycle window and needs stale-run investigation before retrying." + - generic [ref=e250]: + - term [ref=e251]: Impact + - definition [ref=e252]: Follow-up is needed before starting overlapping work for this operation scope. + - generic [ref=e253]: + - paragraph [ref=e254]: Outcome guidance + - paragraph [ref=e255]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e256]: + - generic [ref=e257]: + - paragraph [ref=e258]: Next action + - paragraph [ref=e259]: Open operation + - link "Open operation" [ref=e260] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - img [ref=e261] + - text: Open operation + - complementary [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - paragraph [ref=e266]: Operation summary + - heading "Inventory sync" [level=2] [ref=e267] + - generic [ref=e268]: + - generic [ref=e269]: + - paragraph [ref=e270]: Outcome + - paragraph [ref=e271]: Pending · Running + - generic [ref=e272]: + - paragraph [ref=e273]: Environment + - paragraph [ref=e274]: Spec 358 Smoke Environment X69MOA + - generic [ref=e275]: + - paragraph [ref=e276]: Proof + - paragraph [ref=e277]: Operation detail available + - paragraph [ref=e278]: Open operation for stored proof, related links, and authorized diagnostics. Artifact or evidence links are unavailable here unless the detail surface proves them. + - generic [ref=e279]: + - paragraph [ref=e280]: Primary next action + - link "Open operation" [ref=e281] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - img [ref=e282] + - text: Open operation + - group [ref=e284]: + - generic "Diagnostics · Collapsed" [ref=e285] [cursor=pointer] + - generic [ref=e286]: + - generic [ref=e287]: + - heading "Operations history" [level=2] [ref=e288] + - paragraph [ref=e289]: Secondary context for scanning OperationRun history after the top decision path is clear. + - tablist "Operations tabs" [ref=e290]: + - tab "All" [ref=e291] [cursor=pointer]: + - generic [ref=e292]: All + - tab "Active" [ref=e293] [cursor=pointer]: + - generic [ref=e294]: Active + - tab "Likely stale" [ref=e295] [cursor=pointer]: + - generic [ref=e296]: Likely stale + - tab "Terminal follow-up" [ref=e297] [cursor=pointer]: + - generic [ref=e298]: Terminal follow-up + - tab "Succeeded" [ref=e299] [cursor=pointer]: + - generic [ref=e300]: Succeeded + - tab "Partial" [ref=e301] [cursor=pointer]: + - generic [ref=e302]: Partial + - tab "Failed" [ref=e303] [cursor=pointer]: + - generic [ref=e304]: Failed + - paragraph [ref=e305]: Environment filters and the selected operations tab remain shareable through the URL. Additional table filters still restore from the last compatible session state. + - generic [ref=e306]: 1 active operation(s) are beyond their lifecycle window and belong in the stale-attention view. 0 operation(s) already carry reconciled stale lineage and belong in terminal follow-up. + - generic [ref=e309]: + - generic [ref=e312]: + - generic [ref=e313]: + - generic [ref=e314]: Search + - generic [ref=e315]: + - img [ref=e317] + - searchbox "Search" [ref=e320] + - button "Filter" [ref=e323] [cursor=pointer]: + - img [ref=e324] + - generic [ref=e327]: "0" + - table [ref=e329]: + - rowgroup [ref=e330]: + - row "Status Operation Initiator Started Duration Outcome" [ref=e331]: + - columnheader "Status" [ref=e332] + - columnheader "Operation" [ref=e333]: + - button "Operation" [ref=e334] [cursor=pointer]: + - text: Operation + - img [ref=e335] + - columnheader "Initiator" [ref=e337] + - columnheader "Started" [ref=e338]: + - button "Started" [ref=e339] [cursor=pointer]: + - text: Started + - img [ref=e340] + - columnheader "Duration" [ref=e342] + - columnheader "Outcome" [ref=e343] + - rowgroup [ref=e344]: + - row "Likely stale Likely stale Inventory sync System 2 weeks ago — Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e345]: + - cell "Likely stale Likely stale" [ref=e346]: + - link "Likely stale Likely stale" [ref=e347] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e348]: + - paragraph [ref=e349]: + - generic [ref=e350]: + - img [ref=e351] + - text: Likely stale + - paragraph [ref=e353]: Likely stale + - cell "Inventory sync" [ref=e354]: + - link "Inventory sync" [ref=e355] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e356]: Inventory sync + - cell "System" [ref=e357]: + - link "System" [ref=e358] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e359]: System + - cell "2 weeks ago" [ref=e360]: + - link "2 weeks ago" [ref=e361] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e362]: 2 weeks ago + - cell "—" [ref=e363]: + - link "—" [ref=e364] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e365]: — + - cell "Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e366]: + - link "Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e367] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e368]: + - paragraph [ref=e369]: + - generic [ref=e370]: + - img [ref=e371] + - text: Awaiting result + - paragraph [ref=e373]: Past the lifecycle window. Review worker health and logs before retrying. + - navigation "Pagination navigation" [ref=e374]: + - generic [ref=e377]: + - generic [ref=e379]: Per page + - combobox "Per page" [ref=e381]: + - option "25" [selected] + - option "50" + - option "100" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T11-21-38-382Z.yml b/.playwright-mcp/page-2026-06-06T11-21-38-382Z.yml new file mode 100644 index 00000000..4064c68a --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T11-21-38-382Z.yml @@ -0,0 +1,318 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 358 Smoke Workspace X69MOA" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 358 Smoke Workspace X69MOA + - button "Select environment" [ref=e10] [cursor=pointer]: + - img [ref=e11] + - img [ref=e13] + - button "Language" [ref=e18] [cursor=pointer]: + - img [ref=e19] + - generic [ref=e21]: EN + - img [ref=e22] + - button "Expand sidebar" [ref=e24] [cursor=pointer]: + - img [ref=e25] + - generic [ref=e27]: + - generic [ref=e30]: + - generic [ref=e31]: Global search + - generic [ref=e32]: + - img [ref=e34] + - searchbox "Global search" [ref=e37] + - button "Notifications" [ref=e384] [cursor=pointer]: + - img [ref=e385] + - button "User menu" [ref=e41] [cursor=pointer]: + - img "Avatar of Ms. Kaylah Kohler Jr." [ref=e42] + - generic [ref=e43]: + - complementary [ref=e44]: + - navigation [ref=e47]: + - 'link "Workspace: Spec 358 Smoke Workspace X69MOA" [ref=e48] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e50] + - generic [ref=e52]: + - generic [ref=e53]: Workspace + - generic "Spec 358 Smoke Workspace X69MOA" [ref=e54] + - generic [ref=e55]: 1 environment + - img [ref=e56] + - list [ref=e58]: + - listitem [ref=e59]: + - list [ref=e60]: + - listitem [ref=e61]: + - link "Overview" [ref=e62] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e63] + - generic [ref=e65]: Overview + - listitem [ref=e66]: + - generic [ref=e67] [cursor=pointer]: + - generic [ref=e68]: Monitoring + - button "Monitoring" [expanded] [ref=e69]: + - img [ref=e70] + - list [ref=e72]: + - listitem [ref=e73]: + - link "Finding exceptions" [ref=e74] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e75] + - generic [ref=e77]: Finding exceptions + - listitem [ref=e78]: + - link "Operations" [ref=e79] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations + - img [ref=e80] + - generic [ref=e82]: Operations + - listitem [ref=e83]: + - link "Alerts" [ref=e84] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e85] + - generic [ref=e87]: Alerts + - listitem [ref=e88]: + - link "Evidence" [ref=e89] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e90] + - generic [ref=e92]: Evidence + - listitem [ref=e93]: + - link "Audit Log" [ref=e94] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e95] + - generic [ref=e97]: Audit Log + - listitem [ref=e98]: + - generic [ref=e99] [cursor=pointer]: + - generic [ref=e100]: Reporting + - button "Reporting" [expanded] [ref=e101]: + - img [ref=e102] + - list [ref=e104]: + - listitem [ref=e105]: + - link "Reviews" [ref=e106] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e107] + - generic [ref=e109]: Reviews + - listitem [ref=e110]: + - link "Customer reviews" [ref=e111] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e112] + - generic [ref=e114]: Customer reviews + - listitem [ref=e115]: + - generic [ref=e116] [cursor=pointer]: + - generic [ref=e117]: Settings + - button "Settings" [expanded] [ref=e118]: + - img [ref=e119] + - list [ref=e121]: + - listitem [ref=e122]: + - link "Manage workspaces" [ref=e123] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e124] + - generic [ref=e126]: Manage workspaces + - listitem [ref=e127]: + - link "Integrations" [ref=e128] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e129] + - generic [ref=e131]: Integrations + - listitem [ref=e132]: + - link "Settings" [ref=e133] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e134] + - generic [ref=e137]: Settings + - listitem [ref=e138]: + - generic [ref=e139] [cursor=pointer]: + - generic [ref=e140]: Governance + - button "Governance" [expanded] [ref=e141]: + - img [ref=e142] + - list [ref=e144]: + - listitem [ref=e145]: + - link "Governance inbox" [ref=e146] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e147] + - generic [ref=e149]: Governance inbox + - listitem [ref=e150]: + - link "Decision register" [ref=e151] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e152] + - generic [ref=e154]: Decision register + - main [ref=e156]: + - generic [ref=e158]: + - heading "Operations" [level=1] [ref=e161] + - generic [ref=e164]: + - generic [ref=e165]: + - generic [ref=e166]: + - generic [ref=e167]: + - paragraph [ref=e168]: Operations Hub + - heading "Execution follow-up workbench" [level=2] [ref=e169] + - paragraph [ref=e170]: OperationRuns are execution truth. This page prioritizes stored operation outcomes, proof paths, and follow-up without claiming environment or governance health. + - generic [ref=e172]: Operations Hub is showing workspace-wide execution records across all entitled environments. + - generic [ref=e181]: + - generic [ref=e185]: + - generic [ref=e187]: Needs attention + - generic [ref=e188]: "1" + - generic [ref=e189]: + - img [ref=e190] + - generic [ref=e192]: Failed, blocked, partial, or stale OperationRuns in scope. + - generic [ref=e196]: + - generic [ref=e198]: Active operations + - generic [ref=e199]: "1" + - generic [ref=e200]: + - img [ref=e201] + - generic [ref=e203]: Queued or running records with trusted progress only. + - generic [ref=e207]: + - generic [ref=e209]: Failed or blocked + - generic [ref=e210]: "0" + - generic [ref=e211]: + - img [ref=e212] + - generic [ref=e214]: Terminal execution records that need review before retrying. + - generic [ref=e218]: + - generic [ref=e220]: Completed recently + - generic [ref=e221]: "0" + - generic [ref=e222]: + - img [ref=e223] + - generic [ref=e225]: Recent execution results, not environment or governance health. + - generic [ref=e226]: + - generic [ref=e227]: + - generic [ref=e228]: + - generic [ref=e229]: + - paragraph [ref=e230]: Decision workbench + - heading "Which operation needs attention now?" [level=2] [ref=e231] + - generic [ref=e232]: Needs attention + - generic [ref=e233]: + - generic [ref=e234]: + - generic [ref=e235]: + - generic [ref=e236]: "Operation #82" + - generic [ref=e237]: "Environment: Spec 358 Smoke Environment X69MOA" + - heading "Inventory sync" [level=3] [ref=e238] + - paragraph [ref=e239]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e240]: + - generic [ref=e241]: + - term [ref=e242]: Outcome + - definition [ref=e243]: Pending · Running + - generic [ref=e244]: + - term [ref=e245]: Timing + - definition [ref=e246]: Started 2 weeks ago + - generic [ref=e247]: + - term [ref=e248]: Reason + - definition [ref=e249]: "Still active: Yes. Automatic reconciliation: No. This run is past its lifecycle window and needs stale-run investigation before retrying." + - generic [ref=e250]: + - term [ref=e251]: Impact + - definition [ref=e252]: Follow-up is needed before starting overlapping work for this operation scope. + - generic [ref=e253]: + - paragraph [ref=e254]: Outcome guidance + - paragraph [ref=e255]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e256]: + - generic [ref=e257]: + - paragraph [ref=e258]: Next action + - paragraph [ref=e259]: Open operation + - link "Open operation" [ref=e260] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - img [ref=e261] + - text: Open operation + - complementary [ref=e263]: + - generic [ref=e264]: + - generic [ref=e265]: + - paragraph [ref=e266]: Operation summary + - heading "Inventory sync" [level=2] [ref=e267] + - generic [ref=e268]: + - generic [ref=e269]: + - paragraph [ref=e270]: Outcome + - paragraph [ref=e271]: Pending · Running + - generic [ref=e272]: + - paragraph [ref=e273]: Environment + - paragraph [ref=e274]: Spec 358 Smoke Environment X69MOA + - generic [ref=e275]: + - paragraph [ref=e276]: Proof + - paragraph [ref=e277]: Operation detail available + - paragraph [ref=e278]: Open operation for stored proof, related links, and authorized diagnostics. Artifact or evidence links are unavailable here unless the detail surface proves them. + - generic [ref=e279]: + - paragraph [ref=e280]: Primary next action + - link "Open operation" [ref=e281] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - img [ref=e282] + - text: Open operation + - group [ref=e284]: + - generic "Diagnostics · Collapsed" [ref=e285] [cursor=pointer] + - generic [ref=e286]: + - generic [ref=e287]: + - heading "Operations history" [level=2] [ref=e288] + - paragraph [ref=e289]: Secondary context for scanning OperationRun history after the top decision path is clear. + - tablist "Operations tabs" [ref=e290]: + - tab "All" [ref=e291] [cursor=pointer]: + - generic [ref=e292]: All + - tab "Active" [ref=e293] [cursor=pointer]: + - generic [ref=e294]: Active + - tab "Likely stale" [ref=e295] [cursor=pointer]: + - generic [ref=e296]: Likely stale + - tab "Terminal follow-up" [ref=e297] [cursor=pointer]: + - generic [ref=e298]: Terminal follow-up + - tab "Succeeded" [ref=e299] [cursor=pointer]: + - generic [ref=e300]: Succeeded + - tab "Partial" [ref=e301] [cursor=pointer]: + - generic [ref=e302]: Partial + - tab "Failed" [ref=e303] [cursor=pointer]: + - generic [ref=e304]: Failed + - paragraph [ref=e305]: Environment filters and the selected operations tab remain shareable through the URL. Additional table filters still restore from the last compatible session state. + - generic [ref=e306]: 1 active operation(s) are beyond their lifecycle window and belong in the stale-attention view. 0 operation(s) already carry reconciled stale lineage and belong in terminal follow-up. + - generic [ref=e309]: + - generic [ref=e312]: + - generic [ref=e313]: + - generic [ref=e314]: Search + - generic [ref=e315]: + - img [ref=e317] + - searchbox "Search" [ref=e320] + - button "Filter" [ref=e323] [cursor=pointer]: + - img [ref=e324] + - generic [ref=e327]: "0" + - table [ref=e329]: + - rowgroup [ref=e330]: + - row "Status Operation Initiator Started Duration Outcome" [ref=e331]: + - columnheader "Status" [ref=e332] + - columnheader "Operation" [ref=e333]: + - button "Operation" [ref=e334] [cursor=pointer]: + - text: Operation + - img [ref=e335] + - columnheader "Initiator" [ref=e337] + - columnheader "Started" [ref=e338]: + - button "Started" [ref=e339] [cursor=pointer]: + - text: Started + - img [ref=e340] + - columnheader "Duration" [ref=e342] + - columnheader "Outcome" [ref=e343] + - rowgroup [ref=e344]: + - row "Likely stale Likely stale Inventory sync System 2 weeks ago — Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e345]: + - cell "Likely stale Likely stale" [ref=e346]: + - link "Likely stale Likely stale" [ref=e347] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e348]: + - paragraph [ref=e349]: + - generic [ref=e350]: + - img [ref=e351] + - text: Likely stale + - paragraph [ref=e353]: Likely stale + - cell "Inventory sync" [ref=e354]: + - link "Inventory sync" [ref=e355] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e356]: Inventory sync + - cell "System" [ref=e357]: + - link "System" [ref=e358] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e359]: System + - cell "2 weeks ago" [ref=e360]: + - link "2 weeks ago" [ref=e361] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e362]: 2 weeks ago + - cell "—" [ref=e363]: + - link "—" [ref=e364] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e365]: — + - cell "Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e366]: + - link "Awaiting result Past the lifecycle window. Review worker health and logs before retrying." [ref=e367] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - generic [ref=e368]: + - paragraph [ref=e369]: + - generic [ref=e370]: + - img [ref=e371] + - text: Awaiting result + - paragraph [ref=e373]: Past the lifecycle window. Review worker health and logs before retrying. + - navigation "Pagination navigation" [ref=e374]: + - generic [ref=e377]: + - generic [ref=e379]: Per page + - combobox "Per page" [ref=e381]: + - option "25" [selected] + - option "50" + - option "100" + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T11-22-09-374Z.yml b/.playwright-mcp/page-2026-06-06T11-22-09-374Z.yml new file mode 100644 index 00000000..b09af5bd --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T11-22-09-374Z.yml @@ -0,0 +1,302 @@ +- generic [active] [ref=e1]: + - navigation [ref=e3]: + - generic [ref=e4]: + - link "Spec 358 Smoke Workspace X69MOA" [ref=e5] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e6] + - text: Spec 358 Smoke Workspace X69MOA + - img [ref=e8] + - button "Environment scope" [ref=e12] [cursor=pointer]: + - generic [ref=e13]: Spec 358 Smoke Environment X69MOA + - img [ref=e14] + - button "Language" [ref=e19] [cursor=pointer]: + - img [ref=e20] + - generic [ref=e22]: EN + - img [ref=e23] + - button "Expand sidebar" [ref=e25] [cursor=pointer]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e31]: + - generic [ref=e32]: Global search + - generic [ref=e33]: + - img [ref=e35] + - searchbox "Global search" [ref=e38] + - button "Notifications" [ref=e42] [cursor=pointer]: + - img [ref=e43] + - button "User menu" [ref=e47] [cursor=pointer]: + - img "Avatar of Ms. Kaylah Kohler Jr." [ref=e48] + - generic [ref=e49]: + - complementary [ref=e50]: + - navigation [ref=e53]: + - 'link "Workspace: Spec 358 Smoke Workspace X69MOA" [ref=e54] [cursor=pointer]': + - /url: http://localhost/admin + - img [ref=e56] + - generic [ref=e58]: + - generic [ref=e59]: Workspace + - generic "Spec 358 Smoke Workspace X69MOA" [ref=e60] + - generic [ref=e61]: 1 environment + - img [ref=e62] + - list [ref=e64]: + - listitem [ref=e65]: + - list [ref=e66]: + - listitem [ref=e67]: + - link "Overview" [ref=e68] [cursor=pointer]: + - /url: http://localhost/admin + - img [ref=e69] + - generic [ref=e71]: Overview + - listitem [ref=e72]: + - generic [ref=e73] [cursor=pointer]: + - generic [ref=e74]: Monitoring + - button "Monitoring" [expanded] [ref=e75]: + - img [ref=e76] + - list [ref=e78]: + - listitem [ref=e79]: + - link "Finding exceptions" [ref=e80] [cursor=pointer]: + - /url: http://localhost/admin/finding-exceptions/queue + - img [ref=e81] + - generic [ref=e83]: Finding exceptions + - listitem [ref=e84]: + - link "Operations" [ref=e85] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations + - img [ref=e86] + - generic [ref=e88]: Operations + - listitem [ref=e89]: + - link "Alerts" [ref=e90] [cursor=pointer]: + - /url: http://localhost/admin/alerts + - img [ref=e91] + - generic [ref=e93]: Alerts + - listitem [ref=e94]: + - link "Evidence" [ref=e95] [cursor=pointer]: + - /url: http://localhost/admin/evidence/overview + - img [ref=e96] + - generic [ref=e98]: Evidence + - listitem [ref=e99]: + - link "Audit Log" [ref=e100] [cursor=pointer]: + - /url: http://localhost/admin/audit-log + - img [ref=e101] + - generic [ref=e103]: Audit Log + - listitem [ref=e104]: + - generic [ref=e105] [cursor=pointer]: + - generic [ref=e106]: Reporting + - button "Reporting" [expanded] [ref=e107]: + - img [ref=e108] + - list [ref=e110]: + - listitem [ref=e111]: + - link "Reviews" [ref=e112] [cursor=pointer]: + - /url: http://localhost/admin/reviews + - img [ref=e113] + - generic [ref=e115]: Reviews + - listitem [ref=e116]: + - link "Customer reviews" [ref=e117] [cursor=pointer]: + - /url: http://localhost/admin/reviews/workspace + - img [ref=e118] + - generic [ref=e120]: Customer reviews + - listitem [ref=e121]: + - generic [ref=e122] [cursor=pointer]: + - generic [ref=e123]: Settings + - button "Settings" [expanded] [ref=e124]: + - img [ref=e125] + - list [ref=e127]: + - listitem [ref=e128]: + - link "Manage workspaces" [ref=e129] [cursor=pointer]: + - /url: http://localhost/admin/workspaces + - img [ref=e130] + - generic [ref=e132]: Manage workspaces + - listitem [ref=e133]: + - link "Integrations" [ref=e134] [cursor=pointer]: + - /url: http://localhost/admin/provider-connections + - img [ref=e135] + - generic [ref=e137]: Integrations + - listitem [ref=e138]: + - link "Settings" [ref=e139] [cursor=pointer]: + - /url: http://localhost/admin/settings/workspace + - img [ref=e140] + - generic [ref=e143]: Settings + - listitem [ref=e144]: + - generic [ref=e145] [cursor=pointer]: + - generic [ref=e146]: Governance + - button "Governance" [expanded] [ref=e147]: + - img [ref=e148] + - list [ref=e150]: + - listitem [ref=e151]: + - link "Governance inbox" [ref=e152] [cursor=pointer]: + - /url: http://localhost/admin/governance/inbox + - img [ref=e153] + - generic [ref=e155]: Governance inbox + - listitem [ref=e156]: + - link "Decision register" [ref=e157] [cursor=pointer]: + - /url: http://localhost/admin/governance/decisions + - img [ref=e158] + - generic [ref=e160]: Decision register + - main [ref=e162]: + - generic [ref=e164]: + - generic [ref=e165]: + - 'heading "Operation #82" [level=1] [ref=e167]' + - generic [ref=e169]: + - 'button "Environment scope: Spec 358 Smoke Environment X69MOA" [disabled]' + - link "Back to Operations" [ref=e170] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations + - link "Show all operations" [ref=e171] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations + - link "Refresh" [ref=e172] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations/82 + - img [ref=e173] + - text: Refresh + - button "More" [ref=e177] [cursor=pointer]: + - img [ref=e178] + - generic [ref=e182]: + - generic [ref=e183]: + - paragraph [ref=e184]: Likely stale operation + - paragraph [ref=e185]: This operation is no longer within its normal lifecycle window and may no longer be progressing. + - generic [ref=e189]: + - generic [ref=e190]: + - generic [ref=e192]: + - heading "Inventory sync" [level=2] [ref=e193] + - paragraph [ref=e194]: "Operation #82" + - generic [ref=e197]: + - generic [ref=e198]: + - generic [ref=e199]: + - img [ref=e200] + - generic [ref=e203]: Likely stale + - generic [ref=e204]: + - img [ref=e205] + - generic [ref=e208]: Awaiting result + - generic [ref=e209]: Decision guidance and high-signal context stay ahead of diagnostic payloads and raw JSON. + - generic [ref=e211]: + - generic [ref=e212]: + - generic [ref=e213]: Target + - generic [ref=e215]: No target scope details were recorded for this operation. + - generic [ref=e216]: + - generic [ref=e217]: Elapsed + - generic [ref=e219]: 2 weeks + - generic [ref=e220]: + - generic [ref=e222]: + - heading "Decision" [level=2] [ref=e223] + - paragraph [ref=e224]: Start here to see how the operation ended, whether the result is trustworthy enough to use, and the one primary next step. + - generic [ref=e227]: + - generic [ref=e228]: + - generic [ref=e229]: "Still active: Yes. Automatic reconciliation: No. This run is past its lifecycle window and needs stale-run investigation before retrying." + - generic [ref=e231]: + - generic [ref=e232]: + - generic [ref=e233]: Execution state + - generic [ref=e235]: + - img [ref=e236] + - generic [ref=e239]: Likely stale + - generic [ref=e240]: + - generic [ref=e241]: Outcome + - generic [ref=e243]: + - img [ref=e244] + - generic [ref=e247]: Awaiting result + - generic [ref=e248]: + - generic [ref=e249]: + - generic [ref=e250]: Primary next step + - generic [ref=e251]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e252]: + - generic [ref=e253]: Counts + - generic [ref=e255]: "Total: 10 · Processed: 4" + - generic [ref=e256]: + - generic [ref=e257]: + - generic [ref=e258]: Guidance + - generic [ref=e259]: + - generic [ref=e261]: + - heading "Guidance" [level=2] [ref=e262] + - paragraph [ref=e263]: Secondary guidance explains caveats and context without competing with the primary next step. + - generic [ref=e269]: + - generic [ref=e270]: Queue guidance + - generic [ref=e272]: Past the lifecycle window. Review worker health and logs before retrying. + - generic [ref=e273]: + - generic [ref=e274]: Lifecycle + - generic [ref=e275]: + - generic [ref=e277]: + - heading "Lifecycle" [level=2] [ref=e278] + - paragraph [ref=e279]: Lifecycle context explains freshness, reconciliation, and tenant-scoped caveats. + - generic [ref=e285]: + - generic [ref=e286]: ManagedEnvironment lifecycle + - generic [ref=e288]: + - img [ref=e289] + - generic [ref=e292]: Active + - generic [ref=e293]: + - generic [ref=e294]: Timing + - generic [ref=e295]: + - heading "Timing" [level=2] [ref=e298] + - generic [ref=e303]: + - generic [ref=e304]: + - generic [ref=e305]: Created + - generic [ref=e307]: Sat, May 23, 2026 11:21 AM + - generic [ref=e308]: + - generic [ref=e309]: Started + - generic [ref=e311]: Sat, May 23, 2026 11:21 AM + - generic [ref=e312]: + - generic [ref=e313]: Completed + - generic [ref=e315]: — + - generic [ref=e316]: + - generic [ref=e317]: Elapsed + - generic [ref=e319]: 2 weeks + - generic [ref=e320]: + - generic [ref=e321]: Metadata + - generic [ref=e322]: + - generic [ref=e324]: + - heading "Metadata" [level=2] [ref=e325] + - paragraph [ref=e326]: Secondary metadata remains visible without crowding the top decision surface. + - generic [ref=e331]: + - generic [ref=e332]: + - generic [ref=e333]: Initiator + - generic [ref=e335]: System + - generic [ref=e336]: + - generic [ref=e337]: Expected duration + - generic [ref=e339]: Typically ~3 min + - generic [ref=e341]: + - heading "Related context" [level=2] [ref=e344] + - generic [ref=e349]: + - generic [ref=e350]: Operations + - generic [ref=e351]: + - generic [ref=e352]: + - link "Operations" [ref=e353] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=61&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F38%2Foperations%3Fenvironment_id%3D61&environment_id=61 + - generic [ref=e354]: Spec 358 Smoke Environment X69MOA + - generic [ref=e355]: + - generic [ref=e358]: ManagedEnvironment context + - link "Open operations" [ref=e359] [cursor=pointer]: + - /url: http://localhost/admin/workspaces/38/operations?nav%5Bsource_surface%5D=operation_run.detail_section&nav%5Bcanonical_route_name%5D=admin.operations.index&nav%5Benvironment_id%5D=61&nav%5Bback_label%5D=Back%20to%20operations&nav%5Bback_url%5D=http%3A%2F%2Flocalhost%2Fadmin%2Fworkspaces%2F38%2Foperations%3Fenvironment_id%3D61&environment_id=61 + - img [ref=e360] + - text: Open operations + - generic [ref=e363]: + - generic [ref=e365] [cursor=pointer]: + - generic [ref=e366]: + - heading "Count diagnostics" [level=2] [ref=e367] + - paragraph [ref=e368]: Normalized run counters remain available for deeper inspection without competing with the primary decision. + - button [ref=e369]: + - img [ref=e370] + - generic [ref=e373] [cursor=pointer]: + - generic [ref=e374]: + - heading "Context" [level=2] [ref=e375] + - paragraph [ref=e376]: Stored run context stays available for debugging without dominating the default reading path. + - button [ref=e377]: + - img [ref=e378] + - generic [ref=e380]: + - heading "Monitoring detail" [level=2] [ref=e383] + - generic [ref=e385]: + - paragraph [ref=e386]: Scope context, return navigation, utility, related drilldowns, and run-specific follow-up stay in separate lanes on this viewer. + - generic [ref=e387]: + - generic [ref=e388]: + - paragraph [ref=e389]: Scope context + - paragraph [ref=e390]: "Environment scope: Spec 358 Smoke Environment X69MOA" + - paragraph [ref=e391]: The current workspace or tenant scope remains visible without behaving like a primary task action. + - generic [ref=e392]: + - paragraph [ref=e393]: Navigation lane + - paragraph [ref=e394]: Back to Operations + - paragraph [ref=e395]: Return to the operations landing when this review is complete. + - generic [ref=e396]: + - paragraph [ref=e397]: Utility lane + - paragraph [ref=e398]: Refresh + - paragraph [ref=e399]: Refresh keeps the current run state accurate without changing scope. + - generic [ref=e400]: + - paragraph [ref=e401]: Related drilldown + - paragraph [ref=e402]: Open + - paragraph [ref=e403]: Open keeps secondary drilldowns grouped under one control when downstream context exists. + - generic [ref=e404]: + - paragraph [ref=e405]: Follow-up lane + - paragraph [ref=e406]: No follow-up action + - paragraph [ref=e407]: No run-specific follow-up is currently available. + - generic: + - status \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T11-28-17-478Z.yml b/.playwright-mcp/page-2026-06-06T11-28-17-478Z.yml new file mode 100644 index 00000000..76f7d207 --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T11-28-17-478Z.yml @@ -0,0 +1,9956 @@ +- generic [active] [ref=e1]: + - generic [ref=e2]: + - navigation "Navigationsleiste" [ref=e3]: + - generic [ref=e4]: + - link "Startseite" [ref=e5] [cursor=pointer]: + - /url: / + - img [ref=e6] + - button "Navigationsmenü" [ref=e8] [cursor=pointer]: + - img [ref=e9] + - main "Comparing b7907bd69d...03514b9e5b" [ref=e11]: + - generic [ref=e12]: + - generic [ref=e14]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: + - link "ahmido" [ref=e21] [cursor=pointer]: + - /url: /ahmido + - text: / + - link "TenantAtlas" [ref=e22] [cursor=pointer]: + - /url: /ahmido/TenantAtlas + - generic [ref=e23]: + - link "RSS Feed" [ref=e24] [cursor=pointer]: + - /url: /ahmido/TenantAtlas.rss + - img [ref=e25] + - generic "Melde dich an, um dieses Repository zu beobachten." [ref=e28] [cursor=pointer]: + - button "Beobachten" [disabled]: + - img + - generic: Beobachten + - link "1" [ref=e29]: + - /url: /ahmido/TenantAtlas/watchers + - generic "Bitte melde dich an, um dieses Repository zu favorisieren." [ref=e31] [cursor=pointer]: + - button "Favorisieren" [disabled]: + - img + - generic: Favorisieren + - link "0" [ref=e32]: + - /url: /ahmido/TenantAtlas/stars + - generic "Bitte melde dich an, um dieses Repository zu forken." [ref=e33]: + - generic: + - img + - link "0" [ref=e34] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/forks + - navigation [ref=e36]: + - generic [ref=e37]: + - link "Code" [ref=e38] [cursor=pointer]: + - /url: /ahmido/TenantAtlas + - img [ref=e39] + - generic [ref=e41]: Code + - link "Issues" [ref=e42] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/issues + - img [ref=e43] + - generic [ref=e46]: Issues + - link "Pull-Requests" [ref=e47] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/pulls + - img [ref=e48] + - generic [ref=e50]: Pull-Requests + - link "Actions" [ref=e51] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/actions + - img [ref=e52] + - generic [ref=e54]: Actions + - link "Pakete" [ref=e55] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/packages + - img [ref=e56] + - generic [ref=e58]: Pakete + - link "Projekte 1" [ref=e59] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/projects + - img [ref=e60] + - generic [ref=e62]: Projekte + - generic [ref=e63]: "1" + - button "Weitere Einträge" [ref=e64] [cursor=pointer]: + - img [ref=e65] + - generic [ref=e68]: + - heading "Commits vergleichen" [level=2] [ref=e69] + - generic [ref=e70]: + - link "Head und Base vertauschen" [ref=e71] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/compare/358-operationrun-queue-truth-foundation...platform-dev + - img [ref=e72] + - combobox [ref=e74] [cursor=pointer]: + - generic [ref=e75]: + - generic [ref=e76]: "Ziel: ahmido:platform-dev" + - menu [ref=e77] + - link "..." [ref=e79] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/compare/platform-dev..358-operationrun-queue-truth-foundation + - img [ref=e80] + - generic [ref=e82]: ... + - combobox [ref=e83] [cursor=pointer]: + - generic [ref=e84]: + - generic [ref=e85]: "pullen von: ahmido:358-operationrun-queue-truth-foundation" + - menu [ref=e86] + - generic [ref=e88]: + - heading "1 Commits platform-d ... 358-operat" [level=4] [ref=e89]: + - generic [ref=e90]: 1 Commits + - generic [ref=e91]: + - link "platform-d" [ref=e92] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/commit/b7907bd69d169bd4b3bf37e1ee9d9e4478c7cb13 + - text: ... + - link "358-operat" [ref=e93] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - table [ref=e95]: + - rowgroup [ref=e96]: + - row "Autor Nachricht Datum" [ref=e97]: + - columnheader "Autor" [ref=e98] + - columnheader "Nachricht" [ref=e99] + - columnheader "Datum" [ref=e100] + - columnheader [ref=e101] + - rowgroup [ref=e102]: + - 'row "Ahmed Darrazi Ahmed Darrazi feat: implement operation run queue truth foundation (spec 358) 2026-06-06 13:27:48 +02:00jetzt Hash kopieren An diesem Punkt im Verlauf anzeigen" [ref=e103]': + - cell "Ahmed Darrazi Ahmed Darrazi" [ref=e104]: + - generic [ref=e105]: + - img "Ahmed Darrazi" [ref=e106] + - generic [ref=e107]: Ahmed Darrazi + - 'cell "feat: implement operation run queue truth foundation (spec 358)" [ref=e108]': + - 'generic "feat: implement operation run queue truth foundation (spec 358)" [ref=e110]': + - 'link "feat: implement operation run queue truth foundation (spec 358)" [ref=e111] [cursor=pointer]': + - /url: /ahmido/TenantAtlas/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - cell "2026-06-06 13:27:48 +02:00jetzt" [ref=e112] + - cell "Hash kopieren An diesem Punkt im Verlauf anzeigen" [ref=e113]: + - button "Hash kopieren" [ref=e114] [cursor=pointer]: + - img [ref=e115] + - link "An diesem Punkt im Verlauf anzeigen" [ref=e118] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - img [ref=e119] + - generic [ref=e121]: + - generic [ref=e123]: + - combobox "Leerzeichen" [ref=e124] [cursor=pointer]: + - img [ref=e125] + - link "Geteilte Ansicht" [ref=e127] [cursor=pointer]: + - /url: "?style=split&whitespace=show-all&show-outdated=" + - img [ref=e128] + - menu "Diff-Optionen" [ref=e130] [cursor=pointer]: + - img [ref=e131] + - generic [ref=e134]: + - generic [ref=e135]: + - 'heading "9 9 Änderungen: 8 Ergänzungen und 1 Löschungen apps/platform/app/Support/OpsUx/OperationRunProgressContract.php Datei anzeigen" [level=4] [ref=e136]': + - generic [ref=e137]: + - button [ref=e138] [cursor=pointer]: + - img [ref=e139] + - generic [ref=e141]: + - text: "9" + - 'generic "9 Änderungen: 8 Ergänzungen und 1 Löschungen" [ref=e142]' + - generic [ref=e144]: + - link "apps/platform/app/Support/OpsUx/OperationRunProgressContract.php" [ref=e145] [cursor=pointer]: + - /url: "#diff-af8b87c456c4a94716646dc84feac12360c69971" + - button [ref=e146] [cursor=pointer]: + - img [ref=e147] + - link "Datei anzeigen" [ref=e151] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/app/Support/OpsUx/OperationRunProgressContract.php + - table [ref=e154]: + - rowgroup [ref=e161]: + - 'row "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" [ref=e162]': + - cell [ref=e163]: + - button [ref=e165] [cursor=pointer]: + - img [ref=e166] + - cell [ref=e168] + - cell [ref=e169] + - 'cell "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" [ref=e170]': + - code [ref=e171]: "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" + - 'row "38 38 $context = is_array($run->context) ? $run->context : [];" [ref=e172]': + - cell "38" [ref=e173]: "38" + - cell "38" [ref=e174]: "38" + - cell [ref=e175] + - cell [ref=e176] + - 'cell "$context = is_array($run->context) ? $run->context : [];" [ref=e177]': + - code [ref=e178]: "$context = is_array($run->context) ? $run->context : [];" + - row "39 39 $capability = self::capabilityForRun($run, $summaryCounts, $context);" [ref=e179]: + - cell "39" [ref=e180]: "39" + - cell "39" [ref=e181]: "39" + - cell [ref=e182] + - cell [ref=e183] + - cell "$capability = self::capabilityForRun($run, $summaryCounts, $context);" [ref=e184]: + - code [ref=e185]: $capability = self::capabilityForRun($run, $summaryCounts, $context); + - row "40 40" [ref=e186]: + - cell "40" [ref=e187]: "40" + - cell "40" [ref=e188]: "40" + - cell [ref=e189] + - cell [ref=e190] + - cell [ref=e191]: + - code + - 'row "41 + if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" [ref=e192]': + - cell [ref=e193] + - cell "41" [ref=e194]: "41" + - cell [ref=e195] + - cell "+" [ref=e196]: + - generic [ref=e197]: + + - 'cell "if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" [ref=e198]': + - code [ref=e199]: "if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" + - row "42 + return self::indeterminateModel(" [ref=e200]: + - cell [ref=e201] + - cell "42" [ref=e202]: "42" + - cell [ref=e203] + - cell "+" [ref=e204]: + - generic [ref=e205]: + + - cell "return self::indeterminateModel(" [ref=e206]: + - code [ref=e207]: return self::indeterminateModel( + - row "43 + $capability," [ref=e208]: + - cell [ref=e209] + - cell "43" [ref=e210]: "43" + - cell [ref=e211] + - cell "+" [ref=e212]: + - generic [ref=e213]: + + - cell "$capability," [ref=e214]: + - code [ref=e215]: $capability, + - row "44 + RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.'," [ref=e216]: + - cell [ref=e217] + - cell "44" [ref=e218]: "44" + - cell [ref=e219] + - cell "+" [ref=e220]: + - generic [ref=e221]: + + - cell "RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.'," [ref=e222]: + - code [ref=e223]: RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.', + - row "45 + );" [ref=e224]: + - cell [ref=e225] + - cell "45" [ref=e226]: "45" + - cell [ref=e227] + - cell "+" [ref=e228]: + - generic [ref=e229]: + + - cell ");" [ref=e230]: + - code [ref=e231]: ); + - 'row "46 + }" [ref=e232]': + - cell [ref=e233] + - cell "46" [ref=e234]: "46" + - cell [ref=e235] + - cell "+" [ref=e236]: + - generic [ref=e237]: + + - 'cell "}" [ref=e238]': + - code [ref=e239]: "}" + - row "47 +" [ref=e240]: + - cell [ref=e241] + - cell "47" [ref=e242]: "47" + - cell [ref=e243] + - cell "+" [ref=e244]: + - generic [ref=e245]: + + - cell [ref=e246]: + - code + - 'row "41 48 return match ($capability) {" [ref=e247]': + - cell "41" [ref=e248]: "41" + - cell "48" [ref=e249]: "48" + - cell [ref=e250] + - cell [ref=e251] + - 'cell "return match ($capability) {" [ref=e252]': + - code [ref=e253]: "return match ($capability) {" + - row "42 49 self::COUNTED => self::countedModel($summaryCounts)," [ref=e254]: + - cell "42" [ref=e255]: "42" + - cell "49" [ref=e256]: "49" + - cell [ref=e257] + - cell [ref=e258] + - cell "self::COUNTED => self::countedModel($summaryCounts)," [ref=e259]: + - code [ref=e260]: self::COUNTED => self::countedModel($summaryCounts), + - row "43 50 self::PHASED => self::phasedModel($run, $context)," [ref=e261]: + - cell "43" [ref=e262]: "43" + - cell "50" [ref=e263]: "50" + - cell [ref=e264] + - cell [ref=e265] + - cell "self::PHASED => self::phasedModel($run, $context)," [ref=e266]: + - code [ref=e267]: self::PHASED => self::phasedModel($run, $context), + - 'row "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" [ref=e268]': + - cell [ref=e269]: + - generic [ref=e270]: + - button [ref=e271] [cursor=pointer]: + - img [ref=e272] + - button [ref=e274] [cursor=pointer]: + - img [ref=e275] + - cell [ref=e277] + - cell [ref=e278] + - 'cell "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" [ref=e279]': + - code [ref=e280]: "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" + - 'row "411 418 {" [ref=e281]': + - cell "411" [ref=e282]: "411" + - cell "418" [ref=e283]: "418" + - cell [ref=e284] + - cell [ref=e285] + - 'cell "{" [ref=e286]': + - code [ref=e287]: "{" + - 'row "412 419 return is_int($value) ? $value : null;" [ref=e288]': + - cell "412" [ref=e289]: "412" + - cell "419" [ref=e290]: "419" + - cell [ref=e291] + - cell [ref=e292] + - 'cell "return is_int($value) ? $value : null;" [ref=e293]': + - code [ref=e294]: "return is_int($value) ? $value : null;" + - 'row "413 420 }" [ref=e295]': + - cell "413" [ref=e296]: "413" + - cell "420" [ref=e297]: "420" + - cell [ref=e298] + - cell [ref=e299] + - 'cell "}" [ref=e300]': + - code [ref=e301]: "}" + - 'row "414 - }" [ref=e302]': + - cell "414" [ref=e303]: "414" + - cell [ref=e304] + - cell [ref=e305] + - cell "-" [ref=e306]: + - generic [ref=e307]: "-" + - 'cell "}" [ref=e308]': + - code [ref=e309]: "}" + - 'row "421 + }" [ref=e310]': + - cell [ref=e311] + - cell "421" [ref=e312]: "421" + - cell [ref=e313] + - cell "+" [ref=e314]: + - generic [ref=e315]: + + - 'cell "}" [ref=e316]': + - code [ref=e317]: "}" + - row [ref=e318]: + - cell [ref=e319] + - cell [ref=e320] + - cell [ref=e321] + - cell [ref=e322]: + - code + - generic [ref=e323]: + - 'heading "3 3 Änderungen: 2 Ergänzungen und 1 Löschungen apps/platform/app/Support/OpsUx/OperationUxPresenter.php Datei anzeigen" [level=4] [ref=e324]': + - generic [ref=e325]: + - button [ref=e326] [cursor=pointer]: + - img [ref=e327] + - generic [ref=e329]: + - text: "3" + - 'generic "3 Änderungen: 2 Ergänzungen und 1 Löschungen" [ref=e330]' + - generic [ref=e332]: + - link "apps/platform/app/Support/OpsUx/OperationUxPresenter.php" [ref=e333] [cursor=pointer]: + - /url: "#diff-1c19add1fd95c0b4bd4495ffc27d46c971c67709" + - button [ref=e334] [cursor=pointer]: + - img [ref=e335] + - link "Datei anzeigen" [ref=e339] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/app/Support/OpsUx/OperationUxPresenter.php + - table [ref=e342]: + - rowgroup [ref=e349]: + - 'row "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" [ref=e350]': + - cell [ref=e351]: + - button [ref=e353] [cursor=pointer]: + - img [ref=e354] + - cell [ref=e356] + - cell [ref=e357] + - 'cell "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" [ref=e358]': + - code [ref=e359]: "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" + - row "201 201 $freshnessState = self::freshnessState($run);" [ref=e360]: + - cell "201" [ref=e361]: "201" + - cell "201" [ref=e362]: "201" + - cell [ref=e363] + - cell [ref=e364] + - cell "$freshnessState = self::freshnessState($run);" [ref=e365]: + - code [ref=e366]: $freshnessState = self::freshnessState($run); + - row "202 202" [ref=e367]: + - cell "202" [ref=e368]: "202" + - cell "202" [ref=e369]: "202" + - cell [ref=e370] + - cell [ref=e371] + - cell [ref=e372]: + - code + - 'row "203 203 if ($freshnessState->isLikelyStale()) {" [ref=e373]': + - cell "203" [ref=e374]: "203" + - cell "203" [ref=e375]: "203" + - cell [ref=e376] + - cell [ref=e377] + - 'cell "if ($freshnessState->isLikelyStale()) {" [ref=e378]': + - code [ref=e379]: "if ($freshnessState->isLikelyStale()) {" + - row "204 - return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.';" [ref=e380]: + - cell "204" [ref=e381]: "204" + - cell [ref=e382] + - cell [ref=e383] + - cell "-" [ref=e384]: + - generic [ref=e385]: "-" + - cell "return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.';" [ref=e386]: + - code [ref=e387]: return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.'; + - row "204 + return RunDurationInsights::stuckGuidance($run)" [ref=e388]: + - cell [ref=e389] + - cell "204" [ref=e390]: "204" + - cell [ref=e391] + - cell "+" [ref=e392]: + - generic [ref=e393]: + + - cell "return RunDurationInsights::stuckGuidance($run)" [ref=e394]: + - code [ref=e395]: return RunDurationInsights::stuckGuidance($run) + - row "205 + ?? 'Past the lifecycle window. Review worker health and logs before retrying.';" [ref=e396]: + - cell [ref=e397] + - cell "205" [ref=e398]: "205" + - cell [ref=e399] + - cell "+" [ref=e400]: + - generic [ref=e401]: + + - cell "?? 'Past the lifecycle window. Review worker health and logs before retrying.';" [ref=e402]: + - code [ref=e403]: "?? 'Past the lifecycle window. Review worker health and logs before retrying.';" + - 'row "205 206 }" [ref=e404]': + - cell "205" [ref=e405]: "205" + - cell "206" [ref=e406]: "206" + - cell [ref=e407] + - cell [ref=e408] + - 'cell "}" [ref=e409]': + - code [ref=e410]: "}" + - row "206 207" [ref=e411]: + - cell "206" [ref=e412]: "206" + - cell "207" [ref=e413]: "207" + - cell [ref=e414] + - cell [ref=e415] + - cell [ref=e416]: + - code + - 'row "207 208 if ($freshnessState->isReconciledFailed()) {" [ref=e417]': + - cell "207" [ref=e418]: "207" + - cell "208" [ref=e419]: "208" + - cell [ref=e420] + - cell [ref=e421] + - 'cell "if ($freshnessState->isReconciledFailed()) {" [ref=e422]': + - code [ref=e423]: "if ($freshnessState->isReconciledFailed()) {" + - row [ref=e424]: + - cell [ref=e425]: + - button [ref=e427] [cursor=pointer]: + - img [ref=e428] + - cell [ref=e430] + - cell [ref=e431] + - cell [ref=e432]: + - code + - generic [ref=e433]: + - 'heading "9 9 Änderungen: 7 Ergänzungen und 2 Löschungen apps/platform/resources/views/livewire/bulk-operation-progress.blade.php Datei anzeigen" [level=4] [ref=e434]': + - generic [ref=e435]: + - button [ref=e436] [cursor=pointer]: + - img [ref=e437] + - generic [ref=e439]: + - text: "9" + - 'generic "9 Änderungen: 7 Ergänzungen und 2 Löschungen" [ref=e440]' + - generic [ref=e442]: + - link "apps/platform/resources/views/livewire/bulk-operation-progress.blade.php" [ref=e443] [cursor=pointer]: + - /url: "#diff-3037cccd64c0a0bbd6b4146e8fefb38b64c8633e" + - button [ref=e444] [cursor=pointer]: + - img [ref=e445] + - link "Datei anzeigen" [ref=e449] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/resources/views/livewire/bulk-operation-progress.blade.php + - table [ref=e452]: + - rowgroup [ref=e459]: + - row "@ -13,8 +13,14 @@" [ref=e460]: + - cell [ref=e461]: + - button [ref=e463] [cursor=pointer]: + - img [ref=e464] + - cell [ref=e466] + - cell [ref=e467] + - cell "@ -13,8 +13,14 @@" [ref=e468]: + - code [ref=e469]: "@ -13,8 +13,14 @@" + - 'row "13 13 $operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" [ref=e470]': + - cell "13" [ref=e471]: "13" + - cell "13" [ref=e472]: "13" + - cell [ref=e473] + - cell [ref=e474] + - 'cell "$operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" [ref=e475]': + - code [ref=e476]: "$operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" + - 'row "14 14 $primaryActionLabel = $usesCollectivePrimaryAction ? ''Review operations'' : ''View operation'';" [ref=e477]': + - cell "14" [ref=e478]: "14" + - cell "14" [ref=e479]: "14" + - cell [ref=e480] + - cell [ref=e481] + - 'cell "$primaryActionLabel = $usesCollectivePrimaryAction ? ''Review operations'' : ''View operation'';" [ref=e482]': + - code [ref=e483]: "$primaryActionLabel = $usesCollectivePrimaryAction ? 'Review operations' : 'View operation';" + - 'row "15 15 $bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? ''Active operations'' : ''Operation updates'';" [ref=e484]': + - cell "15" [ref=e485]: "15" + - cell "15" [ref=e486]: "15" + - cell [ref=e487] + - cell [ref=e488] + - 'cell "$bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? ''Active operations'' : ''Operation updates'';" [ref=e489]': + - code [ref=e490]: "$bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? 'Active operations' : 'Operation updates';" + - row "16 + $hasStaleActiveVisibleRuns = $runs->contains(" [ref=e491]: + - cell [ref=e492] + - cell "16" [ref=e493]: "16" + - cell [ref=e494] + - cell "+" [ref=e495]: + - generic [ref=e496]: + + - cell "$hasStaleActiveVisibleRuns = $runs->contains(" [ref=e497]: + - code [ref=e498]: $hasStaleActiveVisibleRuns = $runs->contains( + - 'row "17 + fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" [ref=e499]': + - cell [ref=e500] + - cell "17" [ref=e501]: "17" + - cell [ref=e502] + - cell "+" [ref=e503]: + - generic [ref=e504]: + + - 'cell "fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" [ref=e505]': + - code [ref=e506]: "fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" + - row "18 + && $run->isCurrentlyActive()" [ref=e507]: + - cell [ref=e508] + - cell "18" [ref=e509]: "18" + - cell [ref=e510] + - cell "+" [ref=e511]: + - generic [ref=e512]: + + - cell "&& $run->isCurrentlyActive()" [ref=e513]: + - code [ref=e514]: "&& $run->isCurrentlyActive()" + - row "19 + && $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" [ref=e515]: + - cell [ref=e516] + - cell "19" [ref=e517]: "19" + - cell [ref=e518] + - cell "+" [ref=e519]: + - generic [ref=e520]: + + - cell "&& $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" [ref=e521]: + - code [ref=e522]: "&& $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" + - row "20 + );" [ref=e523]: + - cell [ref=e524] + - cell "20" [ref=e525]: "20" + - cell [ref=e526] + - cell "+" [ref=e527]: + - generic [ref=e528]: + + - cell ");" [ref=e529]: + - code [ref=e530]: ); + - 'row "16 21 $bannerHelper = match (true) {" [ref=e531]': + - cell "16" [ref=e532]: "16" + - cell "21" [ref=e533]: "21" + - cell [ref=e534] + - cell [ref=e535] + - 'cell "$bannerHelper = match (true) {" [ref=e536]': + - code [ref=e537]: "$bannerHelper = match (true) {" + - row "17 22 $hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.'," [ref=e538]: + - cell "17" [ref=e539]: "17" + - cell "22" [ref=e540]: "22" + - cell [ref=e541] + - cell [ref=e542] + - cell "$hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.'," [ref=e543]: + - code [ref=e544]: $hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.', + - row "23 + $hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.'," [ref=e545]: + - cell [ref=e546] + - cell "23" [ref=e547]: "23" + - cell [ref=e548] + - cell "+" [ref=e549]: + - generic [ref=e550]: + + - cell "$hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.'," [ref=e551]: + - code [ref=e552]: $hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.', + - row "18 24 $hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.'," [ref=e553]: + - cell "18" [ref=e554]: "18" + - cell "24" [ref=e555]: "24" + - cell [ref=e556] + - cell [ref=e557] + - cell "$hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.'," [ref=e558]: + - code [ref=e559]: $hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.', + - row "19 25 $hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.'," [ref=e560]: + - cell "19" [ref=e561]: "19" + - cell "25" [ref=e562]: "25" + - cell [ref=e563] + - cell [ref=e564] + - cell "$hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.'," [ref=e565]: + - code [ref=e566]: $hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.', + - row "20 26 $hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.'," [ref=e567]: + - cell "20" [ref=e568]: "20" + - cell "26" [ref=e569]: "26" + - cell [ref=e570] + - cell [ref=e571] + - cell "$hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.'," [ref=e572]: + - code [ref=e573]: $hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.', + - row "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" [ref=e574]: + - cell [ref=e575]: + - generic [ref=e576]: + - button [ref=e577] [cursor=pointer]: + - img [ref=e578] + - button [ref=e580] [cursor=pointer]: + - img [ref=e581] + - cell [ref=e583] + - cell [ref=e584] + - cell "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" [ref=e585]: + - code [ref=e586]: "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" + - row "111 117 $progress = \\App\\Support\\OpsUx\\OperationRunProgressContract::forRun($run);" [ref=e587]: + - cell "111" [ref=e588]: "111" + - cell "117" [ref=e589]: "117" + - cell [ref=e590] + - cell [ref=e591] + - cell "$progress = \\App\\Support\\OpsUx\\OperationRunProgressContract::forRun($run);" [ref=e592]: + - code [ref=e593]: $progress = \App\Support\OpsUx\OperationRunProgressContract::forRun($run); + - row "112 118 $hasDeterminateProgress = $progress['display'] === 'counted';" [ref=e594]: + - cell "112" [ref=e595]: "112" + - cell "118" [ref=e596]: "118" + - cell [ref=e597] + - cell [ref=e598] + - cell "$hasDeterminateProgress = $progress['display'] === 'counted';" [ref=e599]: + - code [ref=e600]: $hasDeterminateProgress = $progress['display'] === 'counted'; + - row "113 119 $lifecycleAttention = \\App\\Support\\OpsUx\\OperationUxPresenter::lifecycleAttentionSummary($run);" [ref=e601]: + - cell "113" [ref=e602]: "113" + - cell "119" [ref=e603]: "119" + - cell [ref=e604] + - cell [ref=e605] + - cell "$lifecycleAttention = \\App\\Support\\OpsUx\\OperationUxPresenter::lifecycleAttentionSummary($run);" [ref=e606]: + - code [ref=e607]: $lifecycleAttention = \App\Support\OpsUx\OperationUxPresenter::lifecycleAttentionSummary($run); + - row "114 - $showsLifecycleAttention = $lifecycleAttention !== null" [ref=e608]: + - cell "114" [ref=e609]: "114" + - cell [ref=e610] + - cell [ref=e611] + - cell "-" [ref=e612]: + - generic [ref=e613]: "-" + - cell "$showsLifecycleAttention = $lifecycleAttention !== null" [ref=e614]: + - code [ref=e615]: $showsLifecycleAttention = $lifecycleAttention !== null + - row "115 - && ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" [ref=e616]: + - cell "115" [ref=e617]: "115" + - cell [ref=e618] + - cell [ref=e619] + - cell "-" [ref=e620]: + - generic [ref=e621]: "-" + - cell "&& ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" [ref=e622]: + - code [ref=e623]: "&& ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" + - row "120 + $showsLifecycleAttention = $lifecycleAttention !== null;" [ref=e624]: + - cell [ref=e625] + - cell "120" [ref=e626]: "120" + - cell [ref=e627] + - cell "+" [ref=e628]: + - generic [ref=e629]: + + - cell "$showsLifecycleAttention = $lifecycleAttention !== null;" [ref=e630]: + - code [ref=e631]: $showsLifecycleAttention = $lifecycleAttention !== null; + - row "116 121 $progressLabel = $progress['label'];" [ref=e632]: + - cell "116" [ref=e633]: "116" + - cell "121" [ref=e634]: "121" + - cell [ref=e635] + - cell [ref=e636] + - cell "$progressLabel = $progress['label'];" [ref=e637]: + - code [ref=e638]: $progressLabel = $progress['label']; + - row "117 122 $progressPercent = $progress['percent'];" [ref=e639]: + - cell "117" [ref=e640]: "117" + - cell "122" [ref=e641]: "122" + - cell [ref=e642] + - cell [ref=e643] + - cell "$progressPercent = $progress['percent'];" [ref=e644]: + - code [ref=e645]: $progressPercent = $progress['percent']; + - row "118 123 $showsIndeterminateProgress = $progress['display'] === 'indeterminate';" [ref=e646]: + - cell "118" [ref=e647]: "118" + - cell "123" [ref=e648]: "123" + - cell [ref=e649] + - cell [ref=e650] + - cell "$showsIndeterminateProgress = $progress['display'] === 'indeterminate';" [ref=e651]: + - code [ref=e652]: $showsIndeterminateProgress = $progress['display'] === 'indeterminate'; + - row [ref=e653]: + - cell [ref=e654]: + - button [ref=e656] [cursor=pointer]: + - img [ref=e657] + - cell [ref=e659] + - cell [ref=e660] + - cell [ref=e661]: + - code + - generic [ref=e662]: + - 'heading "28 28 Änderungen: 28 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php Datei anzeigen" [level=4] [ref=e663]': + - generic [ref=e664]: + - button [ref=e665] [cursor=pointer]: + - img [ref=e666] + - generic [ref=e668]: + - text: "28" + - 'generic "28 Änderungen: 28 Ergänzungen und 0 Löschungen" [ref=e669]' + - generic [ref=e671]: + - link "apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php" [ref=e672] [cursor=pointer]: + - /url: "#diff-5e29ae6c499f78190dc7c64c7cf044bb0a43e995" + - button [ref=e673] [cursor=pointer]: + - img [ref=e674] + - link "Datei anzeigen" [ref=e678] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php + - table [ref=e681]: + - rowgroup [ref=e688]: + - 'row "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" [ref=e689]': + - cell [ref=e690]: + - button [ref=e692] [cursor=pointer]: + - img [ref=e693] + - cell [ref=e695] + - cell [ref=e696] + - 'cell "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" [ref=e697]': + - code [ref=e698]: "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" + - row "243 243 ->and($bannerPosition)->toBeLessThan($decisionPosition);" [ref=e699]: + - cell "243" [ref=e700]: "243" + - cell "243" [ref=e701]: "243" + - cell [ref=e702] + - cell [ref=e703] + - cell "->and($bannerPosition)->toBeLessThan($decisionPosition);" [ref=e704]: + - code [ref=e705]: "->and($bannerPosition)->toBeLessThan($decisionPosition);" + - 'row "244 244 });" [ref=e706]': + - cell "244" [ref=e707]: "244" + - cell "244" [ref=e708]: "244" + - cell [ref=e709] + - cell [ref=e710] + - 'cell "});" [ref=e711]': + - code [ref=e712]: "});" + - row "245 245" [ref=e713]: + - cell "245" [ref=e714]: "245" + - cell "245" [ref=e715]: "245" + - cell [ref=e716] + - cell [ref=e717] + - cell [ref=e718]: + - code + - 'row "246 + it(''keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy'', function (): void {" [ref=e719]': + - cell [ref=e720] + - cell "246" [ref=e721]: "246" + - cell [ref=e722] + - cell "+" [ref=e723]: + - generic [ref=e724]: + + - 'cell "it(''keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy'', function (): void {" [ref=e725]': + - code [ref=e726]: "it('keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy', function (): void {" + - 'row "247 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e727]': + - cell [ref=e728] + - cell "247" [ref=e729]: "247" + - cell [ref=e730] + - cell "+" [ref=e731]: + - generic [ref=e732]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e733]': + - code [ref=e734]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "248 +" [ref=e735]: + - cell [ref=e736] + - cell "248" [ref=e737]: "248" + - cell [ref=e738] + - cell "+" [ref=e739]: + - generic [ref=e740]: + + - cell [ref=e741]: + - code + - row "249 + setAdminPanelContext();" [ref=e742]: + - cell [ref=e743] + - cell "249" [ref=e744]: "249" + - cell [ref=e745] + - cell "+" [ref=e746]: + - generic [ref=e747]: + + - cell "setAdminPanelContext();" [ref=e748]: + - code [ref=e749]: setAdminPanelContext(); + - row "250 +" [ref=e750]: + - cell [ref=e751] + - cell "250" [ref=e752]: "250" + - cell [ref=e753] + - cell "+" [ref=e754]: + - generic [ref=e755]: + + - cell [ref=e756]: + - code + - row "251 + $run = OperationRun::factory()->create([" [ref=e757]: + - cell [ref=e758] + - cell "251" [ref=e759]: "251" + - cell [ref=e760] + - cell "+" [ref=e761]: + - generic [ref=e762]: + + - cell "$run = OperationRun::factory()->create([" [ref=e763]: + - code [ref=e764]: $run = OperationRun::factory()->create([ + - row "252 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e765]: + - cell [ref=e766] + - cell "252" [ref=e767]: "252" + - cell [ref=e768] + - cell "+" [ref=e769]: + - generic [ref=e770]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e771]: + - code [ref=e772]: "'workspace_id' => (int) $tenant->workspace_id," + - row "253 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e773]: + - cell [ref=e774] + - cell "253" [ref=e775]: "253" + - cell [ref=e776] + - cell "+" [ref=e777]: + - generic [ref=e778]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e779]: + - code [ref=e780]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "254 + 'type' => 'inventory_sync'," [ref=e781]: + - cell [ref=e782] + - cell "254" [ref=e783]: "254" + - cell [ref=e784] + - cell "+" [ref=e785]: + - generic [ref=e786]: + + - cell "'type' => 'inventory_sync'," [ref=e787]: + - code [ref=e788]: "'type' => 'inventory_sync'," + - row "255 + 'status' => OperationRunStatus::Queued->value," [ref=e789]: + - cell [ref=e790] + - cell "255" [ref=e791]: "255" + - cell [ref=e792] + - cell "+" [ref=e793]: + - generic [ref=e794]: + + - cell "'status' => OperationRunStatus::Queued->value," [ref=e795]: + - code [ref=e796]: "'status' => OperationRunStatus::Queued->value," + - row "256 + 'outcome' => OperationRunOutcome::Pending->value," [ref=e797]: + - cell [ref=e798] + - cell "256" [ref=e799]: "256" + - cell [ref=e800] + - cell "+" [ref=e801]: + - generic [ref=e802]: + + - cell "'outcome' => OperationRunOutcome::Pending->value," [ref=e803]: + - code [ref=e804]: "'outcome' => OperationRunOutcome::Pending->value," + - row "257 + 'created_at' => now()->subWeeks(2)," [ref=e805]: + - cell [ref=e806] + - cell "257" [ref=e807]: "257" + - cell [ref=e808] + - cell "+" [ref=e809]: + - generic [ref=e810]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e811]: + - code [ref=e812]: "'created_at' => now()->subWeeks(2)," + - row "258 + ]);" [ref=e813]: + - cell [ref=e814] + - cell "258" [ref=e815]: "258" + - cell [ref=e816] + - cell "+" [ref=e817]: + - generic [ref=e818]: + + - cell "]);" [ref=e819]: + - code [ref=e820]: "]);" + - row "259 +" [ref=e821]: + - cell [ref=e822] + - cell "259" [ref=e823]: "259" + - cell [ref=e824] + - cell "+" [ref=e825]: + - generic [ref=e826]: + + - cell [ref=e827]: + - code + - row "260 + $response = $this->actingAs($user)" [ref=e828]: + - cell [ref=e829] + - cell "260" [ref=e830]: "260" + - cell [ref=e831] + - cell "+" [ref=e832]: + - generic [ref=e833]: + + - cell "$response = $this->actingAs($user)" [ref=e834]: + - code [ref=e835]: $response = $this->actingAs($user) + - row "261 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e836]: + - cell [ref=e837] + - cell "261" [ref=e838]: "261" + - cell [ref=e839] + - cell "+" [ref=e840]: + - generic [ref=e841]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e842]: + - code [ref=e843]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "262 + ->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" [ref=e844]: + - cell [ref=e845] + - cell "262" [ref=e846]: "262" + - cell [ref=e847] + - cell "+" [ref=e848]: + - generic [ref=e849]: + + - cell "->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" [ref=e850]: + - code [ref=e851]: "->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" + - row "263 + ->assertOk()" [ref=e852]: + - cell [ref=e853] + - cell "263" [ref=e854]: "263" + - cell [ref=e855] + - cell "+" [ref=e856]: + - generic [ref=e857]: + + - cell "->assertOk()" [ref=e858]: + - code [ref=e859]: "->assertOk()" + - row "264 + ->assertSee('Likely stale operation')" [ref=e860]: + - cell [ref=e861] + - cell "264" [ref=e862]: "264" + - cell [ref=e863] + - cell "+" [ref=e864]: + - generic [ref=e865]: + + - cell "->assertSee('Likely stale operation')" [ref=e866]: + - code [ref=e867]: "->assertSee('Likely stale operation')" + - row "265 + ->assertSee('Decision');" [ref=e868]: + - cell [ref=e869] + - cell "265" [ref=e870]: "265" + - cell [ref=e871] + - cell "+" [ref=e872]: + - generic [ref=e873]: + + - cell "->assertSee('Decision');" [ref=e874]: + - code [ref=e875]: "->assertSee('Decision');" + - row "266 +" [ref=e876]: + - cell [ref=e877] + - cell "266" [ref=e878]: "266" + - cell [ref=e879] + - cell "+" [ref=e880]: + - generic [ref=e881]: + + - cell [ref=e882]: + - code + - row "267 + $pageText = visiblePageText($response);" [ref=e883]: + - cell [ref=e884] + - cell "267" [ref=e885]: "267" + - cell [ref=e886] + - cell "+" [ref=e887]: + - generic [ref=e888]: + + - cell "$pageText = visiblePageText($response);" [ref=e889]: + - code [ref=e890]: $pageText = visiblePageText($response); + - row "268 +" [ref=e891]: + - cell [ref=e892] + - cell "268" [ref=e893]: "268" + - cell [ref=e894] + - cell "+" [ref=e895]: + - generic [ref=e896]: + + - cell [ref=e897]: + - code + - row "269 + expect($pageText)->toContain('past its lifecycle window')" [ref=e898]: + - cell [ref=e899] + - cell "269" [ref=e900]: "269" + - cell [ref=e901] + - cell "+" [ref=e902]: + - generic [ref=e903]: + + - cell "expect($pageText)->toContain('past its lifecycle window')" [ref=e904]: + - code [ref=e905]: expect($pageText)->toContain('past its lifecycle window') + - row "270 + ->not->toContain('No action needed yet. The operation is waiting for a worker.')" [ref=e906]: + - cell [ref=e907] + - cell "270" [ref=e908]: "270" + - cell [ref=e909] + - cell "+" [ref=e910]: + - generic [ref=e911]: + + - cell "->not->toContain('No action needed yet. The operation is waiting for a worker.')" [ref=e912]: + - code [ref=e913]: "->not->toContain('No action needed yet. The operation is waiting for a worker.')" + - row "271 + ->not->toContain('Waiting for worker.');" [ref=e914]: + - cell [ref=e915] + - cell "271" [ref=e916]: "271" + - cell [ref=e917] + - cell "+" [ref=e918]: + - generic [ref=e919]: + + - cell "->not->toContain('Waiting for worker.');" [ref=e920]: + - code [ref=e921]: "->not->toContain('Waiting for worker.');" + - 'row "272 + });" [ref=e922]': + - cell [ref=e923] + - cell "272" [ref=e924]: "272" + - cell [ref=e925] + - cell "+" [ref=e926]: + - generic [ref=e927]: + + - 'cell "});" [ref=e928]': + - code [ref=e929]: "});" + - row "273 +" [ref=e930]: + - cell [ref=e931] + - cell "273" [ref=e932]: "273" + - cell [ref=e933] + - cell "+" [ref=e934]: + - generic [ref=e935]: + + - cell [ref=e936]: + - code + - 'row "246 274 it(''renders explicit sparse-data fallbacks for operation runs'', function (): void {" [ref=e937]': + - cell "246" [ref=e938]: "246" + - cell "274" [ref=e939]: "274" + - cell [ref=e940] + - cell [ref=e941] + - 'cell "it(''renders explicit sparse-data fallbacks for operation runs'', function (): void {" [ref=e942]': + - code [ref=e943]: "it('renders explicit sparse-data fallbacks for operation runs', function (): void {" + - row "247 275 $workspace = Workspace::factory()->create();" [ref=e944]: + - cell "247" [ref=e945]: "247" + - cell "275" [ref=e946]: "275" + - cell [ref=e947] + - cell [ref=e948] + - cell "$workspace = Workspace::factory()->create();" [ref=e949]: + - code [ref=e950]: $workspace = Workspace::factory()->create(); + - row "248 276 $user = User::factory()->create();" [ref=e951]: + - cell "248" [ref=e952]: "248" + - cell "276" [ref=e953]: "276" + - cell [ref=e954] + - cell [ref=e955] + - cell "$user = User::factory()->create();" [ref=e956]: + - code [ref=e957]: $user = User::factory()->create(); + - row [ref=e958]: + - cell [ref=e959]: + - button [ref=e961] [cursor=pointer]: + - img [ref=e962] + - cell [ref=e964] + - cell [ref=e965] + - cell [ref=e966]: + - code + - generic [ref=e967]: + - 'heading "26 26 Änderungen: 26 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php Datei anzeigen" [level=4] [ref=e968]': + - generic [ref=e969]: + - button [ref=e970] [cursor=pointer]: + - img [ref=e971] + - generic [ref=e973]: + - text: "26" + - 'generic "26 Änderungen: 26 Ergänzungen und 0 Löschungen" [ref=e974]' + - generic [ref=e976]: + - link "apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php" [ref=e977] [cursor=pointer]: + - /url: "#diff-4ad868f31240549fa538ce94de7e0c20c547e7da" + - button [ref=e978] [cursor=pointer]: + - img [ref=e979] + - link "Datei anzeigen" [ref=e983] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php + - table [ref=e986]: + - rowgroup [ref=e993]: + - row "@ -115,3 +115,29 @@" [ref=e994]: + - cell [ref=e995]: + - button [ref=e997] [cursor=pointer]: + - img [ref=e998] + - cell [ref=e1000] + - cell [ref=e1001] + - cell "@ -115,3 +115,29 @@" [ref=e1002]: + - code [ref=e1003]: "@ -115,3 +115,29 @@" + - row "115 115 ->assertDontSee('Operation finished Unknown')" [ref=e1004]: + - cell "115" [ref=e1005]: "115" + - cell "115" [ref=e1006]: "115" + - cell [ref=e1007] + - cell [ref=e1008] + - cell "->assertDontSee('Operation finished Unknown')" [ref=e1009]: + - code [ref=e1010]: "->assertDontSee('Operation finished Unknown')" + - row "116 116 ->assertDontSee('Completed with follow-up Unknown');" [ref=e1011]: + - cell "116" [ref=e1012]: "116" + - cell "116" [ref=e1013]: "116" + - cell [ref=e1014] + - cell [ref=e1015] + - cell "->assertDontSee('Completed with follow-up Unknown');" [ref=e1016]: + - code [ref=e1017]: "->assertDontSee('Completed with follow-up Unknown');" + - 'row "117 117 });" [ref=e1018]': + - cell "117" [ref=e1019]: "117" + - cell "117" [ref=e1020]: "117" + - cell [ref=e1021] + - cell [ref=e1022] + - 'cell "});" [ref=e1023]': + - code [ref=e1024]: "});" + - row "118 +" [ref=e1025]: + - cell [ref=e1026] + - cell "118" [ref=e1027]: "118" + - cell [ref=e1028] + - cell "+" [ref=e1029]: + - generic [ref=e1030]: + + - cell [ref=e1031]: + - code + - 'row "119 + it(''subordinates stale running progress to lifecycle guidance on the operations workbench'', function (): void {" [ref=e1032]': + - cell [ref=e1033] + - cell "119" [ref=e1034]: "119" + - cell [ref=e1035] + - cell "+" [ref=e1036]: + - generic [ref=e1037]: + + - 'cell "it(''subordinates stale running progress to lifecycle guidance on the operations workbench'', function (): void {" [ref=e1038]': + - code [ref=e1039]: "it('subordinates stale running progress to lifecycle guidance on the operations workbench', function (): void {" + - 'row "120 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e1040]': + - cell [ref=e1041] + - cell "120" [ref=e1042]: "120" + - cell [ref=e1043] + - cell "+" [ref=e1044]: + - generic [ref=e1045]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e1046]': + - code [ref=e1047]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "121 +" [ref=e1048]: + - cell [ref=e1049] + - cell "121" [ref=e1050]: "121" + - cell [ref=e1051] + - cell "+" [ref=e1052]: + - generic [ref=e1053]: + + - cell [ref=e1054]: + - code + - row "122 + OperationRun::factory()->create([" [ref=e1055]: + - cell [ref=e1056] + - cell "122" [ref=e1057]: "122" + - cell [ref=e1058] + - cell "+" [ref=e1059]: + - generic [ref=e1060]: + + - cell "OperationRun::factory()->create([" [ref=e1061]: + - code [ref=e1062]: OperationRun::factory()->create([ + - row "123 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1063]: + - cell [ref=e1064] + - cell "123" [ref=e1065]: "123" + - cell [ref=e1066] + - cell "+" [ref=e1067]: + - generic [ref=e1068]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1069]: + - code [ref=e1070]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "124 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1071]: + - cell [ref=e1072] + - cell "124" [ref=e1073]: "124" + - cell [ref=e1074] + - cell "+" [ref=e1075]: + - generic [ref=e1076]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1077]: + - code [ref=e1078]: "'workspace_id' => (int) $tenant->workspace_id," + - row "125 + 'type' => 'inventory_sync'," [ref=e1079]: + - cell [ref=e1080] + - cell "125" [ref=e1081]: "125" + - cell [ref=e1082] + - cell "+" [ref=e1083]: + - generic [ref=e1084]: + + - cell "'type' => 'inventory_sync'," [ref=e1085]: + - code [ref=e1086]: "'type' => 'inventory_sync'," + - row "126 + 'status' => 'running'," [ref=e1087]: + - cell [ref=e1088] + - cell "126" [ref=e1089]: "126" + - cell [ref=e1090] + - cell "+" [ref=e1091]: + - generic [ref=e1092]: + + - cell "'status' => 'running'," [ref=e1093]: + - code [ref=e1094]: "'status' => 'running'," + - row "127 + 'outcome' => 'pending'," [ref=e1095]: + - cell [ref=e1096] + - cell "127" [ref=e1097]: "127" + - cell [ref=e1098] + - cell "+" [ref=e1099]: + - generic [ref=e1100]: + + - cell "'outcome' => 'pending'," [ref=e1101]: + - code [ref=e1102]: "'outcome' => 'pending'," + - row "128 + 'summary_counts' => [" [ref=e1103]: + - cell [ref=e1104] + - cell "128" [ref=e1105]: "128" + - cell [ref=e1106] + - cell "+" [ref=e1107]: + - generic [ref=e1108]: + + - cell "'summary_counts' => [" [ref=e1109]: + - code [ref=e1110]: "'summary_counts' => [" + - row "129 + 'total' => 10," [ref=e1111]: + - cell [ref=e1112] + - cell "129" [ref=e1113]: "129" + - cell [ref=e1114] + - cell "+" [ref=e1115]: + - generic [ref=e1116]: + + - cell "'total' => 10," [ref=e1117]: + - code [ref=e1118]: "'total' => 10," + - row "130 + 'processed' => 4," [ref=e1119]: + - cell [ref=e1120] + - cell "130" [ref=e1121]: "130" + - cell [ref=e1122] + - cell "+" [ref=e1123]: + - generic [ref=e1124]: + + - cell "'processed' => 4," [ref=e1125]: + - code [ref=e1126]: "'processed' => 4," + - row "131 + ]," [ref=e1127]: + - cell [ref=e1128] + - cell "131" [ref=e1129]: "131" + - cell [ref=e1130] + - cell "+" [ref=e1131]: + - generic [ref=e1132]: + + - cell "]," [ref=e1133]: + - code [ref=e1134]: "]," + - row "132 + 'started_at' => now()->subWeeks(2)," [ref=e1135]: + - cell [ref=e1136] + - cell "132" [ref=e1137]: "132" + - cell [ref=e1138] + - cell "+" [ref=e1139]: + - generic [ref=e1140]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1141]: + - code [ref=e1142]: "'started_at' => now()->subWeeks(2)," + - row "133 + 'created_at' => now()->subWeeks(2)," [ref=e1143]: + - cell [ref=e1144] + - cell "133" [ref=e1145]: "133" + - cell [ref=e1146] + - cell "+" [ref=e1147]: + - generic [ref=e1148]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1149]: + - code [ref=e1150]: "'created_at' => now()->subWeeks(2)," + - row "134 + ]);" [ref=e1151]: + - cell [ref=e1152] + - cell "134" [ref=e1153]: "134" + - cell [ref=e1154] + - cell "+" [ref=e1155]: + - generic [ref=e1156]: + + - cell "]);" [ref=e1157]: + - code [ref=e1158]: "]);" + - row "135 +" [ref=e1159]: + - cell [ref=e1160] + - cell "135" [ref=e1161]: "135" + - cell [ref=e1162] + - cell "+" [ref=e1163]: + - generic [ref=e1164]: + + - cell [ref=e1165]: + - code + - row "136 + $this->actingAs($user)" [ref=e1166]: + - cell [ref=e1167] + - cell "136" [ref=e1168]: "136" + - cell [ref=e1169] + - cell "+" [ref=e1170]: + - generic [ref=e1171]: + + - cell "$this->actingAs($user)" [ref=e1172]: + - code [ref=e1173]: $this->actingAs($user) + - row "137 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1174]: + - cell [ref=e1175] + - cell "137" [ref=e1176]: "137" + - cell [ref=e1177] + - cell "+" [ref=e1178]: + - generic [ref=e1179]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1180]: + - code [ref=e1181]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "138 + ->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1182]: + - cell [ref=e1183] + - cell "138" [ref=e1184]: "138" + - cell [ref=e1185] + - cell "+" [ref=e1186]: + - generic [ref=e1187]: + + - cell "->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1188]: + - code [ref=e1189]: "->get(\\App\\Support\\OperationRunLinks::index())" + - row "139 + ->assertOk()" [ref=e1190]: + - cell [ref=e1191] + - cell "139" [ref=e1192]: "139" + - cell [ref=e1193] + - cell "+" [ref=e1194]: + - generic [ref=e1195]: + + - cell "->assertOk()" [ref=e1196]: + - code [ref=e1197]: "->assertOk()" + - row "140 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1198]: + - cell [ref=e1199] + - cell "140" [ref=e1200]: "140" + - cell [ref=e1201] + - cell "+" [ref=e1202]: + - generic [ref=e1203]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1204]: + - code [ref=e1205]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "141 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e1206]: + - cell [ref=e1207] + - cell "141" [ref=e1208]: "141" + - cell [ref=e1209] + - cell "+" [ref=e1210]: + - generic [ref=e1211]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e1212]: + - code [ref=e1213]: "->assertDontSee('4 / 10 processed (40%)')" + - row "142 + ->assertDontSee('Progress details pending.');" [ref=e1214]: + - cell [ref=e1215] + - cell "142" [ref=e1216]: "142" + - cell [ref=e1217] + - cell "+" [ref=e1218]: + - generic [ref=e1219]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1220]: + - code [ref=e1221]: "->assertDontSee('Progress details pending.');" + - 'row "143 + });" [ref=e1222]': + - cell [ref=e1223] + - cell "143" [ref=e1224]: "143" + - cell [ref=e1225] + - cell "+" [ref=e1226]: + - generic [ref=e1227]: + + - 'cell "});" [ref=e1228]': + - code [ref=e1229]: "});" + - row [ref=e1230]: + - cell [ref=e1231] + - cell [ref=e1232] + - cell [ref=e1233] + - cell [ref=e1234]: + - code + - generic [ref=e1235]: + - 'heading "6 6 Änderungen: 5 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php Datei anzeigen" [level=4] [ref=e1236]': + - generic [ref=e1237]: + - button [ref=e1238] [cursor=pointer]: + - img [ref=e1239] + - generic [ref=e1241]: + - text: "6" + - 'generic "6 Änderungen: 5 Ergänzungen und 1 Löschungen" [ref=e1242]' + - generic [ref=e1244]: + - link "apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php" [ref=e1245] [cursor=pointer]: + - /url: "#diff-47ac8fb6334ab7b20743abbd9ef0a58338ba9eaf" + - button [ref=e1246] [cursor=pointer]: + - img [ref=e1247] + - link "Datei anzeigen" [ref=e1251] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php + - table [ref=e1254]: + - rowgroup [ref=e1261]: + - row "@ -45,6 +45,8 @@" [ref=e1262]: + - cell [ref=e1263]: + - button [ref=e1265] [cursor=pointer]: + - img [ref=e1266] + - cell [ref=e1268] + - cell [ref=e1269] + - cell "@ -45,6 +45,8 @@" [ref=e1270]: + - code [ref=e1271]: "@ -45,6 +45,8 @@" + - row "45 45 ->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1272]: + - cell "45" [ref=e1273]: "45" + - cell "45" [ref=e1274]: "45" + - cell [ref=e1275] + - cell [ref=e1276] + - cell "->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1277]: + - code [ref=e1278]: "->get(\\App\\Support\\OperationRunLinks::index())" + - row "46 46 ->assertOk()" [ref=e1279]: + - cell "46" [ref=e1280]: "46" + - cell "46" [ref=e1281]: "46" + - cell [ref=e1282] + - cell [ref=e1283] + - cell "->assertOk()" [ref=e1284]: + - code [ref=e1285]: "->assertOk()" + - row "47 47 ->assertSee('Likely stale')" [ref=e1286]: + - cell "47" [ref=e1287]: "47" + - cell "47" [ref=e1288]: "47" + - cell [ref=e1289] + - cell [ref=e1290] + - cell "->assertSee('Likely stale')" [ref=e1291]: + - code [ref=e1292]: "->assertSee('Likely stale')" + - row "48 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1293]: + - cell [ref=e1294] + - cell "48" [ref=e1295]: "48" + - cell [ref=e1296] + - cell "+" [ref=e1297]: + - generic [ref=e1298]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1299]: + - code [ref=e1300]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "49 + ->assertDontSee('Progress details pending.')" [ref=e1301]: + - cell [ref=e1302] + - cell "49" [ref=e1303]: "49" + - cell [ref=e1304] + - cell "+" [ref=e1305]: + - generic [ref=e1306]: + + - cell "->assertDontSee('Progress details pending.')" [ref=e1307]: + - code [ref=e1308]: "->assertDontSee('Progress details pending.')" + - row "48 50 ->assertSee('belong in terminal follow-up');" [ref=e1309]: + - cell "48" [ref=e1310]: "48" + - cell "50" [ref=e1311]: "50" + - cell [ref=e1312] + - cell [ref=e1313] + - cell "->assertSee('belong in terminal follow-up');" [ref=e1314]: + - code [ref=e1315]: "->assertSee('belong in terminal follow-up');" + - row "49 51" [ref=e1316]: + - cell "49" [ref=e1317]: "49" + - cell "51" [ref=e1318]: "51" + - cell [ref=e1319] + - cell [ref=e1320] + - cell [ref=e1321]: + - code + - row "50 52 $this->actingAs($user)" [ref=e1322]: + - cell "50" [ref=e1323]: "50" + - cell "52" [ref=e1324]: "52" + - cell [ref=e1325] + - cell [ref=e1326] + - cell "$this->actingAs($user)" [ref=e1327]: + - code [ref=e1328]: $this->actingAs($user) + - row "@ -58,7 +60,9 @@" [ref=e1329]: + - cell [ref=e1330]: + - button [ref=e1332] [cursor=pointer]: + - img [ref=e1333] + - cell [ref=e1335] + - cell [ref=e1336] + - cell "@ -58,7 +60,9 @@" [ref=e1337]: + - code [ref=e1338]: "@ -58,7 +60,9 @@" + - row "58 60 ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1339]: + - cell "58" [ref=e1340]: "58" + - cell "60" [ref=e1341]: "60" + - cell [ref=e1342] + - cell [ref=e1343] + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1344]: + - code [ref=e1345]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "59 61 ->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" [ref=e1346]: + - cell "59" [ref=e1347]: "59" + - cell "61" [ref=e1348]: "61" + - cell [ref=e1349] + - cell [ref=e1350] + - cell "->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" [ref=e1351]: + - code [ref=e1352]: "->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" + - row "60 62 ->assertOk()" [ref=e1353]: + - cell "60" [ref=e1354]: "60" + - cell "62" [ref=e1355]: "62" + - cell [ref=e1356] + - cell [ref=e1357] + - cell "->assertOk()" [ref=e1358]: + - code [ref=e1359]: "->assertOk()" + - row "61 - ->assertSee('Likely stale operation');" [ref=e1360]: + - cell "61" [ref=e1361]: "61" + - cell [ref=e1362] + - cell [ref=e1363] + - cell "-" [ref=e1364]: + - generic [ref=e1365]: "-" + - cell "->assertSee('Likely stale operation');" [ref=e1366]: + - code [ref=e1367]: "->assertSee('Likely stale operation');" + - row "63 + ->assertSee('Likely stale operation')" [ref=e1368]: + - cell [ref=e1369] + - cell "63" [ref=e1370]: "63" + - cell [ref=e1371] + - cell "+" [ref=e1372]: + - generic [ref=e1373]: + + - cell "->assertSee('Likely stale operation')" [ref=e1374]: + - code [ref=e1375]: "->assertSee('Likely stale operation')" + - row "64 + ->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1376]: + - cell [ref=e1377] + - cell "64" [ref=e1378]: "64" + - cell [ref=e1379] + - cell "+" [ref=e1380]: + - generic [ref=e1381]: + + - cell "->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1382]: + - code [ref=e1383]: "->assertDontSee('No action needed yet. The operation is currently in progress.')" + - row "65 + ->assertDontSee('Progress details pending.');" [ref=e1384]: + - cell [ref=e1385] + - cell "65" [ref=e1386]: "65" + - cell [ref=e1387] + - cell "+" [ref=e1388]: + - generic [ref=e1389]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1390]: + - code [ref=e1391]: "->assertDontSee('Progress details pending.');" + - 'row "62 66 });" [ref=e1392]': + - cell "62" [ref=e1393]: "62" + - cell "66" [ref=e1394]: "66" + - cell [ref=e1395] + - cell [ref=e1396] + - 'cell "});" [ref=e1397]': + - code [ref=e1398]: "});" + - row "63 67" [ref=e1399]: + - cell "63" [ref=e1400]: "63" + - cell "67" [ref=e1401]: "67" + - cell [ref=e1402] + - cell [ref=e1403] + - cell [ref=e1404]: + - code + - 'row "64 68 it(''renders lifecycle outcome fallbacks when historical runs are missing stored outcomes'', function (): void {" [ref=e1405]': + - cell "64" [ref=e1406]: "64" + - cell "68" [ref=e1407]: "68" + - cell [ref=e1408] + - cell [ref=e1409] + - 'cell "it(''renders lifecycle outcome fallbacks when historical runs are missing stored outcomes'', function (): void {" [ref=e1410]': + - code [ref=e1411]: "it('renders lifecycle outcome fallbacks when historical runs are missing stored outcomes', function (): void {" + - row [ref=e1412]: + - cell [ref=e1413]: + - button [ref=e1415] [cursor=pointer]: + - img [ref=e1416] + - cell [ref=e1418] + - cell [ref=e1419] + - cell [ref=e1420]: + - code + - generic [ref=e1421]: + - 'heading "29 29 Änderungen: 29 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/MonitoringOperationsTest.php Datei anzeigen" [level=4] [ref=e1422]': + - generic [ref=e1423]: + - button [ref=e1424] [cursor=pointer]: + - img [ref=e1425] + - generic [ref=e1427]: + - text: "29" + - 'generic "29 Änderungen: 29 Ergänzungen und 0 Löschungen" [ref=e1428]' + - generic [ref=e1430]: + - link "apps/platform/tests/Feature/MonitoringOperationsTest.php" [ref=e1431] [cursor=pointer]: + - /url: "#diff-d10bc881823900fad101572aee338ca92084fb34" + - button [ref=e1432] [cursor=pointer]: + - img [ref=e1433] + - link "Datei anzeigen" [ref=e1437] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/MonitoringOperationsTest.php + - table [ref=e1440]: + - rowgroup [ref=e1447]: + - row "@ -186,3 +186,32 @@" [ref=e1448]: + - cell [ref=e1449]: + - button [ref=e1451] [cursor=pointer]: + - img [ref=e1452] + - cell [ref=e1454] + - cell [ref=e1455] + - cell "@ -186,3 +186,32 @@" [ref=e1456]: + - code [ref=e1457]: "@ -186,3 +186,32 @@" + - row "186 186 ->toContain('data-shared-detail-family=\"verification-report\"')" [ref=e1458]: + - cell "186" [ref=e1459]: "186" + - cell "186" [ref=e1460]: "186" + - cell [ref=e1461] + - cell [ref=e1462] + - cell "->toContain('data-shared-detail-family=\"verification-report\"')" [ref=e1463]: + - code [ref=e1464]: "->toContain('data-shared-detail-family=\"verification-report\"')" + - row "187 187 ->toContain('data-host-kind=\"operation_run_detail\"');" [ref=e1465]: + - cell "187" [ref=e1466]: "187" + - cell "187" [ref=e1467]: "187" + - cell [ref=e1468] + - cell [ref=e1469] + - cell "->toContain('data-host-kind=\"operation_run_detail\"');" [ref=e1470]: + - code [ref=e1471]: "->toContain('data-host-kind=\"operation_run_detail\"');" + - 'row "188 188 });" [ref=e1472]': + - cell "188" [ref=e1473]: "188" + - cell "188" [ref=e1474]: "188" + - cell [ref=e1475] + - cell [ref=e1476] + - 'cell "});" [ref=e1477]': + - code [ref=e1478]: "});" + - row "189 +" [ref=e1479]: + - cell [ref=e1480] + - cell "189" [ref=e1481]: "189" + - cell [ref=e1482] + - cell "+" [ref=e1483]: + - generic [ref=e1484]: + + - cell [ref=e1485]: + - code + - 'row "190 + it(''keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window'', function (): void {" [ref=e1486]': + - cell [ref=e1487] + - cell "190" [ref=e1488]: "190" + - cell [ref=e1489] + - cell "+" [ref=e1490]: + - generic [ref=e1491]: + + - 'cell "it(''keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window'', function (): void {" [ref=e1492]': + - code [ref=e1493]: "it('keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window', function (): void {" + - row "191 + $tenant = ManagedEnvironment::factory()->create();" [ref=e1494]: + - cell [ref=e1495] + - cell "191" [ref=e1496]: "191" + - cell [ref=e1497] + - cell "+" [ref=e1498]: + - generic [ref=e1499]: + + - cell "$tenant = ManagedEnvironment::factory()->create();" [ref=e1500]: + - code [ref=e1501]: $tenant = ManagedEnvironment::factory()->create(); + - 'row "192 + [$user, $tenant] = createUserWithTenant($tenant, role: ''owner'');" [ref=e1502]': + - cell [ref=e1503] + - cell "192" [ref=e1504]: "192" + - cell [ref=e1505] + - cell "+" [ref=e1506]: + - generic [ref=e1507]: + + - 'cell "[$user, $tenant] = createUserWithTenant($tenant, role: ''owner'');" [ref=e1508]': + - code [ref=e1509]: "[$user, $tenant] = createUserWithTenant($tenant, role: 'owner');" + - row "193 +" [ref=e1510]: + - cell [ref=e1511] + - cell "193" [ref=e1512]: "193" + - cell [ref=e1513] + - cell "+" [ref=e1514]: + - generic [ref=e1515]: + + - cell [ref=e1516]: + - code + - row "194 + OperationRun::factory()->create([" [ref=e1517]: + - cell [ref=e1518] + - cell "194" [ref=e1519]: "194" + - cell [ref=e1520] + - cell "+" [ref=e1521]: + - generic [ref=e1522]: + + - cell "OperationRun::factory()->create([" [ref=e1523]: + - code [ref=e1524]: OperationRun::factory()->create([ + - row "195 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1525]: + - cell [ref=e1526] + - cell "195" [ref=e1527]: "195" + - cell [ref=e1528] + - cell "+" [ref=e1529]: + - generic [ref=e1530]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1531]: + - code [ref=e1532]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "196 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1533]: + - cell [ref=e1534] + - cell "196" [ref=e1535]: "196" + - cell [ref=e1536] + - cell "+" [ref=e1537]: + - generic [ref=e1538]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1539]: + - code [ref=e1540]: "'workspace_id' => (int) $tenant->workspace_id," + - row "197 + 'type' => 'inventory_sync'," [ref=e1541]: + - cell [ref=e1542] + - cell "197" [ref=e1543]: "197" + - cell [ref=e1544] + - cell "+" [ref=e1545]: + - generic [ref=e1546]: + + - cell "'type' => 'inventory_sync'," [ref=e1547]: + - code [ref=e1548]: "'type' => 'inventory_sync'," + - row "198 + 'status' => 'running'," [ref=e1549]: + - cell [ref=e1550] + - cell "198" [ref=e1551]: "198" + - cell [ref=e1552] + - cell "+" [ref=e1553]: + - generic [ref=e1554]: + + - cell "'status' => 'running'," [ref=e1555]: + - code [ref=e1556]: "'status' => 'running'," + - row "199 + 'outcome' => 'pending'," [ref=e1557]: + - cell [ref=e1558] + - cell "199" [ref=e1559]: "199" + - cell [ref=e1560] + - cell "+" [ref=e1561]: + - generic [ref=e1562]: + + - cell "'outcome' => 'pending'," [ref=e1563]: + - code [ref=e1564]: "'outcome' => 'pending'," + - row "200 + 'summary_counts' => [" [ref=e1565]: + - cell [ref=e1566] + - cell "200" [ref=e1567]: "200" + - cell [ref=e1568] + - cell "+" [ref=e1569]: + - generic [ref=e1570]: + + - cell "'summary_counts' => [" [ref=e1571]: + - code [ref=e1572]: "'summary_counts' => [" + - row "201 + 'total' => 10," [ref=e1573]: + - cell [ref=e1574] + - cell "201" [ref=e1575]: "201" + - cell [ref=e1576] + - cell "+" [ref=e1577]: + - generic [ref=e1578]: + + - cell "'total' => 10," [ref=e1579]: + - code [ref=e1580]: "'total' => 10," + - row "202 + 'processed' => 4," [ref=e1581]: + - cell [ref=e1582] + - cell "202" [ref=e1583]: "202" + - cell [ref=e1584] + - cell "+" [ref=e1585]: + - generic [ref=e1586]: + + - cell "'processed' => 4," [ref=e1587]: + - code [ref=e1588]: "'processed' => 4," + - row "203 + ]," [ref=e1589]: + - cell [ref=e1590] + - cell "203" [ref=e1591]: "203" + - cell [ref=e1592] + - cell "+" [ref=e1593]: + - generic [ref=e1594]: + + - cell "]," [ref=e1595]: + - code [ref=e1596]: "]," + - row "204 + 'started_at' => now()->subWeeks(2)," [ref=e1597]: + - cell [ref=e1598] + - cell "204" [ref=e1599]: "204" + - cell [ref=e1600] + - cell "+" [ref=e1601]: + - generic [ref=e1602]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1603]: + - code [ref=e1604]: "'started_at' => now()->subWeeks(2)," + - row "205 + 'created_at' => now()->subWeeks(2)," [ref=e1605]: + - cell [ref=e1606] + - cell "205" [ref=e1607]: "205" + - cell [ref=e1608] + - cell "+" [ref=e1609]: + - generic [ref=e1610]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1611]: + - code [ref=e1612]: "'created_at' => now()->subWeeks(2)," + - row "206 + ]);" [ref=e1613]: + - cell [ref=e1614] + - cell "206" [ref=e1615]: "206" + - cell [ref=e1616] + - cell "+" [ref=e1617]: + - generic [ref=e1618]: + + - cell "]);" [ref=e1619]: + - code [ref=e1620]: "]);" + - row "207 +" [ref=e1621]: + - cell [ref=e1622] + - cell "207" [ref=e1623]: "207" + - cell [ref=e1624] + - cell "+" [ref=e1625]: + - generic [ref=e1626]: + + - cell [ref=e1627]: + - code + - row "208 + Filament::setTenant(null, true);" [ref=e1628]: + - cell [ref=e1629] + - cell "208" [ref=e1630]: "208" + - cell [ref=e1631] + - cell "+" [ref=e1632]: + - generic [ref=e1633]: + + - cell "Filament::setTenant(null, true);" [ref=e1634]: + - code [ref=e1635]: Filament::setTenant(null, true); + - row "209 +" [ref=e1636]: + - cell [ref=e1637] + - cell "209" [ref=e1638]: "209" + - cell [ref=e1639] + - cell "+" [ref=e1640]: + - generic [ref=e1641]: + + - cell [ref=e1642]: + - code + - row "210 + $this->actingAs($user)" [ref=e1643]: + - cell [ref=e1644] + - cell "210" [ref=e1645]: "210" + - cell [ref=e1646] + - cell "+" [ref=e1647]: + - generic [ref=e1648]: + + - cell "$this->actingAs($user)" [ref=e1649]: + - code [ref=e1650]: $this->actingAs($user) + - row "211 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1651]: + - cell [ref=e1652] + - cell "211" [ref=e1653]: "211" + - cell [ref=e1654] + - cell "+" [ref=e1655]: + - generic [ref=e1656]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1657]: + - code [ref=e1658]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "212 + ->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" [ref=e1659]: + - cell [ref=e1660] + - cell "212" [ref=e1661]: "212" + - cell [ref=e1662] + - cell "+" [ref=e1663]: + - generic [ref=e1664]: + + - cell "->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" [ref=e1665]: + - code [ref=e1666]: "->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" + - row "213 + ->assertSuccessful()" [ref=e1667]: + - cell [ref=e1668] + - cell "213" [ref=e1669]: "213" + - cell [ref=e1670] + - cell "+" [ref=e1671]: + - generic [ref=e1672]: + + - cell "->assertSuccessful()" [ref=e1673]: + - code [ref=e1674]: "->assertSuccessful()" + - row "214 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1675]: + - cell [ref=e1676] + - cell "214" [ref=e1677]: "214" + - cell [ref=e1678] + - cell "+" [ref=e1679]: + - generic [ref=e1680]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1681]: + - code [ref=e1682]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "215 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e1683]: + - cell [ref=e1684] + - cell "215" [ref=e1685]: "215" + - cell [ref=e1686] + - cell "+" [ref=e1687]: + - generic [ref=e1688]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e1689]: + - code [ref=e1690]: "->assertDontSee('4 / 10 processed (40%)')" + - row "216 + ->assertDontSee('Progress details pending.');" [ref=e1691]: + - cell [ref=e1692] + - cell "216" [ref=e1693]: "216" + - cell [ref=e1694] + - cell "+" [ref=e1695]: + - generic [ref=e1696]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1697]: + - code [ref=e1698]: "->assertDontSee('Progress details pending.');" + - 'row "217 + });" [ref=e1699]': + - cell [ref=e1700] + - cell "217" [ref=e1701]: "217" + - cell [ref=e1702] + - cell "+" [ref=e1703]: + - generic [ref=e1704]: + + - 'cell "});" [ref=e1705]': + - code [ref=e1706]: "});" + - row [ref=e1707]: + - cell [ref=e1708] + - cell [ref=e1709] + - cell [ref=e1710] + - cell [ref=e1711]: + - code + - generic [ref=e1712]: + - 'heading "34 34 Änderungen: 34 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php Datei anzeigen" [level=4] [ref=e1713]': + - generic [ref=e1714]: + - button [ref=e1715] [cursor=pointer]: + - img [ref=e1716] + - generic [ref=e1718]: + - text: "34" + - 'generic "34 Änderungen: 34 Ergänzungen und 0 Löschungen" [ref=e1719]' + - generic [ref=e1721]: + - link "apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php" [ref=e1722] [cursor=pointer]: + - /url: "#diff-78926fcd2b4b82100aa7ab7f37b294989c0693e0" + - button [ref=e1723] [cursor=pointer]: + - img [ref=e1724] + - link "Datei anzeigen" [ref=e1728] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php + - table [ref=e1731]: + - rowgroup [ref=e1738]: + - row "@ -272,6 +272,40 @@" [ref=e1739]: + - cell [ref=e1740]: + - button [ref=e1742] [cursor=pointer]: + - img [ref=e1743] + - cell [ref=e1745] + - cell [ref=e1746] + - cell "@ -272,6 +272,40 @@" [ref=e1747]: + - code [ref=e1748]: "@ -272,6 +272,40 @@" + - row "272 272 expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1);" [ref=e1749]: + - cell "272" [ref=e1750]: "272" + - cell "272" [ref=e1751]: "272" + - cell [ref=e1752] + - cell [ref=e1753] + - cell "expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1);" [ref=e1754]: + - code [ref=e1755]: expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1); + - 'row "273 273 });" [ref=e1756]': + - cell "273" [ref=e1757]: "273" + - cell "273" [ref=e1758]: "273" + - cell [ref=e1759] + - cell [ref=e1760] + - 'cell "});" [ref=e1761]': + - code [ref=e1762]: "});" + - row "274 274" [ref=e1763]: + - cell "274" [ref=e1764]: "274" + - cell "274" [ref=e1765]: "274" + - cell [ref=e1766] + - cell [ref=e1767] + - cell [ref=e1768]: + - code + - 'row "275 + it(''keeps stale active detail aligned with lifecycle guidance when determinate progress data exists'', function (): void {" [ref=e1769]': + - cell [ref=e1770] + - cell "275" [ref=e1771]: "275" + - cell [ref=e1772] + - cell "+" [ref=e1773]: + - generic [ref=e1774]: + + - 'cell "it(''keeps stale active detail aligned with lifecycle guidance when determinate progress data exists'', function (): void {" [ref=e1775]': + - code [ref=e1776]: "it('keeps stale active detail aligned with lifecycle guidance when determinate progress data exists', function (): void {" + - row "276 + $tenant = ManagedEnvironment::factory()->create();" [ref=e1777]: + - cell [ref=e1778] + - cell "276" [ref=e1779]: "276" + - cell [ref=e1780] + - cell "+" [ref=e1781]: + - generic [ref=e1782]: + + - cell "$tenant = ManagedEnvironment::factory()->create();" [ref=e1783]: + - code [ref=e1784]: $tenant = ManagedEnvironment::factory()->create(); + - 'row "277 + [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: ''owner'');" [ref=e1785]': + - cell [ref=e1786] + - cell "277" [ref=e1787]: "277" + - cell [ref=e1788] + - cell "+" [ref=e1789]: + - generic [ref=e1790]: + + - 'cell "[$user, $tenant] = createUserWithTenant(tenant: $tenant, role: ''owner'');" [ref=e1791]': + - code [ref=e1792]: "[$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner');" + - row "278 +" [ref=e1793]: + - cell [ref=e1794] + - cell "278" [ref=e1795]: "278" + - cell [ref=e1796] + - cell "+" [ref=e1797]: + - generic [ref=e1798]: + + - cell [ref=e1799]: + - code + - row "279 + $run = OperationRun::factory()->create([" [ref=e1800]: + - cell [ref=e1801] + - cell "279" [ref=e1802]: "279" + - cell [ref=e1803] + - cell "+" [ref=e1804]: + - generic [ref=e1805]: + + - cell "$run = OperationRun::factory()->create([" [ref=e1806]: + - code [ref=e1807]: $run = OperationRun::factory()->create([ + - row "280 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1808]: + - cell [ref=e1809] + - cell "280" [ref=e1810]: "280" + - cell [ref=e1811] + - cell "+" [ref=e1812]: + - generic [ref=e1813]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1814]: + - code [ref=e1815]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "281 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1816]: + - cell [ref=e1817] + - cell "281" [ref=e1818]: "281" + - cell [ref=e1819] + - cell "+" [ref=e1820]: + - generic [ref=e1821]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1822]: + - code [ref=e1823]: "'workspace_id' => (int) $tenant->workspace_id," + - row "282 + 'user_id' => (int) $user->getKey()," [ref=e1824]: + - cell [ref=e1825] + - cell "282" [ref=e1826]: "282" + - cell [ref=e1827] + - cell "+" [ref=e1828]: + - generic [ref=e1829]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e1830]: + - code [ref=e1831]: "'user_id' => (int) $user->getKey()," + - row "283 + 'type' => 'inventory_sync'," [ref=e1832]: + - cell [ref=e1833] + - cell "283" [ref=e1834]: "283" + - cell [ref=e1835] + - cell "+" [ref=e1836]: + - generic [ref=e1837]: + + - cell "'type' => 'inventory_sync'," [ref=e1838]: + - code [ref=e1839]: "'type' => 'inventory_sync'," + - row "284 + 'status' => OperationRunStatus::Running->value," [ref=e1840]: + - cell [ref=e1841] + - cell "284" [ref=e1842]: "284" + - cell [ref=e1843] + - cell "+" [ref=e1844]: + - generic [ref=e1845]: + + - cell "'status' => OperationRunStatus::Running->value," [ref=e1846]: + - code [ref=e1847]: "'status' => OperationRunStatus::Running->value," + - row "285 + 'outcome' => OperationRunOutcome::Pending->value," [ref=e1848]: + - cell [ref=e1849] + - cell "285" [ref=e1850]: "285" + - cell [ref=e1851] + - cell "+" [ref=e1852]: + - generic [ref=e1853]: + + - cell "'outcome' => OperationRunOutcome::Pending->value," [ref=e1854]: + - code [ref=e1855]: "'outcome' => OperationRunOutcome::Pending->value," + - row "286 + 'summary_counts' => [" [ref=e1856]: + - cell [ref=e1857] + - cell "286" [ref=e1858]: "286" + - cell [ref=e1859] + - cell "+" [ref=e1860]: + - generic [ref=e1861]: + + - cell "'summary_counts' => [" [ref=e1862]: + - code [ref=e1863]: "'summary_counts' => [" + - row "287 + 'total' => 10," [ref=e1864]: + - cell [ref=e1865] + - cell "287" [ref=e1866]: "287" + - cell [ref=e1867] + - cell "+" [ref=e1868]: + - generic [ref=e1869]: + + - cell "'total' => 10," [ref=e1870]: + - code [ref=e1871]: "'total' => 10," + - row "288 + 'processed' => 4," [ref=e1872]: + - cell [ref=e1873] + - cell "288" [ref=e1874]: "288" + - cell [ref=e1875] + - cell "+" [ref=e1876]: + - generic [ref=e1877]: + + - cell "'processed' => 4," [ref=e1878]: + - code [ref=e1879]: "'processed' => 4," + - row "289 + ]," [ref=e1880]: + - cell [ref=e1881] + - cell "289" [ref=e1882]: "289" + - cell [ref=e1883] + - cell "+" [ref=e1884]: + - generic [ref=e1885]: + + - cell "]," [ref=e1886]: + - code [ref=e1887]: "]," + - row "290 + 'started_at' => now()->subWeeks(2)," [ref=e1888]: + - cell [ref=e1889] + - cell "290" [ref=e1890]: "290" + - cell [ref=e1891] + - cell "+" [ref=e1892]: + - generic [ref=e1893]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1894]: + - code [ref=e1895]: "'started_at' => now()->subWeeks(2)," + - row "291 + 'created_at' => now()->subWeeks(2)," [ref=e1896]: + - cell [ref=e1897] + - cell "291" [ref=e1898]: "291" + - cell [ref=e1899] + - cell "+" [ref=e1900]: + - generic [ref=e1901]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1902]: + - code [ref=e1903]: "'created_at' => now()->subWeeks(2)," + - row "292 + ]);" [ref=e1904]: + - cell [ref=e1905] + - cell "292" [ref=e1906]: "292" + - cell [ref=e1907] + - cell "+" [ref=e1908]: + - generic [ref=e1909]: + + - cell "]);" [ref=e1910]: + - code [ref=e1911]: "]);" + - row "293 +" [ref=e1912]: + - cell [ref=e1913] + - cell "293" [ref=e1914]: "293" + - cell [ref=e1915] + - cell "+" [ref=e1916]: + - generic [ref=e1917]: + + - cell [ref=e1918]: + - code + - row "294 + Filament::setTenant(null, true);" [ref=e1919]: + - cell [ref=e1920] + - cell "294" [ref=e1921]: "294" + - cell [ref=e1922] + - cell "+" [ref=e1923]: + - generic [ref=e1924]: + + - cell "Filament::setTenant(null, true);" [ref=e1925]: + - code [ref=e1926]: Filament::setTenant(null, true); + - row "295 +" [ref=e1927]: + - cell [ref=e1928] + - cell "295" [ref=e1929]: "295" + - cell [ref=e1930] + - cell "+" [ref=e1931]: + - generic [ref=e1932]: + + - cell [ref=e1933]: + - code + - row "296 + $this->actingAs($user)" [ref=e1934]: + - cell [ref=e1935] + - cell "296" [ref=e1936]: "296" + - cell [ref=e1937] + - cell "+" [ref=e1938]: + - generic [ref=e1939]: + + - cell "$this->actingAs($user)" [ref=e1940]: + - code [ref=e1941]: $this->actingAs($user) + - row "297 + ->withSession([" [ref=e1942]: + - cell [ref=e1943] + - cell "297" [ref=e1944]: "297" + - cell [ref=e1945] + - cell "+" [ref=e1946]: + - generic [ref=e1947]: + + - cell "->withSession([" [ref=e1948]: + - code [ref=e1949]: "->withSession([" + - row "298 + WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id," [ref=e1950]: + - cell [ref=e1951] + - cell "298" [ref=e1952]: "298" + - cell [ref=e1953] + - cell "+" [ref=e1954]: + - generic [ref=e1955]: + + - cell "WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id," [ref=e1956]: + - code [ref=e1957]: WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, + - row "299 + ])" [ref=e1958]: + - cell [ref=e1959] + - cell "299" [ref=e1960]: "299" + - cell [ref=e1961] + - cell "+" [ref=e1962]: + - generic [ref=e1963]: + + - cell "])" [ref=e1964]: + - code [ref=e1965]: "])" + - row "300 + ->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" [ref=e1966]: + - cell [ref=e1967] + - cell "300" [ref=e1968]: "300" + - cell [ref=e1969] + - cell "+" [ref=e1970]: + - generic [ref=e1971]: + + - cell "->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" [ref=e1972]: + - code [ref=e1973]: "->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" + - row "301 + ->assertSuccessful()" [ref=e1974]: + - cell [ref=e1975] + - cell "301" [ref=e1976]: "301" + - cell [ref=e1977] + - cell "+" [ref=e1978]: + - generic [ref=e1979]: + + - cell "->assertSuccessful()" [ref=e1980]: + - code [ref=e1981]: "->assertSuccessful()" + - row "302 + ->assertSee('Likely stale operation')" [ref=e1982]: + - cell [ref=e1983] + - cell "302" [ref=e1984]: "302" + - cell [ref=e1985] + - cell "+" [ref=e1986]: + - generic [ref=e1987]: + + - cell "->assertSee('Likely stale operation')" [ref=e1988]: + - code [ref=e1989]: "->assertSee('Likely stale operation')" + - row "303 + ->assertSee('past its lifecycle window')" [ref=e1990]: + - cell [ref=e1991] + - cell "303" [ref=e1992]: "303" + - cell [ref=e1993] + - cell "+" [ref=e1994]: + - generic [ref=e1995]: + + - cell "->assertSee('past its lifecycle window')" [ref=e1996]: + - code [ref=e1997]: "->assertSee('past its lifecycle window')" + - row "304 + ->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1998]: + - cell [ref=e1999] + - cell "304" [ref=e2000]: "304" + - cell [ref=e2001] + - cell "+" [ref=e2002]: + - generic [ref=e2003]: + + - cell "->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e2004]: + - code [ref=e2005]: "->assertDontSee('No action needed yet. The operation is currently in progress.')" + - row "305 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e2006]: + - cell [ref=e2007] + - cell "305" [ref=e2008]: "305" + - cell [ref=e2009] + - cell "+" [ref=e2010]: + - generic [ref=e2011]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e2012]: + - code [ref=e2013]: "->assertDontSee('4 / 10 processed (40%)')" + - row "306 + ->assertDontSee('Progress details pending.');" [ref=e2014]: + - cell [ref=e2015] + - cell "306" [ref=e2016]: "306" + - cell [ref=e2017] + - cell "+" [ref=e2018]: + - generic [ref=e2019]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e2020]: + - code [ref=e2021]: "->assertDontSee('Progress details pending.');" + - 'row "307 + });" [ref=e2022]': + - cell [ref=e2023] + - cell "307" [ref=e2024]: "307" + - cell [ref=e2025] + - cell "+" [ref=e2026]: + - generic [ref=e2027]: + + - 'cell "});" [ref=e2028]': + - code [ref=e2029]: "});" + - row "308 +" [ref=e2030]: + - cell [ref=e2031] + - cell "308" [ref=e2032]: "308" + - cell [ref=e2033] + - cell "+" [ref=e2034]: + - generic [ref=e2035]: + + - cell [ref=e2036]: + - code + - 'row "275 309 it(''keeps a canonical run viewer accessible when the remembered environment differs from the run tenant'', function (): void {" [ref=e2037]': + - cell "275" [ref=e2038]: "275" + - cell "309" [ref=e2039]: "309" + - cell [ref=e2040] + - cell [ref=e2041] + - 'cell "it(''keeps a canonical run viewer accessible when the remembered environment differs from the run tenant'', function (): void {" [ref=e2042]': + - code [ref=e2043]: "it('keeps a canonical run viewer accessible when the remembered environment differs from the run tenant', function (): void {" + - row "276 310 $workspace = Workspace::factory()->create();" [ref=e2044]: + - cell "276" [ref=e2045]: "276" + - cell "310" [ref=e2046]: "310" + - cell [ref=e2047] + - cell [ref=e2048] + - cell "$workspace = Workspace::factory()->create();" [ref=e2049]: + - code [ref=e2050]: $workspace = Workspace::factory()->create(); + - row "277 311 $tenantA = ManagedEnvironment::factory()->for($workspace)->create();" [ref=e2051]: + - cell "277" [ref=e2052]: "277" + - cell "311" [ref=e2053]: "311" + - cell [ref=e2054] + - cell [ref=e2055] + - cell "$tenantA = ManagedEnvironment::factory()->for($workspace)->create();" [ref=e2056]: + - code [ref=e2057]: $tenantA = ManagedEnvironment::factory()->for($workspace)->create(); + - row [ref=e2058]: + - cell [ref=e2059]: + - button [ref=e2061] [cursor=pointer]: + - img [ref=e2062] + - cell [ref=e2064] + - cell [ref=e2065] + - cell [ref=e2066]: + - code + - generic [ref=e2067]: + - 'heading "66 66 Änderungen: 65 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php Datei anzeigen" [level=4] [ref=e2068]': + - generic [ref=e2069]: + - button [ref=e2070] [cursor=pointer]: + - img [ref=e2071] + - generic [ref=e2073]: + - text: "66" + - 'generic "66 Änderungen: 65 Ergänzungen und 1 Löschungen" [ref=e2074]' + - generic [ref=e2076]: + - link "apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php" [ref=e2077] [cursor=pointer]: + - /url: "#diff-19902a15f70a89998c7c6940d74722850b9e746f" + - button [ref=e2078] [cursor=pointer]: + - img [ref=e2079] + - link "Datei anzeigen" [ref=e2083] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php + - table [ref=e2086]: + - rowgroup [ref=e2093]: + - row "@ -344,7 +344,7 @@" [ref=e2094]: + - cell [ref=e2095]: + - button [ref=e2097] [cursor=pointer]: + - img [ref=e2098] + - cell [ref=e2100] + - cell [ref=e2101] + - cell "@ -344,7 +344,7 @@" [ref=e2102]: + - code [ref=e2103]: "@ -344,7 +344,7 @@" + - row "344 344 'total' => 10," [ref=e2104]: + - cell "344" [ref=e2105]: "344" + - cell "344" [ref=e2106]: "344" + - cell [ref=e2107] + - cell [ref=e2108] + - cell "'total' => 10," [ref=e2109]: + - code [ref=e2110]: "'total' => 10," + - row "345 345 'processed' => 4," [ref=e2111]: + - cell "345" [ref=e2112]: "345" + - cell "345" [ref=e2113]: "345" + - cell [ref=e2114] + - cell [ref=e2115] + - cell "'processed' => 4," [ref=e2116]: + - code [ref=e2117]: "'processed' => 4," + - row "346 346 ]," [ref=e2118]: + - cell "346" [ref=e2119]: "346" + - cell "346" [ref=e2120]: "346" + - cell [ref=e2121] + - cell [ref=e2122] + - cell "]," [ref=e2123]: + - code [ref=e2124]: "]," + - row "347 - 'started_at' => now()->subWeeks(2)," [ref=e2125]: + - cell "347" [ref=e2126]: "347" + - cell [ref=e2127] + - cell [ref=e2128] + - cell "-" [ref=e2129]: + - generic [ref=e2130]: "-" + - cell "'started_at' => now()->subWeeks(2)," [ref=e2131]: + - code [ref=e2132]: + - text: "'started_at' => now()->sub" + - generic [ref=e2133]: Weeks(2 + - text: ), + - row "347 + 'started_at' => now()->subMinute()," [ref=e2134]: + - cell [ref=e2135] + - cell "347" [ref=e2136]: "347" + - cell [ref=e2137] + - cell "+" [ref=e2138]: + - generic [ref=e2139]: + + - cell "'started_at' => now()->subMinute()," [ref=e2140]: + - code [ref=e2141]: + - text: "'started_at' => now()->sub" + - generic [ref=e2142]: Minute( + - text: ), + - row "348 348 ]);" [ref=e2143]: + - cell "348" [ref=e2144]: "348" + - cell "348" [ref=e2145]: "348" + - cell [ref=e2146] + - cell [ref=e2147] + - cell "]);" [ref=e2148]: + - code [ref=e2149]: "]);" + - row "349 349" [ref=e2150]: + - cell "349" [ref=e2151]: "349" + - cell "349" [ref=e2152]: "349" + - cell [ref=e2153] + - cell [ref=e2154] + - cell [ref=e2155]: + - code + - row "350 350 $component = Livewire::actingAs($user)" [ref=e2156]: + - cell "350" [ref=e2157]: "350" + - cell "350" [ref=e2158]: "350" + - cell [ref=e2159] + - cell [ref=e2160] + - cell "$component = Livewire::actingAs($user)" [ref=e2161]: + - code [ref=e2162]: $component = Livewire::actingAs($user) + - row "@ -364,6 +364,70 @@" [ref=e2163]: + - cell [ref=e2164]: + - button [ref=e2166] [cursor=pointer]: + - img [ref=e2167] + - cell [ref=e2169] + - cell [ref=e2170] + - cell "@ -364,6 +364,70 @@" [ref=e2171]: + - code [ref=e2172]: "@ -364,6 +364,70 @@" + - row "364 364 ->and($html)->not->toContain('Likely stale');" [ref=e2173]: + - cell "364" [ref=e2174]: "364" + - cell "364" [ref=e2175]: "364" + - cell [ref=e2176] + - cell [ref=e2177] + - cell "->and($html)->not->toContain('Likely stale');" [ref=e2178]: + - code [ref=e2179]: "->and($html)->not->toContain('Likely stale');" + - 'row "365 365 })->group(''ops-ux'');" [ref=e2180]': + - cell "365" [ref=e2181]: "365" + - cell "365" [ref=e2182]: "365" + - cell [ref=e2183] + - cell [ref=e2184] + - 'cell "})->group(''ops-ux'');" [ref=e2185]': + - code [ref=e2186]: "})->group('ops-ux');" + - row "366 366" [ref=e2187]: + - cell "366" [ref=e2188]: "366" + - cell "366" [ref=e2189]: "366" + - cell [ref=e2190] + - cell [ref=e2191] + - cell [ref=e2192]: + - code + - 'row "367 + it(''renders stale queued activity with lifecycle guidance instead of ordinary waiting copy'', function (): void {" [ref=e2193]': + - cell [ref=e2194] + - cell "367" [ref=e2195]: "367" + - cell [ref=e2196] + - cell "+" [ref=e2197]: + - generic [ref=e2198]: + + - 'cell "it(''renders stale queued activity with lifecycle guidance instead of ordinary waiting copy'', function (): void {" [ref=e2199]': + - code [ref=e2200]: "it('renders stale queued activity with lifecycle guidance instead of ordinary waiting copy', function (): void {" + - 'row "368 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2201]': + - cell [ref=e2202] + - cell "368" [ref=e2203]: "368" + - cell [ref=e2204] + - cell "+" [ref=e2205]: + - generic [ref=e2206]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2207]': + - code [ref=e2208]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "369 +" [ref=e2209]: + - cell [ref=e2210] + - cell "369" [ref=e2211]: "369" + - cell [ref=e2212] + - cell "+" [ref=e2213]: + - generic [ref=e2214]: + + - cell [ref=e2215]: + - code + - row "370 + $this->actingAs($user);" [ref=e2216]: + - cell [ref=e2217] + - cell "370" [ref=e2218]: "370" + - cell [ref=e2219] + - cell "+" [ref=e2220]: + - generic [ref=e2221]: + + - cell "$this->actingAs($user);" [ref=e2222]: + - code [ref=e2223]: $this->actingAs($user); + - row "371 + Filament::setTenant($tenant, true);" [ref=e2224]: + - cell [ref=e2225] + - cell "371" [ref=e2226]: "371" + - cell [ref=e2227] + - cell "+" [ref=e2228]: + - generic [ref=e2229]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2230]: + - code [ref=e2231]: Filament::setTenant($tenant, true); + - row "372 +" [ref=e2232]: + - cell [ref=e2233] + - cell "372" [ref=e2234]: "372" + - cell [ref=e2235] + - cell "+" [ref=e2236]: + - generic [ref=e2237]: + + - cell [ref=e2238]: + - code + - row "373 + OperationRun::factory()->create([" [ref=e2239]: + - cell [ref=e2240] + - cell "373" [ref=e2241]: "373" + - cell [ref=e2242] + - cell "+" [ref=e2243]: + - generic [ref=e2244]: + + - cell "OperationRun::factory()->create([" [ref=e2245]: + - code [ref=e2246]: OperationRun::factory()->create([ + - row "374 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2247]: + - cell [ref=e2248] + - cell "374" [ref=e2249]: "374" + - cell [ref=e2250] + - cell "+" [ref=e2251]: + - generic [ref=e2252]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2253]: + - code [ref=e2254]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "375 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2255]: + - cell [ref=e2256] + - cell "375" [ref=e2257]: "375" + - cell [ref=e2258] + - cell "+" [ref=e2259]: + - generic [ref=e2260]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2261]: + - code [ref=e2262]: "'workspace_id' => (int) $tenant->workspace_id," + - row "376 + 'user_id' => (int) $user->getKey()," [ref=e2263]: + - cell [ref=e2264] + - cell "376" [ref=e2265]: "376" + - cell [ref=e2266] + - cell "+" [ref=e2267]: + - generic [ref=e2268]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e2269]: + - code [ref=e2270]: "'user_id' => (int) $user->getKey()," + - row "377 + 'type' => 'inventory_sync'," [ref=e2271]: + - cell [ref=e2272] + - cell "377" [ref=e2273]: "377" + - cell [ref=e2274] + - cell "+" [ref=e2275]: + - generic [ref=e2276]: + + - cell "'type' => 'inventory_sync'," [ref=e2277]: + - code [ref=e2278]: "'type' => 'inventory_sync'," + - row "378 + 'status' => 'queued'," [ref=e2279]: + - cell [ref=e2280] + - cell "378" [ref=e2281]: "378" + - cell [ref=e2282] + - cell "+" [ref=e2283]: + - generic [ref=e2284]: + + - cell "'status' => 'queued'," [ref=e2285]: + - code [ref=e2286]: "'status' => 'queued'," + - row "379 + 'outcome' => 'pending'," [ref=e2287]: + - cell [ref=e2288] + - cell "379" [ref=e2289]: "379" + - cell [ref=e2290] + - cell "+" [ref=e2291]: + - generic [ref=e2292]: + + - cell "'outcome' => 'pending'," [ref=e2293]: + - code [ref=e2294]: "'outcome' => 'pending'," + - row "380 + 'created_at' => now()->subWeeks(2)," [ref=e2295]: + - cell [ref=e2296] + - cell "380" [ref=e2297]: "380" + - cell [ref=e2298] + - cell "+" [ref=e2299]: + - generic [ref=e2300]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2301]: + - code [ref=e2302]: "'created_at' => now()->subWeeks(2)," + - row "381 + ]);" [ref=e2303]: + - cell [ref=e2304] + - cell "381" [ref=e2305]: "381" + - cell [ref=e2306] + - cell "+" [ref=e2307]: + - generic [ref=e2308]: + + - cell "]);" [ref=e2309]: + - code [ref=e2310]: "]);" + - row "382 +" [ref=e2311]: + - cell [ref=e2312] + - cell "382" [ref=e2313]: "382" + - cell [ref=e2314] + - cell "+" [ref=e2315]: + - generic [ref=e2316]: + + - cell [ref=e2317]: + - code + - row "383 + $component = Livewire::actingAs($user)" [ref=e2318]: + - cell [ref=e2319] + - cell "383" [ref=e2320]: "383" + - cell [ref=e2321] + - cell "+" [ref=e2322]: + - generic [ref=e2323]: + + - cell "$component = Livewire::actingAs($user)" [ref=e2324]: + - code [ref=e2325]: $component = Livewire::actingAs($user) + - row "384 + ->test(BulkOperationProgress::class)" [ref=e2326]: + - cell [ref=e2327] + - cell "384" [ref=e2328]: "384" + - cell [ref=e2329] + - cell "+" [ref=e2330]: + - generic [ref=e2331]: + + - cell "->test(BulkOperationProgress::class)" [ref=e2332]: + - code [ref=e2333]: "->test(BulkOperationProgress::class)" + - row "385 + ->call('refreshRuns');" [ref=e2334]: + - cell [ref=e2335] + - cell "385" [ref=e2336]: "385" + - cell [ref=e2337] + - cell "+" [ref=e2338]: + - generic [ref=e2339]: + + - cell "->call('refreshRuns');" [ref=e2340]: + - code [ref=e2341]: "->call('refreshRuns');" + - row "386 +" [ref=e2342]: + - cell [ref=e2343] + - cell "386" [ref=e2344]: "386" + - cell [ref=e2345] + - cell "+" [ref=e2346]: + - generic [ref=e2347]: + + - cell [ref=e2348]: + - code + - row "387 + $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2349]: + - cell [ref=e2350] + - cell "387" [ref=e2351]: "387" + - cell [ref=e2352] + - cell "+" [ref=e2353]: + - generic [ref=e2354]: + + - cell "$html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2355]: + - code [ref=e2356]: $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5); + - row "388 + $pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2357]: + - cell [ref=e2358] + - cell "388" [ref=e2359]: "388" + - cell [ref=e2360] + - cell "+" [ref=e2361]: + - generic [ref=e2362]: + + - cell "$pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2363]: + - code [ref=e2364]: $pageText = preg_replace('/\s+/', ' ', strip_tags($html)); + - row "389 +" [ref=e2365]: + - cell [ref=e2366] + - cell "389" [ref=e2367]: "389" + - cell [ref=e2368] + - cell "+" [ref=e2369]: + - generic [ref=e2370]: + + - cell [ref=e2371]: + - code + - row "390 + expect($html)->toContain('Likely stale')" [ref=e2372]: + - cell [ref=e2373] + - cell "390" [ref=e2374]: "390" + - cell [ref=e2375] + - cell "+" [ref=e2376]: + - generic [ref=e2377]: + + - cell "expect($html)->toContain('Likely stale')" [ref=e2378]: + - code [ref=e2379]: expect($html)->toContain('Likely stale') + - row "391 + ->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" [ref=e2380]: + - cell [ref=e2381] + - cell "391" [ref=e2382]: "391" + - cell [ref=e2383] + - cell "+" [ref=e2384]: + - generic [ref=e2385]: + + - cell "->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" [ref=e2386]: + - code [ref=e2387]: "->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" + - row "392 + ->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2388]: + - cell [ref=e2389] + - cell "392" [ref=e2390]: "392" + - cell [ref=e2391] + - cell "+" [ref=e2392]: + - generic [ref=e2393]: + + - cell "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2394]: + - code [ref=e2395]: "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "393 + ->and($pageText)->not->toContain('Waiting for worker.');" [ref=e2396]: + - cell [ref=e2397] + - cell "393" [ref=e2398]: "393" + - cell [ref=e2399] + - cell "+" [ref=e2400]: + - generic [ref=e2401]: + + - cell "->and($pageText)->not->toContain('Waiting for worker.');" [ref=e2402]: + - code [ref=e2403]: "->and($pageText)->not->toContain('Waiting for worker.');" + - 'row "394 + })->group(''ops-ux'');" [ref=e2404]': + - cell [ref=e2405] + - cell "394" [ref=e2406]: "394" + - cell [ref=e2407] + - cell "+" [ref=e2408]: + - generic [ref=e2409]: + + - 'cell "})->group(''ops-ux'');" [ref=e2410]': + - code [ref=e2411]: "})->group('ops-ux');" + - row "395 +" [ref=e2412]: + - cell [ref=e2413] + - cell "395" [ref=e2414]: "395" + - cell [ref=e2415] + - cell "+" [ref=e2416]: + - generic [ref=e2417]: + + - cell [ref=e2418]: + - code + - 'row "396 + it(''shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar'', function (): void {" [ref=e2419]': + - cell [ref=e2420] + - cell "396" [ref=e2421]: "396" + - cell [ref=e2422] + - cell "+" [ref=e2423]: + - generic [ref=e2424]: + + - 'cell "it(''shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar'', function (): void {" [ref=e2425]': + - code [ref=e2426]: "it('shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar', function (): void {" + - 'row "397 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2427]': + - cell [ref=e2428] + - cell "397" [ref=e2429]: "397" + - cell [ref=e2430] + - cell "+" [ref=e2431]: + - generic [ref=e2432]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2433]': + - code [ref=e2434]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "398 +" [ref=e2435]: + - cell [ref=e2436] + - cell "398" [ref=e2437]: "398" + - cell [ref=e2438] + - cell "+" [ref=e2439]: + - generic [ref=e2440]: + + - cell [ref=e2441]: + - code + - row "399 + $this->actingAs($user);" [ref=e2442]: + - cell [ref=e2443] + - cell "399" [ref=e2444]: "399" + - cell [ref=e2445] + - cell "+" [ref=e2446]: + - generic [ref=e2447]: + + - cell "$this->actingAs($user);" [ref=e2448]: + - code [ref=e2449]: $this->actingAs($user); + - row "400 + Filament::setTenant($tenant, true);" [ref=e2450]: + - cell [ref=e2451] + - cell "400" [ref=e2452]: "400" + - cell [ref=e2453] + - cell "+" [ref=e2454]: + - generic [ref=e2455]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2456]: + - code [ref=e2457]: Filament::setTenant($tenant, true); + - row "401 +" [ref=e2458]: + - cell [ref=e2459] + - cell "401" [ref=e2460]: "401" + - cell [ref=e2461] + - cell "+" [ref=e2462]: + - generic [ref=e2463]: + + - cell [ref=e2464]: + - code + - row "402 + OperationRun::factory()->create([" [ref=e2465]: + - cell [ref=e2466] + - cell "402" [ref=e2467]: "402" + - cell [ref=e2468] + - cell "+" [ref=e2469]: + - generic [ref=e2470]: + + - cell "OperationRun::factory()->create([" [ref=e2471]: + - code [ref=e2472]: OperationRun::factory()->create([ + - row "403 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2473]: + - cell [ref=e2474] + - cell "403" [ref=e2475]: "403" + - cell [ref=e2476] + - cell "+" [ref=e2477]: + - generic [ref=e2478]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2479]: + - code [ref=e2480]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "404 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2481]: + - cell [ref=e2482] + - cell "404" [ref=e2483]: "404" + - cell [ref=e2484] + - cell "+" [ref=e2485]: + - generic [ref=e2486]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2487]: + - code [ref=e2488]: "'workspace_id' => (int) $tenant->workspace_id," + - row "405 + 'user_id' => (int) $user->getKey()," [ref=e2489]: + - cell [ref=e2490] + - cell "405" [ref=e2491]: "405" + - cell [ref=e2492] + - cell "+" [ref=e2493]: + - generic [ref=e2494]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e2495]: + - code [ref=e2496]: "'user_id' => (int) $user->getKey()," + - row "406 + 'type' => 'inventory_sync'," [ref=e2497]: + - cell [ref=e2498] + - cell "406" [ref=e2499]: "406" + - cell [ref=e2500] + - cell "+" [ref=e2501]: + - generic [ref=e2502]: + + - cell "'type' => 'inventory_sync'," [ref=e2503]: + - code [ref=e2504]: "'type' => 'inventory_sync'," + - row "407 + 'status' => 'running'," [ref=e2505]: + - cell [ref=e2506] + - cell "407" [ref=e2507]: "407" + - cell [ref=e2508] + - cell "+" [ref=e2509]: + - generic [ref=e2510]: + + - cell "'status' => 'running'," [ref=e2511]: + - code [ref=e2512]: "'status' => 'running'," + - row "408 + 'outcome' => 'pending'," [ref=e2513]: + - cell [ref=e2514] + - cell "408" [ref=e2515]: "408" + - cell [ref=e2516] + - cell "+" [ref=e2517]: + - generic [ref=e2518]: + + - cell "'outcome' => 'pending'," [ref=e2519]: + - code [ref=e2520]: "'outcome' => 'pending'," + - row "409 + 'summary_counts' => [" [ref=e2521]: + - cell [ref=e2522] + - cell "409" [ref=e2523]: "409" + - cell [ref=e2524] + - cell "+" [ref=e2525]: + - generic [ref=e2526]: + + - cell "'summary_counts' => [" [ref=e2527]: + - code [ref=e2528]: "'summary_counts' => [" + - row "410 + 'total' => 10," [ref=e2529]: + - cell [ref=e2530] + - cell "410" [ref=e2531]: "410" + - cell [ref=e2532] + - cell "+" [ref=e2533]: + - generic [ref=e2534]: + + - cell "'total' => 10," [ref=e2535]: + - code [ref=e2536]: "'total' => 10," + - row "411 + 'processed' => 4," [ref=e2537]: + - cell [ref=e2538] + - cell "411" [ref=e2539]: "411" + - cell [ref=e2540] + - cell "+" [ref=e2541]: + - generic [ref=e2542]: + + - cell "'processed' => 4," [ref=e2543]: + - code [ref=e2544]: "'processed' => 4," + - row "412 + ]," [ref=e2545]: + - cell [ref=e2546] + - cell "412" [ref=e2547]: "412" + - cell [ref=e2548] + - cell "+" [ref=e2549]: + - generic [ref=e2550]: + + - cell "]," [ref=e2551]: + - code [ref=e2552]: "]," + - row "413 + 'started_at' => now()->subWeeks(2)," [ref=e2553]: + - cell [ref=e2554] + - cell "413" [ref=e2555]: "413" + - cell [ref=e2556] + - cell "+" [ref=e2557]: + - generic [ref=e2558]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e2559]: + - code [ref=e2560]: "'started_at' => now()->subWeeks(2)," + - row "414 + 'created_at' => now()->subWeeks(2)," [ref=e2561]: + - cell [ref=e2562] + - cell "414" [ref=e2563]: "414" + - cell [ref=e2564] + - cell "+" [ref=e2565]: + - generic [ref=e2566]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2567]: + - code [ref=e2568]: "'created_at' => now()->subWeeks(2)," + - row "415 + ]);" [ref=e2569]: + - cell [ref=e2570] + - cell "415" [ref=e2571]: "415" + - cell [ref=e2572] + - cell "+" [ref=e2573]: + - generic [ref=e2574]: + + - cell "]);" [ref=e2575]: + - code [ref=e2576]: "]);" + - row "416 +" [ref=e2577]: + - cell [ref=e2578] + - cell "416" [ref=e2579]: "416" + - cell [ref=e2580] + - cell "+" [ref=e2581]: + - generic [ref=e2582]: + + - cell [ref=e2583]: + - code + - row "417 + $component = Livewire::actingAs($user)" [ref=e2584]: + - cell [ref=e2585] + - cell "417" [ref=e2586]: "417" + - cell [ref=e2587] + - cell "+" [ref=e2588]: + - generic [ref=e2589]: + + - cell "$component = Livewire::actingAs($user)" [ref=e2590]: + - code [ref=e2591]: $component = Livewire::actingAs($user) + - row "418 + ->test(BulkOperationProgress::class)" [ref=e2592]: + - cell [ref=e2593] + - cell "418" [ref=e2594]: "418" + - cell [ref=e2595] + - cell "+" [ref=e2596]: + - generic [ref=e2597]: + + - cell "->test(BulkOperationProgress::class)" [ref=e2598]: + - code [ref=e2599]: "->test(BulkOperationProgress::class)" + - row "419 + ->call('refreshRuns');" [ref=e2600]: + - cell [ref=e2601] + - cell "419" [ref=e2602]: "419" + - cell [ref=e2603] + - cell "+" [ref=e2604]: + - generic [ref=e2605]: + + - cell "->call('refreshRuns');" [ref=e2606]: + - code [ref=e2607]: "->call('refreshRuns');" + - row "420 +" [ref=e2608]: + - cell [ref=e2609] + - cell "420" [ref=e2610]: "420" + - cell [ref=e2611] + - cell "+" [ref=e2612]: + - generic [ref=e2613]: + + - cell [ref=e2614]: + - code + - row "421 + $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2615]: + - cell [ref=e2616] + - cell "421" [ref=e2617]: "421" + - cell [ref=e2618] + - cell "+" [ref=e2619]: + - generic [ref=e2620]: + + - cell "$html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2621]: + - code [ref=e2622]: $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5); + - row "422 + $pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2623]: + - cell [ref=e2624] + - cell "422" [ref=e2625]: "422" + - cell [ref=e2626] + - cell "+" [ref=e2627]: + - generic [ref=e2628]: + + - cell "$pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2629]: + - code [ref=e2630]: $pageText = preg_replace('/\s+/', ' ', strip_tags($html)); + - row "423 +" [ref=e2631]: + - cell [ref=e2632] + - cell "423" [ref=e2633]: "423" + - cell [ref=e2634] + - cell "+" [ref=e2635]: + - generic [ref=e2636]: + + - cell [ref=e2637]: + - code + - row "424 + expect($html)->toContain('Likely stale')" [ref=e2638]: + - cell [ref=e2639] + - cell "424" [ref=e2640]: "424" + - cell [ref=e2641] + - cell "+" [ref=e2642]: + - generic [ref=e2643]: + + - cell "expect($html)->toContain('Likely stale')" [ref=e2644]: + - code [ref=e2645]: expect($html)->toContain('Likely stale') + - row "425 + ->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" [ref=e2646]: + - cell [ref=e2647] + - cell "425" [ref=e2648]: "425" + - cell [ref=e2649] + - cell "+" [ref=e2650]: + - generic [ref=e2651]: + + - cell "->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" [ref=e2652]: + - code [ref=e2653]: "->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" + - row "426 + ->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2654]: + - cell [ref=e2655] + - cell "426" [ref=e2656]: "426" + - cell [ref=e2657] + - cell "+" [ref=e2658]: + - generic [ref=e2659]: + + - cell "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2660]: + - code [ref=e2661]: "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "427 + ->and($pageText)->not->toContain('4 / 10 processed (40%)')" [ref=e2662]: + - cell [ref=e2663] + - cell "427" [ref=e2664]: "427" + - cell [ref=e2665] + - cell "+" [ref=e2666]: + - generic [ref=e2667]: + + - cell "->and($pageText)->not->toContain('4 / 10 processed (40%)')" [ref=e2668]: + - code [ref=e2669]: "->and($pageText)->not->toContain('4 / 10 processed (40%)')" + - row "428 + ->and($html)->not->toContain('aria-valuenow=\"40\"');" [ref=e2670]: + - cell [ref=e2671] + - cell "428" [ref=e2672]: "428" + - cell [ref=e2673] + - cell "+" [ref=e2674]: + - generic [ref=e2675]: + + - cell "->and($html)->not->toContain('aria-valuenow=\"40\"');" [ref=e2676]: + - code [ref=e2677]: "->and($html)->not->toContain('aria-valuenow=\"40\"');" + - 'row "429 + })->group(''ops-ux'');" [ref=e2678]': + - cell [ref=e2679] + - cell "429" [ref=e2680]: "429" + - cell [ref=e2681] + - cell "+" [ref=e2682]: + - generic [ref=e2683]: + + - 'cell "})->group(''ops-ux'');" [ref=e2684]': + - code [ref=e2685]: "})->group('ops-ux');" + - row "430 +" [ref=e2686]: + - cell [ref=e2687] + - cell "430" [ref=e2688]: "430" + - cell [ref=e2689] + - cell "+" [ref=e2690]: + - generic [ref=e2691]: + + - cell [ref=e2692]: + - code + - 'row "367 431 it(''renders phased fallback progress without inventing a counted percentage'', function (): void {" [ref=e2693]': + - cell "367" [ref=e2694]: "367" + - cell "431" [ref=e2695]: "431" + - cell [ref=e2696] + - cell [ref=e2697] + - 'cell "it(''renders phased fallback progress without inventing a counted percentage'', function (): void {" [ref=e2698]': + - code [ref=e2699]: "it('renders phased fallback progress without inventing a counted percentage', function (): void {" + - 'row "368 432 [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2700]': + - cell "368" [ref=e2701]: "368" + - cell "432" [ref=e2702]: "432" + - cell [ref=e2703] + - cell [ref=e2704] + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2705]': + - code [ref=e2706]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "369 433" [ref=e2707]: + - cell "369" [ref=e2708]: "369" + - cell "433" [ref=e2709]: "433" + - cell [ref=e2710] + - cell [ref=e2711] + - cell [ref=e2712]: + - code + - row [ref=e2713]: + - cell [ref=e2714]: + - button [ref=e2716] [cursor=pointer]: + - img [ref=e2717] + - cell [ref=e2719] + - cell [ref=e2720] + - cell [ref=e2721]: + - code + - generic [ref=e2722]: + - 'heading "33 33 Änderungen: 32 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php Datei anzeigen" [level=4] [ref=e2723]': + - generic [ref=e2724]: + - button [ref=e2725] [cursor=pointer]: + - img [ref=e2726] + - generic [ref=e2728]: + - text: "33" + - 'generic "33 Änderungen: 32 Ergänzungen und 1 Löschungen" [ref=e2729]' + - generic [ref=e2731]: + - link "apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php" [ref=e2732] [cursor=pointer]: + - /url: "#diff-789b73397dfb1556cb3d9fbc68eec2c64714ebae" + - button [ref=e2733] [cursor=pointer]: + - img [ref=e2734] + - link "Datei anzeigen" [ref=e2738] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php + - table [ref=e2741]: + - rowgroup [ref=e2748]: + - row "@ -215,9 +215,40 @@" [ref=e2749]: + - cell [ref=e2750]: + - button [ref=e2752] [cursor=pointer]: + - img [ref=e2753] + - cell [ref=e2755] + - cell [ref=e2756] + - cell "@ -215,9 +215,40 @@" [ref=e2757]: + - code [ref=e2758]: "@ -215,9 +215,40 @@" + - row "215 215 ->test(BulkOperationProgress::class)" [ref=e2759]: + - cell "215" [ref=e2760]: "215" + - cell "215" [ref=e2761]: "215" + - cell [ref=e2762] + - cell [ref=e2763] + - cell "->test(BulkOperationProgress::class)" [ref=e2764]: + - code [ref=e2765]: "->test(BulkOperationProgress::class)" + - row "216 216 ->call('refreshRuns')" [ref=e2766]: + - cell "216" [ref=e2767]: "216" + - cell "216" [ref=e2768]: "216" + - cell [ref=e2769] + - cell [ref=e2770] + - cell "->call('refreshRuns')" [ref=e2771]: + - code [ref=e2772]: "->call('refreshRuns')" + - row "217 217 ->assertSet('hasActiveRuns', true)" [ref=e2773]: + - cell "217" [ref=e2774]: "217" + - cell "217" [ref=e2775]: "217" + - cell [ref=e2776] + - cell [ref=e2777] + - cell "->assertSet('hasActiveRuns', true)" [ref=e2778]: + - code [ref=e2779]: "->assertSet('hasActiveRuns', true)" + - row "218 + ->assertSee('One or more active operations are past their lifecycle window and need review.')" [ref=e2780]: + - cell [ref=e2781] + - cell "218" [ref=e2782]: "218" + - cell [ref=e2783] + - cell "+" [ref=e2784]: + - generic [ref=e2785]: + + - cell "->assertSee('One or more active operations are past their lifecycle window and need review.')" [ref=e2786]: + - code [ref=e2787]: "->assertSee('One or more active operations are past their lifecycle window and need review.')" + - row "218 219 ->assertSee('Inventory sync')" [ref=e2788]: + - cell "218" [ref=e2789]: "218" + - cell "219" [ref=e2790]: "219" + - cell [ref=e2791] + - cell [ref=e2792] + - cell "->assertSee('Inventory sync')" [ref=e2793]: + - code [ref=e2794]: "->assertSee('Inventory sync')" + - row "219 220 ->assertSee('Likely stale')" [ref=e2795]: + - cell "219" [ref=e2796]: "219" + - cell "220" [ref=e2797]: "220" + - cell [ref=e2798] + - cell [ref=e2799] + - cell "->assertSee('Likely stale')" [ref=e2800]: + - code [ref=e2801]: "->assertSee('Likely stale')" + - row "220 - ->assertSee('Waiting for worker.');" [ref=e2802]: + - cell "220" [ref=e2803]: "220" + - cell [ref=e2804] + - cell [ref=e2805] + - cell "-" [ref=e2806]: + - generic [ref=e2807]: "-" + - cell "->assertSee('Waiting for worker.');" [ref=e2808]: + - code [ref=e2809]: "->assertSee('Waiting for worker.');" + - row "221 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2810]: + - cell [ref=e2811] + - cell "221" [ref=e2812]: "221" + - cell [ref=e2813] + - cell "+" [ref=e2814]: + - generic [ref=e2815]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2816]: + - code [ref=e2817]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "222 + ->assertDontSee('Waiting for worker.');" [ref=e2818]: + - cell [ref=e2819] + - cell "222" [ref=e2820]: "222" + - cell [ref=e2821] + - cell "+" [ref=e2822]: + - generic [ref=e2823]: + + - cell "->assertDontSee('Waiting for worker.');" [ref=e2824]: + - code [ref=e2825]: "->assertDontSee('Waiting for worker.');" + - 'row "223 + })->group(''ops-ux'');" [ref=e2826]': + - cell [ref=e2827] + - cell "223" [ref=e2828]: "223" + - cell [ref=e2829] + - cell "+" [ref=e2830]: + - generic [ref=e2831]: + + - 'cell "})->group(''ops-ux'');" [ref=e2832]': + - code [ref=e2833]: "})->group('ops-ux');" + - row "224 +" [ref=e2834]: + - cell [ref=e2835] + - cell "224" [ref=e2836]: "224" + - cell [ref=e2837] + - cell "+" [ref=e2838]: + - generic [ref=e2839]: + + - cell [ref=e2840]: + - code + - 'row "225 + it(''subordinates determinate stale-running shell progress to lifecycle guidance'', function () {" [ref=e2841]': + - cell [ref=e2842] + - cell "225" [ref=e2843]: "225" + - cell [ref=e2844] + - cell "+" [ref=e2845]: + - generic [ref=e2846]: + + - 'cell "it(''subordinates determinate stale-running shell progress to lifecycle guidance'', function () {" [ref=e2847]': + - code [ref=e2848]: "it('subordinates determinate stale-running shell progress to lifecycle guidance', function () {" + - 'row "226 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2849]': + - cell [ref=e2850] + - cell "226" [ref=e2851]: "226" + - cell [ref=e2852] + - cell "+" [ref=e2853]: + - generic [ref=e2854]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2855]': + - code [ref=e2856]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "227 + $this->actingAs($user);" [ref=e2857]: + - cell [ref=e2858] + - cell "227" [ref=e2859]: "227" + - cell [ref=e2860] + - cell "+" [ref=e2861]: + - generic [ref=e2862]: + + - cell "$this->actingAs($user);" [ref=e2863]: + - code [ref=e2864]: $this->actingAs($user); + - row "228 + Filament::setTenant($tenant, true);" [ref=e2865]: + - cell [ref=e2866] + - cell "228" [ref=e2867]: "228" + - cell [ref=e2868] + - cell "+" [ref=e2869]: + - generic [ref=e2870]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2871]: + - code [ref=e2872]: Filament::setTenant($tenant, true); + - row "229 +" [ref=e2873]: + - cell [ref=e2874] + - cell "229" [ref=e2875]: "229" + - cell [ref=e2876] + - cell "+" [ref=e2877]: + - generic [ref=e2878]: + + - cell [ref=e2879]: + - code + - row "230 + OperationRun::factory()->create([" [ref=e2880]: + - cell [ref=e2881] + - cell "230" [ref=e2882]: "230" + - cell [ref=e2883] + - cell "+" [ref=e2884]: + - generic [ref=e2885]: + + - cell "OperationRun::factory()->create([" [ref=e2886]: + - code [ref=e2887]: OperationRun::factory()->create([ + - row "231 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2888]: + - cell [ref=e2889] + - cell "231" [ref=e2890]: "231" + - cell [ref=e2891] + - cell "+" [ref=e2892]: + - generic [ref=e2893]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2894]: + - code [ref=e2895]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "232 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2896]: + - cell [ref=e2897] + - cell "232" [ref=e2898]: "232" + - cell [ref=e2899] + - cell "+" [ref=e2900]: + - generic [ref=e2901]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2902]: + - code [ref=e2903]: "'workspace_id' => (int) $tenant->workspace_id," + - row "233 + 'type' => 'inventory_sync'," [ref=e2904]: + - cell [ref=e2905] + - cell "233" [ref=e2906]: "233" + - cell [ref=e2907] + - cell "+" [ref=e2908]: + - generic [ref=e2909]: + + - cell "'type' => 'inventory_sync'," [ref=e2910]: + - code [ref=e2911]: "'type' => 'inventory_sync'," + - row "234 + 'status' => 'running'," [ref=e2912]: + - cell [ref=e2913] + - cell "234" [ref=e2914]: "234" + - cell [ref=e2915] + - cell "+" [ref=e2916]: + - generic [ref=e2917]: + + - cell "'status' => 'running'," [ref=e2918]: + - code [ref=e2919]: "'status' => 'running'," + - row "235 + 'outcome' => 'pending'," [ref=e2920]: + - cell [ref=e2921] + - cell "235" [ref=e2922]: "235" + - cell [ref=e2923] + - cell "+" [ref=e2924]: + - generic [ref=e2925]: + + - cell "'outcome' => 'pending'," [ref=e2926]: + - code [ref=e2927]: "'outcome' => 'pending'," + - row "236 + 'summary_counts' => [" [ref=e2928]: + - cell [ref=e2929] + - cell "236" [ref=e2930]: "236" + - cell [ref=e2931] + - cell "+" [ref=e2932]: + - generic [ref=e2933]: + + - cell "'summary_counts' => [" [ref=e2934]: + - code [ref=e2935]: "'summary_counts' => [" + - row "237 + 'total' => 10," [ref=e2936]: + - cell [ref=e2937] + - cell "237" [ref=e2938]: "237" + - cell [ref=e2939] + - cell "+" [ref=e2940]: + - generic [ref=e2941]: + + - cell "'total' => 10," [ref=e2942]: + - code [ref=e2943]: "'total' => 10," + - row "238 + 'processed' => 4," [ref=e2944]: + - cell [ref=e2945] + - cell "238" [ref=e2946]: "238" + - cell [ref=e2947] + - cell "+" [ref=e2948]: + - generic [ref=e2949]: + + - cell "'processed' => 4," [ref=e2950]: + - code [ref=e2951]: "'processed' => 4," + - row "239 + ]," [ref=e2952]: + - cell [ref=e2953] + - cell "239" [ref=e2954]: "239" + - cell [ref=e2955] + - cell "+" [ref=e2956]: + - generic [ref=e2957]: + + - cell "]," [ref=e2958]: + - code [ref=e2959]: "]," + - row "240 + 'started_at' => now()->subWeeks(2)," [ref=e2960]: + - cell [ref=e2961] + - cell "240" [ref=e2962]: "240" + - cell [ref=e2963] + - cell "+" [ref=e2964]: + - generic [ref=e2965]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e2966]: + - code [ref=e2967]: "'started_at' => now()->subWeeks(2)," + - row "241 + 'created_at' => now()->subWeeks(2)," [ref=e2968]: + - cell [ref=e2969] + - cell "241" [ref=e2970]: "241" + - cell [ref=e2971] + - cell "+" [ref=e2972]: + - generic [ref=e2973]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2974]: + - code [ref=e2975]: "'created_at' => now()->subWeeks(2)," + - row "242 + ]);" [ref=e2976]: + - cell [ref=e2977] + - cell "242" [ref=e2978]: "242" + - cell [ref=e2979] + - cell "+" [ref=e2980]: + - generic [ref=e2981]: + + - cell "]);" [ref=e2982]: + - code [ref=e2983]: "]);" + - row "243 +" [ref=e2984]: + - cell [ref=e2985] + - cell "243" [ref=e2986]: "243" + - cell [ref=e2987] + - cell "+" [ref=e2988]: + - generic [ref=e2989]: + + - cell [ref=e2990]: + - code + - row "244 + Livewire::actingAs($user)" [ref=e2991]: + - cell [ref=e2992] + - cell "244" [ref=e2993]: "244" + - cell [ref=e2994] + - cell "+" [ref=e2995]: + - generic [ref=e2996]: + + - cell "Livewire::actingAs($user)" [ref=e2997]: + - code [ref=e2998]: Livewire::actingAs($user) + - row "245 + ->test(BulkOperationProgress::class)" [ref=e2999]: + - cell [ref=e3000] + - cell "245" [ref=e3001]: "245" + - cell [ref=e3002] + - cell "+" [ref=e3003]: + - generic [ref=e3004]: + + - cell "->test(BulkOperationProgress::class)" [ref=e3005]: + - code [ref=e3006]: "->test(BulkOperationProgress::class)" + - row "246 + ->call('refreshRuns')" [ref=e3007]: + - cell [ref=e3008] + - cell "246" [ref=e3009]: "246" + - cell [ref=e3010] + - cell "+" [ref=e3011]: + - generic [ref=e3012]: + + - cell "->call('refreshRuns')" [ref=e3013]: + - code [ref=e3014]: "->call('refreshRuns')" + - row "247 + ->assertSet('hasActiveRuns', true)" [ref=e3015]: + - cell [ref=e3016] + - cell "247" [ref=e3017]: "247" + - cell [ref=e3018] + - cell "+" [ref=e3019]: + - generic [ref=e3020]: + + - cell "->assertSet('hasActiveRuns', true)" [ref=e3021]: + - code [ref=e3022]: "->assertSet('hasActiveRuns', true)" + - row "248 + ->assertSee('Likely stale')" [ref=e3023]: + - cell [ref=e3024] + - cell "248" [ref=e3025]: "248" + - cell [ref=e3026] + - cell "+" [ref=e3027]: + - generic [ref=e3028]: + + - cell "->assertSee('Likely stale')" [ref=e3029]: + - code [ref=e3030]: "->assertSee('Likely stale')" + - row "249 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3031]: + - cell [ref=e3032] + - cell "249" [ref=e3033]: "249" + - cell [ref=e3034] + - cell "+" [ref=e3035]: + - generic [ref=e3036]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3037]: + - code [ref=e3038]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "250 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e3039]: + - cell [ref=e3040] + - cell "250" [ref=e3041]: "250" + - cell [ref=e3042] + - cell "+" [ref=e3043]: + - generic [ref=e3044]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e3045]: + - code [ref=e3046]: "->assertDontSee('4 / 10 processed (40%)')" + - row "251 + ->assertDontSeeHtml('aria-valuenow=\"40\"');" [ref=e3047]: + - cell [ref=e3048] + - cell "251" [ref=e3049]: "251" + - cell [ref=e3050] + - cell "+" [ref=e3051]: + - generic [ref=e3052]: + + - cell "->assertDontSeeHtml('aria-valuenow=\"40\"');" [ref=e3053]: + - code [ref=e3054]: "->assertDontSeeHtml('aria-valuenow=\"40\"');" + - 'row "221 252 })->group(''ops-ux'');" [ref=e3055]': + - cell "221" [ref=e3056]: "221" + - cell "252" [ref=e3057]: "252" + - cell [ref=e3058] + - cell [ref=e3059] + - 'cell "})->group(''ops-ux'');" [ref=e3060]': + - code [ref=e3061]: "})->group('ops-ux');" + - row "222 253" [ref=e3062]: + - cell "222" [ref=e3063]: "222" + - cell "253" [ref=e3064]: "253" + - cell [ref=e3065] + - cell [ref=e3066] + - cell [ref=e3067]: + - code + - 'row "223 254 it(''clamps counted progress at the shell host when processed exceeds total'', function () {" [ref=e3068]': + - cell "223" [ref=e3069]: "223" + - cell "254" [ref=e3070]: "254" + - cell [ref=e3071] + - cell [ref=e3072] + - 'cell "it(''clamps counted progress at the shell host when processed exceeds total'', function () {" [ref=e3073]': + - code [ref=e3074]: "it('clamps counted progress at the shell host when processed exceeds total', function () {" + - row [ref=e3075]: + - cell [ref=e3076]: + - button [ref=e3078] [cursor=pointer]: + - img [ref=e3079] + - cell [ref=e3081] + - cell [ref=e3082] + - cell [ref=e3083]: + - code + - generic [ref=e3084]: + - 'heading "103 103 Änderungen: 103 Ergänzungen und 0 Löschungen apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php Datei anzeigen" [level=4] [ref=e3085]': + - generic [ref=e3086]: + - button [ref=e3087] [cursor=pointer]: + - img [ref=e3088] + - generic [ref=e3090]: + - text: "103" + - 'generic "103 Änderungen: 103 Ergänzungen und 0 Löschungen" [ref=e3091]' + - generic [ref=e3093]: + - link "apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php" [ref=e3094] [cursor=pointer]: + - /url: "#diff-cdbc9a8da2048b55b64e7019bff171a648154715" + - button [ref=e3095] [cursor=pointer]: + - img [ref=e3096] + - link "Datei anzeigen" [ref=e3100] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php + - table [ref=e3103]: + - rowgroup [ref=e3110]: + - row "@ -67,6 +67,22 @@" [ref=e3111]: + - cell [ref=e3112]: + - button [ref=e3114] [cursor=pointer]: + - img [ref=e3115] + - cell [ref=e3117] + - cell [ref=e3118] + - cell "@ -67,6 +67,22 @@" [ref=e3119]: + - code [ref=e3120]: "@ -67,6 +67,22 @@" + - row "67 67 ->and($progress['percent'])->toBeNull();" [ref=e3121]: + - cell "67" [ref=e3122]: "67" + - cell "67" [ref=e3123]: "67" + - cell [ref=e3124] + - cell [ref=e3125] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3126]: + - code [ref=e3127]: "->and($progress['percent'])->toBeNull();" + - 'row "68 68 });" [ref=e3128]': + - cell "68" [ref=e3129]: "68" + - cell "68" [ref=e3130]: "68" + - cell [ref=e3131] + - cell [ref=e3132] + - 'cell "});" [ref=e3133]': + - code [ref=e3134]: "});" + - row "69 69" [ref=e3135]: + - cell "69" [ref=e3136]: "69" + - cell "69" [ref=e3137]: "69" + - cell [ref=e3138] + - cell [ref=e3139] + - cell [ref=e3140]: + - code + - 'row "70 + it(''replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded'', function (): void {" [ref=e3141]': + - cell [ref=e3142] + - cell "70" [ref=e3143]: "70" + - cell [ref=e3144] + - cell "+" [ref=e3145]: + - generic [ref=e3146]: + + - 'cell "it(''replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded'', function (): void {" [ref=e3147]': + - code [ref=e3148]: "it('replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded', function (): void {" + - row "71 + $run = OperationRun::factory()->create([" [ref=e3149]: + - cell [ref=e3150] + - cell "71" [ref=e3151]: "71" + - cell [ref=e3152] + - cell "+" [ref=e3153]: + - generic [ref=e3154]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3155]: + - code [ref=e3156]: $run = OperationRun::factory()->create([ + - row "72 + 'type' => 'inventory_sync'," [ref=e3157]: + - cell [ref=e3158] + - cell "72" [ref=e3159]: "72" + - cell [ref=e3160] + - cell "+" [ref=e3161]: + - generic [ref=e3162]: + + - cell "'type' => 'inventory_sync'," [ref=e3163]: + - code [ref=e3164]: "'type' => 'inventory_sync'," + - row "73 + 'status' => 'queued'," [ref=e3165]: + - cell [ref=e3166] + - cell "73" [ref=e3167]: "73" + - cell [ref=e3168] + - cell "+" [ref=e3169]: + - generic [ref=e3170]: + + - cell "'status' => 'queued'," [ref=e3171]: + - code [ref=e3172]: "'status' => 'queued'," + - row "74 + 'outcome' => 'pending'," [ref=e3173]: + - cell [ref=e3174] + - cell "74" [ref=e3175]: "74" + - cell [ref=e3176] + - cell "+" [ref=e3177]: + - generic [ref=e3178]: + + - cell "'outcome' => 'pending'," [ref=e3179]: + - code [ref=e3180]: "'outcome' => 'pending'," + - row "75 + 'created_at' => now()->subWeeks(2)," [ref=e3181]: + - cell [ref=e3182] + - cell "75" [ref=e3183]: "75" + - cell [ref=e3184] + - cell "+" [ref=e3185]: + - generic [ref=e3186]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3187]: + - code [ref=e3188]: "'created_at' => now()->subWeeks(2)," + - row "76 + ]);" [ref=e3189]: + - cell [ref=e3190] + - cell "76" [ref=e3191]: "76" + - cell [ref=e3192] + - cell "+" [ref=e3193]: + - generic [ref=e3194]: + + - cell "]);" [ref=e3195]: + - code [ref=e3196]: "]);" + - row "77 +" [ref=e3197]: + - cell [ref=e3198] + - cell "77" [ref=e3199]: "77" + - cell [ref=e3200] + - cell "+" [ref=e3201]: + - generic [ref=e3202]: + + - cell [ref=e3203]: + - code + - row "78 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3204]: + - cell [ref=e3205] + - cell "78" [ref=e3206]: "78" + - cell [ref=e3207] + - cell "+" [ref=e3208]: + - generic [ref=e3209]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3210]: + - code [ref=e3211]: $progress = OperationRunProgressContract::forRun($run); + - row "79 +" [ref=e3212]: + - cell [ref=e3213] + - cell "79" [ref=e3214]: "79" + - cell [ref=e3215] + - cell "+" [ref=e3216]: + - generic [ref=e3217]: + + - cell [ref=e3218]: + - code + - row "80 + expect($progress['capability'])->toBe('activity')" [ref=e3219]: + - cell [ref=e3220] + - cell "80" [ref=e3221]: "80" + - cell [ref=e3222] + - cell "+" [ref=e3223]: + - generic [ref=e3224]: + + - cell "expect($progress['capability'])->toBe('activity')" [ref=e3225]: + - code [ref=e3226]: expect($progress['capability'])->toBe('activity') + - row "81 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3227]: + - cell [ref=e3228] + - cell "81" [ref=e3229]: "81" + - cell [ref=e3230] + - cell "+" [ref=e3231]: + - generic [ref=e3232]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3233]: + - code [ref=e3234]: "->and($progress['display'])->toBe('indeterminate')" + - row "82 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3235]: + - cell [ref=e3236] + - cell "82" [ref=e3237]: "82" + - cell [ref=e3238] + - cell "+" [ref=e3239]: + - generic [ref=e3240]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3241]: + - code [ref=e3242]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "83 + ->and($progress['percent'])->toBeNull();" [ref=e3243]: + - cell [ref=e3244] + - cell "83" [ref=e3245]: "83" + - cell [ref=e3246] + - cell "+" [ref=e3247]: + - generic [ref=e3248]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3249]: + - code [ref=e3250]: "->and($progress['percent'])->toBeNull();" + - 'row "84 + });" [ref=e3251]': + - cell [ref=e3252] + - cell "84" [ref=e3253]: "84" + - cell [ref=e3254] + - cell "+" [ref=e3255]: + - generic [ref=e3256]: + + - 'cell "});" [ref=e3257]': + - code [ref=e3258]: "});" + - row "85 +" [ref=e3259]: + - cell [ref=e3260] + - cell "85" [ref=e3261]: "85" + - cell [ref=e3262] + - cell "+" [ref=e3263]: + - generic [ref=e3264]: + + - cell [ref=e3265]: + - code + - 'row "70 86 it(''returns no progress for terminal runs even when retained counts exist'', function (): void {" [ref=e3266]': + - cell "70" [ref=e3267]: "70" + - cell "86" [ref=e3268]: "86" + - cell [ref=e3269] + - cell [ref=e3270] + - 'cell "it(''returns no progress for terminal runs even when retained counts exist'', function (): void {" [ref=e3271]': + - code [ref=e3272]: "it('returns no progress for terminal runs even when retained counts exist', function (): void {" + - row "71 87 $run = OperationRun::factory()->create([" [ref=e3273]: + - cell "71" [ref=e3274]: "71" + - cell "87" [ref=e3275]: "87" + - cell [ref=e3276] + - cell [ref=e3277] + - cell "$run = OperationRun::factory()->create([" [ref=e3278]: + - code [ref=e3279]: $run = OperationRun::factory()->create([ + - row "72 88 'status' => 'completed'," [ref=e3280]: + - cell "72" [ref=e3281]: "72" + - cell "88" [ref=e3282]: "88" + - cell [ref=e3283] + - cell [ref=e3284] + - cell "'status' => 'completed'," [ref=e3285]: + - code [ref=e3286]: "'status' => 'completed'," + - row "@ -87,6 +103,32 @@" [ref=e3287]: + - cell [ref=e3288]: + - button [ref=e3290] [cursor=pointer]: + - img [ref=e3291] + - cell [ref=e3293] + - cell [ref=e3294] + - cell "@ -87,6 +103,32 @@" [ref=e3295]: + - code [ref=e3296]: "@ -87,6 +103,32 @@" + - row "87 103 ->and($progress['percent'])->toBeNull();" [ref=e3297]: + - cell "87" [ref=e3298]: "87" + - cell "103" [ref=e3299]: "103" + - cell [ref=e3300] + - cell [ref=e3301] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3302]: + - code [ref=e3303]: "->and($progress['percent'])->toBeNull();" + - 'row "88 104 });" [ref=e3304]': + - cell "88" [ref=e3305]: "88" + - cell "104" [ref=e3306]: "104" + - cell [ref=e3307] + - cell [ref=e3308] + - 'cell "});" [ref=e3309]': + - code [ref=e3310]: "});" + - row "89 105" [ref=e3311]: + - cell "89" [ref=e3312]: "89" + - cell "105" [ref=e3313]: "105" + - cell [ref=e3314] + - cell [ref=e3315] + - cell [ref=e3316]: + - code + - 'row "106 + it(''returns no progress for reconciled terminal runs even when stale lineage is recorded'', function (): void {" [ref=e3317]': + - cell [ref=e3318] + - cell "106" [ref=e3319]: "106" + - cell [ref=e3320] + - cell "+" [ref=e3321]: + - generic [ref=e3322]: + + - 'cell "it(''returns no progress for reconciled terminal runs even when stale lineage is recorded'', function (): void {" [ref=e3323]': + - code [ref=e3324]: "it('returns no progress for reconciled terminal runs even when stale lineage is recorded', function (): void {" + - row "107 + $run = OperationRun::factory()->create([" [ref=e3325]: + - cell [ref=e3326] + - cell "107" [ref=e3327]: "107" + - cell [ref=e3328] + - cell "+" [ref=e3329]: + - generic [ref=e3330]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3331]: + - code [ref=e3332]: $run = OperationRun::factory()->create([ + - row "108 + 'status' => 'completed'," [ref=e3333]: + - cell [ref=e3334] + - cell "108" [ref=e3335]: "108" + - cell [ref=e3336] + - cell "+" [ref=e3337]: + - generic [ref=e3338]: + + - cell "'status' => 'completed'," [ref=e3339]: + - code [ref=e3340]: "'status' => 'completed'," + - row "109 + 'outcome' => 'failed'," [ref=e3341]: + - cell [ref=e3342] + - cell "109" [ref=e3343]: "109" + - cell [ref=e3344] + - cell "+" [ref=e3345]: + - generic [ref=e3346]: + + - cell "'outcome' => 'failed'," [ref=e3347]: + - code [ref=e3348]: "'outcome' => 'failed'," + - row "110 + 'context' => [" [ref=e3349]: + - cell [ref=e3350] + - cell "110" [ref=e3351]: "110" + - cell [ref=e3352] + - cell "+" [ref=e3353]: + - generic [ref=e3354]: + + - cell "'context' => [" [ref=e3355]: + - code [ref=e3356]: "'context' => [" + - row "111 + 'reconciliation' => [" [ref=e3357]: + - cell [ref=e3358] + - cell "111" [ref=e3359]: "111" + - cell [ref=e3360] + - cell "+" [ref=e3361]: + - generic [ref=e3362]: + + - cell "'reconciliation' => [" [ref=e3363]: + - code [ref=e3364]: "'reconciliation' => [" + - row "112 + 'reconciled_at' => now()->toIso8601String()," [ref=e3365]: + - cell [ref=e3366] + - cell "112" [ref=e3367]: "112" + - cell [ref=e3368] + - cell "+" [ref=e3369]: + - generic [ref=e3370]: + + - cell "'reconciled_at' => now()->toIso8601String()," [ref=e3371]: + - code [ref=e3372]: "'reconciled_at' => now()->toIso8601String()," + - row "113 + 'source' => 'adapter_reconciler'," [ref=e3373]: + - cell [ref=e3374] + - cell "113" [ref=e3375]: "113" + - cell [ref=e3376] + - cell "+" [ref=e3377]: + - generic [ref=e3378]: + + - cell "'source' => 'adapter_reconciler'," [ref=e3379]: + - code [ref=e3380]: "'source' => 'adapter_reconciler'," + - row "114 + ]," [ref=e3381]: + - cell [ref=e3382] + - cell "114" [ref=e3383]: "114" + - cell [ref=e3384] + - cell "+" [ref=e3385]: + - generic [ref=e3386]: + + - cell "]," [ref=e3387]: + - code [ref=e3388]: "]," + - row "115 + ]," [ref=e3389]: + - cell [ref=e3390] + - cell "115" [ref=e3391]: "115" + - cell [ref=e3392] + - cell "+" [ref=e3393]: + - generic [ref=e3394]: + + - cell "]," [ref=e3395]: + - code [ref=e3396]: "]," + - row "116 + 'summary_counts' => [" [ref=e3397]: + - cell [ref=e3398] + - cell "116" [ref=e3399]: "116" + - cell [ref=e3400] + - cell "+" [ref=e3401]: + - generic [ref=e3402]: + + - cell "'summary_counts' => [" [ref=e3403]: + - code [ref=e3404]: "'summary_counts' => [" + - row "117 + 'total' => 10," [ref=e3405]: + - cell [ref=e3406] + - cell "117" [ref=e3407]: "117" + - cell [ref=e3408] + - cell "+" [ref=e3409]: + - generic [ref=e3410]: + + - cell "'total' => 10," [ref=e3411]: + - code [ref=e3412]: "'total' => 10," + - row "118 + 'processed' => 10," [ref=e3413]: + - cell [ref=e3414] + - cell "118" [ref=e3415]: "118" + - cell [ref=e3416] + - cell "+" [ref=e3417]: + - generic [ref=e3418]: + + - cell "'processed' => 10," [ref=e3419]: + - code [ref=e3420]: "'processed' => 10," + - row "119 + ]," [ref=e3421]: + - cell [ref=e3422] + - cell "119" [ref=e3423]: "119" + - cell [ref=e3424] + - cell "+" [ref=e3425]: + - generic [ref=e3426]: + + - cell "]," [ref=e3427]: + - code [ref=e3428]: "]," + - row "120 + 'started_at' => now()->subMinutes(2)," [ref=e3429]: + - cell [ref=e3430] + - cell "120" [ref=e3431]: "120" + - cell [ref=e3432] + - cell "+" [ref=e3433]: + - generic [ref=e3434]: + + - cell "'started_at' => now()->subMinutes(2)," [ref=e3435]: + - code [ref=e3436]: "'started_at' => now()->subMinutes(2)," + - row "121 + 'completed_at' => now()->subSecond()," [ref=e3437]: + - cell [ref=e3438] + - cell "121" [ref=e3439]: "121" + - cell [ref=e3440] + - cell "+" [ref=e3441]: + - generic [ref=e3442]: + + - cell "'completed_at' => now()->subSecond()," [ref=e3443]: + - code [ref=e3444]: "'completed_at' => now()->subSecond()," + - row "122 + ]);" [ref=e3445]: + - cell [ref=e3446] + - cell "122" [ref=e3447]: "122" + - cell [ref=e3448] + - cell "+" [ref=e3449]: + - generic [ref=e3450]: + + - cell "]);" [ref=e3451]: + - code [ref=e3452]: "]);" + - row "123 +" [ref=e3453]: + - cell [ref=e3454] + - cell "123" [ref=e3455]: "123" + - cell [ref=e3456] + - cell "+" [ref=e3457]: + - generic [ref=e3458]: + + - cell [ref=e3459]: + - code + - row "124 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3460]: + - cell [ref=e3461] + - cell "124" [ref=e3462]: "124" + - cell [ref=e3463] + - cell "+" [ref=e3464]: + - generic [ref=e3465]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3466]: + - code [ref=e3467]: $progress = OperationRunProgressContract::forRun($run); + - row "125 +" [ref=e3468]: + - cell [ref=e3469] + - cell "125" [ref=e3470]: "125" + - cell [ref=e3471] + - cell "+" [ref=e3472]: + - generic [ref=e3473]: + + - cell [ref=e3474]: + - code + - row "126 + expect($progress['capability'])->toBe('none')" [ref=e3475]: + - cell [ref=e3476] + - cell "126" [ref=e3477]: "126" + - cell [ref=e3478] + - cell "+" [ref=e3479]: + - generic [ref=e3480]: + + - cell "expect($progress['capability'])->toBe('none')" [ref=e3481]: + - code [ref=e3482]: expect($progress['capability'])->toBe('none') + - row "127 + ->and($progress['display'])->toBe('none')" [ref=e3483]: + - cell [ref=e3484] + - cell "127" [ref=e3485]: "127" + - cell [ref=e3486] + - cell "+" [ref=e3487]: + - generic [ref=e3488]: + + - cell "->and($progress['display'])->toBe('none')" [ref=e3489]: + - code [ref=e3490]: "->and($progress['display'])->toBe('none')" + - row "128 + ->and($progress['label'])->toBeNull()" [ref=e3491]: + - cell [ref=e3492] + - cell "128" [ref=e3493]: "128" + - cell [ref=e3494] + - cell "+" [ref=e3495]: + - generic [ref=e3496]: + + - cell "->and($progress['label'])->toBeNull()" [ref=e3497]: + - code [ref=e3498]: "->and($progress['label'])->toBeNull()" + - row "129 + ->and($progress['percent'])->toBeNull();" [ref=e3499]: + - cell [ref=e3500] + - cell "129" [ref=e3501]: "129" + - cell [ref=e3502] + - cell "+" [ref=e3503]: + - generic [ref=e3504]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3505]: + - code [ref=e3506]: "->and($progress['percent'])->toBeNull();" + - 'row "130 + });" [ref=e3507]': + - cell [ref=e3508] + - cell "130" [ref=e3509]: "130" + - cell [ref=e3510] + - cell "+" [ref=e3511]: + - generic [ref=e3512]: + + - 'cell "});" [ref=e3513]': + - code [ref=e3514]: "});" + - row "131 +" [ref=e3515]: + - cell [ref=e3516] + - cell "131" [ref=e3517]: "131" + - cell [ref=e3518] + - cell "+" [ref=e3519]: + - generic [ref=e3520]: + + - cell [ref=e3521]: + - code + - 'row "90 132 it(''does not let outcome counters masquerade as counted progress'', function (): void {" [ref=e3522]': + - cell "90" [ref=e3523]: "90" + - cell "132" [ref=e3524]: "132" + - cell [ref=e3525] + - cell [ref=e3526] + - 'cell "it(''does not let outcome counters masquerade as counted progress'', function (): void {" [ref=e3527]': + - code [ref=e3528]: "it('does not let outcome counters masquerade as counted progress', function (): void {" + - row "91 133 $run = OperationRun::factory()->create([" [ref=e3529]: + - cell "91" [ref=e3530]: "91" + - cell "133" [ref=e3531]: "133" + - cell [ref=e3532] + - cell [ref=e3533] + - cell "$run = OperationRun::factory()->create([" [ref=e3534]: + - code [ref=e3535]: $run = OperationRun::factory()->create([ + - row "92 134 'status' => 'running'," [ref=e3536]: + - cell "92" [ref=e3537]: "92" + - cell "134" [ref=e3538]: "134" + - cell [ref=e3539] + - cell [ref=e3540] + - cell "'status' => 'running'," [ref=e3541]: + - code [ref=e3542]: "'status' => 'running'," + - row "@ -107,6 +149,67 @@" [ref=e3543]: + - cell [ref=e3544]: + - button [ref=e3546] [cursor=pointer]: + - img [ref=e3547] + - cell [ref=e3549] + - cell [ref=e3550] + - cell "@ -107,6 +149,67 @@" [ref=e3551]: + - code [ref=e3552]: "@ -107,6 +149,67 @@" + - row "107 149 ->and($progress['percent'])->toBeNull();" [ref=e3553]: + - cell "107" [ref=e3554]: "107" + - cell "149" [ref=e3555]: "149" + - cell [ref=e3556] + - cell [ref=e3557] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3558]: + - code [ref=e3559]: "->and($progress['percent'])->toBeNull();" + - 'row "108 150 });" [ref=e3560]': + - cell "108" [ref=e3561]: "108" + - cell "150" [ref=e3562]: "150" + - cell [ref=e3563] + - cell [ref=e3564] + - 'cell "});" [ref=e3565]': + - code [ref=e3566]: "});" + - row "109 151" [ref=e3567]: + - cell "109" [ref=e3568]: "109" + - cell "151" [ref=e3569]: "151" + - cell [ref=e3570] + - cell [ref=e3571] + - cell [ref=e3572]: + - code + - 'row "152 + it(''replaces ordinary activity copy with stale lifecycle guidance for stale running runs'', function (): void {" [ref=e3573]': + - cell [ref=e3574] + - cell "152" [ref=e3575]: "152" + - cell [ref=e3576] + - cell "+" [ref=e3577]: + - generic [ref=e3578]: + + - 'cell "it(''replaces ordinary activity copy with stale lifecycle guidance for stale running runs'', function (): void {" [ref=e3579]': + - code [ref=e3580]: "it('replaces ordinary activity copy with stale lifecycle guidance for stale running runs', function (): void {" + - row "153 + $run = OperationRun::factory()->create([" [ref=e3581]: + - cell [ref=e3582] + - cell "153" [ref=e3583]: "153" + - cell [ref=e3584] + - cell "+" [ref=e3585]: + - generic [ref=e3586]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3587]: + - code [ref=e3588]: $run = OperationRun::factory()->create([ + - row "154 + 'type' => 'inventory_sync'," [ref=e3589]: + - cell [ref=e3590] + - cell "154" [ref=e3591]: "154" + - cell [ref=e3592] + - cell "+" [ref=e3593]: + - generic [ref=e3594]: + + - cell "'type' => 'inventory_sync'," [ref=e3595]: + - code [ref=e3596]: "'type' => 'inventory_sync'," + - row "155 + 'status' => 'running'," [ref=e3597]: + - cell [ref=e3598] + - cell "155" [ref=e3599]: "155" + - cell [ref=e3600] + - cell "+" [ref=e3601]: + - generic [ref=e3602]: + + - cell "'status' => 'running'," [ref=e3603]: + - code [ref=e3604]: "'status' => 'running'," + - row "156 + 'outcome' => 'pending'," [ref=e3605]: + - cell [ref=e3606] + - cell "156" [ref=e3607]: "156" + - cell [ref=e3608] + - cell "+" [ref=e3609]: + - generic [ref=e3610]: + + - cell "'outcome' => 'pending'," [ref=e3611]: + - code [ref=e3612]: "'outcome' => 'pending'," + - row "157 + 'started_at' => now()->subWeeks(2)," [ref=e3613]: + - cell [ref=e3614] + - cell "157" [ref=e3615]: "157" + - cell [ref=e3616] + - cell "+" [ref=e3617]: + - generic [ref=e3618]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3619]: + - code [ref=e3620]: "'started_at' => now()->subWeeks(2)," + - row "158 + 'created_at' => now()->subWeeks(2)," [ref=e3621]: + - cell [ref=e3622] + - cell "158" [ref=e3623]: "158" + - cell [ref=e3624] + - cell "+" [ref=e3625]: + - generic [ref=e3626]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3627]: + - code [ref=e3628]: "'created_at' => now()->subWeeks(2)," + - row "159 + ]);" [ref=e3629]: + - cell [ref=e3630] + - cell "159" [ref=e3631]: "159" + - cell [ref=e3632] + - cell "+" [ref=e3633]: + - generic [ref=e3634]: + + - cell "]);" [ref=e3635]: + - code [ref=e3636]: "]);" + - row "160 +" [ref=e3637]: + - cell [ref=e3638] + - cell "160" [ref=e3639]: "160" + - cell [ref=e3640] + - cell "+" [ref=e3641]: + - generic [ref=e3642]: + + - cell [ref=e3643]: + - code + - row "161 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3644]: + - cell [ref=e3645] + - cell "161" [ref=e3646]: "161" + - cell [ref=e3647] + - cell "+" [ref=e3648]: + - generic [ref=e3649]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3650]: + - code [ref=e3651]: $progress = OperationRunProgressContract::forRun($run); + - row "162 +" [ref=e3652]: + - cell [ref=e3653] + - cell "162" [ref=e3654]: "162" + - cell [ref=e3655] + - cell "+" [ref=e3656]: + - generic [ref=e3657]: + + - cell [ref=e3658]: + - code + - row "163 + expect($progress['capability'])->toBe('activity')" [ref=e3659]: + - cell [ref=e3660] + - cell "163" [ref=e3661]: "163" + - cell [ref=e3662] + - cell "+" [ref=e3663]: + - generic [ref=e3664]: + + - cell "expect($progress['capability'])->toBe('activity')" [ref=e3665]: + - code [ref=e3666]: expect($progress['capability'])->toBe('activity') + - row "164 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3667]: + - cell [ref=e3668] + - cell "164" [ref=e3669]: "164" + - cell [ref=e3670] + - cell "+" [ref=e3671]: + - generic [ref=e3672]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3673]: + - code [ref=e3674]: "->and($progress['display'])->toBe('indeterminate')" + - row "165 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3675]: + - cell [ref=e3676] + - cell "165" [ref=e3677]: "165" + - cell [ref=e3678] + - cell "+" [ref=e3679]: + - generic [ref=e3680]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3681]: + - code [ref=e3682]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "166 + ->and($progress['percent'])->toBeNull();" [ref=e3683]: + - cell [ref=e3684] + - cell "166" [ref=e3685]: "166" + - cell [ref=e3686] + - cell "+" [ref=e3687]: + - generic [ref=e3688]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3689]: + - code [ref=e3690]: "->and($progress['percent'])->toBeNull();" + - 'row "167 + });" [ref=e3691]': + - cell [ref=e3692] + - cell "167" [ref=e3693]: "167" + - cell [ref=e3694] + - cell "+" [ref=e3695]: + - generic [ref=e3696]: + + - 'cell "});" [ref=e3697]': + - code [ref=e3698]: "});" + - row "168 +" [ref=e3699]: + - cell [ref=e3700] + - cell "168" [ref=e3701]: "168" + - cell [ref=e3702] + - cell "+" [ref=e3703]: + - generic [ref=e3704]: + + - cell [ref=e3705]: + - code + - 'row "169 + it(''subordinates determinate stale-running progress to lifecycle guidance'', function (): void {" [ref=e3706]': + - cell [ref=e3707] + - cell "169" [ref=e3708]: "169" + - cell [ref=e3709] + - cell "+" [ref=e3710]: + - generic [ref=e3711]: + + - 'cell "it(''subordinates determinate stale-running progress to lifecycle guidance'', function (): void {" [ref=e3712]': + - code [ref=e3713]: "it('subordinates determinate stale-running progress to lifecycle guidance', function (): void {" + - row "170 + $run = OperationRun::factory()->create([" [ref=e3714]: + - cell [ref=e3715] + - cell "170" [ref=e3716]: "170" + - cell [ref=e3717] + - cell "+" [ref=e3718]: + - generic [ref=e3719]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3720]: + - code [ref=e3721]: $run = OperationRun::factory()->create([ + - row "171 + 'type' => 'inventory_sync'," [ref=e3722]: + - cell [ref=e3723] + - cell "171" [ref=e3724]: "171" + - cell [ref=e3725] + - cell "+" [ref=e3726]: + - generic [ref=e3727]: + + - cell "'type' => 'inventory_sync'," [ref=e3728]: + - code [ref=e3729]: "'type' => 'inventory_sync'," + - row "172 + 'status' => 'running'," [ref=e3730]: + - cell [ref=e3731] + - cell "172" [ref=e3732]: "172" + - cell [ref=e3733] + - cell "+" [ref=e3734]: + - generic [ref=e3735]: + + - cell "'status' => 'running'," [ref=e3736]: + - code [ref=e3737]: "'status' => 'running'," + - row "173 + 'outcome' => 'pending'," [ref=e3738]: + - cell [ref=e3739] + - cell "173" [ref=e3740]: "173" + - cell [ref=e3741] + - cell "+" [ref=e3742]: + - generic [ref=e3743]: + + - cell "'outcome' => 'pending'," [ref=e3744]: + - code [ref=e3745]: "'outcome' => 'pending'," + - row "174 + 'summary_counts' => [" [ref=e3746]: + - cell [ref=e3747] + - cell "174" [ref=e3748]: "174" + - cell [ref=e3749] + - cell "+" [ref=e3750]: + - generic [ref=e3751]: + + - cell "'summary_counts' => [" [ref=e3752]: + - code [ref=e3753]: "'summary_counts' => [" + - row "175 + 'total' => 10," [ref=e3754]: + - cell [ref=e3755] + - cell "175" [ref=e3756]: "175" + - cell [ref=e3757] + - cell "+" [ref=e3758]: + - generic [ref=e3759]: + + - cell "'total' => 10," [ref=e3760]: + - code [ref=e3761]: "'total' => 10," + - row "176 + 'processed' => 4," [ref=e3762]: + - cell [ref=e3763] + - cell "176" [ref=e3764]: "176" + - cell [ref=e3765] + - cell "+" [ref=e3766]: + - generic [ref=e3767]: + + - cell "'processed' => 4," [ref=e3768]: + - code [ref=e3769]: "'processed' => 4," + - row "177 + ]," [ref=e3770]: + - cell [ref=e3771] + - cell "177" [ref=e3772]: "177" + - cell [ref=e3773] + - cell "+" [ref=e3774]: + - generic [ref=e3775]: + + - cell "]," [ref=e3776]: + - code [ref=e3777]: "]," + - row "178 + 'started_at' => now()->subWeeks(2)," [ref=e3778]: + - cell [ref=e3779] + - cell "178" [ref=e3780]: "178" + - cell [ref=e3781] + - cell "+" [ref=e3782]: + - generic [ref=e3783]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3784]: + - code [ref=e3785]: "'started_at' => now()->subWeeks(2)," + - row "179 + 'created_at' => now()->subWeeks(2)," [ref=e3786]: + - cell [ref=e3787] + - cell "179" [ref=e3788]: "179" + - cell [ref=e3789] + - cell "+" [ref=e3790]: + - generic [ref=e3791]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3792]: + - code [ref=e3793]: "'created_at' => now()->subWeeks(2)," + - row "180 + ]);" [ref=e3794]: + - cell [ref=e3795] + - cell "180" [ref=e3796]: "180" + - cell [ref=e3797] + - cell "+" [ref=e3798]: + - generic [ref=e3799]: + + - cell "]);" [ref=e3800]: + - code [ref=e3801]: "]);" + - row "181 +" [ref=e3802]: + - cell [ref=e3803] + - cell "181" [ref=e3804]: "181" + - cell [ref=e3805] + - cell "+" [ref=e3806]: + - generic [ref=e3807]: + + - cell [ref=e3808]: + - code + - row "182 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3809]: + - cell [ref=e3810] + - cell "182" [ref=e3811]: "182" + - cell [ref=e3812] + - cell "+" [ref=e3813]: + - generic [ref=e3814]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3815]: + - code [ref=e3816]: $progress = OperationRunProgressContract::forRun($run); + - row "183 +" [ref=e3817]: + - cell [ref=e3818] + - cell "183" [ref=e3819]: "183" + - cell [ref=e3820] + - cell "+" [ref=e3821]: + - generic [ref=e3822]: + + - cell [ref=e3823]: + - code + - row "184 + expect($progress['capability'])->toBe('counted')" [ref=e3824]: + - cell [ref=e3825] + - cell "184" [ref=e3826]: "184" + - cell [ref=e3827] + - cell "+" [ref=e3828]: + - generic [ref=e3829]: + + - cell "expect($progress['capability'])->toBe('counted')" [ref=e3830]: + - code [ref=e3831]: expect($progress['capability'])->toBe('counted') + - row "185 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3832]: + - cell [ref=e3833] + - cell "185" [ref=e3834]: "185" + - cell [ref=e3835] + - cell "+" [ref=e3836]: + - generic [ref=e3837]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3838]: + - code [ref=e3839]: "->and($progress['display'])->toBe('indeterminate')" + - row "186 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3840]: + - cell [ref=e3841] + - cell "186" [ref=e3842]: "186" + - cell [ref=e3843] + - cell "+" [ref=e3844]: + - generic [ref=e3845]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3846]: + - code [ref=e3847]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "187 + ->and($progress['processed'])->toBeNull()" [ref=e3848]: + - cell [ref=e3849] + - cell "187" [ref=e3850]: "187" + - cell [ref=e3851] + - cell "+" [ref=e3852]: + - generic [ref=e3853]: + + - cell "->and($progress['processed'])->toBeNull()" [ref=e3854]: + - code [ref=e3855]: "->and($progress['processed'])->toBeNull()" + - row "188 + ->and($progress['total'])->toBeNull()" [ref=e3856]: + - cell [ref=e3857] + - cell "188" [ref=e3858]: "188" + - cell [ref=e3859] + - cell "+" [ref=e3860]: + - generic [ref=e3861]: + + - cell "->and($progress['total'])->toBeNull()" [ref=e3862]: + - code [ref=e3863]: "->and($progress['total'])->toBeNull()" + - row "189 + ->and($progress['percent'])->toBeNull();" [ref=e3864]: + - cell [ref=e3865] + - cell "189" [ref=e3866]: "189" + - cell [ref=e3867] + - cell "+" [ref=e3868]: + - generic [ref=e3869]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3870]: + - code [ref=e3871]: "->and($progress['percent'])->toBeNull();" + - 'row "190 + });" [ref=e3872]': + - cell [ref=e3873] + - cell "190" [ref=e3874]: "190" + - cell [ref=e3875] + - cell "+" [ref=e3876]: + - generic [ref=e3877]: + + - 'cell "});" [ref=e3878]': + - code [ref=e3879]: "});" + - row "191 +" [ref=e3880]: + - cell [ref=e3881] + - cell "191" [ref=e3882]: "191" + - cell [ref=e3883] + - cell "+" [ref=e3884]: + - generic [ref=e3885]: + + - cell [ref=e3886]: + - code + - 'row "192 + it(''does not overclaim stale lifecycle guidance for unsupported running types'', function (): void {" [ref=e3887]': + - cell [ref=e3888] + - cell "192" [ref=e3889]: "192" + - cell [ref=e3890] + - cell "+" [ref=e3891]: + - generic [ref=e3892]: + + - 'cell "it(''does not overclaim stale lifecycle guidance for unsupported running types'', function (): void {" [ref=e3893]': + - code [ref=e3894]: "it('does not overclaim stale lifecycle guidance for unsupported running types', function (): void {" + - row "193 + $run = OperationRun::factory()->create([" [ref=e3895]: + - cell [ref=e3896] + - cell "193" [ref=e3897]: "193" + - cell [ref=e3898] + - cell "+" [ref=e3899]: + - generic [ref=e3900]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3901]: + - code [ref=e3902]: $run = OperationRun::factory()->create([ + - row "194 + 'type' => 'unsupported.operation'," [ref=e3903]: + - cell [ref=e3904] + - cell "194" [ref=e3905]: "194" + - cell [ref=e3906] + - cell "+" [ref=e3907]: + - generic [ref=e3908]: + + - cell "'type' => 'unsupported.operation'," [ref=e3909]: + - code [ref=e3910]: "'type' => 'unsupported.operation'," + - row "195 + 'status' => 'running'," [ref=e3911]: + - cell [ref=e3912] + - cell "195" [ref=e3913]: "195" + - cell [ref=e3914] + - cell "+" [ref=e3915]: + - generic [ref=e3916]: + + - cell "'status' => 'running'," [ref=e3917]: + - code [ref=e3918]: "'status' => 'running'," + - row "196 + 'outcome' => 'pending'," [ref=e3919]: + - cell [ref=e3920] + - cell "196" [ref=e3921]: "196" + - cell [ref=e3922] + - cell "+" [ref=e3923]: + - generic [ref=e3924]: + + - cell "'outcome' => 'pending'," [ref=e3925]: + - code [ref=e3926]: "'outcome' => 'pending'," + - row "197 + 'summary_counts' => [" [ref=e3927]: + - cell [ref=e3928] + - cell "197" [ref=e3929]: "197" + - cell [ref=e3930] + - cell "+" [ref=e3931]: + - generic [ref=e3932]: + + - cell "'summary_counts' => [" [ref=e3933]: + - code [ref=e3934]: "'summary_counts' => [" + - row "198 + 'total' => 10," [ref=e3935]: + - cell [ref=e3936] + - cell "198" [ref=e3937]: "198" + - cell [ref=e3938] + - cell "+" [ref=e3939]: + - generic [ref=e3940]: + + - cell "'total' => 10," [ref=e3941]: + - code [ref=e3942]: "'total' => 10," + - row "199 + 'processed' => 4," [ref=e3943]: + - cell [ref=e3944] + - cell "199" [ref=e3945]: "199" + - cell [ref=e3946] + - cell "+" [ref=e3947]: + - generic [ref=e3948]: + + - cell "'processed' => 4," [ref=e3949]: + - code [ref=e3950]: "'processed' => 4," + - row "200 + ]," [ref=e3951]: + - cell [ref=e3952] + - cell "200" [ref=e3953]: "200" + - cell [ref=e3954] + - cell "+" [ref=e3955]: + - generic [ref=e3956]: + + - cell "]," [ref=e3957]: + - code [ref=e3958]: "]," + - row "201 + 'started_at' => now()->subWeeks(2)," [ref=e3959]: + - cell [ref=e3960] + - cell "201" [ref=e3961]: "201" + - cell [ref=e3962] + - cell "+" [ref=e3963]: + - generic [ref=e3964]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3965]: + - code [ref=e3966]: "'started_at' => now()->subWeeks(2)," + - row "202 + 'created_at' => now()->subWeeks(2)," [ref=e3967]: + - cell [ref=e3968] + - cell "202" [ref=e3969]: "202" + - cell [ref=e3970] + - cell "+" [ref=e3971]: + - generic [ref=e3972]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3973]: + - code [ref=e3974]: "'created_at' => now()->subWeeks(2)," + - row "203 + ]);" [ref=e3975]: + - cell [ref=e3976] + - cell "203" [ref=e3977]: "203" + - cell [ref=e3978] + - cell "+" [ref=e3979]: + - generic [ref=e3980]: + + - cell "]);" [ref=e3981]: + - code [ref=e3982]: "]);" + - row "204 +" [ref=e3983]: + - cell [ref=e3984] + - cell "204" [ref=e3985]: "204" + - cell [ref=e3986] + - cell "+" [ref=e3987]: + - generic [ref=e3988]: + + - cell [ref=e3989]: + - code + - row "205 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3990]: + - cell [ref=e3991] + - cell "205" [ref=e3992]: "205" + - cell [ref=e3993] + - cell "+" [ref=e3994]: + - generic [ref=e3995]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3996]: + - code [ref=e3997]: $progress = OperationRunProgressContract::forRun($run); + - row "206 +" [ref=e3998]: + - cell [ref=e3999] + - cell "206" [ref=e4000]: "206" + - cell [ref=e4001] + - cell "+" [ref=e4002]: + - generic [ref=e4003]: + + - cell [ref=e4004]: + - code + - row "207 + expect($progress['capability'])->toBe('counted')" [ref=e4005]: + - cell [ref=e4006] + - cell "207" [ref=e4007]: "207" + - cell [ref=e4008] + - cell "+" [ref=e4009]: + - generic [ref=e4010]: + + - cell "expect($progress['capability'])->toBe('counted')" [ref=e4011]: + - code [ref=e4012]: expect($progress['capability'])->toBe('counted') + - row "208 + ->and($progress['display'])->toBe('counted')" [ref=e4013]: + - cell [ref=e4014] + - cell "208" [ref=e4015]: "208" + - cell [ref=e4016] + - cell "+" [ref=e4017]: + - generic [ref=e4018]: + + - cell "->and($progress['display'])->toBe('counted')" [ref=e4019]: + - code [ref=e4020]: "->and($progress['display'])->toBe('counted')" + - row "209 + ->and($progress['label'])->toBe('4 / 10 processed (40%)')" [ref=e4021]: + - cell [ref=e4022] + - cell "209" [ref=e4023]: "209" + - cell [ref=e4024] + - cell "+" [ref=e4025]: + - generic [ref=e4026]: + + - cell "->and($progress['label'])->toBe('4 / 10 processed (40%)')" [ref=e4027]: + - code [ref=e4028]: "->and($progress['label'])->toBe('4 / 10 processed (40%)')" + - row "210 + ->and($progress['percent'])->toBe(40);" [ref=e4029]: + - cell [ref=e4030] + - cell "210" [ref=e4031]: "210" + - cell [ref=e4032] + - cell "+" [ref=e4033]: + - generic [ref=e4034]: + + - cell "->and($progress['percent'])->toBe(40);" [ref=e4035]: + - code [ref=e4036]: "->and($progress['percent'])->toBe(40);" + - 'row "211 + });" [ref=e4037]': + - cell [ref=e4038] + - cell "211" [ref=e4039]: "211" + - cell [ref=e4040] + - cell "+" [ref=e4041]: + - generic [ref=e4042]: + + - 'cell "});" [ref=e4043]': + - code [ref=e4044]: "});" + - row "212 +" [ref=e4045]: + - cell [ref=e4046] + - cell "212" [ref=e4047]: "212" + - cell [ref=e4048] + - cell "+" [ref=e4049]: + - generic [ref=e4050]: + + - cell [ref=e4051]: + - code + - 'row "110 213 it(''classifies repo-real baseline evidence capture runs as phased fallback'', function (): void {" [ref=e4052]': + - cell "110" [ref=e4053]: "110" + - cell "213" [ref=e4054]: "213" + - cell [ref=e4055] + - cell [ref=e4056] + - 'cell "it(''classifies repo-real baseline evidence capture runs as phased fallback'', function (): void {" [ref=e4057]': + - code [ref=e4058]: "it('classifies repo-real baseline evidence capture runs as phased fallback', function (): void {" + - row "111 214 $run = OperationRun::factory()->create([" [ref=e4059]: + - cell "111" [ref=e4060]: "111" + - cell "214" [ref=e4061]: "214" + - cell [ref=e4062] + - cell [ref=e4063] + - cell "$run = OperationRun::factory()->create([" [ref=e4064]: + - code [ref=e4065]: $run = OperationRun::factory()->create([ + - row "112 215 'type' => 'baseline_capture'," [ref=e4066]: + - cell "112" [ref=e4067]: "112" + - cell "215" [ref=e4068]: "215" + - cell [ref=e4069] + - cell [ref=e4070] + - cell "'type' => 'baseline_capture'," [ref=e4071]: + - code [ref=e4072]: "'type' => 'baseline_capture'," + - row [ref=e4073]: + - cell [ref=e4074]: + - button [ref=e4076] [cursor=pointer]: + - img [ref=e4077] + - cell [ref=e4079] + - cell [ref=e4080] + - cell [ref=e4081]: + - code + - generic [ref=e4082]: + - 'heading "64 64 Änderungen: 64 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/checklists/requirements.md Normale Datei Datei anzeigen" [level=4] [ref=e4083]': + - generic [ref=e4084]: + - button [ref=e4085] [cursor=pointer]: + - img [ref=e4086] + - generic [ref=e4088]: + - text: "64" + - 'generic "64 Änderungen: 64 Ergänzungen und 0 Löschungen" [ref=e4089]' + - generic [ref=e4091]: + - link "specs/358-operationrun-queue-truth-foundation/checklists/requirements.md" [ref=e4092] [cursor=pointer]: + - /url: "#diff-6bdac27a6033e74007da66e96266ee61f0bb49a3" + - button [ref=e4093] [cursor=pointer]: + - img [ref=e4094] + - generic [ref=e4097]: Normale Datei + - link "Datei anzeigen" [ref=e4099] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/checklists/requirements.md + - table [ref=e4102]: + - rowgroup [ref=e4109]: + - row "@ -0,0 +1,64 @@" [ref=e4110]: + - cell [ref=e4111] + - cell [ref=e4112] + - cell [ref=e4113] + - cell "@ -0,0 +1,64 @@" [ref=e4114]: + - code [ref=e4115]: "@ -0,0 +1,64 @@" + - 'row "1 + # Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" [ref=e4116]': + - cell [ref=e4117] + - cell "1" [ref=e4118]: "1" + - cell [ref=e4119] + - cell "+" [ref=e4120]: + - generic [ref=e4121]: + + - 'cell "# Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" [ref=e4122]': + - code [ref=e4123]: "# Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" + - row "2 +" [ref=e4124]: + - cell [ref=e4125] + - cell "2" [ref=e4126]: "2" + - cell [ref=e4127] + - cell "+" [ref=e4128]: + - generic [ref=e4129]: + + - cell [ref=e4130]: + - code + - 'row "3 + **Purpose**: Preparation analysis for Spec 358 readiness" [ref=e4131]': + - cell [ref=e4132] + - cell "3" [ref=e4133]: "3" + - cell [ref=e4134] + - cell "+" [ref=e4135]: + - generic [ref=e4136]: + + - 'cell "**Purpose**: Preparation analysis for Spec 358 readiness" [ref=e4137]': + - code [ref=e4138]: "**Purpose**: Preparation analysis for Spec 358 readiness" + - 'row "4 + **Created**: 2026-06-06" [ref=e4139]': + - cell [ref=e4140] + - cell "4" [ref=e4141]: "4" + - cell [ref=e4142] + - cell "+" [ref=e4143]: + - generic [ref=e4144]: + + - 'cell "**Created**: 2026-06-06" [ref=e4145]': + - code [ref=e4146]: "**Created**: 2026-06-06" + - 'row "5 + **Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4147]': + - cell [ref=e4148] + - cell "5" [ref=e4149]: "5" + - cell [ref=e4150] + - cell "+" [ref=e4151]: + - generic [ref=e4152]: + + - 'cell "**Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4153]': + - code [ref=e4154]: "**Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" + - row "6 +" [ref=e4155]: + - cell [ref=e4156] + - cell "6" [ref=e4157]: "6" + - cell [ref=e4158] + - cell "+" [ref=e4159]: + - generic [ref=e4160]: + + - cell [ref=e4161]: + - code + - 'row "7 + ## Candidate Selection And Guardrails" [ref=e4162]': + - cell [ref=e4163] + - cell "7" [ref=e4164]: "7" + - cell [ref=e4165] + - cell "+" [ref=e4166]: + - generic [ref=e4167]: + + - cell "## Candidate Selection And Guardrails" [ref=e4168]: + - code [ref=e4169]: "## Candidate Selection And Guardrails" + - row "8 +" [ref=e4170]: + - cell [ref=e4171] + - cell "8" [ref=e4172]: "8" + - cell [ref=e4173] + - cell "+" [ref=e4174]: + - generic [ref=e4175]: + + - cell [ref=e4176]: + - code + - 'row "9 + - [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." [ref=e4177]': + - cell [ref=e4178] + - cell "9" [ref=e4179]: "9" + - cell [ref=e4180] + - cell "+" [ref=e4181]: + - generic [ref=e4182]: + + - 'cell "- [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." [ref=e4183]': + - code [ref=e4184]: "- [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." + - 'row "10 + - [x] CHK002 No `specs/358-*` package existed before this prep." [ref=e4185]': + - cell [ref=e4186] + - cell "10" [ref=e4187]: "10" + - cell [ref=e4188] + - cell "+" [ref=e4189]: + - generic [ref=e4190]: + + - 'cell "- [x] CHK002 No `specs/358-*` package existed before this prep." [ref=e4191]': + - code [ref=e4192]: "- [x] CHK002 No `specs/358-*` package existed before this prep." + - 'row "11 + - [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." [ref=e4193]': + - cell [ref=e4194] + - cell "11" [ref=e4195]: "11" + - cell [ref=e4196] + - cell "+" [ref=e4197]: + - generic [ref=e4198]: + + - 'cell "- [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." [ref=e4199]': + - code [ref=e4200]: "- [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." + - 'row "12 + - [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." [ref=e4201]': + - cell [ref=e4202] + - cell "12" [ref=e4203]: "12" + - cell [ref=e4204] + - cell "+" [ref=e4205]: + - generic [ref=e4206]: + + - 'cell "- [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." [ref=e4207]': + - code [ref=e4208]: "- [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." + - 'row "13 + - [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." [ref=e4209]': + - cell [ref=e4210] + - cell "13" [ref=e4211]: "13" + - cell [ref=e4212] + - cell "+" [ref=e4213]: + - generic [ref=e4214]: + + - 'cell "- [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." [ref=e4215]': + - code [ref=e4216]: "- [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." + - row "14 +" [ref=e4217]: + - cell [ref=e4218] + - cell "14" [ref=e4219]: "14" + - cell [ref=e4220] + - cell "+" [ref=e4221]: + - generic [ref=e4222]: + + - cell [ref=e4223]: + - code + - 'row "15 + ## Required Prep Artifacts" [ref=e4224]': + - cell [ref=e4225] + - cell "15" [ref=e4226]: "15" + - cell [ref=e4227] + - cell "+" [ref=e4228]: + - generic [ref=e4229]: + + - cell "## Required Prep Artifacts" [ref=e4230]: + - code [ref=e4231]: "## Required Prep Artifacts" + - row "16 +" [ref=e4232]: + - cell [ref=e4233] + - cell "16" [ref=e4234]: "16" + - cell [ref=e4235] + - cell "+" [ref=e4236]: + - generic [ref=e4237]: + + - cell [ref=e4238]: + - code + - 'row "17 + - [x] CHK006 `spec.md` exists and contains no template placeholders." [ref=e4239]': + - cell [ref=e4240] + - cell "17" [ref=e4241]: "17" + - cell [ref=e4242] + - cell "+" [ref=e4243]: + - generic [ref=e4244]: + + - 'cell "- [x] CHK006 `spec.md` exists and contains no template placeholders." [ref=e4245]': + - code [ref=e4246]: "- [x] CHK006 `spec.md` exists and contains no template placeholders." + - 'row "18 + - [x] CHK007 `plan.md` exists and is repo-aware." [ref=e4247]': + - cell [ref=e4248] + - cell "18" [ref=e4249]: "18" + - cell [ref=e4250] + - cell "+" [ref=e4251]: + - generic [ref=e4252]: + + - 'cell "- [x] CHK007 `plan.md` exists and is repo-aware." [ref=e4253]': + - code [ref=e4254]: "- [x] CHK007 `plan.md` exists and is repo-aware." + - 'row "19 + - [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." [ref=e4255]': + - cell [ref=e4256] + - cell "19" [ref=e4257]: "19" + - cell [ref=e4258] + - cell "+" [ref=e4259]: + - generic [ref=e4260]: + + - 'cell "- [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." [ref=e4261]': + - code [ref=e4262]: "- [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." + - row "20 + - [x] CHK009 This checklist exists." [ref=e4263]: + - cell [ref=e4264] + - cell "20" [ref=e4265]: "20" + - cell [ref=e4266] + - cell "+" [ref=e4267]: + - generic [ref=e4268]: + + - cell "- [x] CHK009 This checklist exists." [ref=e4269]: + - code [ref=e4270]: "- [x] CHK009 This checklist exists." + - row "21 +" [ref=e4271]: + - cell [ref=e4272] + - cell "21" [ref=e4273]: "21" + - cell [ref=e4274] + - cell "+" [ref=e4275]: + - generic [ref=e4276]: + + - cell [ref=e4277]: + - code + - 'row "22 + ## Spec Quality" [ref=e4278]': + - cell [ref=e4279] + - cell "22" [ref=e4280]: "22" + - cell [ref=e4281] + - cell "+" [ref=e4282]: + - generic [ref=e4283]: + + - cell "## Spec Quality" [ref=e4284]: + - code [ref=e4285]: "## Spec Quality" + - row "23 +" [ref=e4286]: + - cell [ref=e4287] + - cell "23" [ref=e4288]: "23" + - cell [ref=e4289] + - cell "+" [ref=e4290]: + - generic [ref=e4291]: + + - cell [ref=e4292]: + - code + - row "24 + - [x] CHK010 Spec Candidate Check is completed." [ref=e4293]: + - cell [ref=e4294] + - cell "24" [ref=e4295]: "24" + - cell [ref=e4296] + - cell "+" [ref=e4297]: + - generic [ref=e4298]: + + - cell "- [x] CHK010 Spec Candidate Check is completed." [ref=e4299]: + - code [ref=e4300]: "- [x] CHK010 Spec Candidate Check is completed." + - 'row "25 + - [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." [ref=e4301]': + - cell [ref=e4302] + - cell "25" [ref=e4303]: "25" + - cell [ref=e4304] + - cell "+" [ref=e4305]: + - generic [ref=e4306]: + + - 'cell "- [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." [ref=e4307]': + - code [ref=e4308]: "- [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." + - row "26 + - [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." [ref=e4309]: + - cell [ref=e4310] + - cell "26" [ref=e4311]: "26" + - cell [ref=e4312] + - cell "+" [ref=e4313]: + - generic [ref=e4314]: + + - cell "- [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." [ref=e4315]: + - code [ref=e4316]: "- [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." + - row "27 + - [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." [ref=e4317]: + - cell [ref=e4318] + - cell "27" [ref=e4319]: "27" + - cell [ref=e4320] + - cell "+" [ref=e4321]: + - generic [ref=e4322]: + + - cell "- [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." [ref=e4323]: + - code [ref=e4324]: "- [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." + - row "28 + - [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." [ref=e4325]: + - cell [ref=e4326] + - cell "28" [ref=e4327]: "28" + - cell [ref=e4328] + - cell "+" [ref=e4329]: + - generic [ref=e4330]: + + - cell "- [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." [ref=e4331]: + - code [ref=e4332]: "- [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." + - row "29 +" [ref=e4333]: + - cell [ref=e4334] + - cell "29" [ref=e4335]: "29" + - cell [ref=e4336] + - cell "+" [ref=e4337]: + - generic [ref=e4338]: + + - cell [ref=e4339]: + - code + - 'row "30 + ## Plan / Task Alignment" [ref=e4340]': + - cell [ref=e4341] + - cell "30" [ref=e4342]: "30" + - cell [ref=e4343] + - cell "+" [ref=e4344]: + - generic [ref=e4345]: + + - cell "## Plan / Task Alignment" [ref=e4346]: + - code [ref=e4347]: "## Plan / Task Alignment" + - row "31 +" [ref=e4348]: + - cell [ref=e4349] + - cell "31" [ref=e4350]: "31" + - cell [ref=e4351] + - cell "+" [ref=e4352]: + - generic [ref=e4353]: + + - cell [ref=e4354]: + - code + - row "32 + - [x] CHK015 The plan identifies the actual repo surfaces likely to change." [ref=e4355]: + - cell [ref=e4356] + - cell "32" [ref=e4357]: "32" + - cell [ref=e4358] + - cell "+" [ref=e4359]: + - generic [ref=e4360]: + + - cell "- [x] CHK015 The plan identifies the actual repo surfaces likely to change." [ref=e4361]: + - code [ref=e4362]: "- [x] CHK015 The plan identifies the actual repo surfaces likely to change." + - row "33 + - [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." [ref=e4363]: + - cell [ref=e4364] + - cell "33" [ref=e4365]: "33" + - cell [ref=e4366] + - cell "+" [ref=e4367]: + - generic [ref=e4368]: + + - cell "- [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." [ref=e4369]: + - code [ref=e4370]: "- [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." + - row "34 + - [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." [ref=e4371]: + - cell [ref=e4372] + - cell "34" [ref=e4373]: "34" + - cell [ref=e4374] + - cell "+" [ref=e4375]: + - generic [ref=e4376]: + + - cell "- [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." [ref=e4377]: + - code [ref=e4378]: "- [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." + - row "35 + - [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." [ref=e4379]: + - cell [ref=e4380] + - cell "35" [ref=e4381]: "35" + - cell [ref=e4382] + - cell "+" [ref=e4383]: + - generic [ref=e4384]: + + - cell "- [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." [ref=e4385]: + - code [ref=e4386]: "- [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." + - row "36 + - [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." [ref=e4387]: + - cell [ref=e4388] + - cell "36" [ref=e4389]: "36" + - cell [ref=e4390] + - cell "+" [ref=e4391]: + - generic [ref=e4392]: + + - cell "- [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." [ref=e4393]: + - code [ref=e4394]: "- [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." + - row "37 +" [ref=e4395]: + - cell [ref=e4396] + - cell "37" [ref=e4397]: "37" + - cell [ref=e4398] + - cell "+" [ref=e4399]: + - generic [ref=e4400]: + + - cell [ref=e4401]: + - code + - 'row "38 + ## UI / Monitoring Coverage" [ref=e4402]': + - cell [ref=e4403] + - cell "38" [ref=e4404]: "38" + - cell [ref=e4405] + - cell "+" [ref=e4406]: + - generic [ref=e4407]: + + - cell "## UI / Monitoring Coverage" [ref=e4408]: + - code [ref=e4409]: "## UI / Monitoring Coverage" + - row "39 +" [ref=e4410]: + - cell [ref=e4411] + - cell "39" [ref=e4412]: "39" + - cell [ref=e4413] + - cell "+" [ref=e4414]: + - generic [ref=e4415]: + + - cell [ref=e4416]: + - code + - row "40 + - [x] CHK020 UI Surface Impact is completed and does not claim no-impact." [ref=e4417]: + - cell [ref=e4418] + - cell "40" [ref=e4419]: "40" + - cell [ref=e4420] + - cell "+" [ref=e4421]: + - generic [ref=e4422]: + + - cell "- [x] CHK020 UI Surface Impact is completed and does not claim no-impact." [ref=e4423]: + - code [ref=e4424]: "- [x] CHK020 UI Surface Impact is completed and does not claim no-impact." + - row "41 + - [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." [ref=e4425]: + - cell [ref=e4426] + - cell "41" [ref=e4427]: "41" + - cell [ref=e4428] + - cell "+" [ref=e4429]: + - generic [ref=e4430]: + + - cell "- [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." [ref=e4431]: + - code [ref=e4432]: "- [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." + - row "42 + - [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." [ref=e4433]: + - cell [ref=e4434] + - cell "42" [ref=e4435]: "42" + - cell [ref=e4436] + - cell "+" [ref=e4437]: + - generic [ref=e4438]: + + - cell "- [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." [ref=e4439]: + - code [ref=e4440]: "- [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." + - row "43 + - [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." [ref=e4441]: + - cell [ref=e4442] + - cell "43" [ref=e4443]: "43" + - cell [ref=e4444] + - cell "+" [ref=e4445]: + - generic [ref=e4446]: + + - cell "- [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." [ref=e4447]: + - code [ref=e4448]: "- [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." + - row "44 +" [ref=e4449]: + - cell [ref=e4450] + - cell "44" [ref=e4451]: "44" + - cell [ref=e4452] + - cell "+" [ref=e4453]: + - generic [ref=e4454]: + + - cell [ref=e4455]: + - code + - 'row "45 + ## Test Governance" [ref=e4456]': + - cell [ref=e4457] + - cell "45" [ref=e4458]: "45" + - cell [ref=e4459] + - cell "+" [ref=e4460]: + - generic [ref=e4461]: + + - cell "## Test Governance" [ref=e4462]: + - code [ref=e4463]: "## Test Governance" + - row "46 +" [ref=e4464]: + - cell [ref=e4465] + - cell "46" [ref=e4466]: "46" + - cell [ref=e4467] + - cell "+" [ref=e4468]: + - generic [ref=e4469]: + + - cell [ref=e4470]: + - code + - 'row "47 + - [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." [ref=e4471]': + - cell [ref=e4472] + - cell "47" [ref=e4473]: "47" + - cell [ref=e4474] + - cell "+" [ref=e4475]: + - generic [ref=e4476]: + + - 'cell "- [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." [ref=e4477]': + - code [ref=e4478]: "- [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." + - row "48 + - [x] CHK025 No broad new browser or heavy-governance family is introduced." [ref=e4479]: + - cell [ref=e4480] + - cell "48" [ref=e4481]: "48" + - cell [ref=e4482] + - cell "+" [ref=e4483]: + - generic [ref=e4484]: + + - cell "- [x] CHK025 No broad new browser or heavy-governance family is introduced." [ref=e4485]: + - code [ref=e4486]: "- [x] CHK025 No broad new browser or heavy-governance family is introduced." + - row "49 + - [x] CHK026 Planned validation commands are explicit and file-scoped." [ref=e4487]: + - cell [ref=e4488] + - cell "49" [ref=e4489]: "49" + - cell [ref=e4490] + - cell "+" [ref=e4491]: + - generic [ref=e4492]: + + - cell "- [x] CHK026 Planned validation commands are explicit and file-scoped." [ref=e4493]: + - code [ref=e4494]: "- [x] CHK026 Planned validation commands are explicit and file-scoped." + - row "50 +" [ref=e4495]: + - cell [ref=e4496] + - cell "50" [ref=e4497]: "50" + - cell [ref=e4498] + - cell "+" [ref=e4499]: + - generic [ref=e4500]: + + - cell [ref=e4501]: + - code + - 'row "51 + ## Readiness Gate Outcome" [ref=e4502]': + - cell [ref=e4503] + - cell "51" [ref=e4504]: "51" + - cell [ref=e4505] + - cell "+" [ref=e4506]: + - generic [ref=e4507]: + + - cell "## Readiness Gate Outcome" [ref=e4508]: + - code [ref=e4509]: "## Readiness Gate Outcome" + - row "52 +" [ref=e4510]: + - cell [ref=e4511] + - cell "52" [ref=e4512]: "52" + - cell [ref=e4513] + - cell "+" [ref=e4514]: + - generic [ref=e4515]: + + - cell [ref=e4516]: + - code + - row "53 + - [x] CHK027 Candidate Selection Gate passes." [ref=e4517]: + - cell [ref=e4518] + - cell "53" [ref=e4519]: "53" + - cell [ref=e4520] + - cell "+" [ref=e4521]: + - generic [ref=e4522]: + + - cell "- [x] CHK027 Candidate Selection Gate passes." [ref=e4523]: + - code [ref=e4524]: "- [x] CHK027 Candidate Selection Gate passes." + - row "54 + - [x] CHK028 Spec Readiness Gate passes." [ref=e4525]: + - cell [ref=e4526] + - cell "54" [ref=e4527]: "54" + - cell [ref=e4528] + - cell "+" [ref=e4529]: + - generic [ref=e4530]: + + - cell "- [x] CHK028 Spec Readiness Gate passes." [ref=e4531]: + - code [ref=e4532]: "- [x] CHK028 Spec Readiness Gate passes." + - row "55 + - [x] CHK029 Runtime implementation has not started in this preparation step." [ref=e4533]: + - cell [ref=e4534] + - cell "55" [ref=e4535]: "55" + - cell [ref=e4536] + - cell "+" [ref=e4537]: + - generic [ref=e4538]: + + - cell "- [x] CHK029 Runtime implementation has not started in this preparation step." [ref=e4539]: + - code [ref=e4540]: "- [x] CHK029 Runtime implementation has not started in this preparation step." + - row "56 + - [x] CHK030 Recommended next step is implementation, not more prep." [ref=e4541]: + - cell [ref=e4542] + - cell "56" [ref=e4543]: "56" + - cell [ref=e4544] + - cell "+" [ref=e4545]: + - generic [ref=e4546]: + + - cell "- [x] CHK030 Recommended next step is implementation, not more prep." [ref=e4547]: + - code [ref=e4548]: "- [x] CHK030 Recommended next step is implementation, not more prep." + - row "57 +" [ref=e4549]: + - cell [ref=e4550] + - cell "57" [ref=e4551]: "57" + - cell [ref=e4552] + - cell "+" [ref=e4553]: + - generic [ref=e4554]: + + - cell [ref=e4555]: + - code + - 'row "58 + ## Review Outcome" [ref=e4556]': + - cell [ref=e4557] + - cell "58" [ref=e4558]: "58" + - cell [ref=e4559] + - cell "+" [ref=e4560]: + - generic [ref=e4561]: + + - cell "## Review Outcome" [ref=e4562]: + - code [ref=e4563]: "## Review Outcome" + - row "59 +" [ref=e4564]: + - cell [ref=e4565] + - cell "59" [ref=e4566]: "59" + - cell [ref=e4567] + - cell "+" [ref=e4568]: + - generic [ref=e4569]: + + - cell [ref=e4570]: + - code + - 'row "60 + - [x] Outcome class: acceptable-special-case" [ref=e4571]': + - cell [ref=e4572] + - cell "60" [ref=e4573]: "60" + - cell [ref=e4574] + - cell "+" [ref=e4575]: + - generic [ref=e4576]: + + - 'cell "- [x] Outcome class: acceptable-special-case" [ref=e4577]': + - code [ref=e4578]: "- [x] Outcome class: acceptable-special-case" + - 'row "61 + - [x] Workflow outcome: keep" [ref=e4579]': + - cell [ref=e4580] + - cell "61" [ref=e4581]: "61" + - cell [ref=e4582] + - cell "+" [ref=e4583]: + - generic [ref=e4584]: + + - 'cell "- [x] Workflow outcome: keep" [ref=e4585]': + - code [ref=e4586]: "- [x] Workflow outcome: keep" + - 'row "62 + - [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" [ref=e4587]': + - cell [ref=e4588] + - cell "62" [ref=e4589]: "62" + - cell [ref=e4590] + - cell "+" [ref=e4591]: + - generic [ref=e4592]: + + - 'cell "- [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" [ref=e4593]': + - code [ref=e4594]: "- [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" + - 'row "63 + - [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" [ref=e4595]': + - cell [ref=e4596] + - cell "63" [ref=e4597]: "63" + - cell [ref=e4598] + - cell "+" [ref=e4599]: + - generic [ref=e4600]: + + - 'cell "- [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" [ref=e4601]': + - code [ref=e4602]: "- [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" + - 'row "64 + - [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" [ref=e4603]': + - cell [ref=e4604] + - cell "64" [ref=e4605]: "64" + - cell [ref=e4606] + - cell "+" [ref=e4607]: + - generic [ref=e4608]: + + - 'cell "- [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" [ref=e4609]': + - code [ref=e4610]: "- [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" + - generic [ref=e4611]: + - 'heading "209 209 Änderungen: 209 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/plan.md Normale Datei Datei anzeigen" [level=4] [ref=e4612]': + - generic [ref=e4613]: + - button [ref=e4614] [cursor=pointer]: + - img [ref=e4615] + - generic [ref=e4617]: + - text: "209" + - 'generic "209 Änderungen: 209 Ergänzungen und 0 Löschungen" [ref=e4618]' + - generic [ref=e4620]: + - link "specs/358-operationrun-queue-truth-foundation/plan.md" [ref=e4621] [cursor=pointer]: + - /url: "#diff-4aa32f063db4833018cc45ff1b404fbf79327413" + - button [ref=e4622] [cursor=pointer]: + - img [ref=e4623] + - generic [ref=e4626]: Normale Datei + - link "Datei anzeigen" [ref=e4628] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/plan.md + - table [ref=e4631]: + - rowgroup [ref=e4638]: + - row "@ -0,0 +1,209 @@" [ref=e4639]: + - cell [ref=e4640] + - cell [ref=e4641] + - cell [ref=e4642] + - cell "@ -0,0 +1,209 @@" [ref=e4643]: + - code [ref=e4644]: "@ -0,0 +1,209 @@" + - 'row "1 + # Implementation Plan: OperationRun Queue Truth Foundation" [ref=e4645]': + - cell [ref=e4646] + - cell "1" [ref=e4647]: "1" + - cell [ref=e4648] + - cell "+" [ref=e4649]: + - generic [ref=e4650]: + + - 'cell "# Implementation Plan: OperationRun Queue Truth Foundation" [ref=e4651]': + - code [ref=e4652]: "# Implementation Plan: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e4653]: + - cell [ref=e4654] + - cell "2" [ref=e4655]: "2" + - cell [ref=e4656] + - cell "+" [ref=e4657]: + - generic [ref=e4658]: + + - cell [ref=e4659]: + - code + - 'row "3 + **Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4660]': + - cell [ref=e4661] + - cell "3" [ref=e4662]: "3" + - cell [ref=e4663] + - cell "+" [ref=e4664]: + - generic [ref=e4665]: + + - 'cell "**Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4666]': + - code [ref=e4667]: "**Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" + - 'row "4 + **Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4668]': + - cell [ref=e4669] + - cell "4" [ref=e4670]: "4" + - cell [ref=e4671] + - cell "+" [ref=e4672]: + - generic [ref=e4673]: + + - 'cell "**Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4674]': + - code [ref=e4675]: "**Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" + - row "5 +" [ref=e4676]: + - cell [ref=e4677] + - cell "5" [ref=e4678]: "5" + - cell [ref=e4679] + - cell "+" [ref=e4680]: + - generic [ref=e4681]: + + - cell [ref=e4682]: + - code + - 'row "6 + ## Summary" [ref=e4683]': + - cell [ref=e4684] + - cell "6" [ref=e4685]: "6" + - cell [ref=e4686] + - cell "+" [ref=e4687]: + - generic [ref=e4688]: + + - cell "## Summary" [ref=e4689]: + - code [ref=e4690]: "## Summary" + - row "7 +" [ref=e4691]: + - cell [ref=e4692] + - cell "7" [ref=e4693]: "7" + - cell [ref=e4694] + - cell "+" [ref=e4695]: + - generic [ref=e4696]: + + - cell [ref=e4697]: + - code + - 'row "8 + Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." [ref=e4698]': + - cell [ref=e4699] + - cell "8" [ref=e4700]: "8" + - cell [ref=e4701] + - cell "+" [ref=e4702]: + - generic [ref=e4703]: + + - 'cell "Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." [ref=e4704]': + - code [ref=e4705]: "Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." + - row "9 +" [ref=e4706]: + - cell [ref=e4707] + - cell "9" [ref=e4708]: "9" + - cell [ref=e4709] + - cell "+" [ref=e4710]: + - generic [ref=e4711]: + + - cell [ref=e4712]: + - code + - row "10 + The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code." [ref=e4713]: + - cell [ref=e4714] + - cell "10" [ref=e4715]: "10" + - cell [ref=e4716] + - cell "+" [ref=e4717]: + - generic [ref=e4718]: + + - cell "The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code." [ref=e4719]: + - code [ref=e4720]: The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code. + - row "11 +" [ref=e4721]: + - cell [ref=e4722] + - cell "11" [ref=e4723]: "11" + - cell [ref=e4724] + - cell "+" [ref=e4725]: + - generic [ref=e4726]: + + - cell [ref=e4727]: + - code + - 'row "12 + ## Technical Context" [ref=e4728]': + - cell [ref=e4729] + - cell "12" [ref=e4730]: "12" + - cell [ref=e4731] + - cell "+" [ref=e4732]: + - generic [ref=e4733]: + + - cell "## Technical Context" [ref=e4734]: + - code [ref=e4735]: "## Technical Context" + - row "13 +" [ref=e4736]: + - cell [ref=e4737] + - cell "13" [ref=e4738]: "13" + - cell [ref=e4739] + - cell "+" [ref=e4740]: + - generic [ref=e4741]: + + - cell [ref=e4742]: + - code + - 'row "14 + **Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" [ref=e4743]': + - cell [ref=e4744] + - cell "14" [ref=e4745]: "14" + - cell [ref=e4746] + - cell "+" [ref=e4747]: + - generic [ref=e4748]: + + - 'cell "**Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" [ref=e4749]': + - code [ref=e4750]: "**Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" + - 'row "15 + **Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" [ref=e4751]': + - cell [ref=e4752] + - cell "15" [ref=e4753]: "15" + - cell [ref=e4754] + - cell "+" [ref=e4755]: + - generic [ref=e4756]: + + - 'cell "**Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" [ref=e4757]': + - code [ref=e4758]: "**Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" + - 'row "16 + **Storage**: PostgreSQL `operation_runs`; no schema change planned" [ref=e4759]': + - cell [ref=e4760] + - cell "16" [ref=e4761]: "16" + - cell [ref=e4762] + - cell "+" [ref=e4763]: + - generic [ref=e4764]: + + - 'cell "**Storage**: PostgreSQL `operation_runs`; no schema change planned" [ref=e4765]': + - code [ref=e4766]: "**Storage**: PostgreSQL `operation_runs`; no schema change planned" + - 'row "17 + **Testing**: Pest Unit + Feature" [ref=e4767]': + - cell [ref=e4768] + - cell "17" [ref=e4769]: "17" + - cell [ref=e4770] + - cell "+" [ref=e4771]: + - generic [ref=e4772]: + + - 'cell "**Testing**: Pest Unit + Feature" [ref=e4773]': + - code [ref=e4774]: "**Testing**: Pest Unit + Feature" + - 'row "18 + **Validation Lanes**: fast-feedback, confidence" [ref=e4775]': + - cell [ref=e4776] + - cell "18" [ref=e4777]: "18" + - cell [ref=e4778] + - cell "+" [ref=e4779]: + - generic [ref=e4780]: + + - 'cell "**Validation Lanes**: fast-feedback, confidence" [ref=e4781]': + - code [ref=e4782]: "**Validation Lanes**: fast-feedback, confidence" + - 'row "19 + **Target Platform**: Laravel monolith in `apps/platform`" [ref=e4783]': + - cell [ref=e4784] + - cell "19" [ref=e4785]: "19" + - cell [ref=e4786] + - cell "+" [ref=e4787]: + - generic [ref=e4788]: + + - 'cell "**Target Platform**: Laravel monolith in `apps/platform`" [ref=e4789]': + - code [ref=e4790]: "**Target Platform**: Laravel monolith in `apps/platform`" + - 'row "20 + **Project Type**: web application" [ref=e4791]': + - cell [ref=e4792] + - cell "20" [ref=e4793]: "20" + - cell [ref=e4794] + - cell "+" [ref=e4795]: + - generic [ref=e4796]: + + - 'cell "**Project Type**: web application" [ref=e4797]': + - code [ref=e4798]: "**Project Type**: web application" + - 'row "21 + **Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" [ref=e4799]': + - cell [ref=e4800] + - cell "21" [ref=e4801]: "21" + - cell [ref=e4802] + - cell "+" [ref=e4803]: + - generic [ref=e4804]: + + - 'cell "**Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" [ref=e4805]': + - code [ref=e4806]: "**Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" + - 'row "22 + **Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" [ref=e4807]': + - cell [ref=e4808] + - cell "22" [ref=e4809]: "22" + - cell [ref=e4810] + - cell "+" [ref=e4811]: + - generic [ref=e4812]: + + - 'cell "**Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" [ref=e4813]': + - code [ref=e4814]: "**Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" + - 'row "23 + **Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" [ref=e4815]': + - cell [ref=e4816] + - cell "23" [ref=e4817]: "23" + - cell [ref=e4818] + - cell "+" [ref=e4819]: + - generic [ref=e4820]: + + - 'cell "**Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" [ref=e4821]': + - code [ref=e4822]: "**Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" + - row "24 +" [ref=e4823]: + - cell [ref=e4824] + - cell "24" [ref=e4825]: "24" + - cell [ref=e4826] + - cell "+" [ref=e4827]: + - generic [ref=e4828]: + + - cell [ref=e4829]: + - code + - 'row "25 + ## Likely Affected Repo Surfaces" [ref=e4830]': + - cell [ref=e4831] + - cell "25" [ref=e4832]: "25" + - cell [ref=e4833] + - cell "+" [ref=e4834]: + - generic [ref=e4835]: + + - cell "## Likely Affected Repo Surfaces" [ref=e4836]: + - code [ref=e4837]: "## Likely Affected Repo Surfaces" + - row "26 +" [ref=e4838]: + - cell [ref=e4839] + - cell "26" [ref=e4840]: "26" + - cell [ref=e4841] + - cell "+" [ref=e4842]: + - generic [ref=e4843]: + + - cell [ref=e4844]: + - code + - 'row "27 + - `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" [ref=e4845]': + - cell [ref=e4846] + - cell "27" [ref=e4847]: "27" + - cell [ref=e4848] + - cell "+" [ref=e4849]: + - generic [ref=e4850]: + + - 'cell "- `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" [ref=e4851]': + - code [ref=e4852]: "- `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" + - 'row "28 + - `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" [ref=e4853]': + - cell [ref=e4854] + - cell "28" [ref=e4855]: "28" + - cell [ref=e4856] + - cell "+" [ref=e4857]: + - generic [ref=e4858]: + + - 'cell "- `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" [ref=e4859]': + - code [ref=e4860]: "- `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" + - 'row "29 + - `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" [ref=e4861]': + - cell [ref=e4862] + - cell "29" [ref=e4863]: "29" + - cell [ref=e4864] + - cell "+" [ref=e4865]: + - generic [ref=e4866]: + + - 'cell "- `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" [ref=e4867]': + - code [ref=e4868]: "- `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" + - 'row "30 + - `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" [ref=e4869]': + - cell [ref=e4870] + - cell "30" [ref=e4871]: "30" + - cell [ref=e4872] + - cell "+" [ref=e4873]: + - generic [ref=e4874]: + + - 'cell "- `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" [ref=e4875]': + - code [ref=e4876]: "- `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" + - 'row "31 + - `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" [ref=e4877]': + - cell [ref=e4878] + - cell "31" [ref=e4879]: "31" + - cell [ref=e4880] + - cell "+" [ref=e4881]: + - generic [ref=e4882]: + + - 'cell "- `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" [ref=e4883]': + - code [ref=e4884]: "- `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" + - 'row "32 + - `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" [ref=e4885]': + - cell [ref=e4886] + - cell "32" [ref=e4887]: "32" + - cell [ref=e4888] + - cell "+" [ref=e4889]: + - generic [ref=e4890]: + + - 'cell "- `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" [ref=e4891]': + - code [ref=e4892]: "- `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" + - 'row "33 + - `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" [ref=e4893]': + - cell [ref=e4894] + - cell "33" [ref=e4895]: "33" + - cell [ref=e4896] + - cell "+" [ref=e4897]: + - generic [ref=e4898]: + + - 'cell "- `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" [ref=e4899]': + - code [ref=e4900]: "- `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" + - 'row "34 + - `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" [ref=e4901]': + - cell [ref=e4902] + - cell "34" [ref=e4903]: "34" + - cell [ref=e4904] + - cell "+" [ref=e4905]: + - generic [ref=e4906]: + + - 'cell "- `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" [ref=e4907]': + - code [ref=e4908]: "- `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" + - 'row "35 + - `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" [ref=e4909]': + - cell [ref=e4910] + - cell "35" [ref=e4911]: "35" + - cell [ref=e4912] + - cell "+" [ref=e4913]: + - generic [ref=e4914]: + + - 'cell "- `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" [ref=e4915]': + - code [ref=e4916]: "- `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" + - row "36 + - focused tests under:" [ref=e4917]: + - cell [ref=e4918] + - cell "36" [ref=e4919]: "36" + - cell [ref=e4920] + - cell "+" [ref=e4921]: + - generic [ref=e4922]: + + - cell "- focused tests under:" [ref=e4923]: + - code [ref=e4924]: "- focused tests under:" + - 'row "37 + - `apps/platform/tests/Unit/Support/OpsUx/`" [ref=e4925]': + - cell [ref=e4926] + - cell "37" [ref=e4927]: "37" + - cell [ref=e4928] + - cell "+" [ref=e4929]: + - generic [ref=e4930]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/`" [ref=e4931]': + - code [ref=e4932]: "- `apps/platform/tests/Unit/Support/OpsUx/`" + - 'row "38 + - `apps/platform/tests/Feature/OpsUx/`" [ref=e4933]': + - cell [ref=e4934] + - cell "38" [ref=e4935]: "38" + - cell [ref=e4936] + - cell "+" [ref=e4937]: + - generic [ref=e4938]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/`" [ref=e4939]': + - code [ref=e4940]: "- `apps/platform/tests/Feature/OpsUx/`" + - 'row "39 + - `apps/platform/tests/Feature/Monitoring/`" [ref=e4941]': + - cell [ref=e4942] + - cell "39" [ref=e4943]: "39" + - cell [ref=e4944] + - cell "+" [ref=e4945]: + - generic [ref=e4946]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/`" [ref=e4947]': + - code [ref=e4948]: "- `apps/platform/tests/Feature/Monitoring/`" + - 'row "40 + - `apps/platform/tests/Feature/Filament/`" [ref=e4949]': + - cell [ref=e4950] + - cell "40" [ref=e4951]: "40" + - cell [ref=e4952] + - cell "+" [ref=e4953]: + - generic [ref=e4954]: + + - 'cell "- `apps/platform/tests/Feature/Filament/`" [ref=e4955]': + - code [ref=e4956]: "- `apps/platform/tests/Feature/Filament/`" + - 'row "41 + - `apps/platform/tests/Feature/Operations/`" [ref=e4957]': + - cell [ref=e4958] + - cell "41" [ref=e4959]: "41" + - cell [ref=e4960] + - cell "+" [ref=e4961]: + - generic [ref=e4962]: + + - 'cell "- `apps/platform/tests/Feature/Operations/`" [ref=e4963]': + - code [ref=e4964]: "- `apps/platform/tests/Feature/Operations/`" + - row "42 +" [ref=e4965]: + - cell [ref=e4966] + - cell "42" [ref=e4967]: "42" + - cell [ref=e4968] + - cell "+" [ref=e4969]: + - generic [ref=e4970]: + + - cell [ref=e4971]: + - code + - 'row "43 + ## UI / Surface Guardrail Plan" [ref=e4972]': + - cell [ref=e4973] + - cell "43" [ref=e4974]: "43" + - cell [ref=e4975] + - cell "+" [ref=e4976]: + - generic [ref=e4977]: + + - cell "## UI / Surface Guardrail Plan" [ref=e4978]: + - code [ref=e4979]: "## UI / Surface Guardrail Plan" + - row "44 +" [ref=e4980]: + - cell [ref=e4981] + - cell "44" [ref=e4982]: "44" + - cell [ref=e4983] + - cell "+" [ref=e4984]: + - generic [ref=e4985]: + + - cell [ref=e4986]: + - code + - 'row "45 + - **Guardrail scope**: existing operator-facing monitoring surfaces only" [ref=e4987]': + - cell [ref=e4988] + - cell "45" [ref=e4989]: "45" + - cell [ref=e4990] + - cell "+" [ref=e4991]: + - generic [ref=e4992]: + + - 'cell "- **Guardrail scope**: existing operator-facing monitoring surfaces only" [ref=e4993]': + - code [ref=e4994]: "- **Guardrail scope**: existing operator-facing monitoring surfaces only" + - row "46 + - **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" [ref=e4995]: + - cell [ref=e4996] + - cell "46" [ref=e4997]: "46" + - cell [ref=e4998] + - cell "+" [ref=e4999]: + - generic [ref=e5000]: + + - cell "- **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" [ref=e5001]: + - code [ref=e5002]: "- **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" + - row "47 + - tenant shell activity hint" [ref=e5003]: + - cell [ref=e5004] + - cell "47" [ref=e5005]: "47" + - cell [ref=e5006] + - cell "+" [ref=e5007]: + - generic [ref=e5008]: + + - cell "- tenant shell activity hint" [ref=e5009]: + - code [ref=e5010]: "- tenant shell activity hint" + - 'row "48 + - `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" [ref=e5011]': + - cell [ref=e5012] + - cell "48" [ref=e5013]: "48" + - cell [ref=e5014] + - cell "+" [ref=e5015]: + - generic [ref=e5016]: + + - 'cell "- `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" [ref=e5017]': + - code [ref=e5018]: "- `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" + - 'row "49 + - `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e5019]': + - cell [ref=e5020] + - cell "49" [ref=e5021]: "49" + - cell [ref=e5022] + - cell "+" [ref=e5023]: + - generic [ref=e5024]: + + - 'cell "- `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e5025]': + - code [ref=e5026]: "- `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" + - 'row "50 + - **No-impact class, if applicable**: N/A" [ref=e5027]': + - cell [ref=e5028] + - cell "50" [ref=e5029]: "50" + - cell [ref=e5030] + - cell "+" [ref=e5031]: + - generic [ref=e5032]: + + - 'cell "- **No-impact class, if applicable**: N/A" [ref=e5033]': + - code [ref=e5034]: "- **No-impact class, if applicable**: N/A" + - 'row "51 + - **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" [ref=e5035]': + - cell [ref=e5036] + - cell "51" [ref=e5037]: "51" + - cell [ref=e5038] + - cell "+" [ref=e5039]: + - generic [ref=e5040]: + + - 'cell "- **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" [ref=e5041]': + - code [ref=e5042]: "- **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" + - 'row "52 + - **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" [ref=e5043]': + - cell [ref=e5044] + - cell "52" [ref=e5045]: "52" + - cell [ref=e5046] + - cell "+" [ref=e5047]: + - generic [ref=e5048]: + + - 'cell "- **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" [ref=e5049]': + - code [ref=e5050]: "- **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" + - 'row "53 + - **State layers in scope**: shell, page, detail" [ref=e5051]': + - cell [ref=e5052] + - cell "53" [ref=e5053]: "53" + - cell [ref=e5054] + - cell "+" [ref=e5055]: + - generic [ref=e5056]: + + - 'cell "- **State layers in scope**: shell, page, detail" [ref=e5057]': + - code [ref=e5058]: "- **State layers in scope**: shell, page, detail" + - 'row "54 + - **Audience modes in scope**: operator-MSP, support-platform" [ref=e5059]': + - cell [ref=e5060] + - cell "54" [ref=e5061]: "54" + - cell [ref=e5062] + - cell "+" [ref=e5063]: + - generic [ref=e5064]: + + - 'cell "- **Audience modes in scope**: operator-MSP, support-platform" [ref=e5065]': + - code [ref=e5066]: "- **Audience modes in scope**: operator-MSP, support-platform" + - 'row "55 + - **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" [ref=e5067]': + - cell [ref=e5068] + - cell "55" [ref=e5069]: "55" + - cell [ref=e5070] + - cell "+" [ref=e5071]: + - generic [ref=e5072]: + + - 'cell "- **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" [ref=e5073]': + - code [ref=e5074]: "- **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" + - 'row "56 + - **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" [ref=e5075]': + - cell [ref=e5076] + - cell "56" [ref=e5077]: "56" + - cell [ref=e5078] + - cell "+" [ref=e5079]: + - generic [ref=e5080]: + + - 'cell "- **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" [ref=e5081]': + - code [ref=e5082]: "- **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" + - 'row "57 + - **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" [ref=e5083]': + - cell [ref=e5084] + - cell "57" [ref=e5085]: "57" + - cell [ref=e5086] + - cell "+" [ref=e5087]: + - generic [ref=e5088]: + + - 'cell "- **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" [ref=e5089]': + - code [ref=e5090]: "- **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" + - row "58 + - **Handling modes by drift class or surface**:" [ref=e5091]: + - cell [ref=e5092] + - cell "58" [ref=e5093]: "58" + - cell [ref=e5094] + - cell "+" [ref=e5095]: + - generic [ref=e5096]: + + - cell "- **Handling modes by drift class or surface**:" [ref=e5097]: + - code [ref=e5098]: "- **Handling modes by drift class or surface**:" + - 'row "59 + - contradictory stale vs queue guidance is `hard-stop-candidate`" [ref=e5099]': + - cell [ref=e5100] + - cell "59" [ref=e5101]: "59" + - cell [ref=e5102] + - cell "+" [ref=e5103]: + - generic [ref=e5104]: + + - 'cell "- contradictory stale vs queue guidance is `hard-stop-candidate`" [ref=e5105]': + - code [ref=e5106]: "- contradictory stale vs queue guidance is `hard-stop-candidate`" + - 'row "60 + - wording-only cleanup with no behavioral effect is `review-mandatory`" [ref=e5107]': + - cell [ref=e5108] + - cell "60" [ref=e5109]: "60" + - cell [ref=e5110] + - cell "+" [ref=e5111]: + - generic [ref=e5112]: + + - 'cell "- wording-only cleanup with no behavioral effect is `review-mandatory`" [ref=e5113]': + - code [ref=e5114]: "- wording-only cleanup with no behavioral effect is `review-mandatory`" + - 'row "61 + - **Repository-signal treatment**: review-mandatory" [ref=e5115]': + - cell [ref=e5116] + - cell "61" [ref=e5117]: "61" + - cell [ref=e5118] + - cell "+" [ref=e5119]: + - generic [ref=e5120]: + + - 'cell "- **Repository-signal treatment**: review-mandatory" [ref=e5121]': + - code [ref=e5122]: "- **Repository-signal treatment**: review-mandatory" + - 'row "62 + - **Special surface test profiles**: monitoring-state-page, shared-detail-family" [ref=e5123]': + - cell [ref=e5124] + - cell "62" [ref=e5125]: "62" + - cell [ref=e5126] + - cell "+" [ref=e5127]: + - generic [ref=e5128]: + + - 'cell "- **Special surface test profiles**: monitoring-state-page, shared-detail-family" [ref=e5129]': + - code [ref=e5130]: "- **Special surface test profiles**: monitoring-state-page, shared-detail-family" + - 'row "63 + - **Required tests or manual smoke**: focused unit and feature proof only" [ref=e5131]': + - cell [ref=e5132] + - cell "63" [ref=e5133]: "63" + - cell [ref=e5134] + - cell "+" [ref=e5135]: + - generic [ref=e5136]: + + - 'cell "- **Required tests or manual smoke**: focused unit and feature proof only" [ref=e5137]': + - code [ref=e5138]: "- **Required tests or manual smoke**: focused unit and feature proof only" + - 'row "64 + - **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" [ref=e5139]': + - cell [ref=e5140] + - cell "64" [ref=e5141]: "64" + - cell [ref=e5142] + - cell "+" [ref=e5143]: + - generic [ref=e5144]: + + - 'cell "- **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" [ref=e5145]': + - code [ref=e5146]: "- **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" + - 'row "65 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5147]': + - cell [ref=e5148] + - cell "65" [ref=e5149]: "65" + - cell [ref=e5150] + - cell "+" [ref=e5151]: + - generic [ref=e5152]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5153]': + - code [ref=e5154]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - 'row "66 + - **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" [ref=e5155]': + - cell [ref=e5156] + - cell "66" [ref=e5157]: "66" + - cell [ref=e5158] + - cell "+" [ref=e5159]: + - generic [ref=e5160]: + + - 'cell "- **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" [ref=e5161]': + - code [ref=e5162]: "- **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" + - row "67 +" [ref=e5163]: + - cell [ref=e5164] + - cell "67" [ref=e5165]: "67" + - cell [ref=e5166] + - cell "+" [ref=e5167]: + - generic [ref=e5168]: + + - cell [ref=e5169]: + - code + - 'row "68 + ## Shared Pattern & System Fit" [ref=e5170]': + - cell [ref=e5171] + - cell "68" [ref=e5172]: "68" + - cell [ref=e5173] + - cell "+" [ref=e5174]: + - generic [ref=e5175]: + + - cell "## Shared Pattern & System Fit" [ref=e5176]: + - code [ref=e5177]: "## Shared Pattern & System Fit" + - row "69 +" [ref=e5178]: + - cell [ref=e5179] + - cell "69" [ref=e5180]: "69" + - cell [ref=e5181] + - cell "+" [ref=e5182]: + - generic [ref=e5183]: + + - cell [ref=e5184]: + - code + - 'row "70 + - **Cross-cutting feature marker**: yes" [ref=e5185]': + - cell [ref=e5186] + - cell "70" [ref=e5187]: "70" + - cell [ref=e5188] + - cell "+" [ref=e5189]: + - generic [ref=e5190]: + + - 'cell "- **Cross-cutting feature marker**: yes" [ref=e5191]': + - code [ref=e5192]: "- **Cross-cutting feature marker**: yes" + - 'row "71 + - **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" [ref=e5193]': + - cell [ref=e5194] + - cell "71" [ref=e5195]: "71" + - cell [ref=e5196] + - cell "+" [ref=e5197]: + - generic [ref=e5198]: + + - 'cell "- **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" [ref=e5199]': + - code [ref=e5200]: "- **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" + - row "72 + - **Shared abstractions reused**:" [ref=e5201]: + - cell [ref=e5202] + - cell "72" [ref=e5203]: "72" + - cell [ref=e5204] + - cell "+" [ref=e5205]: + - generic [ref=e5206]: + + - cell "- **Shared abstractions reused**:" [ref=e5207]: + - code [ref=e5208]: "- **Shared abstractions reused**:" + - 'row "73 + - `OperationRunFreshnessState`" [ref=e5209]': + - cell [ref=e5210] + - cell "73" [ref=e5211]: "73" + - cell [ref=e5212] + - cell "+" [ref=e5213]: + - generic [ref=e5214]: + + - 'cell "- `OperationRunFreshnessState`" [ref=e5215]': + - code [ref=e5216]: "- `OperationRunFreshnessState`" + - 'row "74 + - `OperationRunProgressContract`" [ref=e5217]': + - cell [ref=e5218] + - cell "74" [ref=e5219]: "74" + - cell [ref=e5220] + - cell "+" [ref=e5221]: + - generic [ref=e5222]: + + - 'cell "- `OperationRunProgressContract`" [ref=e5223]': + - code [ref=e5224]: "- `OperationRunProgressContract`" + - 'row "75 + - `RunDurationInsights`" [ref=e5225]': + - cell [ref=e5226] + - cell "75" [ref=e5227]: "75" + - cell [ref=e5228] + - cell "+" [ref=e5229]: + - generic [ref=e5230]: + + - 'cell "- `RunDurationInsights`" [ref=e5231]': + - code [ref=e5232]: "- `RunDurationInsights`" + - 'row "76 + - `OperationUxPresenter`" [ref=e5233]': + - cell [ref=e5234] + - cell "76" [ref=e5235]: "76" + - cell [ref=e5236] + - cell "+" [ref=e5237]: + - generic [ref=e5238]: + + - 'cell "- `OperationUxPresenter`" [ref=e5239]': + - code [ref=e5240]: "- `OperationUxPresenter`" + - 'row "77 + - existing `OperationRunLinks` and detail routes" [ref=e5241]': + - cell [ref=e5242] + - cell "77" [ref=e5243]: "77" + - cell [ref=e5244] + - cell "+" [ref=e5245]: + - generic [ref=e5246]: + + - 'cell "- existing `OperationRunLinks` and detail routes" [ref=e5247]': + - code [ref=e5248]: "- existing `OperationRunLinks` and detail routes" + - 'row "78 + - **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" [ref=e5249]': + - cell [ref=e5250] + - cell "78" [ref=e5251]: "78" + - cell [ref=e5252] + - cell "+" [ref=e5253]: + - generic [ref=e5254]: + + - 'cell "- **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" [ref=e5255]': + - code [ref=e5256]: "- **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" + - 'row "79 + - **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" [ref=e5257]': + - cell [ref=e5258] + - cell "79" [ref=e5259]: "79" + - cell [ref=e5260] + - cell "+" [ref=e5261]: + - generic [ref=e5262]: + + - 'cell "- **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" [ref=e5263]': + - code [ref=e5264]: "- **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" + - 'row "80 + - **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" [ref=e5265]': + - cell [ref=e5266] + - cell "80" [ref=e5267]: "80" + - cell [ref=e5268] + - cell "+" [ref=e5269]: + - generic [ref=e5270]: + + - 'cell "- **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" [ref=e5271]': + - code [ref=e5272]: "- **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" + - row "81 +" [ref=e5273]: + - cell [ref=e5274] + - cell "81" [ref=e5275]: "81" + - cell [ref=e5276] + - cell "+" [ref=e5277]: + - generic [ref=e5278]: + + - cell [ref=e5279]: + - code + - 'row "82 + ## OperationRun UX Impact" [ref=e5280]': + - cell [ref=e5281] + - cell "82" [ref=e5282]: "82" + - cell [ref=e5283] + - cell "+" [ref=e5284]: + - generic [ref=e5285]: + + - cell "## OperationRun UX Impact" [ref=e5286]: + - code [ref=e5287]: "## OperationRun UX Impact" + - row "83 +" [ref=e5288]: + - cell [ref=e5289] + - cell "83" [ref=e5290]: "83" + - cell [ref=e5291] + - cell "+" [ref=e5292]: + - generic [ref=e5293]: + + - cell [ref=e5294]: + - code + - 'row "84 + - **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e5295]': + - cell [ref=e5296] + - cell "84" [ref=e5297]: "84" + - cell [ref=e5298] + - cell "+" [ref=e5299]: + - generic [ref=e5300]: + + - 'cell "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e5301]': + - code [ref=e5302]: "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" + - 'row "85 + - **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" [ref=e5303]': + - cell [ref=e5304] + - cell "85" [ref=e5305]: "85" + - cell [ref=e5306] + - cell "+" [ref=e5307]: + - generic [ref=e5308]: + + - 'cell "- **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" [ref=e5309]': + - code [ref=e5310]: "- **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" + - 'row "86 + - **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" [ref=e5311]': + - cell [ref=e5312] + - cell "86" [ref=e5313]: "86" + - cell [ref=e5314] + - cell "+" [ref=e5315]: + - generic [ref=e5316]: + + - 'cell "- **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" [ref=e5317]': + - code [ref=e5318]: "- **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" + - 'row "87 + - **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" [ref=e5319]': + - cell [ref=e5320] + - cell "87" [ref=e5321]: "87" + - cell [ref=e5322] + - cell "+" [ref=e5323]: + - generic [ref=e5324]: + + - 'cell "- **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" [ref=e5325]': + - code [ref=e5326]: "- **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" + - 'row "88 + - **Queued DB-notification policy**: unchanged" [ref=e5327]': + - cell [ref=e5328] + - cell "88" [ref=e5329]: "88" + - cell [ref=e5330] + - cell "+" [ref=e5331]: + - generic [ref=e5332]: + + - 'cell "- **Queued DB-notification policy**: unchanged" [ref=e5333]': + - code [ref=e5334]: "- **Queued DB-notification policy**: unchanged" + - 'row "89 + - **Terminal notification path**: unchanged" [ref=e5335]': + - cell [ref=e5336] + - cell "89" [ref=e5337]: "89" + - cell [ref=e5338] + - cell "+" [ref=e5339]: + - generic [ref=e5340]: + + - 'cell "- **Terminal notification path**: unchanged" [ref=e5341]': + - code [ref=e5342]: "- **Terminal notification path**: unchanged" + - 'row "90 + - **Exception path**: none" [ref=e5343]': + - cell [ref=e5344] + - cell "90" [ref=e5345]: "90" + - cell [ref=e5346] + - cell "+" [ref=e5347]: + - generic [ref=e5348]: + + - 'cell "- **Exception path**: none" [ref=e5349]': + - code [ref=e5350]: "- **Exception path**: none" + - row "91 +" [ref=e5351]: + - cell [ref=e5352] + - cell "91" [ref=e5353]: "91" + - cell [ref=e5354] + - cell "+" [ref=e5355]: + - generic [ref=e5356]: + + - cell [ref=e5357]: + - code + - 'row "92 + ## Provider Boundary & Portability Fit" [ref=e5358]': + - cell [ref=e5359] + - cell "92" [ref=e5360]: "92" + - cell [ref=e5361] + - cell "+" [ref=e5362]: + - generic [ref=e5363]: + + - cell "## Provider Boundary & Portability Fit" [ref=e5364]: + - code [ref=e5365]: "## Provider Boundary & Portability Fit" + - row "93 +" [ref=e5366]: + - cell [ref=e5367] + - cell "93" [ref=e5368]: "93" + - cell [ref=e5369] + - cell "+" [ref=e5370]: + - generic [ref=e5371]: + + - cell [ref=e5372]: + - code + - 'row "94 + - **Shared provider/platform boundary touched?**: no" [ref=e5373]': + - cell [ref=e5374] + - cell "94" [ref=e5375]: "94" + - cell [ref=e5376] + - cell "+" [ref=e5377]: + - generic [ref=e5378]: + + - 'cell "- **Shared provider/platform boundary touched?**: no" [ref=e5379]': + - code [ref=e5380]: "- **Shared provider/platform boundary touched?**: no" + - 'row "95 + - **Provider-owned seams**: N/A" [ref=e5381]': + - cell [ref=e5382] + - cell "95" [ref=e5383]: "95" + - cell [ref=e5384] + - cell "+" [ref=e5385]: + - generic [ref=e5386]: + + - 'cell "- **Provider-owned seams**: N/A" [ref=e5387]': + - code [ref=e5388]: "- **Provider-owned seams**: N/A" + - 'row "96 + - **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" [ref=e5389]': + - cell [ref=e5390] + - cell "96" [ref=e5391]: "96" + - cell [ref=e5392] + - cell "+" [ref=e5393]: + - generic [ref=e5394]: + + - 'cell "- **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" [ref=e5395]': + - code [ref=e5396]: "- **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" + - 'row "97 + - **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" [ref=e5397]': + - cell [ref=e5398] + - cell "97" [ref=e5399]: "97" + - cell [ref=e5400] + - cell "+" [ref=e5401]: + - generic [ref=e5402]: + + - 'cell "- **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" [ref=e5403]': + - code [ref=e5404]: "- **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" + - 'row "98 + - **Retained provider-specific semantics and why**: none" [ref=e5405]': + - cell [ref=e5406] + - cell "98" [ref=e5407]: "98" + - cell [ref=e5408] + - cell "+" [ref=e5409]: + - generic [ref=e5410]: + + - 'cell "- **Retained provider-specific semantics and why**: none" [ref=e5411]': + - code [ref=e5412]: "- **Retained provider-specific semantics and why**: none" + - 'row "99 + - **Bounded extraction or follow-up path**: none" [ref=e5413]': + - cell [ref=e5414] + - cell "99" [ref=e5415]: "99" + - cell [ref=e5416] + - cell "+" [ref=e5417]: + - generic [ref=e5418]: + + - 'cell "- **Bounded extraction or follow-up path**: none" [ref=e5419]': + - code [ref=e5420]: "- **Bounded extraction or follow-up path**: none" + - row "100 +" [ref=e5421]: + - cell [ref=e5422] + - cell "100" [ref=e5423]: "100" + - cell [ref=e5424] + - cell "+" [ref=e5425]: + - generic [ref=e5426]: + + - cell [ref=e5427]: + - code + - 'row "101 + ## Constitution Check" [ref=e5428]': + - cell [ref=e5429] + - cell "101" [ref=e5430]: "101" + - cell [ref=e5431] + - cell "+" [ref=e5432]: + - generic [ref=e5433]: + + - cell "## Constitution Check" [ref=e5434]: + - code [ref=e5435]: "## Constitution Check" + - row "102 +" [ref=e5436]: + - cell [ref=e5437] + - cell "102" [ref=e5438]: "102" + - cell [ref=e5439] + - cell "+" [ref=e5440]: + - generic [ref=e5441]: + + - cell [ref=e5442]: + - code + - 'row "103 + - Inventory-first: unchanged; no new source of truth." [ref=e5443]': + - cell [ref=e5444] + - cell "103" [ref=e5445]: "103" + - cell [ref=e5446] + - cell "+" [ref=e5447]: + - generic [ref=e5448]: + + - 'cell "- Inventory-first: unchanged; no new source of truth." [ref=e5449]': + - code [ref=e5450]: "- Inventory-first: unchanged; no new source of truth." + - 'row "104 + - Read/write separation: unchanged; this is read-only monitoring truth." [ref=e5451]': + - cell [ref=e5452] + - cell "104" [ref=e5453]: "104" + - cell [ref=e5454] + - cell "+" [ref=e5455]: + - generic [ref=e5456]: + + - 'cell "- Read/write separation: unchanged; this is read-only monitoring truth." [ref=e5457]': + - code [ref=e5458]: "- Read/write separation: unchanged; this is read-only monitoring truth." + - 'row "105 + - Deterministic capabilities: unchanged." [ref=e5459]': + - cell [ref=e5460] + - cell "105" [ref=e5461]: "105" + - cell [ref=e5462] + - cell "+" [ref=e5463]: + - generic [ref=e5464]: + + - 'cell "- Deterministic capabilities: unchanged." [ref=e5465]': + - code [ref=e5466]: "- Deterministic capabilities: unchanged." + - 'row "106 + - Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." [ref=e5467]': + - cell [ref=e5468] + - cell "106" [ref=e5469]: "106" + - cell [ref=e5470] + - cell "+" [ref=e5471]: + - generic [ref=e5472]: + + - 'cell "- Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." [ref=e5473]': + - code [ref=e5474]: "- Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." + - 'row "107 + - Persisted truth: no new tables, entities, or status families." [ref=e5475]': + - cell [ref=e5476] + - cell "107" [ref=e5477]: "107" + - cell [ref=e5478] + - cell "+" [ref=e5479]: + - generic [ref=e5480]: + + - 'cell "- Persisted truth: no new tables, entities, or status families." [ref=e5481]': + - code [ref=e5482]: "- Persisted truth: no new tables, entities, or status families." + - 'row "108 + - State discipline: derived-only; no new persisted lifecycle category." [ref=e5483]': + - cell [ref=e5484] + - cell "108" [ref=e5485]: "108" + - cell [ref=e5486] + - cell "+" [ref=e5487]: + - generic [ref=e5488]: + + - 'cell "- State discipline: derived-only; no new persisted lifecycle category." [ref=e5489]': + - code [ref=e5490]: "- State discipline: derived-only; no new persisted lifecycle category." + - 'row "109 + - Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." [ref=e5491]': + - cell [ref=e5492] + - cell "109" [ref=e5493]: "109" + - cell [ref=e5494] + - cell "+" [ref=e5495]: + - generic [ref=e5496]: + + - 'cell "- Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." [ref=e5497]': + - code [ref=e5498]: "- Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." + - 'row "110 + - Workspace / tenant isolation: unchanged and still mandatory." [ref=e5499]': + - cell [ref=e5500] + - cell "110" [ref=e5501]: "110" + - cell [ref=e5502] + - cell "+" [ref=e5503]: + - generic [ref=e5504]: + + - 'cell "- Workspace / tenant isolation: unchanged and still mandatory." [ref=e5505]': + - code [ref=e5506]: "- Workspace / tenant isolation: unchanged and still mandatory." + - 'row "111 + - RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." [ref=e5507]': + - cell [ref=e5508] + - cell "111" [ref=e5509]: "111" + - cell [ref=e5510] + - cell "+" [ref=e5511]: + - generic [ref=e5512]: + + - 'cell "- RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." [ref=e5513]': + - code [ref=e5514]: "- RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." + - 'row "112 + - Test governance: unit + feature remain the narrowest honest proof." [ref=e5515]': + - cell [ref=e5516] + - cell "112" [ref=e5517]: "112" + - cell [ref=e5518] + - cell "+" [ref=e5519]: + - generic [ref=e5520]: + + - 'cell "- Test governance: unit + feature remain the narrowest honest proof." [ref=e5521]': + - code [ref=e5522]: "- Test governance: unit + feature remain the narrowest honest proof." + - 'row "113 + - Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." [ref=e5523]': + - cell [ref=e5524] + - cell "113" [ref=e5525]: "113" + - cell [ref=e5526] + - cell "+" [ref=e5527]: + - generic [ref=e5528]: + + - 'cell "- Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." [ref=e5529]': + - code [ref=e5530]: "- Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." + - row "114 +" [ref=e5531]: + - cell [ref=e5532] + - cell "114" [ref=e5533]: "114" + - cell [ref=e5534] + - cell "+" [ref=e5535]: + - generic [ref=e5536]: + + - cell [ref=e5537]: + - code + - 'row "115 + ## Test Governance Check" [ref=e5538]': + - cell [ref=e5539] + - cell "115" [ref=e5540]: "115" + - cell [ref=e5541] + - cell "+" [ref=e5542]: + - generic [ref=e5543]: + + - cell "## Test Governance Check" [ref=e5544]: + - code [ref=e5545]: "## Test Governance Check" + - row "116 +" [ref=e5546]: + - cell [ref=e5547] + - cell "116" [ref=e5548]: "116" + - cell [ref=e5549] + - cell "+" [ref=e5550]: + - generic [ref=e5551]: + + - cell [ref=e5552]: + - code + - row "117 + - **Test purpose / classification by changed surface**:" [ref=e5553]: + - cell [ref=e5554] + - cell "117" [ref=e5555]: "117" + - cell [ref=e5556] + - cell "+" [ref=e5557]: + - generic [ref=e5558]: + + - cell "- **Test purpose / classification by changed surface**:" [ref=e5559]: + - code [ref=e5560]: "- **Test purpose / classification by changed surface**:" + - 'row "118 + - Unit: generic queue-truth derivation" [ref=e5561]': + - cell [ref=e5562] + - cell "118" [ref=e5563]: "118" + - cell [ref=e5564] + - cell "+" [ref=e5565]: + - generic [ref=e5566]: + + - 'cell "- Unit: generic queue-truth derivation" [ref=e5567]': + - code [ref=e5568]: "- Unit: generic queue-truth derivation" + - 'row "119 + - Feature: current shell/list/detail rendering and authorization-safe presentation" [ref=e5569]': + - cell [ref=e5570] + - cell "119" [ref=e5571]: "119" + - cell [ref=e5572] + - cell "+" [ref=e5573]: + - generic [ref=e5574]: + + - 'cell "- Feature: current shell/list/detail rendering and authorization-safe presentation" [ref=e5575]': + - code [ref=e5576]: "- Feature: current shell/list/detail rendering and authorization-safe presentation" + - 'row "120 + - **Affected validation lanes**: fast-feedback, confidence" [ref=e5577]': + - cell [ref=e5578] + - cell "120" [ref=e5579]: "120" + - cell [ref=e5580] + - cell "+" [ref=e5581]: + - generic [ref=e5582]: + + - 'cell "- **Affected validation lanes**: fast-feedback, confidence" [ref=e5583]': + - code [ref=e5584]: "- **Affected validation lanes**: fast-feedback, confidence" + - 'row "121 + - **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" [ref=e5585]': + - cell [ref=e5586] + - cell "121" [ref=e5587]: "121" + - cell [ref=e5588] + - cell "+" [ref=e5589]: + - generic [ref=e5590]: + + - 'cell "- **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" [ref=e5591]': + - code [ref=e5592]: "- **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" + - row "122 + - **Narrowest proving command(s)**:" [ref=e5593]: + - cell [ref=e5594] + - cell "122" [ref=e5595]: "122" + - cell [ref=e5596] + - cell "+" [ref=e5597]: + - generic [ref=e5598]: + + - cell "- **Narrowest proving command(s)**:" [ref=e5599]: + - code [ref=e5600]: "- **Narrowest proving command(s)**:" + - 'row "123 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e5601]': + - cell [ref=e5602] + - cell "123" [ref=e5603]: "123" + - cell [ref=e5604] + - cell "+" [ref=e5605]: + - generic [ref=e5606]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e5607]': + - code [ref=e5608]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "124 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e5609]': + - cell [ref=e5610] + - cell "124" [ref=e5611]: "124" + - cell [ref=e5612] + - cell "+" [ref=e5613]: + - generic [ref=e5614]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e5615]': + - code [ref=e5616]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "125 + - `git diff --check`" [ref=e5617]': + - cell [ref=e5618] + - cell "125" [ref=e5619]: "125" + - cell [ref=e5620] + - cell "+" [ref=e5621]: + - generic [ref=e5622]: + + - 'cell "- `git diff --check`" [ref=e5623]': + - code [ref=e5624]: "- `git diff --check`" + - 'row "126 + - **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" [ref=e5625]': + - cell [ref=e5626] + - cell "126" [ref=e5627]: "126" + - cell [ref=e5628] + - cell "+" [ref=e5629]: + - generic [ref=e5630]: + + - 'cell "- **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" [ref=e5631]': + - code [ref=e5632]: "- **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" + - 'row "127 + - **Expensive defaults or shared helper growth introduced?**: none planned" [ref=e5633]': + - cell [ref=e5634] + - cell "127" [ref=e5635]: "127" + - cell [ref=e5636] + - cell "+" [ref=e5637]: + - generic [ref=e5638]: + + - 'cell "- **Expensive defaults or shared helper growth introduced?**: none planned" [ref=e5639]': + - code [ref=e5640]: "- **Expensive defaults or shared helper growth introduced?**: none planned" + - 'row "128 + - **Heavy-family additions, promotions, or visibility changes**: none" [ref=e5641]': + - cell [ref=e5642] + - cell "128" [ref=e5643]: "128" + - cell [ref=e5644] + - cell "+" [ref=e5645]: + - generic [ref=e5646]: + + - 'cell "- **Heavy-family additions, promotions, or visibility changes**: none" [ref=e5647]': + - code [ref=e5648]: "- **Heavy-family additions, promotions, or visibility changes**: none" + - 'row "129 + - **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" [ref=e5649]': + - cell [ref=e5650] + - cell "129" [ref=e5651]: "129" + - cell [ref=e5652] + - cell "+" [ref=e5653]: + - generic [ref=e5654]: + + - 'cell "- **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" [ref=e5655]': + - code [ref=e5656]: "- **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" + - 'row "130 + - **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" [ref=e5657]': + - cell [ref=e5658] + - cell "130" [ref=e5659]: "130" + - cell [ref=e5660] + - cell "+" [ref=e5661]: + - generic [ref=e5662]: + + - 'cell "- **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" [ref=e5663]': + - code [ref=e5664]: "- **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" + - 'row "131 + - **Budget / baseline / trend follow-up**: none expected" [ref=e5665]': + - cell [ref=e5666] + - cell "131" [ref=e5667]: "131" + - cell [ref=e5668] + - cell "+" [ref=e5669]: + - generic [ref=e5670]: + + - 'cell "- **Budget / baseline / trend follow-up**: none expected" [ref=e5671]': + - code [ref=e5672]: "- **Budget / baseline / trend follow-up**: none expected" + - 'row "132 + - **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" [ref=e5673]': + - cell [ref=e5674] + - cell "132" [ref=e5675]: "132" + - cell [ref=e5676] + - cell "+" [ref=e5677]: + - generic [ref=e5678]: + + - 'cell "- **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" [ref=e5679]': + - code [ref=e5680]: "- **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" + - 'row "133 + - **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" [ref=e5681]': + - cell [ref=e5682] + - cell "133" [ref=e5683]: "133" + - cell [ref=e5684] + - cell "+" [ref=e5685]: + - generic [ref=e5686]: + + - 'cell "- **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" [ref=e5687]': + - code [ref=e5688]: "- **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" + - 'row "134 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5689]': + - cell [ref=e5690] + - cell "134" [ref=e5691]: "134" + - cell [ref=e5692] + - cell "+" [ref=e5693]: + - generic [ref=e5694]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5695]': + - code [ref=e5696]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - row "135 +" [ref=e5697]: + - cell [ref=e5698] + - cell "135" [ref=e5699]: "135" + - cell [ref=e5700] + - cell "+" [ref=e5701]: + - generic [ref=e5702]: + + - cell [ref=e5703]: + - code + - 'row "136 + ## Implementation Phases" [ref=e5704]': + - cell [ref=e5705] + - cell "136" [ref=e5706]: "136" + - cell [ref=e5707] + - cell "+" [ref=e5708]: + - generic [ref=e5709]: + + - cell "## Implementation Phases" [ref=e5710]: + - code [ref=e5711]: "## Implementation Phases" + - row "137 +" [ref=e5712]: + - cell [ref=e5713] + - cell "137" [ref=e5714]: "137" + - cell [ref=e5715] + - cell "+" [ref=e5716]: + - generic [ref=e5717]: + + - cell [ref=e5718]: + - code + - 'row "138 + ### Phase 1 — Confirm the shared queue-truth inputs" [ref=e5719]': + - cell [ref=e5720] + - cell "138" [ref=e5721]: "138" + - cell [ref=e5722] + - cell "+" [ref=e5723]: + - generic [ref=e5724]: + + - cell "### Phase 1 — Confirm the shared queue-truth inputs" [ref=e5725]: + - code [ref=e5726]: "### Phase 1 — Confirm the shared queue-truth inputs" + - row "139 +" [ref=e5727]: + - cell [ref=e5728] + - cell "139" [ref=e5729]: "139" + - cell [ref=e5730] + - cell "+" [ref=e5731]: + - generic [ref=e5732]: + + - cell [ref=e5733]: + - code + - row "140 + - Inventory the exact contradictory paths in:" [ref=e5734]: + - cell [ref=e5735] + - cell "140" [ref=e5736]: "140" + - cell [ref=e5737] + - cell "+" [ref=e5738]: + - generic [ref=e5739]: + + - cell "- Inventory the exact contradictory paths in:" [ref=e5740]: + - code [ref=e5741]: "- Inventory the exact contradictory paths in:" + - 'row "141 + - `OperationRunProgressContract`" [ref=e5742]': + - cell [ref=e5743] + - cell "141" [ref=e5744]: "141" + - cell [ref=e5745] + - cell "+" [ref=e5746]: + - generic [ref=e5747]: + + - 'cell "- `OperationRunProgressContract`" [ref=e5748]': + - code [ref=e5749]: "- `OperationRunProgressContract`" + - 'row "142 + - `RunDurationInsights`" [ref=e5750]': + - cell [ref=e5751] + - cell "142" [ref=e5752]: "142" + - cell [ref=e5753] + - cell "+" [ref=e5754]: + - generic [ref=e5755]: + + - 'cell "- `RunDurationInsights`" [ref=e5756]': + - code [ref=e5757]: "- `RunDurationInsights`" + - 'row "143 + - `OperationUxPresenter`" [ref=e5758]': + - cell [ref=e5759] + - cell "143" [ref=e5760]: "143" + - cell [ref=e5761] + - cell "+" [ref=e5762]: + - generic [ref=e5763]: + + - 'cell "- `OperationUxPresenter`" [ref=e5764]': + - code [ref=e5765]: "- `OperationUxPresenter`" + - row "144 + - current shell/list/detail renderers" [ref=e5766]: + - cell [ref=e5767] + - cell "144" [ref=e5768]: "144" + - cell [ref=e5769] + - cell "+" [ref=e5770]: + - generic [ref=e5771]: + + - cell "- current shell/list/detail renderers" [ref=e5772]: + - code [ref=e5773]: "- current shell/list/detail renderers" + - row "145 + - Freeze the current shared vocabulary for:" [ref=e5774]: + - cell [ref=e5775] + - cell "145" [ref=e5776]: "145" + - cell [ref=e5777] + - cell "+" [ref=e5778]: + - generic [ref=e5779]: + + - cell "- Freeze the current shared vocabulary for:" [ref=e5780]: + - code [ref=e5781]: "- Freeze the current shared vocabulary for:" + - row "146 + - fresh queued/running" [ref=e5782]: + - cell [ref=e5783] + - cell "146" [ref=e5784]: "146" + - cell [ref=e5785] + - cell "+" [ref=e5786]: + - generic [ref=e5787]: + + - cell "- fresh queued/running" [ref=e5788]: + - code [ref=e5789]: "- fresh queued/running" + - row "147 + - stale active" [ref=e5790]: + - cell [ref=e5791] + - cell "147" [ref=e5792]: "147" + - cell [ref=e5793] + - cell "+" [ref=e5794]: + - generic [ref=e5795]: + + - cell "- stale active" [ref=e5796]: + - code [ref=e5797]: "- stale active" + - row "148 + - reconciled terminal" [ref=e5798]: + - cell [ref=e5799] + - cell "148" [ref=e5800]: "148" + - cell [ref=e5801] + - cell "+" [ref=e5802]: + - generic [ref=e5803]: + + - cell "- reconciled terminal" [ref=e5804]: + - code [ref=e5805]: "- reconciled terminal" + - row "149 + - Confirm that existing scheduled and adapter reconciliation commands remain context only" [ref=e5806]: + - cell [ref=e5807] + - cell "149" [ref=e5808]: "149" + - cell [ref=e5809] + - cell "+" [ref=e5810]: + - generic [ref=e5811]: + + - cell "- Confirm that existing scheduled and adapter reconciliation commands remain context only" [ref=e5812]: + - code [ref=e5813]: "- Confirm that existing scheduled and adapter reconciliation commands remain context only" + - row "150 +" [ref=e5814]: + - cell [ref=e5815] + - cell "150" [ref=e5816]: "150" + - cell [ref=e5817] + - cell "+" [ref=e5818]: + - generic [ref=e5819]: + + - cell [ref=e5820]: + - code + - 'row "151 + ### Phase 2 — Align the generic queue-truth derivation" [ref=e5821]': + - cell [ref=e5822] + - cell "151" [ref=e5823]: "151" + - cell [ref=e5824] + - cell "+" [ref=e5825]: + - generic [ref=e5826]: + + - cell "### Phase 2 — Align the generic queue-truth derivation" [ref=e5827]: + - code [ref=e5828]: "### Phase 2 — Align the generic queue-truth derivation" + - row "152 +" [ref=e5829]: + - cell [ref=e5830] + - cell "152" [ref=e5831]: "152" + - cell [ref=e5832] + - cell "+" [ref=e5833]: + - generic [ref=e5834]: + + - cell [ref=e5835]: + - code + - row "153 + - Extend existing helpers so freshness, queue guidance, and progress availability tell one story" [ref=e5836]: + - cell [ref=e5837] + - cell "153" [ref=e5838]: "153" + - cell [ref=e5839] + - cell "+" [ref=e5840]: + - generic [ref=e5841]: + + - cell "- Extend existing helpers so freshness, queue guidance, and progress availability tell one story" [ref=e5842]: + - code [ref=e5843]: "- Extend existing helpers so freshness, queue guidance, and progress availability tell one story" + - row "154 + - Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" [ref=e5844]: + - cell [ref=e5845] + - cell "154" [ref=e5846]: "154" + - cell [ref=e5847] + - cell "+" [ref=e5848]: + - generic [ref=e5849]: + + - cell "- Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" [ref=e5850]: + - code [ref=e5851]: "- Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" + - row "155 + - Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" [ref=e5852]: + - cell [ref=e5853] + - cell "155" [ref=e5854]: "155" + - cell [ref=e5855] + - cell "+" [ref=e5856]: + - generic [ref=e5857]: + + - cell "- Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" [ref=e5858]: + - code [ref=e5859]: "- Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" + - row "156 +" [ref=e5860]: + - cell [ref=e5861] + - cell "156" [ref=e5862]: "156" + - cell [ref=e5863] + - cell "+" [ref=e5864]: + - generic [ref=e5865]: + + - cell [ref=e5866]: + - code + - 'row "157 + ### Phase 3 — Retrofit current monitoring surfaces" [ref=e5867]': + - cell [ref=e5868] + - cell "157" [ref=e5869]: "157" + - cell [ref=e5870] + - cell "+" [ref=e5871]: + - generic [ref=e5872]: + + - cell "### Phase 3 — Retrofit current monitoring surfaces" [ref=e5873]: + - code [ref=e5874]: "### Phase 3 — Retrofit current monitoring surfaces" + - row "158 +" [ref=e5875]: + - cell [ref=e5876] + - cell "158" [ref=e5877]: "158" + - cell [ref=e5878] + - cell "+" [ref=e5879]: + - generic [ref=e5880]: + + - cell [ref=e5881]: + - code + - row "159 + - Update the current shell banner so stale active work does not read as ordinary queue wait" [ref=e5882]: + - cell [ref=e5883] + - cell "159" [ref=e5884]: "159" + - cell [ref=e5885] + - cell "+" [ref=e5886]: + - generic [ref=e5887]: + + - cell "- Update the current shell banner so stale active work does not read as ordinary queue wait" [ref=e5888]: + - code [ref=e5889]: "- Update the current shell banner so stale active work does not read as ordinary queue wait" + - row "160 + - Update canonical list/detail guidance so they confirm the same lifecycle meaning" [ref=e5890]: + - cell [ref=e5891] + - cell "160" [ref=e5892]: "160" + - cell [ref=e5893] + - cell "+" [ref=e5894]: + - generic [ref=e5895]: + + - cell "- Update canonical list/detail guidance so they confirm the same lifecycle meaning" [ref=e5896]: + - code [ref=e5897]: "- Update canonical list/detail guidance so they confirm the same lifecycle meaning" + - row "161 + - Keep existing links, filters, and diagnostics structure unchanged" [ref=e5898]: + - cell [ref=e5899] + - cell "161" [ref=e5900]: "161" + - cell [ref=e5901] + - cell "+" [ref=e5902]: + - generic [ref=e5903]: + + - cell "- Keep existing links, filters, and diagnostics structure unchanged" [ref=e5904]: + - code [ref=e5905]: "- Keep existing links, filters, and diagnostics structure unchanged" + - row "162 +" [ref=e5906]: + - cell [ref=e5907] + - cell "162" [ref=e5908]: "162" + - cell [ref=e5909] + - cell "+" [ref=e5910]: + - generic [ref=e5911]: + + - cell [ref=e5912]: + - code + - 'row "163 + ### Phase 4 — Validate and lock the contract" [ref=e5913]': + - cell [ref=e5914] + - cell "163" [ref=e5915]: "163" + - cell [ref=e5916] + - cell "+" [ref=e5917]: + - generic [ref=e5918]: + + - cell "### Phase 4 — Validate and lock the contract" [ref=e5919]: + - code [ref=e5920]: "### Phase 4 — Validate and lock the contract" + - row "164 +" [ref=e5921]: + - cell [ref=e5922] + - cell "164" [ref=e5923]: "164" + - cell [ref=e5924] + - cell "+" [ref=e5925]: + - generic [ref=e5926]: + + - cell [ref=e5927]: + - code + - row "165 + - Add or update targeted unit + feature tests" [ref=e5928]: + - cell [ref=e5929] + - cell "165" [ref=e5930]: "165" + - cell [ref=e5931] + - cell "+" [ref=e5932]: + - generic [ref=e5933]: + + - cell "- Add or update targeted unit + feature tests" [ref=e5934]: + - code [ref=e5935]: "- Add or update targeted unit + feature tests" + - row "166 + - Run the focused validation commands" [ref=e5936]: + - cell [ref=e5937] + - cell "166" [ref=e5938]: "166" + - cell [ref=e5939] + - cell "+" [ref=e5940]: + - generic [ref=e5941]: + + - cell "- Run the focused validation commands" [ref=e5942]: + - code [ref=e5943]: "- Run the focused validation commands" + - row "167 + - Record any remaining bounded wording choices in the active feature close-out" [ref=e5944]: + - cell [ref=e5945] + - cell "167" [ref=e5946]: "167" + - cell [ref=e5947] + - cell "+" [ref=e5948]: + - generic [ref=e5949]: + + - cell "- Record any remaining bounded wording choices in the active feature close-out" [ref=e5950]: + - code [ref=e5951]: "- Record any remaining bounded wording choices in the active feature close-out" + - row "168 +" [ref=e5952]: + - cell [ref=e5953] + - cell "168" [ref=e5954]: "168" + - cell [ref=e5955] + - cell "+" [ref=e5956]: + - generic [ref=e5957]: + + - cell [ref=e5958]: + - code + - 'row "169 + ## Risks and Mitigations" [ref=e5959]': + - cell [ref=e5960] + - cell "169" [ref=e5961]: "169" + - cell [ref=e5962] + - cell "+" [ref=e5963]: + - generic [ref=e5964]: + + - cell "## Risks and Mitigations" [ref=e5965]: + - code [ref=e5966]: "## Risks and Mitigations" + - row "170 +" [ref=e5967]: + - cell [ref=e5968] + - cell "170" [ref=e5969]: "170" + - cell [ref=e5970] + - cell "+" [ref=e5971]: + - generic [ref=e5972]: + + - cell [ref=e5973]: + - code + - 'row "171 + - **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." [ref=e5974]': + - cell [ref=e5975] + - cell "171" [ref=e5976]: "171" + - cell [ref=e5977] + - cell "+" [ref=e5978]: + - generic [ref=e5979]: + + - 'cell "- **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." [ref=e5980]': + - code [ref=e5981]: "- **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." + - 'row "172 + - **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." [ref=e5982]': + - cell [ref=e5983] + - cell "172" [ref=e5984]: "172" + - cell [ref=e5985] + - cell "+" [ref=e5986]: + - generic [ref=e5987]: + + - 'cell "- **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." [ref=e5988]': + - code [ref=e5989]: "- **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." + - 'row "173 + - **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." [ref=e5990]': + - cell [ref=e5991] + - cell "173" [ref=e5992]: "173" + - cell [ref=e5993] + - cell "+" [ref=e5994]: + - generic [ref=e5995]: + + - 'cell "- **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." [ref=e5996]': + - code [ref=e5997]: "- **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." + - row "174 +" [ref=e5998]: + - cell [ref=e5999] + - cell "174" [ref=e6000]: "174" + - cell [ref=e6001] + - cell "+" [ref=e6002]: + - generic [ref=e6003]: + + - cell [ref=e6004]: + - code + - 'row "175 + ## Project Structure" [ref=e6005]': + - cell [ref=e6006] + - cell "175" [ref=e6007]: "175" + - cell [ref=e6008] + - cell "+" [ref=e6009]: + - generic [ref=e6010]: + + - cell "## Project Structure" [ref=e6011]: + - code [ref=e6012]: "## Project Structure" + - row "176 +" [ref=e6013]: + - cell [ref=e6014] + - cell "176" [ref=e6015]: "176" + - cell [ref=e6016] + - cell "+" [ref=e6017]: + - generic [ref=e6018]: + + - cell [ref=e6019]: + - code + - 'row "177 + ### Documentation" [ref=e6020]': + - cell [ref=e6021] + - cell "177" [ref=e6022]: "177" + - cell [ref=e6023] + - cell "+" [ref=e6024]: + - generic [ref=e6025]: + + - cell "### Documentation" [ref=e6026]: + - code [ref=e6027]: "### Documentation" + - row "178 +" [ref=e6028]: + - cell [ref=e6029] + - cell "178" [ref=e6030]: "178" + - cell [ref=e6031] + - cell "+" [ref=e6032]: + - generic [ref=e6033]: + + - cell [ref=e6034]: + - code + - 'row "179 + ```text" [ref=e6035]': + - cell [ref=e6036] + - cell "179" [ref=e6037]: "179" + - cell [ref=e6038] + - cell "+" [ref=e6039]: + - generic [ref=e6040]: + + - 'cell "```text" [ref=e6041]': + - code [ref=e6042]: "```text" + - row "180 + specs/358-operationrun-queue-truth-foundation/" [ref=e6043]: + - cell [ref=e6044] + - cell "180" [ref=e6045]: "180" + - cell [ref=e6046] + - cell "+" [ref=e6047]: + - generic [ref=e6048]: + + - cell "specs/358-operationrun-queue-truth-foundation/" [ref=e6049]: + - code [ref=e6050]: specs/358-operationrun-queue-truth-foundation/ + - row "181 + |-- spec.md" [ref=e6051]: + - cell [ref=e6052] + - cell "181" [ref=e6053]: "181" + - cell [ref=e6054] + - cell "+" [ref=e6055]: + - generic [ref=e6056]: + + - cell "|-- spec.md" [ref=e6057]: + - code [ref=e6058]: "|-- spec.md" + - row "182 + |-- plan.md" [ref=e6059]: + - cell [ref=e6060] + - cell "182" [ref=e6061]: "182" + - cell [ref=e6062] + - cell "+" [ref=e6063]: + - generic [ref=e6064]: + + - cell "|-- plan.md" [ref=e6065]: + - code [ref=e6066]: "|-- plan.md" + - row "183 + |-- tasks.md" [ref=e6067]: + - cell [ref=e6068] + - cell "183" [ref=e6069]: "183" + - cell [ref=e6070] + - cell "+" [ref=e6071]: + - generic [ref=e6072]: + + - cell "|-- tasks.md" [ref=e6073]: + - code [ref=e6074]: "|-- tasks.md" + - 'row "184 + `-- checklists/" [ref=e6075]': + - cell [ref=e6076] + - cell "184" [ref=e6077]: "184" + - cell [ref=e6078] + - cell "+" [ref=e6079]: + - generic [ref=e6080]: + + - 'cell "`-- checklists/" [ref=e6081]': + - code [ref=e6082]: "`-- checklists/" + - 'row "185 + `-- requirements.md" [ref=e6083]': + - cell [ref=e6084] + - cell "185" [ref=e6085]: "185" + - cell [ref=e6086] + - cell "+" [ref=e6087]: + - generic [ref=e6088]: + + - 'cell "`-- requirements.md" [ref=e6089]': + - code [ref=e6090]: "`-- requirements.md" + - 'row "186 + ```" [ref=e6091]': + - cell [ref=e6092] + - cell "186" [ref=e6093]: "186" + - cell [ref=e6094] + - cell "+" [ref=e6095]: + - generic [ref=e6096]: + + - 'cell "```" [ref=e6097]': + - code [ref=e6098]: "```" + - row "187 +" [ref=e6099]: + - cell [ref=e6100] + - cell "187" [ref=e6101]: "187" + - cell [ref=e6102] + - cell "+" [ref=e6103]: + - generic [ref=e6104]: + + - cell [ref=e6105]: + - code + - 'row "188 + ### Runtime surfaces likely to change later" [ref=e6106]': + - cell [ref=e6107] + - cell "188" [ref=e6108]: "188" + - cell [ref=e6109] + - cell "+" [ref=e6110]: + - generic [ref=e6111]: + + - cell "### Runtime surfaces likely to change later" [ref=e6112]: + - code [ref=e6113]: "### Runtime surfaces likely to change later" + - row "189 +" [ref=e6114]: + - cell [ref=e6115] + - cell "189" [ref=e6116]: "189" + - cell [ref=e6117] + - cell "+" [ref=e6118]: + - generic [ref=e6119]: + + - cell [ref=e6120]: + - code + - 'row "190 + ```text" [ref=e6121]': + - cell [ref=e6122] + - cell "190" [ref=e6123]: "190" + - cell [ref=e6124] + - cell "+" [ref=e6125]: + - generic [ref=e6126]: + + - 'cell "```text" [ref=e6127]': + - code [ref=e6128]: "```text" + - row "191 + apps/platform/app/Support/OpsUx/" [ref=e6129]: + - cell [ref=e6130] + - cell "191" [ref=e6131]: "191" + - cell [ref=e6132] + - cell "+" [ref=e6133]: + - generic [ref=e6134]: + + - cell "apps/platform/app/Support/OpsUx/" [ref=e6135]: + - code [ref=e6136]: apps/platform/app/Support/OpsUx/ + - row "192 + |-- OperationRunProgressContract.php" [ref=e6137]: + - cell [ref=e6138] + - cell "192" [ref=e6139]: "192" + - cell [ref=e6140] + - cell "+" [ref=e6141]: + - generic [ref=e6142]: + + - cell "|-- OperationRunProgressContract.php" [ref=e6143]: + - code [ref=e6144]: "|-- OperationRunProgressContract.php" + - row "193 + |-- OperationUxPresenter.php" [ref=e6145]: + - cell [ref=e6146] + - cell "193" [ref=e6147]: "193" + - cell [ref=e6148] + - cell "+" [ref=e6149]: + - generic [ref=e6150]: + + - cell "|-- OperationUxPresenter.php" [ref=e6151]: + - code [ref=e6152]: "|-- OperationUxPresenter.php" + - 'row "194 + `-- RunDurationInsights.php" [ref=e6153]': + - cell [ref=e6154] + - cell "194" [ref=e6155]: "194" + - cell [ref=e6156] + - cell "+" [ref=e6157]: + - generic [ref=e6158]: + + - 'cell "`-- RunDurationInsights.php" [ref=e6159]': + - code [ref=e6160]: "`-- RunDurationInsights.php" + - row "195 +" [ref=e6161]: + - cell [ref=e6162] + - cell "195" [ref=e6163]: "195" + - cell [ref=e6164] + - cell "+" [ref=e6165]: + - generic [ref=e6166]: + + - cell [ref=e6167]: + - code + - row "196 + apps/platform/app/Support/Operations/" [ref=e6168]: + - cell [ref=e6169] + - cell "196" [ref=e6170]: "196" + - cell [ref=e6171] + - cell "+" [ref=e6172]: + - generic [ref=e6173]: + + - cell "apps/platform/app/Support/Operations/" [ref=e6174]: + - code [ref=e6175]: apps/platform/app/Support/Operations/ + - 'row "197 + `-- OperationRunFreshnessState.php" [ref=e6176]': + - cell [ref=e6177] + - cell "197" [ref=e6178]: "197" + - cell [ref=e6179] + - cell "+" [ref=e6180]: + - generic [ref=e6181]: + + - 'cell "`-- OperationRunFreshnessState.php" [ref=e6182]': + - code [ref=e6183]: "`-- OperationRunFreshnessState.php" + - row "198 +" [ref=e6184]: + - cell [ref=e6185] + - cell "198" [ref=e6186]: "198" + - cell [ref=e6187] + - cell "+" [ref=e6188]: + - generic [ref=e6189]: + + - cell [ref=e6190]: + - code + - row "199 + apps/platform/app/Filament/" [ref=e6191]: + - cell [ref=e6192] + - cell "199" [ref=e6193]: "199" + - cell [ref=e6194] + - cell "+" [ref=e6195]: + - generic [ref=e6196]: + + - cell "apps/platform/app/Filament/" [ref=e6197]: + - code [ref=e6198]: apps/platform/app/Filament/ + - row "200 + |-- Pages/Monitoring/Operations.php" [ref=e6199]: + - cell [ref=e6200] + - cell "200" [ref=e6201]: "200" + - cell [ref=e6202] + - cell "+" [ref=e6203]: + - generic [ref=e6204]: + + - cell "|-- Pages/Monitoring/Operations.php" [ref=e6205]: + - code [ref=e6206]: "|-- Pages/Monitoring/Operations.php" + - row "201 + |-- Pages/Operations/TenantlessOperationRunViewer.php" [ref=e6207]: + - cell [ref=e6208] + - cell "201" [ref=e6209]: "201" + - cell [ref=e6210] + - cell "+" [ref=e6211]: + - generic [ref=e6212]: + + - cell "|-- Pages/Operations/TenantlessOperationRunViewer.php" [ref=e6213]: + - code [ref=e6214]: "|-- Pages/Operations/TenantlessOperationRunViewer.php" + - 'row "202 + `-- Resources/OperationRunResource.php" [ref=e6215]': + - cell [ref=e6216] + - cell "202" [ref=e6217]: "202" + - cell [ref=e6218] + - cell "+" [ref=e6219]: + - generic [ref=e6220]: + + - 'cell "`-- Resources/OperationRunResource.php" [ref=e6221]': + - code [ref=e6222]: "`-- Resources/OperationRunResource.php" + - row "203 +" [ref=e6223]: + - cell [ref=e6224] + - cell "203" [ref=e6225]: "203" + - cell [ref=e6226] + - cell "+" [ref=e6227]: + - generic [ref=e6228]: + + - cell [ref=e6229]: + - code + - row "204 + apps/platform/resources/views/filament/pages/monitoring/" [ref=e6230]: + - cell [ref=e6231] + - cell "204" [ref=e6232]: "204" + - cell [ref=e6233] + - cell "+" [ref=e6234]: + - generic [ref=e6235]: + + - cell "apps/platform/resources/views/filament/pages/monitoring/" [ref=e6236]: + - code [ref=e6237]: apps/platform/resources/views/filament/pages/monitoring/ + - 'row "205 + `-- operations.blade.php" [ref=e6238]': + - cell [ref=e6239] + - cell "205" [ref=e6240]: "205" + - cell [ref=e6241] + - cell "+" [ref=e6242]: + - generic [ref=e6243]: + + - 'cell "`-- operations.blade.php" [ref=e6244]': + - code [ref=e6245]: "`-- operations.blade.php" + - row "206 +" [ref=e6246]: + - cell [ref=e6247] + - cell "206" [ref=e6248]: "206" + - cell [ref=e6249] + - cell "+" [ref=e6250]: + - generic [ref=e6251]: + + - cell [ref=e6252]: + - code + - row "207 + apps/platform/resources/views/livewire/" [ref=e6253]: + - cell [ref=e6254] + - cell "207" [ref=e6255]: "207" + - cell [ref=e6256] + - cell "+" [ref=e6257]: + - generic [ref=e6258]: + + - cell "apps/platform/resources/views/livewire/" [ref=e6259]: + - code [ref=e6260]: apps/platform/resources/views/livewire/ + - 'row "208 + `-- bulk-operation-progress.blade.php" [ref=e6261]': + - cell [ref=e6262] + - cell "208" [ref=e6263]: "208" + - cell [ref=e6264] + - cell "+" [ref=e6265]: + - generic [ref=e6266]: + + - 'cell "`-- bulk-operation-progress.blade.php" [ref=e6267]': + - code [ref=e6268]: "`-- bulk-operation-progress.blade.php" + - 'row "209 + ```" [ref=e6269]': + - cell [ref=e6270] + - cell "209" [ref=e6271]: "209" + - cell [ref=e6272] + - cell "+" [ref=e6273]: + - generic [ref=e6274]: + + - 'cell "```" [ref=e6275]': + - code [ref=e6276]: "```" + - generic [ref=e6277]: + - 'heading "298 298 Änderungen: 298 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/spec.md Normale Datei Datei anzeigen" [level=4] [ref=e6278]': + - generic [ref=e6279]: + - button [ref=e6280] [cursor=pointer]: + - img [ref=e6281] + - generic [ref=e6283]: + - text: "298" + - 'generic "298 Änderungen: 298 Ergänzungen und 0 Löschungen" [ref=e6284]' + - generic [ref=e6286]: + - link "specs/358-operationrun-queue-truth-foundation/spec.md" [ref=e6287] [cursor=pointer]: + - /url: "#diff-cae80101b562551ce446e2172de0067cfd5d23ae" + - button [ref=e6288] [cursor=pointer]: + - img [ref=e6289] + - generic [ref=e6292]: Normale Datei + - link "Datei anzeigen" [ref=e6294] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/spec.md + - table [ref=e6297]: + - rowgroup [ref=e6304]: + - row "@ -0,0 +1,298 @@" [ref=e6305]: + - cell [ref=e6306] + - cell [ref=e6307] + - cell [ref=e6308] + - cell "@ -0,0 +1,298 @@" [ref=e6309]: + - code [ref=e6310]: "@ -0,0 +1,298 @@" + - 'row "1 + # Feature Specification: OperationRun Queue Truth Foundation" [ref=e6311]': + - cell [ref=e6312] + - cell "1" [ref=e6313]: "1" + - cell [ref=e6314] + - cell "+" [ref=e6315]: + - generic [ref=e6316]: + + - 'cell "# Feature Specification: OperationRun Queue Truth Foundation" [ref=e6317]': + - code [ref=e6318]: "# Feature Specification: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e6319]: + - cell [ref=e6320] + - cell "2" [ref=e6321]: "2" + - cell [ref=e6322] + - cell "+" [ref=e6323]: + - generic [ref=e6324]: + + - cell [ref=e6325]: + - code + - 'row "3 + **Feature Branch**: `358-operationrun-queue-truth-foundation`" [ref=e6326]': + - cell [ref=e6327] + - cell "3" [ref=e6328]: "3" + - cell [ref=e6329] + - cell "+" [ref=e6330]: + - generic [ref=e6331]: + + - 'cell "**Feature Branch**: `358-operationrun-queue-truth-foundation`" [ref=e6332]': + - code [ref=e6333]: "**Feature Branch**: `358-operationrun-queue-truth-foundation`" + - 'row "4 + **Created**: 2026-06-06" [ref=e6334]': + - cell [ref=e6335] + - cell "4" [ref=e6336]: "4" + - cell [ref=e6337] + - cell "+" [ref=e6338]: + - generic [ref=e6339]: + + - 'cell "**Created**: 2026-06-06" [ref=e6340]': + - code [ref=e6341]: "**Created**: 2026-06-06" + - 'row "5 + **Status**: Draft" [ref=e6342]': + - cell [ref=e6343] + - cell "5" [ref=e6344]: "5" + - cell [ref=e6345] + - cell "+" [ref=e6346]: + - generic [ref=e6347]: + + - 'cell "**Status**: Draft" [ref=e6348]': + - code [ref=e6349]: "**Status**: Draft" + - 'row "6 + **Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" [ref=e6350]': + - cell [ref=e6351] + - cell "6" [ref=e6352]: "6" + - cell [ref=e6353] + - cell "+" [ref=e6354]: + - generic [ref=e6355]: + + - 'cell "**Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" [ref=e6356]': + - code [ref=e6357]: "**Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" + - row "7 +" [ref=e6358]: + - cell [ref=e6359] + - cell "7" [ref=e6360]: "7" + - cell [ref=e6361] + - cell "+" [ref=e6362]: + - generic [ref=e6363]: + + - cell [ref=e6364]: + - code + - 'row "8 + ## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" [ref=e6365]': + - cell [ref=e6366] + - cell "8" [ref=e6367]: "8" + - cell [ref=e6368] + - cell "+" [ref=e6369]: + - generic [ref=e6370]: + + - cell "## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" [ref=e6371]: + - code [ref=e6372]: "## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" + - row "9 +" [ref=e6373]: + - cell [ref=e6374] + - cell "9" [ref=e6375]: "9" + - cell [ref=e6376] + - cell "+" [ref=e6377]: + - generic [ref=e6378]: + + - cell [ref=e6379]: + - code + - 'row "10 + - **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." [ref=e6380]': + - cell [ref=e6381] + - cell "10" [ref=e6382]: "10" + - cell [ref=e6383] + - cell "+" [ref=e6384]: + - generic [ref=e6385]: + + - 'cell "- **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." [ref=e6386]': + - code [ref=e6387]: "- **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." + - 'row "11 + - **Today''s failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." [ref=e6388]': + - cell [ref=e6389] + - cell "11" [ref=e6390]: "11" + - cell [ref=e6391] + - cell "+" [ref=e6392]: + - generic [ref=e6393]: + + - 'cell "- **Today''s failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." [ref=e6394]': + - code [ref=e6395]: "- **Today's failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." + - 'row "12 + - **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." [ref=e6396]': + - cell [ref=e6397] + - cell "12" [ref=e6398]: "12" + - cell [ref=e6399] + - cell "+" [ref=e6400]: + - generic [ref=e6401]: + + - 'cell "- **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." [ref=e6402]': + - code [ref=e6403]: "- **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." + - 'row "13 + - **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." [ref=e6404]': + - cell [ref=e6405] + - cell "13" [ref=e6406]: "13" + - cell [ref=e6407] + - cell "+" [ref=e6408]: + - generic [ref=e6409]: + + - 'cell "- **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." [ref=e6410]': + - code [ref=e6411]: "- **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." + - 'row "14 + - **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." [ref=e6412]': + - cell [ref=e6413] + - cell "14" [ref=e6414]: "14" + - cell [ref=e6415] + - cell "+" [ref=e6416]: + - generic [ref=e6417]: + + - 'cell "- **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." [ref=e6418]': + - code [ref=e6419]: "- **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." + - 'row "15 + - **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." [ref=e6420]': + - cell [ref=e6421] + - cell "15" [ref=e6422]: "15" + - cell [ref=e6423] + - cell "+" [ref=e6424]: + - generic [ref=e6425]: + + - 'cell "- **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." [ref=e6426]': + - code [ref=e6427]: "- **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." + - 'row "16 + - **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." [ref=e6428]': + - cell [ref=e6429] + - cell "16" [ref=e6430]: "16" + - cell [ref=e6431] + - cell "+" [ref=e6432]: + - generic [ref=e6433]: + + - 'cell "- **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." [ref=e6434]': + - code [ref=e6435]: "- **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." + - 'row "17 + - **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." [ref=e6436]': + - cell [ref=e6437] + - cell "17" [ref=e6438]: "17" + - cell [ref=e6439] + - cell "+" [ref=e6440]: + - generic [ref=e6441]: + + - 'cell "- **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." [ref=e6442]': + - code [ref=e6443]: "- **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." + - 'row "18 + - **Approval class**: Core Enterprise" [ref=e6444]': + - cell [ref=e6445] + - cell "18" [ref=e6446]: "18" + - cell [ref=e6447] + - cell "+" [ref=e6448]: + - generic [ref=e6449]: + + - 'cell "- **Approval class**: Core Enterprise" [ref=e6450]': + - code [ref=e6451]: "- **Approval class**: Core Enterprise" + - 'row "19 + - **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." [ref=e6452]': + - cell [ref=e6453] + - cell "19" [ref=e6454]: "19" + - cell [ref=e6455] + - cell "+" [ref=e6456]: + - generic [ref=e6457]: + + - 'cell "- **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." [ref=e6458]': + - code [ref=e6459]: "- **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." + - 'row "20 + - **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" [ref=e6460]': + - cell [ref=e6461] + - cell "20" [ref=e6462]: "20" + - cell [ref=e6463] + - cell "+" [ref=e6464]: + - generic [ref=e6465]: + + - 'cell "- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" [ref=e6466]': + - code [ref=e6467]: "- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" + - 'row "21 + - **Decision**: approve" [ref=e6468]': + - cell [ref=e6469] + - cell "21" [ref=e6470]: "21" + - cell [ref=e6471] + - cell "+" [ref=e6472]: + - generic [ref=e6473]: + + - 'cell "- **Decision**: approve" [ref=e6474]': + - code [ref=e6475]: "- **Decision**: approve" + - row "22 +" [ref=e6476]: + - cell [ref=e6477] + - cell "22" [ref=e6478]: "22" + - cell [ref=e6479] + - cell "+" [ref=e6480]: + - generic [ref=e6481]: + + - cell [ref=e6482]: + - code + - 'row "23 + ## Repo Truth Reconciliation" [ref=e6483]': + - cell [ref=e6484] + - cell "23" [ref=e6485]: "23" + - cell [ref=e6486] + - cell "+" [ref=e6487]: + - generic [ref=e6488]: + + - cell "## Repo Truth Reconciliation" [ref=e6489]: + - code [ref=e6490]: "## Repo Truth Reconciliation" + - row "24 +" [ref=e6491]: + - cell [ref=e6492] + - cell "24" [ref=e6493]: "24" + - cell [ref=e6494] + - cell "+" [ref=e6495]: + - generic [ref=e6496]: + + - cell [ref=e6497]: + - code + - row "25 + The user draft is directionally correct, but current repo truth changes the exact framing:" [ref=e6498]: + - cell [ref=e6499] + - cell "25" [ref=e6500]: "25" + - cell [ref=e6501] + - cell "+" [ref=e6502]: + - generic [ref=e6503]: + + - cell "The user draft is directionally correct, but current repo truth changes the exact framing:" [ref=e6504]: + - code [ref=e6505]: "The user draft is directionally correct, but current repo truth changes the exact framing:" + - row "26 +" [ref=e6506]: + - cell [ref=e6507] + - cell "26" [ref=e6508]: "26" + - cell [ref=e6509] + - cell "+" [ref=e6510]: + - generic [ref=e6511]: + + - cell [ref=e6512]: + - code + - 'row "27 + 1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." [ref=e6513]': + - cell [ref=e6514] + - cell "27" [ref=e6515]: "27" + - cell [ref=e6516] + - cell "+" [ref=e6517]: + - generic [ref=e6518]: + + - 'cell "1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." [ref=e6519]': + - code [ref=e6520]: "1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." + - 'row "28 + 2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." [ref=e6521]': + - cell [ref=e6522] + - cell "28" [ref=e6523]: "28" + - cell [ref=e6524] + - cell "+" [ref=e6525]: + - generic [ref=e6526]: + + - 'cell "2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." [ref=e6527]': + - code [ref=e6528]: "2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." + - 'row "29 + 3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." [ref=e6529]': + - cell [ref=e6530] + - cell "29" [ref=e6531]: "29" + - cell [ref=e6532] + - cell "+" [ref=e6533]: + - generic [ref=e6534]: + + - 'cell "3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." [ref=e6535]': + - code [ref=e6536]: "3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." + - 'row "30 + 4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." [ref=e6537]': + - cell [ref=e6538] + - cell "30" [ref=e6539]: "30" + - cell [ref=e6540] + - cell "+" [ref=e6541]: + - generic [ref=e6542]: + + - 'cell "4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." [ref=e6543]': + - code [ref=e6544]: "4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." + - 'row "31 + 5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." [ref=e6545]': + - cell [ref=e6546] + - cell "31" [ref=e6547]: "31" + - cell [ref=e6548] + - cell "+" [ref=e6549]: + - generic [ref=e6550]: + + - 'cell "5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." [ref=e6551]': + - code [ref=e6552]: "5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." + - row "32 +" [ref=e6553]: + - cell [ref=e6554] + - cell "32" [ref=e6555]: "32" + - cell [ref=e6556] + - cell "+" [ref=e6557]: + - generic [ref=e6558]: + + - cell [ref=e6559]: + - code + - 'row "33 + ## Spec Scope Fields *(mandatory)*" [ref=e6560]': + - cell [ref=e6561] + - cell "33" [ref=e6562]: "33" + - cell [ref=e6563] + - cell "+" [ref=e6564]: + - generic [ref=e6565]: + + - cell "## Spec Scope Fields *(mandatory)*" [ref=e6566]: + - code [ref=e6567]: "## Spec Scope Fields *(mandatory)*" + - row "34 +" [ref=e6568]: + - cell [ref=e6569] + - cell "34" [ref=e6570]: "34" + - cell [ref=e6571] + - cell "+" [ref=e6572]: + - generic [ref=e6573]: + + - cell [ref=e6574]: + - code + - 'row "35 + - **Scope**: workspace, tenant, canonical-view" [ref=e6575]': + - cell [ref=e6576] + - cell "35" [ref=e6577]: "35" + - cell [ref=e6578] + - cell "+" [ref=e6579]: + - generic [ref=e6580]: + + - 'cell "- **Scope**: workspace, tenant, canonical-view" [ref=e6581]': + - code [ref=e6582]: "- **Scope**: workspace, tenant, canonical-view" + - row "36 + - **Primary Routes**:" [ref=e6583]: + - cell [ref=e6584] + - cell "36" [ref=e6585]: "36" + - cell [ref=e6586] + - cell "+" [ref=e6587]: + - generic [ref=e6588]: + + - cell "- **Primary Routes**:" [ref=e6589]: + - code [ref=e6590]: "- **Primary Routes**:" + - 'row "37 + - workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" [ref=e6591]': + - cell [ref=e6592] + - cell "37" [ref=e6593]: "37" + - cell [ref=e6594] + - cell "+" [ref=e6595]: + - generic [ref=e6596]: + + - 'cell "- workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" [ref=e6597]': + - code [ref=e6598]: "- workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" + - 'row "38 + - `/admin/workspaces/{workspace}/operations`" [ref=e6599]': + - cell [ref=e6600] + - cell "38" [ref=e6601]: "38" + - cell [ref=e6602] + - cell "+" [ref=e6603]: + - generic [ref=e6604]: + + - 'cell "- `/admin/workspaces/{workspace}/operations`" [ref=e6605]': + - code [ref=e6606]: "- `/admin/workspaces/{workspace}/operations`" + - 'row "39 + - `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6607]': + - cell [ref=e6608] + - cell "39" [ref=e6609]: "39" + - cell [ref=e6610] + - cell "+" [ref=e6611]: + - generic [ref=e6612]: + + - 'cell "- `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6613]': + - code [ref=e6614]: "- `/admin/workspaces/{workspace}/operations/{run}`" + - 'row "40 + - the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e6615]': + - cell [ref=e6616] + - cell "40" [ref=e6617]: "40" + - cell [ref=e6618] + - cell "+" [ref=e6619]: + - generic [ref=e6620]: + + - 'cell "- the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e6621]': + - code [ref=e6622]: "- the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" + - row "41 + - **Data Ownership**:" [ref=e6623]: + - cell [ref=e6624] + - cell "41" [ref=e6625]: "41" + - cell [ref=e6626] + - cell "+" [ref=e6627]: + - generic [ref=e6628]: + + - cell "- **Data Ownership**:" [ref=e6629]: + - code [ref=e6630]: "- **Data Ownership**:" + - 'row "42 + - `operation_runs` remain the only lifecycle and freshness source of truth" [ref=e6631]': + - cell [ref=e6632] + - cell "42" [ref=e6633]: "42" + - cell [ref=e6634] + - cell "+" [ref=e6635]: + - generic [ref=e6636]: + + - 'cell "- `operation_runs` remain the only lifecycle and freshness source of truth" [ref=e6637]': + - code [ref=e6638]: "- `operation_runs` remain the only lifecycle and freshness source of truth" + - 'row "43 + - `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" [ref=e6639]': + - cell [ref=e6640] + - cell "43" [ref=e6641]: "43" + - cell [ref=e6642] + - cell "+" [ref=e6643]: + - generic [ref=e6644]: + + - 'cell "- `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" [ref=e6645]': + - code [ref=e6646]: "- `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" + - row "44 + - no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" [ref=e6647]: + - cell [ref=e6648] + - cell "44" [ref=e6649]: "44" + - cell [ref=e6650] + - cell "+" [ref=e6651]: + - generic [ref=e6652]: + + - cell "- no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" [ref=e6653]: + - code [ref=e6654]: "- no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" + - row "45 + - **RBAC**:" [ref=e6655]: + - cell [ref=e6656] + - cell "45" [ref=e6657]: "45" + - cell [ref=e6658] + - cell "+" [ref=e6659]: + - generic [ref=e6660]: + + - cell "- **RBAC**:" [ref=e6661]: + - code [ref=e6662]: "- **RBAC**:" + - row "46 + - existing workspace and managed-environment entitlement rules remain authoritative" [ref=e6663]: + - cell [ref=e6664] + - cell "46" [ref=e6665]: "46" + - cell [ref=e6666] + - cell "+" [ref=e6667]: + - generic [ref=e6668]: + + - cell "- existing workspace and managed-environment entitlement rules remain authoritative" [ref=e6669]: + - code [ref=e6670]: "- existing workspace and managed-environment entitlement rules remain authoritative" + - 'row "47 + - non-members and out-of-scope actors remain `404`" [ref=e6671]': + - cell [ref=e6672] + - cell "47" [ref=e6673]: "47" + - cell [ref=e6674] + - cell "+" [ref=e6675]: + - generic [ref=e6676]: + + - 'cell "- non-members and out-of-scope actors remain `404`" [ref=e6677]': + - code [ref=e6678]: "- non-members and out-of-scope actors remain `404`" + - row "48 + - this spec changes wording and derived presentation only; it does not widen access or add new capability strings" [ref=e6679]: + - cell [ref=e6680] + - cell "48" [ref=e6681]: "48" + - cell [ref=e6682] + - cell "+" [ref=e6683]: + - generic [ref=e6684]: + + - cell "- this spec changes wording and derived presentation only; it does not widen access or add new capability strings" [ref=e6685]: + - code [ref=e6686]: "- this spec changes wording and derived presentation only; it does not widen access or add new capability strings" + - row "49 +" [ref=e6687]: + - cell [ref=e6688] + - cell "49" [ref=e6689]: "49" + - cell [ref=e6690] + - cell "+" [ref=e6691]: + - generic [ref=e6692]: + + - cell [ref=e6693]: + - code + - row "50 + For canonical-view specs, the spec MUST define:" [ref=e6694]: + - cell [ref=e6695] + - cell "50" [ref=e6696]: "50" + - cell [ref=e6697] + - cell "+" [ref=e6698]: + - generic [ref=e6699]: + + - cell "For canonical-view specs, the spec MUST define:" [ref=e6700]: + - code [ref=e6701]: "For canonical-view specs, the spec MUST define:" + - row "51 +" [ref=e6702]: + - cell [ref=e6703] + - cell "51" [ref=e6704]: "51" + - cell [ref=e6705] + - cell "+" [ref=e6706]: + - generic [ref=e6707]: + + - cell [ref=e6708]: + - code + - 'row "52 + - **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." [ref=e6709]': + - cell [ref=e6710] + - cell "52" [ref=e6711]: "52" + - cell [ref=e6712] + - cell "+" [ref=e6713]: + - generic [ref=e6714]: + + - 'cell "- **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." [ref=e6715]': + - code [ref=e6716]: "- **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." + - 'row "53 + - **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." [ref=e6717]': + - cell [ref=e6718] + - cell "53" [ref=e6719]: "53" + - cell [ref=e6720] + - cell "+" [ref=e6721]: + - generic [ref=e6722]: + + - 'cell "- **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." [ref=e6723]': + - code [ref=e6724]: "- **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." + - row "54 +" [ref=e6725]: + - cell [ref=e6726] + - cell "54" [ref=e6727]: "54" + - cell [ref=e6728] + - cell "+" [ref=e6729]: + - generic [ref=e6730]: + + - cell [ref=e6731]: + - code + - 'row "55 + ## UI Surface Impact *(mandatory — UI-COV-001)*" [ref=e6732]': + - cell [ref=e6733] + - cell "55" [ref=e6734]: "55" + - cell [ref=e6735] + - cell "+" [ref=e6736]: + - generic [ref=e6737]: + + - cell "## UI Surface Impact *(mandatory — UI-COV-001)*" [ref=e6738]: + - code [ref=e6739]: "## UI Surface Impact *(mandatory — UI-COV-001)*" + - row "56 +" [ref=e6740]: + - cell [ref=e6741] + - cell "56" [ref=e6742]: "56" + - cell [ref=e6743] + - cell "+" [ref=e6744]: + - generic [ref=e6745]: + + - cell [ref=e6746]: + - code + - row "57 + - [ ] No UI surface impact" [ref=e6747]: + - cell [ref=e6748] + - cell "57" [ref=e6749]: "57" + - cell [ref=e6750] + - cell "+" [ref=e6751]: + - generic [ref=e6752]: + + - cell "- [ ] No UI surface impact" [ref=e6753]: + - code [ref=e6754]: "- [ ] No UI surface impact" + - row "58 + - [x] Existing page changed" [ref=e6755]: + - cell [ref=e6756] + - cell "58" [ref=e6757]: "58" + - cell [ref=e6758] + - cell "+" [ref=e6759]: + - generic [ref=e6760]: + + - cell "- [x] Existing page changed" [ref=e6761]: + - code [ref=e6762]: "- [x] Existing page changed" + - row "59 + - [ ] New page/route added" [ref=e6763]: + - cell [ref=e6764] + - cell "59" [ref=e6765]: "59" + - cell [ref=e6766] + - cell "+" [ref=e6767]: + - generic [ref=e6768]: + + - cell "- [ ] New page/route added" [ref=e6769]: + - code [ref=e6770]: "- [ ] New page/route added" + - row "60 + - [ ] Navigation changed" [ref=e6771]: + - cell [ref=e6772] + - cell "60" [ref=e6773]: "60" + - cell [ref=e6774] + - cell "+" [ref=e6775]: + - generic [ref=e6776]: + + - cell "- [ ] Navigation changed" [ref=e6777]: + - code [ref=e6778]: "- [ ] Navigation changed" + - row "61 + - [ ] Filament panel/provider surface changed" [ref=e6779]: + - cell [ref=e6780] + - cell "61" [ref=e6781]: "61" + - cell [ref=e6782] + - cell "+" [ref=e6783]: + - generic [ref=e6784]: + + - cell "- [ ] Filament panel/provider surface changed" [ref=e6785]: + - code [ref=e6786]: "- [ ] Filament panel/provider surface changed" + - row "62 + - [ ] New modal/drawer/wizard/action added" [ref=e6787]: + - cell [ref=e6788] + - cell "62" [ref=e6789]: "62" + - cell [ref=e6790] + - cell "+" [ref=e6791]: + - generic [ref=e6792]: + + - cell "- [ ] New modal/drawer/wizard/action added" [ref=e6793]: + - code [ref=e6794]: "- [ ] New modal/drawer/wizard/action added" + - row "63 + - [ ] New table/form/state added" [ref=e6795]: + - cell [ref=e6796] + - cell "63" [ref=e6797]: "63" + - cell [ref=e6798] + - cell "+" [ref=e6799]: + - generic [ref=e6800]: + + - cell "- [ ] New table/form/state added" [ref=e6801]: + - code [ref=e6802]: "- [ ] New table/form/state added" + - row "64 + - [ ] Customer-facing surface changed" [ref=e6803]: + - cell [ref=e6804] + - cell "64" [ref=e6805]: "64" + - cell [ref=e6806] + - cell "+" [ref=e6807]: + - generic [ref=e6808]: + + - cell "- [ ] Customer-facing surface changed" [ref=e6809]: + - code [ref=e6810]: "- [ ] Customer-facing surface changed" + - row "65 + - [ ] Dangerous action changed" [ref=e6811]: + - cell [ref=e6812] + - cell "65" [ref=e6813]: "65" + - cell [ref=e6814] + - cell "+" [ref=e6815]: + - generic [ref=e6816]: + + - cell "- [ ] Dangerous action changed" [ref=e6817]: + - code [ref=e6818]: "- [ ] Dangerous action changed" + - row "66 + - [x] Status/evidence/review presentation changed" [ref=e6819]: + - cell [ref=e6820] + - cell "66" [ref=e6821]: "66" + - cell [ref=e6822] + - cell "+" [ref=e6823]: + - generic [ref=e6824]: + + - cell "- [x] Status/evidence/review presentation changed" [ref=e6825]: + - code [ref=e6826]: "- [x] Status/evidence/review presentation changed" + - row "67 + - [x] Workspace/environment context presentation changed" [ref=e6827]: + - cell [ref=e6828] + - cell "67" [ref=e6829]: "67" + - cell [ref=e6830] + - cell "+" [ref=e6831]: + - generic [ref=e6832]: + + - cell "- [x] Workspace/environment context presentation changed" [ref=e6833]: + - code [ref=e6834]: "- [x] Workspace/environment context presentation changed" + - row "68 +" [ref=e6835]: + - cell [ref=e6836] + - cell "68" [ref=e6837]: "68" + - cell [ref=e6838] + - cell "+" [ref=e6839]: + - generic [ref=e6840]: + + - cell [ref=e6841]: + - code + - 'row "69 + ## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" [ref=e6842]': + - cell [ref=e6843] + - cell "69" [ref=e6844]: "69" + - cell [ref=e6845] + - cell "+" [ref=e6846]: + - generic [ref=e6847]: + + - cell "## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" [ref=e6848]: + - code [ref=e6849]: "## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" + - row "70 +" [ref=e6850]: + - cell [ref=e6851] + - cell "70" [ref=e6852]: "70" + - cell [ref=e6853] + - cell "+" [ref=e6854]: + - generic [ref=e6855]: + + - cell [ref=e6856]: + - code + - row "71 + - **Route/page/surface**:" [ref=e6857]: + - cell [ref=e6858] + - cell "71" [ref=e6859]: "71" + - cell [ref=e6860] + - cell "+" [ref=e6861]: + - generic [ref=e6862]: + + - cell "- **Route/page/surface**:" [ref=e6863]: + - code [ref=e6864]: "- **Route/page/surface**:" + - 'row "72 + - tenant shell activity hint (`BulkOperationProgress`)" [ref=e6865]': + - cell [ref=e6866] + - cell "72" [ref=e6867]: "72" + - cell [ref=e6868] + - cell "+" [ref=e6869]: + - generic [ref=e6870]: + + - 'cell "- tenant shell activity hint (`BulkOperationProgress`)" [ref=e6871]': + - code [ref=e6872]: "- tenant shell activity hint (`BulkOperationProgress`)" + - 'row "73 + - workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" [ref=e6873]': + - cell [ref=e6874] + - cell "73" [ref=e6875]: "73" + - cell [ref=e6876] + - cell "+" [ref=e6877]: + - generic [ref=e6878]: + + - 'cell "- workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" [ref=e6879]': + - code [ref=e6880]: "- workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" + - 'row "74 + - canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6881]': + - cell [ref=e6882] + - cell "74" [ref=e6883]: "74" + - cell [ref=e6884] + - cell "+" [ref=e6885]: + - generic [ref=e6886]: + + - 'cell "- canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6887]': + - code [ref=e6888]: "- canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" + - 'row "75 + - shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" [ref=e6889]': + - cell [ref=e6890] + - cell "75" [ref=e6891]: "75" + - cell [ref=e6892] + - cell "+" [ref=e6893]: + - generic [ref=e6894]: + + - 'cell "- shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" [ref=e6895]': + - code [ref=e6896]: "- shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" + - 'row "76 + - **Current or new page archetype**: existing monitoring/workbench family only" [ref=e6897]': + - cell [ref=e6898] + - cell "76" [ref=e6899]: "76" + - cell [ref=e6900] + - cell "+" [ref=e6901]: + - generic [ref=e6902]: + + - 'cell "- **Current or new page archetype**: existing monitoring/workbench family only" [ref=e6903]': + - code [ref=e6904]: "- **Current or new page archetype**: existing monitoring/workbench family only" + - 'row "77 + - **Design depth**: Domain Pattern Surface" [ref=e6905]': + - cell [ref=e6906] + - cell "77" [ref=e6907]: "77" + - cell [ref=e6908] + - cell "+" [ref=e6909]: + - generic [ref=e6910]: + + - 'cell "- **Design depth**: Domain Pattern Surface" [ref=e6911]': + - code [ref=e6912]: "- **Design depth**: Domain Pattern Surface" + - 'row "78 + - **Repo-truth level**: repo-verified" [ref=e6913]': + - cell [ref=e6914] + - cell "78" [ref=e6915]: "78" + - cell [ref=e6916] + - cell "+" [ref=e6917]: + - generic [ref=e6918]: + + - 'cell "- **Repo-truth level**: repo-verified" [ref=e6919]': + - code [ref=e6920]: "- **Repo-truth level**: repo-verified" + - 'row "79 + - **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" [ref=e6921]': + - cell [ref=e6922] + - cell "79" [ref=e6923]: "79" + - cell [ref=e6924] + - cell "+" [ref=e6925]: + - generic [ref=e6926]: + + - 'cell "- **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" [ref=e6927]': + - code [ref=e6928]: "- **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" + - 'row "80 + - **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" [ref=e6929]': + - cell [ref=e6930] + - cell "80" [ref=e6931]: "80" + - cell [ref=e6932] + - cell "+" [ref=e6933]: + - generic [ref=e6934]: + + - 'cell "- **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" [ref=e6935]': + - code [ref=e6936]: "- **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" + - 'row "81 + - **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" [ref=e6937]': + - cell [ref=e6938] + - cell "81" [ref=e6939]: "81" + - cell [ref=e6940] + - cell "+" [ref=e6941]: + - generic [ref=e6942]: + + - 'cell "- **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" [ref=e6943]': + - code [ref=e6944]: "- **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" + - 'row "82 + - **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" [ref=e6945]': + - cell [ref=e6946] + - cell "82" [ref=e6947]: "82" + - cell [ref=e6948] + - cell "+" [ref=e6949]: + - generic [ref=e6950]: + + - 'cell "- **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" [ref=e6951]': + - code [ref=e6952]: "- **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" + - 'row "83 + - **Customer-safe review required**: no; operator-only monitoring surfaces" [ref=e6953]': + - cell [ref=e6954] + - cell "83" [ref=e6955]: "83" + - cell [ref=e6956] + - cell "+" [ref=e6957]: + - generic [ref=e6958]: + + - 'cell "- **Customer-safe review required**: no; operator-only monitoring surfaces" [ref=e6959]': + - code [ref=e6960]: "- **Customer-safe review required**: no; operator-only monitoring surfaces" + - 'row "84 + - **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" [ref=e6961]': + - cell [ref=e6962] + - cell "84" [ref=e6963]: "84" + - cell [ref=e6964] + - cell "+" [ref=e6965]: + - generic [ref=e6966]: + + - 'cell "- **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" [ref=e6967]': + - code [ref=e6968]: "- **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" + - 'row "85 + - **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" [ref=e6969]': + - cell [ref=e6970] + - cell "85" [ref=e6971]: "85" + - cell [ref=e6972] + - cell "+" [ref=e6973]: + - generic [ref=e6974]: + + - 'cell "- **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" [ref=e6975]': + - code [ref=e6976]: "- **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" + - 'row "86 + - **No-impact rationale when applicable**: N/A" [ref=e6977]': + - cell [ref=e6978] + - cell "86" [ref=e6979]: "86" + - cell [ref=e6980] + - cell "+" [ref=e6981]: + - generic [ref=e6982]: + + - 'cell "- **No-impact rationale when applicable**: N/A" [ref=e6983]': + - code [ref=e6984]: "- **No-impact rationale when applicable**: N/A" + - row "87 +" [ref=e6985]: + - cell [ref=e6986] + - cell "87" [ref=e6987]: "87" + - cell [ref=e6988] + - cell "+" [ref=e6989]: + - generic [ref=e6990]: + + - cell [ref=e6991]: + - code + - 'row "88 + ## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" [ref=e6992]': + - cell [ref=e6993] + - cell "88" [ref=e6994]: "88" + - cell [ref=e6995] + - cell "+" [ref=e6996]: + - generic [ref=e6997]: + + - cell "## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" [ref=e6998]: + - code [ref=e6999]: "## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" + - row "89 +" [ref=e7000]: + - cell [ref=e7001] + - cell "89" [ref=e7002]: "89" + - cell [ref=e7003] + - cell "+" [ref=e7004]: + - generic [ref=e7005]: + + - cell [ref=e7006]: + - code + - 'row "90 + - **Cross-cutting feature?**: yes" [ref=e7007]': + - cell [ref=e7008] + - cell "90" [ref=e7009]: "90" + - cell [ref=e7010] + - cell "+" [ref=e7011]: + - generic [ref=e7012]: + + - 'cell "- **Cross-cutting feature?**: yes" [ref=e7013]': + - code [ref=e7014]: "- **Cross-cutting feature?**: yes" + - 'row "91 + - **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" [ref=e7015]': + - cell [ref=e7016] + - cell "91" [ref=e7017]: "91" + - cell [ref=e7018] + - cell "+" [ref=e7019]: + - generic [ref=e7020]: + + - 'cell "- **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" [ref=e7021]': + - code [ref=e7022]: "- **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" + - row "92 + - **Systems touched**:" [ref=e7023]: + - cell [ref=e7024] + - cell "92" [ref=e7025]: "92" + - cell [ref=e7026] + - cell "+" [ref=e7027]: + - generic [ref=e7028]: + + - cell "- **Systems touched**:" [ref=e7029]: + - code [ref=e7030]: "- **Systems touched**:" + - 'row "93 + - `OperationRunFreshnessState`" [ref=e7031]': + - cell [ref=e7032] + - cell "93" [ref=e7033]: "93" + - cell [ref=e7034] + - cell "+" [ref=e7035]: + - generic [ref=e7036]: + + - 'cell "- `OperationRunFreshnessState`" [ref=e7037]': + - code [ref=e7038]: "- `OperationRunFreshnessState`" + - 'row "94 + - `OperationRunProgressContract`" [ref=e7039]': + - cell [ref=e7040] + - cell "94" [ref=e7041]: "94" + - cell [ref=e7042] + - cell "+" [ref=e7043]: + - generic [ref=e7044]: + + - 'cell "- `OperationRunProgressContract`" [ref=e7045]': + - code [ref=e7046]: "- `OperationRunProgressContract`" + - 'row "95 + - `RunDurationInsights`" [ref=e7047]': + - cell [ref=e7048] + - cell "95" [ref=e7049]: "95" + - cell [ref=e7050] + - cell "+" [ref=e7051]: + - generic [ref=e7052]: + + - 'cell "- `RunDurationInsights`" [ref=e7053]': + - code [ref=e7054]: "- `RunDurationInsights`" + - 'row "96 + - `OperationUxPresenter`" [ref=e7055]': + - cell [ref=e7056] + - cell "96" [ref=e7057]: "96" + - cell [ref=e7058] + - cell "+" [ref=e7059]: + - generic [ref=e7060]: + + - 'cell "- `OperationUxPresenter`" [ref=e7061]': + - code [ref=e7062]: "- `OperationUxPresenter`" + - row "97 + - current shell banner and canonical monitoring/detail surfaces" [ref=e7063]: + - cell [ref=e7064] + - cell "97" [ref=e7065]: "97" + - cell [ref=e7066] + - cell "+" [ref=e7067]: + - generic [ref=e7068]: + + - cell "- current shell banner and canonical monitoring/detail surfaces" [ref=e7069]: + - code [ref=e7070]: "- current shell banner and canonical monitoring/detail surfaces" + - 'row "98 + - **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" [ref=e7071]': + - cell [ref=e7072] + - cell "98" [ref=e7073]: "98" + - cell [ref=e7074] + - cell "+" [ref=e7075]: + - generic [ref=e7076]: + + - 'cell "- **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" [ref=e7077]': + - code [ref=e7078]: "- **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" + - 'row "99 + - **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" [ref=e7079]': + - cell [ref=e7080] + - cell "99" [ref=e7081]: "99" + - cell [ref=e7082] + - cell "+" [ref=e7083]: + - generic [ref=e7084]: + + - 'cell "- **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" [ref=e7085]': + - code [ref=e7086]: "- **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" + - 'row "100 + - **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." [ref=e7087]': + - cell [ref=e7088] + - cell "100" [ref=e7089]: "100" + - cell [ref=e7090] + - cell "+" [ref=e7091]: + - generic [ref=e7092]: + + - 'cell "- **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." [ref=e7093]': + - code [ref=e7094]: "- **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." + - 'row "101 + - **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" [ref=e7095]': + - cell [ref=e7096] + - cell "101" [ref=e7097]: "101" + - cell [ref=e7098] + - cell "+" [ref=e7099]: + - generic [ref=e7100]: + + - 'cell "- **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" [ref=e7101]': + - code [ref=e7102]: "- **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" + - 'row "102 + - **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" [ref=e7103]': + - cell [ref=e7104] + - cell "102" [ref=e7105]: "102" + - cell [ref=e7106] + - cell "+" [ref=e7107]: + - generic [ref=e7108]: + + - 'cell "- **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" [ref=e7109]': + - code [ref=e7110]: "- **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" + - 'row "103 + - **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" [ref=e7111]': + - cell [ref=e7112] + - cell "103" [ref=e7113]: "103" + - cell [ref=e7114] + - cell "+" [ref=e7115]: + - generic [ref=e7116]: + + - 'cell "- **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" [ref=e7117]': + - code [ref=e7118]: "- **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" + - row "104 +" [ref=e7119]: + - cell [ref=e7120] + - cell "104" [ref=e7121]: "104" + - cell [ref=e7122] + - cell "+" [ref=e7123]: + - generic [ref=e7124]: + + - cell [ref=e7125]: + - code + - 'row "105 + ## OperationRun UX Impact *(mandatory)*" [ref=e7126]': + - cell [ref=e7127] + - cell "105" [ref=e7128]: "105" + - cell [ref=e7129] + - cell "+" [ref=e7130]: + - generic [ref=e7131]: + + - cell "## OperationRun UX Impact *(mandatory)*" [ref=e7132]: + - code [ref=e7133]: "## OperationRun UX Impact *(mandatory)*" + - row "106 +" [ref=e7134]: + - cell [ref=e7135] + - cell "106" [ref=e7136]: "106" + - cell [ref=e7137] + - cell "+" [ref=e7138]: + - generic [ref=e7139]: + + - cell [ref=e7140]: + - code + - 'row "107 + - **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e7141]': + - cell [ref=e7142] + - cell "107" [ref=e7143]: "107" + - cell [ref=e7144] + - cell "+" [ref=e7145]: + - generic [ref=e7146]: + + - 'cell "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e7147]': + - code [ref=e7148]: "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" + - 'row "108 + - **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" [ref=e7149]': + - cell [ref=e7150] + - cell "108" [ref=e7151]: "108" + - cell [ref=e7152] + - cell "+" [ref=e7153]: + - generic [ref=e7154]: + + - 'cell "- **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" [ref=e7155]': + - code [ref=e7156]: "- **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" + - 'row "109 + - **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" [ref=e7157]': + - cell [ref=e7158] + - cell "109" [ref=e7159]: "109" + - cell [ref=e7160] + - cell "+" [ref=e7161]: + - generic [ref=e7162]: + + - 'cell "- **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" [ref=e7163]': + - code [ref=e7164]: "- **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" + - 'row "110 + - **Local surface-owned behavior that remains**: density and placement only" [ref=e7165]': + - cell [ref=e7166] + - cell "110" [ref=e7167]: "110" + - cell [ref=e7168] + - cell "+" [ref=e7169]: + - generic [ref=e7170]: + + - 'cell "- **Local surface-owned behavior that remains**: density and placement only" [ref=e7171]': + - code [ref=e7172]: "- **Local surface-owned behavior that remains**: density and placement only" + - 'row "111 + - **Queued DB-notification policy**: unchanged" [ref=e7173]': + - cell [ref=e7174] + - cell "111" [ref=e7175]: "111" + - cell [ref=e7176] + - cell "+" [ref=e7177]: + - generic [ref=e7178]: + + - 'cell "- **Queued DB-notification policy**: unchanged" [ref=e7179]': + - code [ref=e7180]: "- **Queued DB-notification policy**: unchanged" + - 'row "112 + - **Terminal notification path**: unchanged central lifecycle mechanism" [ref=e7181]': + - cell [ref=e7182] + - cell "112" [ref=e7183]: "112" + - cell [ref=e7184] + - cell "+" [ref=e7185]: + - generic [ref=e7186]: + + - 'cell "- **Terminal notification path**: unchanged central lifecycle mechanism" [ref=e7187]': + - code [ref=e7188]: "- **Terminal notification path**: unchanged central lifecycle mechanism" + - 'row "113 + - **Exception required?**: none" [ref=e7189]': + - cell [ref=e7190] + - cell "113" [ref=e7191]: "113" + - cell [ref=e7192] + - cell "+" [ref=e7193]: + - generic [ref=e7194]: + + - 'cell "- **Exception required?**: none" [ref=e7195]': + - code [ref=e7196]: "- **Exception required?**: none" + - row "114 +" [ref=e7197]: + - cell [ref=e7198] + - cell "114" [ref=e7199]: "114" + - cell [ref=e7200] + - cell "+" [ref=e7201]: + - generic [ref=e7202]: + + - cell [ref=e7203]: + - code + - 'row "115 + ## Provider Boundary / Platform Core Check *(mandatory)*" [ref=e7204]': + - cell [ref=e7205] + - cell "115" [ref=e7206]: "115" + - cell [ref=e7207] + - cell "+" [ref=e7208]: + - generic [ref=e7209]: + + - cell "## Provider Boundary / Platform Core Check *(mandatory)*" [ref=e7210]: + - code [ref=e7211]: "## Provider Boundary / Platform Core Check *(mandatory)*" + - row "116 +" [ref=e7212]: + - cell [ref=e7213] + - cell "116" [ref=e7214]: "116" + - cell [ref=e7215] + - cell "+" [ref=e7216]: + - generic [ref=e7217]: + + - cell [ref=e7218]: + - code + - 'row "117 + - **Shared provider/platform boundary touched?**: no" [ref=e7219]': + - cell [ref=e7220] + - cell "117" [ref=e7221]: "117" + - cell [ref=e7222] + - cell "+" [ref=e7223]: + - generic [ref=e7224]: + + - 'cell "- **Shared provider/platform boundary touched?**: no" [ref=e7225]': + - code [ref=e7226]: "- **Shared provider/platform boundary touched?**: no" + - 'row "118 + - **Boundary classification**: N/A" [ref=e7227]': + - cell [ref=e7228] + - cell "118" [ref=e7229]: "118" + - cell [ref=e7230] + - cell "+" [ref=e7231]: + - generic [ref=e7232]: + + - 'cell "- **Boundary classification**: N/A" [ref=e7233]': + - code [ref=e7234]: "- **Boundary classification**: N/A" + - 'row "119 + - **Seams affected**: N/A" [ref=e7235]': + - cell [ref=e7236] + - cell "119" [ref=e7237]: "119" + - cell [ref=e7238] + - cell "+" [ref=e7239]: + - generic [ref=e7240]: + + - 'cell "- **Seams affected**: N/A" [ref=e7241]': + - code [ref=e7242]: "- **Seams affected**: N/A" + - 'row "120 + - **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" [ref=e7243]': + - cell [ref=e7244] + - cell "120" [ref=e7245]: "120" + - cell [ref=e7246] + - cell "+" [ref=e7247]: + - generic [ref=e7248]: + + - 'cell "- **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" [ref=e7249]': + - code [ref=e7250]: "- **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" + - 'row "121 + - **Provider-specific semantics retained and why**: none" [ref=e7251]': + - cell [ref=e7252] + - cell "121" [ref=e7253]: "121" + - cell [ref=e7254] + - cell "+" [ref=e7255]: + - generic [ref=e7256]: + + - 'cell "- **Provider-specific semantics retained and why**: none" [ref=e7257]': + - code [ref=e7258]: "- **Provider-specific semantics retained and why**: none" + - 'row "122 + - **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" [ref=e7259]': + - cell [ref=e7260] + - cell "122" [ref=e7261]: "122" + - cell [ref=e7262] + - cell "+" [ref=e7263]: + - generic [ref=e7264]: + + - 'cell "- **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" [ref=e7265]': + - code [ref=e7266]: "- **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" + - 'row "123 + - **Follow-up path**: none" [ref=e7267]': + - cell [ref=e7268] + - cell "123" [ref=e7269]: "123" + - cell [ref=e7270] + - cell "+" [ref=e7271]: + - generic [ref=e7272]: + + - 'cell "- **Follow-up path**: none" [ref=e7273]': + - code [ref=e7274]: "- **Follow-up path**: none" + - row "124 +" [ref=e7275]: + - cell [ref=e7276] + - cell "124" [ref=e7277]: "124" + - cell [ref=e7278] + - cell "+" [ref=e7279]: + - generic [ref=e7280]: + + - cell [ref=e7281]: + - code + - 'row "125 + ## UI / Surface Guardrail Impact *(mandatory)*" [ref=e7282]': + - cell [ref=e7283] + - cell "125" [ref=e7284]: "125" + - cell [ref=e7285] + - cell "+" [ref=e7286]: + - generic [ref=e7287]: + + - cell "## UI / Surface Guardrail Impact *(mandatory)*" [ref=e7288]: + - code [ref=e7289]: "## UI / Surface Guardrail Impact *(mandatory)*" + - row "126 +" [ref=e7290]: + - cell [ref=e7291] + - cell "126" [ref=e7292]: "126" + - cell [ref=e7293] + - cell "+" [ref=e7294]: + - generic [ref=e7295]: + + - cell [ref=e7296]: + - code + - 'row "127 + | Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" [ref=e7297]': + - cell [ref=e7298] + - cell "127" [ref=e7299]: "127" + - cell [ref=e7300] + - cell "+" [ref=e7301]: + - generic [ref=e7302]: + + - 'cell "| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" [ref=e7303]': + - code [ref=e7304]: "| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" + - row "128 + |---|---|---|---|---|---|---|" [ref=e7305]: + - cell [ref=e7306] + - cell "128" [ref=e7307]: "128" + - cell [ref=e7308] + - cell "+" [ref=e7309]: + - generic [ref=e7310]: + + - cell "|---|---|---|---|---|---|---|" [ref=e7311]: + - code [ref=e7312]: "|---|---|---|---|---|---|---|" + - row "129 + | Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" [ref=e7313]: + - cell [ref=e7314] + - cell "129" [ref=e7315]: "129" + - cell [ref=e7316] + - cell "+" [ref=e7317]: + - generic [ref=e7318]: + + - cell "| Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" [ref=e7319]: + - code [ref=e7320]: "| Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" + - row "130 + | Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" [ref=e7321]: + - cell [ref=e7322] + - cell "130" [ref=e7323]: "130" + - cell [ref=e7324] + - cell "+" [ref=e7325]: + - generic [ref=e7326]: + + - cell "| Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" [ref=e7327]: + - code [ref=e7328]: "| Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" + - row "131 + | Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" [ref=e7329]: + - cell [ref=e7330] + - cell "131" [ref=e7331]: "131" + - cell [ref=e7332] + - cell "+" [ref=e7333]: + - generic [ref=e7334]: + + - cell "| Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" [ref=e7335]: + - code [ref=e7336]: "| Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" + - row "132 +" [ref=e7337]: + - cell [ref=e7338] + - cell "132" [ref=e7339]: "132" + - cell [ref=e7340] + - cell "+" [ref=e7341]: + - generic [ref=e7342]: + + - cell [ref=e7343]: + - code + - 'row "133 + ## Decision-First Surface Role *(mandatory)*" [ref=e7344]': + - cell [ref=e7345] + - cell "133" [ref=e7346]: "133" + - cell [ref=e7347] + - cell "+" [ref=e7348]: + - generic [ref=e7349]: + + - cell "## Decision-First Surface Role *(mandatory)*" [ref=e7350]: + - code [ref=e7351]: "## Decision-First Surface Role *(mandatory)*" + - row "134 +" [ref=e7352]: + - cell [ref=e7353] + - cell "134" [ref=e7354]: "134" + - cell [ref=e7355] + - cell "+" [ref=e7356]: + - generic [ref=e7357]: + + - cell [ref=e7358]: + - code + - row "135 + | Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" [ref=e7359]: + - cell [ref=e7360] + - cell "135" [ref=e7361]: "135" + - cell [ref=e7362] + - cell "+" [ref=e7363]: + - generic [ref=e7364]: + + - cell "| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" [ref=e7365]: + - code [ref=e7366]: "| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" + - row "136 + |---|---|---|---|---|---|---|---|" [ref=e7367]: + - cell [ref=e7368] + - cell "136" [ref=e7369]: "136" + - cell [ref=e7370] + - cell "+" [ref=e7371]: + - generic [ref=e7372]: + + - cell "|---|---|---|---|---|---|---|---|" [ref=e7373]: + - code [ref=e7374]: "|---|---|---|---|---|---|---|---|" + - row "137 + | Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" [ref=e7375]: + - cell [ref=e7376] + - cell "137" [ref=e7377]: "137" + - cell [ref=e7378] + - cell "+" [ref=e7379]: + - generic [ref=e7380]: + + - cell "| Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" [ref=e7381]: + - code [ref=e7382]: "| Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" + - row "138 + | Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" [ref=e7383]: + - cell [ref=e7384] + - cell "138" [ref=e7385]: "138" + - cell [ref=e7386] + - cell "+" [ref=e7387]: + - generic [ref=e7388]: + + - cell "| Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" [ref=e7389]: + - code [ref=e7390]: "| Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" + - row "139 + | Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" [ref=e7391]: + - cell [ref=e7392] + - cell "139" [ref=e7393]: "139" + - cell [ref=e7394] + - cell "+" [ref=e7395]: + - generic [ref=e7396]: + + - cell "| Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" [ref=e7397]: + - code [ref=e7398]: "| Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" + - row "140 +" [ref=e7399]: + - cell [ref=e7400] + - cell "140" [ref=e7401]: "140" + - cell [ref=e7402] + - cell "+" [ref=e7403]: + - generic [ref=e7404]: + + - cell [ref=e7405]: + - code + - 'row "141 + ## Audience-Aware Disclosure *(mandatory)*" [ref=e7406]': + - cell [ref=e7407] + - cell "141" [ref=e7408]: "141" + - cell [ref=e7409] + - cell "+" [ref=e7410]: + - generic [ref=e7411]: + + - cell "## Audience-Aware Disclosure *(mandatory)*" [ref=e7412]: + - code [ref=e7413]: "## Audience-Aware Disclosure *(mandatory)*" + - row "142 +" [ref=e7414]: + - cell [ref=e7415] + - cell "142" [ref=e7416]: "142" + - cell [ref=e7417] + - cell "+" [ref=e7418]: + - generic [ref=e7419]: + + - cell [ref=e7420]: + - code + - row "143 + | Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" [ref=e7421]: + - cell [ref=e7422] + - cell "143" [ref=e7423]: "143" + - cell [ref=e7424] + - cell "+" [ref=e7425]: + - generic [ref=e7426]: + + - cell "| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" [ref=e7427]: + - code [ref=e7428]: "| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" + - row "144 + |---|---|---|---|---|---|---|---|" [ref=e7429]: + - cell [ref=e7430] + - cell "144" [ref=e7431]: "144" + - cell [ref=e7432] + - cell "+" [ref=e7433]: + - generic [ref=e7434]: + + - cell "|---|---|---|---|---|---|---|---|" [ref=e7435]: + - code [ref=e7436]: "|---|---|---|---|---|---|---|---|" + - 'row "145 + | Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" [ref=e7437]': + - cell [ref=e7438] + - cell "145" [ref=e7439]: "145" + - cell [ref=e7440] + - cell "+" [ref=e7441]: + - generic [ref=e7442]: + + - 'cell "| Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" [ref=e7443]': + - code [ref=e7444]: "| Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" + - row "146 + | Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" [ref=e7445]: + - cell [ref=e7446] + - cell "146" [ref=e7447]: "146" + - cell [ref=e7448] + - cell "+" [ref=e7449]: + - generic [ref=e7450]: + + - cell "| Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" [ref=e7451]: + - code [ref=e7452]: "| Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" + - row "147 + | Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" [ref=e7453]: + - cell [ref=e7454] + - cell "147" [ref=e7455]: "147" + - cell [ref=e7456] + - cell "+" [ref=e7457]: + - generic [ref=e7458]: + + - cell "| Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" [ref=e7459]: + - code [ref=e7460]: "| Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" + - row "148 +" [ref=e7461]: + - cell [ref=e7462] + - cell "148" [ref=e7463]: "148" + - cell [ref=e7464] + - cell "+" [ref=e7465]: + - generic [ref=e7466]: + + - cell [ref=e7467]: + - code + - 'row "149 + ## UI/UX Surface Classification *(mandatory)*" [ref=e7468]': + - cell [ref=e7469] + - cell "149" [ref=e7470]: "149" + - cell [ref=e7471] + - cell "+" [ref=e7472]: + - generic [ref=e7473]: + + - cell "## UI/UX Surface Classification *(mandatory)*" [ref=e7474]: + - code [ref=e7475]: "## UI/UX Surface Classification *(mandatory)*" + - row "150 +" [ref=e7476]: + - cell [ref=e7477] + - cell "150" [ref=e7478]: "150" + - cell [ref=e7479] + - cell "+" [ref=e7480]: + - generic [ref=e7481]: + + - cell [ref=e7482]: + - code + - row "151 + | Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" [ref=e7483]: + - cell [ref=e7484] + - cell "151" [ref=e7485]: "151" + - cell [ref=e7486] + - cell "+" [ref=e7487]: + - generic [ref=e7488]: + + - cell "| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" [ref=e7489]: + - code [ref=e7490]: "| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" + - row "152 + |---|---|---|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7491]: + - cell [ref=e7492] + - cell "152" [ref=e7493]: "152" + - cell [ref=e7494] + - cell "+" [ref=e7495]: + - generic [ref=e7496]: + + - cell "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7497]: + - code [ref=e7498]: "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|" + - 'row "153 + | Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" [ref=e7499]': + - cell [ref=e7500] + - cell "153" [ref=e7501]: "153" + - cell [ref=e7502] + - cell "+" [ref=e7503]: + - generic [ref=e7504]: + + - 'cell "| Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" [ref=e7505]': + - code [ref=e7506]: "| Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" + - 'row "154 + | Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" [ref=e7507]': + - cell [ref=e7508] + - cell "154" [ref=e7509]: "154" + - cell [ref=e7510] + - cell "+" [ref=e7511]: + - generic [ref=e7512]: + + - 'cell "| Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" [ref=e7513]': + - code [ref=e7514]: "| Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" + - 'row "155 + | Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" [ref=e7515]': + - cell [ref=e7516] + - cell "155" [ref=e7517]: "155" + - cell [ref=e7518] + - cell "+" [ref=e7519]: + - generic [ref=e7520]: + + - 'cell "| Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" [ref=e7521]': + - code [ref=e7522]: "| Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" + - row "156 +" [ref=e7523]: + - cell [ref=e7524] + - cell "156" [ref=e7525]: "156" + - cell [ref=e7526] + - cell "+" [ref=e7527]: + - generic [ref=e7528]: + + - cell [ref=e7529]: + - code + - 'row "157 + ## Operator Surface Contract *(mandatory)*" [ref=e7530]': + - cell [ref=e7531] + - cell "157" [ref=e7532]: "157" + - cell [ref=e7533] + - cell "+" [ref=e7534]: + - generic [ref=e7535]: + + - cell "## Operator Surface Contract *(mandatory)*" [ref=e7536]: + - code [ref=e7537]: "## Operator Surface Contract *(mandatory)*" + - row "158 +" [ref=e7538]: + - cell [ref=e7539] + - cell "158" [ref=e7540]: "158" + - cell [ref=e7541] + - cell "+" [ref=e7542]: + - generic [ref=e7543]: + + - cell [ref=e7544]: + - code + - row "159 + | Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" [ref=e7545]: + - cell [ref=e7546] + - cell "159" [ref=e7547]: "159" + - cell [ref=e7548] + - cell "+" [ref=e7549]: + - generic [ref=e7550]: + + - cell "| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" [ref=e7551]: + - code [ref=e7552]: "| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" + - row "160 + |---|---|---|---|---|---|---|---|---|---|---|" [ref=e7553]: + - cell [ref=e7554] + - cell "160" [ref=e7555]: "160" + - cell [ref=e7556] + - cell "+" [ref=e7557]: + - generic [ref=e7558]: + + - cell "|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7559]: + - code [ref=e7560]: "|---|---|---|---|---|---|---|---|---|---|---|" + - row "161 + | Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" [ref=e7561]: + - cell [ref=e7562] + - cell "161" [ref=e7563]: "161" + - cell [ref=e7564] + - cell "+" [ref=e7565]: + - generic [ref=e7566]: + + - cell "| Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" [ref=e7567]: + - code [ref=e7568]: "| Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" + - row "162 + | Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" [ref=e7569]: + - cell [ref=e7570] + - cell "162" [ref=e7571]: "162" + - cell [ref=e7572] + - cell "+" [ref=e7573]: + - generic [ref=e7574]: + + - cell "| Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" [ref=e7575]: + - code [ref=e7576]: "| Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" + - row "163 + | Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" [ref=e7577]: + - cell [ref=e7578] + - cell "163" [ref=e7579]: "163" + - cell [ref=e7580] + - cell "+" [ref=e7581]: + - generic [ref=e7582]: + + - cell "| Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" [ref=e7583]: + - code [ref=e7584]: "| Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" + - row "164 +" [ref=e7585]: + - cell [ref=e7586] + - cell "164" [ref=e7587]: "164" + - cell [ref=e7588] + - cell "+" [ref=e7589]: + - generic [ref=e7590]: + + - cell [ref=e7591]: + - code + - 'row "165 + ## Proportionality Review *(mandatory when structural complexity is introduced)*" [ref=e7592]': + - cell [ref=e7593] + - cell "165" [ref=e7594]: "165" + - cell [ref=e7595] + - cell "+" [ref=e7596]: + - generic [ref=e7597]: + + - cell "## Proportionality Review *(mandatory when structural complexity is introduced)*" [ref=e7598]: + - code [ref=e7599]: "## Proportionality Review *(mandatory when structural complexity is introduced)*" + - row "166 +" [ref=e7600]: + - cell [ref=e7601] + - cell "166" [ref=e7602]: "166" + - cell [ref=e7603] + - cell "+" [ref=e7604]: + - generic [ref=e7605]: + + - cell [ref=e7606]: + - code + - 'row "167 + - **New source of truth?**: no" [ref=e7607]': + - cell [ref=e7608] + - cell "167" [ref=e7609]: "167" + - cell [ref=e7610] + - cell "+" [ref=e7611]: + - generic [ref=e7612]: + + - 'cell "- **New source of truth?**: no" [ref=e7613]': + - code [ref=e7614]: "- **New source of truth?**: no" + - 'row "168 + - **New persisted entity/table/artifact?**: no" [ref=e7615]': + - cell [ref=e7616] + - cell "168" [ref=e7617]: "168" + - cell [ref=e7618] + - cell "+" [ref=e7619]: + - generic [ref=e7620]: + + - 'cell "- **New persisted entity/table/artifact?**: no" [ref=e7621]': + - code [ref=e7622]: "- **New persisted entity/table/artifact?**: no" + - 'row "169 + - **New abstraction?**: no by default; prefer extending existing helpers" [ref=e7623]': + - cell [ref=e7624] + - cell "169" [ref=e7625]: "169" + - cell [ref=e7626] + - cell "+" [ref=e7627]: + - generic [ref=e7628]: + + - 'cell "- **New abstraction?**: no by default; prefer extending existing helpers" [ref=e7629]': + - code [ref=e7630]: "- **New abstraction?**: no by default; prefer extending existing helpers" + - 'row "170 + - **New enum/state/reason family?**: no" [ref=e7631]': + - cell [ref=e7632] + - cell "170" [ref=e7633]: "170" + - cell [ref=e7634] + - cell "+" [ref=e7635]: + - generic [ref=e7636]: + + - 'cell "- **New enum/state/reason family?**: no" [ref=e7637]': + - code [ref=e7638]: "- **New enum/state/reason family?**: no" + - 'row "171 + - **New cross-domain UI framework/taxonomy?**: no" [ref=e7639]': + - cell [ref=e7640] + - cell "171" [ref=e7641]: "171" + - cell [ref=e7642] + - cell "+" [ref=e7643]: + - generic [ref=e7644]: + + - 'cell "- **New cross-domain UI framework/taxonomy?**: no" [ref=e7645]': + - code [ref=e7646]: "- **New cross-domain UI framework/taxonomy?**: no" + - 'row "172 + - **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" [ref=e7647]': + - cell [ref=e7648] + - cell "172" [ref=e7649]: "172" + - cell [ref=e7650] + - cell "+" [ref=e7651]: + - generic [ref=e7652]: + + - 'cell "- **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" [ref=e7653]': + - code [ref=e7654]: "- **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" + - 'row "173 + - **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" [ref=e7655]': + - cell [ref=e7656] + - cell "173" [ref=e7657]: "173" + - cell [ref=e7658] + - cell "+" [ref=e7659]: + - generic [ref=e7660]: + + - 'cell "- **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" [ref=e7661]': + - code [ref=e7662]: "- **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" + - 'row "174 + - **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" [ref=e7663]': + - cell [ref=e7664] + - cell "174" [ref=e7665]: "174" + - cell [ref=e7666] + - cell "+" [ref=e7667]: + - generic [ref=e7668]: + + - 'cell "- **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" [ref=e7669]': + - code [ref=e7670]: "- **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" + - 'row "175 + - **Ownership cost**: bounded shared-helper review burden plus focused tests" [ref=e7671]': + - cell [ref=e7672] + - cell "175" [ref=e7673]: "175" + - cell [ref=e7674] + - cell "+" [ref=e7675]: + - generic [ref=e7676]: + + - 'cell "- **Ownership cost**: bounded shared-helper review burden plus focused tests" [ref=e7677]': + - code [ref=e7678]: "- **Ownership cost**: bounded shared-helper review burden plus focused tests" + - 'row "176 + - **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" [ref=e7679]': + - cell [ref=e7680] + - cell "176" [ref=e7681]: "176" + - cell [ref=e7682] + - cell "+" [ref=e7683]: + - generic [ref=e7684]: + + - 'cell "- **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" [ref=e7685]': + - code [ref=e7686]: "- **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" + - 'row "177 + - **Release truth**: current-release operator-trust correction" [ref=e7687]': + - cell [ref=e7688] + - cell "177" [ref=e7689]: "177" + - cell [ref=e7690] + - cell "+" [ref=e7691]: + - generic [ref=e7692]: + + - 'cell "- **Release truth**: current-release operator-trust correction" [ref=e7693]': + - code [ref=e7694]: "- **Release truth**: current-release operator-trust correction" + - row "178 +" [ref=e7695]: + - cell [ref=e7696] + - cell "178" [ref=e7697]: "178" + - cell [ref=e7698] + - cell "+" [ref=e7699]: + - generic [ref=e7700]: + + - cell [ref=e7701]: + - code + - 'row "179 + ## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" [ref=e7702]': + - cell [ref=e7703] + - cell "179" [ref=e7704]: "179" + - cell [ref=e7705] + - cell "+" [ref=e7706]: + - generic [ref=e7707]: + + - cell "## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" [ref=e7708]: + - code [ref=e7709]: "## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" + - row "180 +" [ref=e7710]: + - cell [ref=e7711] + - cell "180" [ref=e7712]: "180" + - cell [ref=e7713] + - cell "+" [ref=e7714]: + - generic [ref=e7715]: + + - cell [ref=e7716]: + - code + - 'row "181 + - **Test purpose / classification**: Unit + Feature" [ref=e7717]': + - cell [ref=e7718] + - cell "181" [ref=e7719]: "181" + - cell [ref=e7720] + - cell "+" [ref=e7721]: + - generic [ref=e7722]: + + - 'cell "- **Test purpose / classification**: Unit + Feature" [ref=e7723]': + - code [ref=e7724]: "- **Test purpose / classification**: Unit + Feature" + - 'row "182 + - **Validation lane(s)**: fast-feedback, confidence" [ref=e7725]': + - cell [ref=e7726] + - cell "182" [ref=e7727]: "182" + - cell [ref=e7728] + - cell "+" [ref=e7729]: + - generic [ref=e7730]: + + - 'cell "- **Validation lane(s)**: fast-feedback, confidence" [ref=e7731]': + - code [ref=e7732]: "- **Validation lane(s)**: fast-feedback, confidence" + - 'row "183 + - **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" [ref=e7733]': + - cell [ref=e7734] + - cell "183" [ref=e7735]: "183" + - cell [ref=e7736] + - cell "+" [ref=e7737]: + - generic [ref=e7738]: + + - 'cell "- **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" [ref=e7739]': + - code [ref=e7740]: "- **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" + - row "184 + - **New or expanded test families**:" [ref=e7741]: + - cell [ref=e7742] + - cell "184" [ref=e7743]: "184" + - cell [ref=e7744] + - cell "+" [ref=e7745]: + - generic [ref=e7746]: + + - cell "- **New or expanded test families**:" [ref=e7747]: + - code [ref=e7748]: "- **New or expanded test families**:" + - 'row "185 + - `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7749]': + - cell [ref=e7750] + - cell "185" [ref=e7751]: "185" + - cell [ref=e7752] + - cell "+" [ref=e7753]: + - generic [ref=e7754]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7755]': + - code [ref=e7756]: "- `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "186 + - `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" [ref=e7757]': + - cell [ref=e7758] + - cell "186" [ref=e7759]: "186" + - cell [ref=e7760] + - cell "+" [ref=e7761]: + - generic [ref=e7762]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" [ref=e7763]': + - code [ref=e7764]: "- `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" + - 'row "187 + - `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e7765]': + - cell [ref=e7766] + - cell "187" [ref=e7767]: "187" + - cell [ref=e7768] + - cell "+" [ref=e7769]: + - generic [ref=e7770]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e7771]': + - code [ref=e7772]: "- `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" + - 'row "188 + - `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" [ref=e7773]': + - cell [ref=e7774] + - cell "188" [ref=e7775]: "188" + - cell [ref=e7776] + - cell "+" [ref=e7777]: + - generic [ref=e7778]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" [ref=e7779]': + - code [ref=e7780]: "- `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" + - 'row "189 + - `apps/platform/tests/Feature/MonitoringOperationsTest.php`" [ref=e7781]': + - cell [ref=e7782] + - cell "189" [ref=e7783]: "189" + - cell [ref=e7784] + - cell "+" [ref=e7785]: + - generic [ref=e7786]: + + - 'cell "- `apps/platform/tests/Feature/MonitoringOperationsTest.php`" [ref=e7787]': + - code [ref=e7788]: "- `apps/platform/tests/Feature/MonitoringOperationsTest.php`" + - 'row "190 + - `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" [ref=e7789]': + - cell [ref=e7790] + - cell "190" [ref=e7791]: "190" + - cell [ref=e7792] + - cell "+" [ref=e7793]: + - generic [ref=e7794]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" [ref=e7795]': + - code [ref=e7796]: "- `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" + - 'row "191 + - `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e7797]': + - cell [ref=e7798] + - cell "191" [ref=e7799]: "191" + - cell [ref=e7800] + - cell "+" [ref=e7801]: + - generic [ref=e7802]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e7803]': + - code [ref=e7804]: "- `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" + - 'row "192 + - `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" [ref=e7805]': + - cell [ref=e7806] + - cell "192" [ref=e7807]: "192" + - cell [ref=e7808] + - cell "+" [ref=e7809]: + - generic [ref=e7810]: + + - 'cell "- `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" [ref=e7811]': + - code [ref=e7812]: "- `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" + - 'row "193 + - `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7813]': + - cell [ref=e7814] + - cell "193" [ref=e7815]: "193" + - cell [ref=e7816] + - cell "+" [ref=e7817]: + - generic [ref=e7818]: + + - 'cell "- `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7819]': + - code [ref=e7820]: "- `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "194 + - **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" [ref=e7821]': + - cell [ref=e7822] + - cell "194" [ref=e7823]: "194" + - cell [ref=e7824] + - cell "+" [ref=e7825]: + - generic [ref=e7826]: + + - 'cell "- **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" [ref=e7827]': + - code [ref=e7828]: "- **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" + - 'row "195 + - **Heavy-family visibility / justification**: none" [ref=e7829]': + - cell [ref=e7830] + - cell "195" [ref=e7831]: "195" + - cell [ref=e7832] + - cell "+" [ref=e7833]: + - generic [ref=e7834]: + + - 'cell "- **Heavy-family visibility / justification**: none" [ref=e7835]': + - code [ref=e7836]: "- **Heavy-family visibility / justification**: none" + - 'row "196 + - **Special surface test profile**: monitoring-state-page plus shared-detail-family" [ref=e7837]': + - cell [ref=e7838] + - cell "196" [ref=e7839]: "196" + - cell [ref=e7840] + - cell "+" [ref=e7841]: + - generic [ref=e7842]: + + - 'cell "- **Special surface test profile**: monitoring-state-page plus shared-detail-family" [ref=e7843]': + - code [ref=e7844]: "- **Special surface test profile**: monitoring-state-page plus shared-detail-family" + - 'row "197 + - **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" [ref=e7845]': + - cell [ref=e7846] + - cell "197" [ref=e7847]: "197" + - cell [ref=e7848] + - cell "+" [ref=e7849]: + - generic [ref=e7850]: + + - 'cell "- **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" [ref=e7851]': + - code [ref=e7852]: "- **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" + - 'row "198 + - **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" [ref=e7853]': + - cell [ref=e7854] + - cell "198" [ref=e7855]: "198" + - cell [ref=e7856] + - cell "+" [ref=e7857]: + - generic [ref=e7858]: + + - 'cell "- **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" [ref=e7859]': + - code [ref=e7860]: "- **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" + - 'row "199 + - **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" [ref=e7861]': + - cell [ref=e7862] + - cell "199" [ref=e7863]: "199" + - cell [ref=e7864] + - cell "+" [ref=e7865]: + - generic [ref=e7866]: + + - 'cell "- **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" [ref=e7867]': + - code [ref=e7868]: "- **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" + - 'row "200 + - **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" [ref=e7869]': + - cell [ref=e7870] + - cell "200" [ref=e7871]: "200" + - cell [ref=e7872] + - cell "+" [ref=e7873]: + - generic [ref=e7874]: + + - 'cell "- **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" [ref=e7875]': + - code [ref=e7876]: "- **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" + - 'row "201 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e7877]': + - cell [ref=e7878] + - cell "201" [ref=e7879]: "201" + - cell [ref=e7880] + - cell "+" [ref=e7881]: + - generic [ref=e7882]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e7883]': + - code [ref=e7884]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - row "202 + - **Planned validation commands**:" [ref=e7885]: + - cell [ref=e7886] + - cell "202" [ref=e7887]: "202" + - cell [ref=e7888] + - cell "+" [ref=e7889]: + - generic [ref=e7890]: + + - cell "- **Planned validation commands**:" [ref=e7891]: + - code [ref=e7892]: "- **Planned validation commands**:" + - 'row "203 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7893]': + - cell [ref=e7894] + - cell "203" [ref=e7895]: "203" + - cell [ref=e7896] + - cell "+" [ref=e7897]: + - generic [ref=e7898]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7899]': + - code [ref=e7900]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "204 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7901]': + - cell [ref=e7902] + - cell "204" [ref=e7903]: "204" + - cell [ref=e7904] + - cell "+" [ref=e7905]: + - generic [ref=e7906]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7907]': + - code [ref=e7908]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "205 + - `git diff --check`" [ref=e7909]': + - cell [ref=e7910] + - cell "205" [ref=e7911]: "205" + - cell [ref=e7912] + - cell "+" [ref=e7913]: + - generic [ref=e7914]: + + - 'cell "- `git diff --check`" [ref=e7915]': + - code [ref=e7916]: "- `git diff --check`" + - row "206 +" [ref=e7917]: + - cell [ref=e7918] + - cell "206" [ref=e7919]: "206" + - cell [ref=e7920] + - cell "+" [ref=e7921]: + - generic [ref=e7922]: + + - cell [ref=e7923]: + - code + - 'row "207 + ## User Scenarios & Testing *(mandatory)*" [ref=e7924]': + - cell [ref=e7925] + - cell "207" [ref=e7926]: "207" + - cell [ref=e7927] + - cell "+" [ref=e7928]: + - generic [ref=e7929]: + + - cell "## User Scenarios & Testing *(mandatory)*" [ref=e7930]: + - code [ref=e7931]: "## User Scenarios & Testing *(mandatory)*" + - row "208 +" [ref=e7932]: + - cell [ref=e7933] + - cell "208" [ref=e7934]: "208" + - cell [ref=e7935] + - cell "+" [ref=e7936]: + - generic [ref=e7937]: + + - cell [ref=e7938]: + - code + - 'row "209 + ### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e7939]': + - cell [ref=e7940] + - cell "209" [ref=e7941]: "209" + - cell [ref=e7942] + - cell "+" [ref=e7943]: + - generic [ref=e7944]: + + - 'cell "### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e7945]': + - code [ref=e7946]: "### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" + - row "210 +" [ref=e7947]: + - cell [ref=e7948] + - cell "210" [ref=e7949]: "210" + - cell [ref=e7950] + - cell "+" [ref=e7951]: + - generic [ref=e7952]: + + - cell [ref=e7953]: + - code + - row "211 + As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state." [ref=e7954]: + - cell [ref=e7955] + - cell "211" [ref=e7956]: "211" + - cell [ref=e7957] + - cell "+" [ref=e7958]: + - generic [ref=e7959]: + + - cell "As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state." [ref=e7960]: + - code [ref=e7961]: As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state. + - row "212 +" [ref=e7962]: + - cell [ref=e7963] + - cell "212" [ref=e7964]: "212" + - cell [ref=e7965] + - cell "+" [ref=e7966]: + - generic [ref=e7967]: + + - cell [ref=e7968]: + - code + - 'row "213 + **Why this priority**: This is the direct trust gap visible in current runtime surfaces." [ref=e7969]': + - cell [ref=e7970] + - cell "213" [ref=e7971]: "213" + - cell [ref=e7972] + - cell "+" [ref=e7973]: + - generic [ref=e7974]: + + - 'cell "**Why this priority**: This is the direct trust gap visible in current runtime surfaces." [ref=e7975]': + - code [ref=e7976]: "**Why this priority**: This is the direct trust gap visible in current runtime surfaces." + - row "214 +" [ref=e7977]: + - cell [ref=e7978] + - cell "214" [ref=e7979]: "214" + - cell [ref=e7980] + - cell "+" [ref=e7981]: + - generic [ref=e7982]: + + - cell [ref=e7983]: + - code + - 'row "215 + **Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." [ref=e7984]': + - cell [ref=e7985] + - cell "215" [ref=e7986]: "215" + - cell [ref=e7987] + - cell "+" [ref=e7988]: + - generic [ref=e7989]: + + - 'cell "**Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." [ref=e7990]': + - code [ref=e7991]: "**Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." + - row "216 +" [ref=e7992]: + - cell [ref=e7993] + - cell "216" [ref=e7994]: "216" + - cell [ref=e7995] + - cell "+" [ref=e7996]: + - generic [ref=e7997]: + + - cell [ref=e7998]: + - code + - row "217 + **Acceptance Scenarios**:" [ref=e7999]: + - cell [ref=e8000] + - cell "217" [ref=e8001]: "217" + - cell [ref=e8002] + - cell "+" [ref=e8003]: + - generic [ref=e8004]: + + - cell "**Acceptance Scenarios**:" [ref=e8005]: + - code [ref=e8006]: "**Acceptance Scenarios**:" + - row "218 +" [ref=e8007]: + - cell [ref=e8008] + - cell "218" [ref=e8009]: "218" + - cell [ref=e8010] + - cell "+" [ref=e8011]: + - generic [ref=e8012]: + + - cell [ref=e8013]: + - code + - 'row "219 + 1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." [ref=e8014]': + - cell [ref=e8015] + - cell "219" [ref=e8016]: "219" + - cell [ref=e8017] + - cell "+" [ref=e8018]: + - generic [ref=e8019]: + + - 'cell "1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." [ref=e8020]': + - code [ref=e8021]: "1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." + - row "220 + 2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale." [ref=e8022]: + - cell [ref=e8023] + - cell "220" [ref=e8024]: "220" + - cell [ref=e8025] + - cell "+" [ref=e8026]: + - generic [ref=e8027]: + + - cell "2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale." [ref=e8028]: + - code [ref=e8029]: 2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale. + - row "221 +" [ref=e8030]: + - cell [ref=e8031] + - cell "221" [ref=e8032]: "221" + - cell [ref=e8033] + - cell "+" [ref=e8034]: + - generic [ref=e8035]: + + - cell [ref=e8036]: + - code + - 'row "222 + ### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e8037]': + - cell [ref=e8038] + - cell "222" [ref=e8039]: "222" + - cell [ref=e8040] + - cell "+" [ref=e8041]: + - generic [ref=e8042]: + + - 'cell "### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e8043]': + - code [ref=e8044]: "### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" + - row "223 +" [ref=e8045]: + - cell [ref=e8046] + - cell "223" [ref=e8047]: "223" + - cell [ref=e8048] + - cell "+" [ref=e8049]: + - generic [ref=e8050]: + + - cell [ref=e8051]: + - code + - row "224 + As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics." [ref=e8052]: + - cell [ref=e8053] + - cell "224" [ref=e8054]: "224" + - cell [ref=e8055] + - cell "+" [ref=e8056]: + - generic [ref=e8057]: + + - cell "As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics." [ref=e8058]: + - code [ref=e8059]: As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics. + - row "225 +" [ref=e8060]: + - cell [ref=e8061] + - cell "225" [ref=e8062]: "225" + - cell [ref=e8063] + - cell "+" [ref=e8064]: + - generic [ref=e8065]: + + - cell [ref=e8066]: + - code + - 'row "226 + **Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." [ref=e8067]': + - cell [ref=e8068] + - cell "226" [ref=e8069]: "226" + - cell [ref=e8070] + - cell "+" [ref=e8071]: + - generic [ref=e8072]: + + - 'cell "**Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." [ref=e8073]': + - code [ref=e8074]: "**Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." + - row "227 +" [ref=e8075]: + - cell [ref=e8076] + - cell "227" [ref=e8077]: "227" + - cell [ref=e8078] + - cell "+" [ref=e8079]: + - generic [ref=e8080]: + + - cell [ref=e8081]: + - code + - 'row "228 + **Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." [ref=e8082]': + - cell [ref=e8083] + - cell "228" [ref=e8084]: "228" + - cell [ref=e8085] + - cell "+" [ref=e8086]: + - generic [ref=e8087]: + + - 'cell "**Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." [ref=e8088]': + - code [ref=e8089]: "**Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." + - row "229 +" [ref=e8090]: + - cell [ref=e8091] + - cell "229" [ref=e8092]: "229" + - cell [ref=e8093] + - cell "+" [ref=e8094]: + - generic [ref=e8095]: + + - cell [ref=e8096]: + - code + - row "230 + **Acceptance Scenarios**:" [ref=e8097]: + - cell [ref=e8098] + - cell "230" [ref=e8099]: "230" + - cell [ref=e8100] + - cell "+" [ref=e8101]: + - generic [ref=e8102]: + + - cell "**Acceptance Scenarios**:" [ref=e8103]: + - code [ref=e8104]: "**Acceptance Scenarios**:" + - row "231 +" [ref=e8105]: + - cell [ref=e8106] + - cell "231" [ref=e8107]: "231" + - cell [ref=e8108] + - cell "+" [ref=e8109]: + - generic [ref=e8110]: + + - cell [ref=e8111]: + - code + - row "232 + 1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render." [ref=e8112]: + - cell [ref=e8113] + - cell "232" [ref=e8114]: "232" + - cell [ref=e8115] + - cell "+" [ref=e8116]: + - generic [ref=e8117]: + + - cell "1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render." [ref=e8118]: + - code [ref=e8119]: 1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render. + - row "233 + 2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance." [ref=e8120]: + - cell [ref=e8121] + - cell "233" [ref=e8122]: "233" + - cell [ref=e8123] + - cell "+" [ref=e8124]: + - generic [ref=e8125]: + + - cell "2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance." [ref=e8126]: + - code [ref=e8127]: 2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance. + - row "234 +" [ref=e8128]: + - cell [ref=e8129] + - cell "234" [ref=e8130]: "234" + - cell [ref=e8131] + - cell "+" [ref=e8132]: + - generic [ref=e8133]: + + - cell [ref=e8134]: + - code + - 'row "235 + ### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e8135]': + - cell [ref=e8136] + - cell "235" [ref=e8137]: "235" + - cell [ref=e8138] + - cell "+" [ref=e8139]: + - generic [ref=e8140]: + + - 'cell "### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e8141]': + - code [ref=e8142]: "### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" + - row "236 +" [ref=e8143]: + - cell [ref=e8144] + - cell "236" [ref=e8145]: "236" + - cell [ref=e8146] + - cell "+" [ref=e8147]: + - generic [ref=e8148]: + + - cell [ref=e8149]: + - code + - row "237 + As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine." [ref=e8150]: + - cell [ref=e8151] + - cell "237" [ref=e8152]: "237" + - cell [ref=e8153] + - cell "+" [ref=e8154]: + - generic [ref=e8155]: + + - cell "As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine." [ref=e8156]: + - code [ref=e8157]: As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine. + - row "238 +" [ref=e8158]: + - cell [ref=e8159] + - cell "238" [ref=e8160]: "238" + - cell [ref=e8161] + - cell "+" [ref=e8162]: + - generic [ref=e8163]: + + - cell [ref=e8164]: + - code + - 'row "239 + **Why this priority**: The slice must stay narrow and avoid speculative framework growth." [ref=e8165]': + - cell [ref=e8166] + - cell "239" [ref=e8167]: "239" + - cell [ref=e8168] + - cell "+" [ref=e8169]: + - generic [ref=e8170]: + + - 'cell "**Why this priority**: The slice must stay narrow and avoid speculative framework growth." [ref=e8171]': + - code [ref=e8172]: "**Why this priority**: The slice must stay narrow and avoid speculative framework growth." + - row "240 +" [ref=e8173]: + - cell [ref=e8174] + - cell "240" [ref=e8175]: "240" + - cell [ref=e8176] + - cell "+" [ref=e8177]: + - generic [ref=e8178]: + + - cell [ref=e8179]: + - code + - 'row "241 + **Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." [ref=e8180]': + - cell [ref=e8181] + - cell "241" [ref=e8182]: "241" + - cell [ref=e8183] + - cell "+" [ref=e8184]: + - generic [ref=e8185]: + + - 'cell "**Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." [ref=e8186]': + - code [ref=e8187]: "**Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." + - row "242 +" [ref=e8188]: + - cell [ref=e8189] + - cell "242" [ref=e8190]: "242" + - cell [ref=e8191] + - cell "+" [ref=e8192]: + - generic [ref=e8193]: + + - cell [ref=e8194]: + - code + - row "243 + **Acceptance Scenarios**:" [ref=e8195]: + - cell [ref=e8196] + - cell "243" [ref=e8197]: "243" + - cell [ref=e8198] + - cell "+" [ref=e8199]: + - generic [ref=e8200]: + + - cell "**Acceptance Scenarios**:" [ref=e8201]: + - code [ref=e8202]: "**Acceptance Scenarios**:" + - row "244 +" [ref=e8203]: + - cell [ref=e8204] + - cell "244" [ref=e8205]: "244" + - cell [ref=e8206] + - cell "+" [ref=e8207]: + - generic [ref=e8208]: + + - cell [ref=e8209]: + - code + - 'row "245 + 1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." [ref=e8210]': + - cell [ref=e8211] + - cell "245" [ref=e8212]: "245" + - cell [ref=e8213] + - cell "+" [ref=e8214]: + - generic [ref=e8215]: + + - 'cell "1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." [ref=e8216]': + - code [ref=e8217]: "1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." + - row "246 + 2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting." [ref=e8218]: + - cell [ref=e8219] + - cell "246" [ref=e8220]: "246" + - cell [ref=e8221] + - cell "+" [ref=e8222]: + - generic [ref=e8223]: + + - cell "2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting." [ref=e8224]: + - code [ref=e8225]: 2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting. + - row "247 +" [ref=e8226]: + - cell [ref=e8227] + - cell "247" [ref=e8228]: "247" + - cell [ref=e8229] + - cell "+" [ref=e8230]: + - generic [ref=e8231]: + + - cell [ref=e8232]: + - code + - 'row "248 + ### Edge Cases" [ref=e8233]': + - cell [ref=e8234] + - cell "248" [ref=e8235]: "248" + - cell [ref=e8236] + - cell "+" [ref=e8237]: + - generic [ref=e8238]: + + - cell "### Edge Cases" [ref=e8239]: + - code [ref=e8240]: "### Edge Cases" + - row "249 +" [ref=e8241]: + - cell [ref=e8242] + - cell "249" [ref=e8243]: "249" + - cell [ref=e8244] + - cell "+" [ref=e8245]: + - generic [ref=e8246]: + + - cell [ref=e8247]: + - code + - row "250 + - A queued run is stale but has no trustworthy worker correlation or job identifier." [ref=e8248]: + - cell [ref=e8249] + - cell "250" [ref=e8250]: "250" + - cell [ref=e8251] + - cell "+" [ref=e8252]: + - generic [ref=e8253]: + + - cell "- A queued run is stale but has no trustworthy worker correlation or job identifier." [ref=e8254]: + - code [ref=e8255]: "- A queued run is stale but has no trustworthy worker correlation or job identifier." + - row "251 + - A running run has determinate counts but is still past the lifecycle window." [ref=e8256]: + - cell [ref=e8257] + - cell "251" [ref=e8258]: "251" + - cell [ref=e8259] + - cell "+" [ref=e8260]: + - generic [ref=e8261]: + + - cell "- A running run has determinate counts but is still past the lifecycle window." [ref=e8262]: + - code [ref=e8263]: "- A running run has determinate counts but is still past the lifecycle window." + - row "252 + - A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." [ref=e8264]: + - cell [ref=e8265] + - cell "252" [ref=e8266]: "252" + - cell [ref=e8267] + - cell "+" [ref=e8268]: + - generic [ref=e8269]: + + - cell "- A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." [ref=e8270]: + - code [ref=e8271]: "- A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." + - 'row "253 + - A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." [ref=e8272]': + - cell [ref=e8273] + - cell "253" [ref=e8274]: "253" + - cell [ref=e8275] + - cell "+" [ref=e8276]: + - generic [ref=e8277]: + + - 'cell "- A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." [ref=e8278]': + - code [ref=e8279]: "- A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." + - row "254 + - A system-initiated run has no human initiator but still needs honest lifecycle wording." [ref=e8280]: + - cell [ref=e8281] + - cell "254" [ref=e8282]: "254" + - cell [ref=e8283] + - cell "+" [ref=e8284]: + - generic [ref=e8285]: + + - cell "- A system-initiated run has no human initiator but still needs honest lifecycle wording." [ref=e8286]: + - code [ref=e8287]: "- A system-initiated run has no human initiator but still needs honest lifecycle wording." + - row "255 + - Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." [ref=e8288]: + - cell [ref=e8289] + - cell "255" [ref=e8290]: "255" + - cell [ref=e8291] + - cell "+" [ref=e8292]: + - generic [ref=e8293]: + + - cell "- Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." [ref=e8294]: + - code [ref=e8295]: "- Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." + - row "256 +" [ref=e8296]: + - cell [ref=e8297] + - cell "256" [ref=e8298]: "256" + - cell [ref=e8299] + - cell "+" [ref=e8300]: + - generic [ref=e8301]: + + - cell [ref=e8302]: + - code + - 'row "257 + ## Requirements *(mandatory)*" [ref=e8303]': + - cell [ref=e8304] + - cell "257" [ref=e8305]: "257" + - cell [ref=e8306] + - cell "+" [ref=e8307]: + - generic [ref=e8308]: + + - cell "## Requirements *(mandatory)*" [ref=e8309]: + - code [ref=e8310]: "## Requirements *(mandatory)*" + - row "258 +" [ref=e8311]: + - cell [ref=e8312] + - cell "258" [ref=e8313]: "258" + - cell [ref=e8314] + - cell "+" [ref=e8315]: + - generic [ref=e8316]: + + - cell [ref=e8317]: + - code + - 'row "259 + - **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." [ref=e8318]': + - cell [ref=e8319] + - cell "259" [ref=e8320]: "259" + - cell [ref=e8321] + - cell "+" [ref=e8322]: + - generic [ref=e8323]: + + - 'cell "- **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." [ref=e8324]': + - code [ref=e8325]: "- **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." + - 'row "260 + - **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." [ref=e8326]': + - cell [ref=e8327] + - cell "260" [ref=e8328]: "260" + - cell [ref=e8329] + - cell "+" [ref=e8330]: + - generic [ref=e8331]: + + - 'cell "- **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." [ref=e8332]': + - code [ref=e8333]: "- **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." + - 'row "261 + - **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." [ref=e8334]': + - cell [ref=e8335] + - cell "261" [ref=e8336]: "261" + - cell [ref=e8337] + - cell "+" [ref=e8338]: + - generic [ref=e8339]: + + - 'cell "- **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." [ref=e8340]': + - code [ref=e8341]: "- **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." + - 'row "262 + - **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." [ref=e8342]': + - cell [ref=e8343] + - cell "262" [ref=e8344]: "262" + - cell [ref=e8345] + - cell "+" [ref=e8346]: + - generic [ref=e8347]: + + - 'cell "- **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." [ref=e8348]': + - code [ref=e8349]: "- **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." + - 'row "263 + - **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." [ref=e8350]': + - cell [ref=e8351] + - cell "263" [ref=e8352]: "263" + - cell [ref=e8353] + - cell "+" [ref=e8354]: + - generic [ref=e8355]: + + - 'cell "- **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." [ref=e8356]': + - code [ref=e8357]: "- **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." + - 'row "264 + - **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." [ref=e8358]': + - cell [ref=e8359] + - cell "264" [ref=e8360]: "264" + - cell [ref=e8361] + - cell "+" [ref=e8362]: + - generic [ref=e8363]: + + - 'cell "- **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." [ref=e8364]': + - code [ref=e8365]: "- **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." + - 'row "265 + - **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." [ref=e8366]': + - cell [ref=e8367] + - cell "265" [ref=e8368]: "265" + - cell [ref=e8369] + - cell "+" [ref=e8370]: + - generic [ref=e8371]: + + - 'cell "- **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." [ref=e8372]': + - code [ref=e8373]: "- **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." + - 'row "266 + - **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." [ref=e8374]': + - cell [ref=e8375] + - cell "266" [ref=e8376]: "266" + - cell [ref=e8377] + - cell "+" [ref=e8378]: + - generic [ref=e8379]: + + - 'cell "- **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." [ref=e8380]': + - code [ref=e8381]: "- **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." + - 'row "267 + - **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." [ref=e8382]': + - cell [ref=e8383] + - cell "267" [ref=e8384]: "267" + - cell [ref=e8385] + - cell "+" [ref=e8386]: + - generic [ref=e8387]: + + - 'cell "- **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." [ref=e8388]': + - code [ref=e8389]: "- **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." + - 'row "268 + - **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." [ref=e8390]': + - cell [ref=e8391] + - cell "268" [ref=e8392]: "268" + - cell [ref=e8393] + - cell "+" [ref=e8394]: + - generic [ref=e8395]: + + - 'cell "- **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." [ref=e8396]': + - code [ref=e8397]: "- **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." + - 'row "269 + - **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." [ref=e8398]': + - cell [ref=e8399] + - cell "269" [ref=e8400]: "269" + - cell [ref=e8401] + - cell "+" [ref=e8402]: + - generic [ref=e8403]: + + - 'cell "- **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." [ref=e8404]': + - code [ref=e8405]: "- **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." + - 'row "270 + - **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." [ref=e8406]': + - cell [ref=e8407] + - cell "270" [ref=e8408]: "270" + - cell [ref=e8409] + - cell "+" [ref=e8410]: + - generic [ref=e8411]: + + - 'cell "- **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." [ref=e8412]': + - code [ref=e8413]: "- **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." + - row "271 +" [ref=e8414]: + - cell [ref=e8415] + - cell "271" [ref=e8416]: "271" + - cell [ref=e8417] + - cell "+" [ref=e8418]: + - generic [ref=e8419]: + + - cell [ref=e8420]: + - code + - 'row "272 + ## Success Criteria *(mandatory)*" [ref=e8421]': + - cell [ref=e8422] + - cell "272" [ref=e8423]: "272" + - cell [ref=e8424] + - cell "+" [ref=e8425]: + - generic [ref=e8426]: + + - cell "## Success Criteria *(mandatory)*" [ref=e8427]: + - code [ref=e8428]: "## Success Criteria *(mandatory)*" + - row "273 +" [ref=e8429]: + - cell [ref=e8430] + - cell "273" [ref=e8431]: "273" + - cell [ref=e8432] + - cell "+" [ref=e8433]: + - generic [ref=e8434]: + + - cell [ref=e8435]: + - code + - 'row "274 + - **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." [ref=e8436]': + - cell [ref=e8437] + - cell "274" [ref=e8438]: "274" + - cell [ref=e8439] + - cell "+" [ref=e8440]: + - generic [ref=e8441]: + + - 'cell "- **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." [ref=e8442]': + - code [ref=e8443]: "- **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." + - 'row "275 + - **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." [ref=e8444]': + - cell [ref=e8445] + - cell "275" [ref=e8446]: "275" + - cell [ref=e8447] + - cell "+" [ref=e8448]: + - generic [ref=e8449]: + + - 'cell "- **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." [ref=e8450]': + - code [ref=e8451]: "- **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." + - 'row "276 + - **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." [ref=e8452]': + - cell [ref=e8453] + - cell "276" [ref=e8454]: "276" + - cell [ref=e8455] + - cell "+" [ref=e8456]: + - generic [ref=e8457]: + + - 'cell "- **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." [ref=e8458]': + - code [ref=e8459]: "- **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." + - 'row "277 + - **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." [ref=e8460]': + - cell [ref=e8461] + - cell "277" [ref=e8462]: "277" + - cell [ref=e8463] + - cell "+" [ref=e8464]: + - generic [ref=e8465]: + + - 'cell "- **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." [ref=e8466]': + - code [ref=e8467]: "- **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." + - row "278 +" [ref=e8468]: + - cell [ref=e8469] + - cell "278" [ref=e8470]: "278" + - cell [ref=e8471] + - cell "+" [ref=e8472]: + - generic [ref=e8473]: + + - cell [ref=e8474]: + - code + - 'row "279 + ## Assumptions" [ref=e8475]': + - cell [ref=e8476] + - cell "279" [ref=e8477]: "279" + - cell [ref=e8478] + - cell "+" [ref=e8479]: + - generic [ref=e8480]: + + - cell "## Assumptions" [ref=e8481]: + - code [ref=e8482]: "## Assumptions" + - row "280 +" [ref=e8483]: + - cell [ref=e8484] + - cell "280" [ref=e8485]: "280" + - cell [ref=e8486] + - cell "+" [ref=e8487]: + - generic [ref=e8488]: + + - cell [ref=e8489]: + - code + - row "281 + - The current contradiction is a derived UX-truth problem, not a missing persistence problem." [ref=e8490]: + - cell [ref=e8491] + - cell "281" [ref=e8492]: "281" + - cell [ref=e8493] + - cell "+" [ref=e8494]: + - generic [ref=e8495]: + + - cell "- The current contradiction is a derived UX-truth problem, not a missing persistence problem." [ref=e8496]: + - code [ref=e8497]: "- The current contradiction is a derived UX-truth problem, not a missing persistence problem." + - row "282 + - Existing lifecycle policy thresholds remain valid for this slice." [ref=e8498]: + - cell [ref=e8499] + - cell "282" [ref=e8500]: "282" + - cell [ref=e8501] + - cell "+" [ref=e8502]: + - generic [ref=e8503]: + + - cell "- Existing lifecycle policy thresholds remain valid for this slice." [ref=e8504]: + - code [ref=e8505]: "- Existing lifecycle policy thresholds remain valid for this slice." + - row "283 + - Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." [ref=e8506]: + - cell [ref=e8507] + - cell "283" [ref=e8508]: "283" + - cell [ref=e8509] + - cell "+" [ref=e8510]: + - generic [ref=e8511]: + + - cell "- Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." [ref=e8512]: + - code [ref=e8513]: "- Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." + - row "284 +" [ref=e8514]: + - cell [ref=e8515] + - cell "284" [ref=e8516]: "284" + - cell [ref=e8517] + - cell "+" [ref=e8518]: + - generic [ref=e8519]: + + - cell [ref=e8520]: + - code + - 'row "285 + ## Risks" [ref=e8521]': + - cell [ref=e8522] + - cell "285" [ref=e8523]: "285" + - cell [ref=e8524] + - cell "+" [ref=e8525]: + - generic [ref=e8526]: + + - cell "## Risks" [ref=e8527]: + - code [ref=e8528]: "## Risks" + - row "286 +" [ref=e8529]: + - cell [ref=e8530] + - cell "286" [ref=e8531]: "286" + - cell [ref=e8532] + - cell "+" [ref=e8533]: + - generic [ref=e8534]: + + - cell [ref=e8535]: + - code + - 'row "287 + - **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." [ref=e8536]': + - cell [ref=e8537] + - cell "287" [ref=e8538]: "287" + - cell [ref=e8539] + - cell "+" [ref=e8540]: + - generic [ref=e8541]: + + - 'cell "- **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." [ref=e8542]': + - code [ref=e8543]: "- **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." + - 'row "288 + - **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." [ref=e8544]': + - cell [ref=e8545] + - cell "288" [ref=e8546]: "288" + - cell [ref=e8547] + - cell "+" [ref=e8548]: + - generic [ref=e8549]: + + - 'cell "- **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." [ref=e8550]': + - code [ref=e8551]: "- **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." + - 'row "289 + - **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." [ref=e8552]': + - cell [ref=e8553] + - cell "289" [ref=e8554]: "289" + - cell [ref=e8555] + - cell "+" [ref=e8556]: + - generic [ref=e8557]: + + - 'cell "- **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." [ref=e8558]': + - code [ref=e8559]: "- **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." + - row "290 +" [ref=e8560]: + - cell [ref=e8561] + - cell "290" [ref=e8562]: "290" + - cell [ref=e8563] + - cell "+" [ref=e8564]: + - generic [ref=e8565]: + + - cell [ref=e8566]: + - code + - 'row "291 + ## Out of Scope" [ref=e8567]': + - cell [ref=e8568] + - cell "291" [ref=e8569]: "291" + - cell [ref=e8570] + - cell "+" [ref=e8571]: + - generic [ref=e8572]: + + - cell "## Out of Scope" [ref=e8573]: + - code [ref=e8574]: "## Out of Scope" + - row "292 +" [ref=e8575]: + - cell [ref=e8576] + - cell "292" [ref=e8577]: "292" + - cell [ref=e8578] + - cell "+" [ref=e8579]: + - generic [ref=e8580]: + + - cell [ref=e8581]: + - code + - row "293 + - Queue worker health automation" [ref=e8582]: + - cell [ref=e8583] + - cell "293" [ref=e8584]: "293" + - cell [ref=e8585] + - cell "+" [ref=e8586]: + - generic [ref=e8587]: + + - cell "- Queue worker health automation" [ref=e8588]: + - code [ref=e8589]: "- Queue worker health automation" + - row "294 + - New scheduler, command, or job families" [ref=e8590]: + - cell [ref=e8591] + - cell "294" [ref=e8592]: "294" + - cell [ref=e8593] + - cell "+" [ref=e8594]: + - generic [ref=e8595]: + + - cell "- New scheduler, command, or job families" [ref=e8596]: + - code [ref=e8597]: "- New scheduler, command, or job families" + - 'row "295 + - New `OperationRun` statuses or outcomes" [ref=e8598]': + - cell [ref=e8599] + - cell "295" [ref=e8600]: "295" + - cell [ref=e8601] + - cell "+" [ref=e8602]: + - generic [ref=e8603]: + + - 'cell "- New `OperationRun` statuses or outcomes" [ref=e8604]': + - code [ref=e8605]: "- New `OperationRun` statuses or outcomes" + - row "296 + - Domain-success reconciliation for review, restore, backup, sync, or export runs" [ref=e8606]: + - cell [ref=e8607] + - cell "296" [ref=e8608]: "296" + - cell [ref=e8609] + - cell "+" [ref=e8610]: + - generic [ref=e8611]: + + - cell "- Domain-success reconciliation for review, restore, backup, sync, or export runs" [ref=e8612]: + - code [ref=e8613]: "- Domain-success reconciliation for review, restore, backup, sync, or export runs" + - row "297 + - Adapter framework expansion" [ref=e8614]: + - cell [ref=e8615] + - cell "297" [ref=e8616]: "297" + - cell [ref=e8617] + - cell "+" [ref=e8618]: + - generic [ref=e8619]: + + - cell "- Adapter framework expansion" [ref=e8620]: + - code [ref=e8621]: "- Adapter framework expansion" + - row "298 + - New Filament resources, routes, or destructive actions" [ref=e8622]: + - cell [ref=e8623] + - cell "298" [ref=e8624]: "298" + - cell [ref=e8625] + - cell "+" [ref=e8626]: + - generic [ref=e8627]: + + - cell "- New Filament resources, routes, or destructive actions" [ref=e8628]: + - code [ref=e8629]: "- New Filament resources, routes, or destructive actions" + - generic [ref=e8630]: + - 'heading "160 160 Änderungen: 160 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/tasks.md Normale Datei Datei anzeigen" [level=4] [ref=e8631]': + - generic [ref=e8632]: + - button [ref=e8633] [cursor=pointer]: + - img [ref=e8634] + - generic [ref=e8636]: + - text: "160" + - 'generic "160 Änderungen: 160 Ergänzungen und 0 Löschungen" [ref=e8637]' + - generic [ref=e8639]: + - link "specs/358-operationrun-queue-truth-foundation/tasks.md" [ref=e8640] [cursor=pointer]: + - /url: "#diff-778998a295ffde42d87399c953196b492df71792" + - button [ref=e8641] [cursor=pointer]: + - img [ref=e8642] + - generic [ref=e8645]: Normale Datei + - link "Datei anzeigen" [ref=e8647] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/tasks.md + - table [ref=e8650]: + - rowgroup [ref=e8657]: + - row "@ -0,0 +1,160 @@" [ref=e8658]: + - cell [ref=e8659] + - cell [ref=e8660] + - cell [ref=e8661] + - cell "@ -0,0 +1,160 @@" [ref=e8662]: + - code [ref=e8663]: "@ -0,0 +1,160 @@" + - 'row "1 + # Tasks: OperationRun Queue Truth Foundation" [ref=e8664]': + - cell [ref=e8665] + - cell "1" [ref=e8666]: "1" + - cell [ref=e8667] + - cell "+" [ref=e8668]: + - generic [ref=e8669]: + + - 'cell "# Tasks: OperationRun Queue Truth Foundation" [ref=e8670]': + - code [ref=e8671]: "# Tasks: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e8672]: + - cell [ref=e8673] + - cell "2" [ref=e8674]: "2" + - cell [ref=e8675] + - cell "+" [ref=e8676]: + - generic [ref=e8677]: + + - cell [ref=e8678]: + - code + - 'row "3 + **Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" [ref=e8679]': + - cell [ref=e8680] + - cell "3" [ref=e8681]: "3" + - cell [ref=e8682] + - cell "+" [ref=e8683]: + - generic [ref=e8684]: + + - 'cell "**Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" [ref=e8685]': + - code [ref=e8686]: "**Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" + - 'row "4 + **Prerequisites**: `spec.md` and `plan.md`" [ref=e8687]': + - cell [ref=e8688] + - cell "4" [ref=e8689]: "4" + - cell [ref=e8690] + - cell "+" [ref=e8691]: + - generic [ref=e8692]: + + - 'cell "**Prerequisites**: `spec.md` and `plan.md`" [ref=e8693]': + - code [ref=e8694]: "**Prerequisites**: `spec.md` and `plan.md`" + - 'row "5 + **Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." [ref=e8695]': + - cell [ref=e8696] + - cell "5" [ref=e8697]: "5" + - cell [ref=e8698] + - cell "+" [ref=e8699]: + - generic [ref=e8700]: + + - 'cell "**Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." [ref=e8701]': + - code [ref=e8702]: "**Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." + - 'row "6 + **Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." [ref=e8703]': + - cell [ref=e8704] + - cell "6" [ref=e8705]: "6" + - cell [ref=e8706] + - cell "+" [ref=e8707]: + - generic [ref=e8708]: + + - 'cell "**Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." [ref=e8709]': + - code [ref=e8710]: "**Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." + - 'row "7 + **RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." [ref=e8711]': + - cell [ref=e8712] + - cell "7" [ref=e8713]: "7" + - cell [ref=e8714] + - cell "+" [ref=e8715]: + - generic [ref=e8716]: + + - 'cell "**RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." [ref=e8717]': + - code [ref=e8718]: "**RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." + - 'row "8 + **Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." [ref=e8719]': + - cell [ref=e8720] + - cell "8" [ref=e8721]: "8" + - cell [ref=e8722] + - cell "+" [ref=e8723]: + - generic [ref=e8724]: + + - 'cell "**Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." [ref=e8725]': + - code [ref=e8726]: "**Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." + - 'row "9 + **Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." [ref=e8727]': + - cell [ref=e8728] + - cell "9" [ref=e8729]: "9" + - cell [ref=e8730] + - cell "+" [ref=e8731]: + - generic [ref=e8732]: + + - 'cell "**Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." [ref=e8733]': + - code [ref=e8734]: "**Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." + - 'row "10 + **Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." [ref=e8735]': + - cell [ref=e8736] + - cell "10" [ref=e8737]: "10" + - cell [ref=e8738] + - cell "+" [ref=e8739]: + - generic [ref=e8740]: + + - 'cell "**Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." [ref=e8741]': + - code [ref=e8742]: "**Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." + - row "11 +" [ref=e8743]: + - cell [ref=e8744] + - cell "11" [ref=e8745]: "11" + - cell [ref=e8746] + - cell "+" [ref=e8747]: + - generic [ref=e8748]: + + - cell [ref=e8749]: + - code + - 'row "12 + ## Test Governance Checklist" [ref=e8750]': + - cell [ref=e8751] + - cell "12" [ref=e8752]: "12" + - cell [ref=e8753] + - cell "+" [ref=e8754]: + - generic [ref=e8755]: + + - cell "## Test Governance Checklist" [ref=e8756]: + - code [ref=e8757]: "## Test Governance Checklist" + - row "13 +" [ref=e8758]: + - cell [ref=e8759] + - cell "13" [ref=e8760]: "13" + - cell [ref=e8761] + - cell "+" [ref=e8762]: + - generic [ref=e8763]: + + - cell [ref=e8764]: + - code + - row "14 + - [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." [ref=e8765]: + - cell [ref=e8766] + - cell "14" [ref=e8767]: "14" + - cell [ref=e8768] + - cell "+" [ref=e8769]: + - generic [ref=e8770]: + + - cell "- [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." [ref=e8771]: + - code [ref=e8772]: "- [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." + - row "15 + - [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." [ref=e8773]: + - cell [ref=e8774] + - cell "15" [ref=e8775]: "15" + - cell [ref=e8776] + - cell "+" [ref=e8777]: + - generic [ref=e8778]: + + - cell "- [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." [ref=e8779]: + - code [ref=e8780]: "- [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." + - row "16 + - [x] Shared helpers, fixtures, and context defaults stay cheap by default." [ref=e8781]: + - cell [ref=e8782] + - cell "16" [ref=e8783]: "16" + - cell [ref=e8784] + - cell "+" [ref=e8785]: + - generic [ref=e8786]: + + - cell "- [x] Shared helpers, fixtures, and context defaults stay cheap by default." [ref=e8787]: + - code [ref=e8788]: "- [x] Shared helpers, fixtures, and context defaults stay cheap by default." + - row "17 + - [x] Planned validation commands cover the change without widening into unrelated lanes." [ref=e8789]: + - cell [ref=e8790] + - cell "17" [ref=e8791]: "17" + - cell [ref=e8792] + - cell "+" [ref=e8793]: + - generic [ref=e8794]: + + - cell "- [x] Planned validation commands cover the change without widening into unrelated lanes." [ref=e8795]: + - code [ref=e8796]: "- [x] Planned validation commands cover the change without widening into unrelated lanes." + - row "18 + - [x] The declared monitoring/detail surface test profile is explicit." [ref=e8797]: + - cell [ref=e8798] + - cell "18" [ref=e8799]: "18" + - cell [ref=e8800] + - cell "+" [ref=e8801]: + - generic [ref=e8802]: + + - cell "- [x] The declared monitoring/detail surface test profile is explicit." [ref=e8803]: + - code [ref=e8804]: "- [x] The declared monitoring/detail surface test profile is explicit." + - row "19 + - [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." [ref=e8805]: + - cell [ref=e8806] + - cell "19" [ref=e8807]: "19" + - cell [ref=e8808] + - cell "+" [ref=e8809]: + - generic [ref=e8810]: + + - cell "- [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." [ref=e8811]: + - code [ref=e8812]: "- [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." + - row "20 +" [ref=e8813]: + - cell [ref=e8814] + - cell "20" [ref=e8815]: "20" + - cell [ref=e8816] + - cell "+" [ref=e8817]: + - generic [ref=e8818]: + + - cell [ref=e8819]: + - code + - 'row "21 + ## Phase 1: Setup (Shared Truth Inventory)" [ref=e8820]': + - cell [ref=e8821] + - cell "21" [ref=e8822]: "21" + - cell [ref=e8823] + - cell "+" [ref=e8824]: + - generic [ref=e8825]: + + - 'cell "## Phase 1: Setup (Shared Truth Inventory)" [ref=e8826]': + - code [ref=e8827]: "## Phase 1: Setup (Shared Truth Inventory)" + - row "22 +" [ref=e8828]: + - cell [ref=e8829] + - cell "22" [ref=e8830]: "22" + - cell [ref=e8831] + - cell "+" [ref=e8832]: + - generic [ref=e8833]: + + - cell [ref=e8834]: + - code + - 'row "23 + **Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." [ref=e8835]': + - cell [ref=e8836] + - cell "23" [ref=e8837]: "23" + - cell [ref=e8838] + - cell "+" [ref=e8839]: + - generic [ref=e8840]: + + - 'cell "**Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." [ref=e8841]': + - code [ref=e8842]: "**Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." + - row "24 +" [ref=e8843]: + - cell [ref=e8844] + - cell "24" [ref=e8845]: "24" + - cell [ref=e8846] + - cell "+" [ref=e8847]: + - generic [ref=e8848]: + + - cell [ref=e8849]: + - code + - 'row "25 + - [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." [ref=e8850]': + - cell [ref=e8851] + - cell "25" [ref=e8852]: "25" + - cell [ref=e8853] + - cell "+" [ref=e8854]: + - generic [ref=e8855]: + + - 'cell "- [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." [ref=e8856]': + - code [ref=e8857]: "- [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." + - 'row "26 + - [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." [ref=e8858]': + - cell [ref=e8859] + - cell "26" [ref=e8860]: "26" + - cell [ref=e8861] + - cell "+" [ref=e8862]: + - generic [ref=e8863]: + + - 'cell "- [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." [ref=e8864]': + - code [ref=e8865]: "- [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." + - 'row "27 + - [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." [ref=e8866]': + - cell [ref=e8867] + - cell "27" [ref=e8868]: "27" + - cell [ref=e8869] + - cell "+" [ref=e8870]: + - generic [ref=e8871]: + + - 'cell "- [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." [ref=e8872]': + - code [ref=e8873]: "- [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." + - 'row "28 + - [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e8874]': + - cell [ref=e8875] + - cell "28" [ref=e8876]: "28" + - cell [ref=e8877] + - cell "+" [ref=e8878]: + - generic [ref=e8879]: + + - 'cell "- [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e8880]': + - code [ref=e8881]: "- [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." + - row "29 +" [ref=e8882]: + - cell [ref=e8883] + - cell "29" [ref=e8884]: "29" + - cell [ref=e8885] + - cell "+" [ref=e8886]: + - generic [ref=e8887]: + + - cell [ref=e8888]: + - code + - row "30 + ---" [ref=e8889]: + - cell [ref=e8890] + - cell "30" [ref=e8891]: "30" + - cell [ref=e8892] + - cell "+" [ref=e8893]: + - generic [ref=e8894]: + + - cell "---" [ref=e8895]: + - code [ref=e8896]: "---" + - row "31 +" [ref=e8897]: + - cell [ref=e8898] + - cell "31" [ref=e8899]: "31" + - cell [ref=e8900] + - cell "+" [ref=e8901]: + - generic [ref=e8902]: + + - cell [ref=e8903]: + - code + - 'row "32 + ## Phase 2: Foundational (Blocking Queue-Truth Contract)" [ref=e8904]': + - cell [ref=e8905] + - cell "32" [ref=e8906]: "32" + - cell [ref=e8907] + - cell "+" [ref=e8908]: + - generic [ref=e8909]: + + - 'cell "## Phase 2: Foundational (Blocking Queue-Truth Contract)" [ref=e8910]': + - code [ref=e8911]: "## Phase 2: Foundational (Blocking Queue-Truth Contract)" + - row "33 +" [ref=e8912]: + - cell [ref=e8913] + - cell "33" [ref=e8914]: "33" + - cell [ref=e8915] + - cell "+" [ref=e8916]: + - generic [ref=e8917]: + + - cell [ref=e8918]: + - code + - 'row "34 + **Purpose**: settle one generic queue-truth contract before any individual surface is updated." [ref=e8919]': + - cell [ref=e8920] + - cell "34" [ref=e8921]: "34" + - cell [ref=e8922] + - cell "+" [ref=e8923]: + - generic [ref=e8924]: + + - 'cell "**Purpose**: settle one generic queue-truth contract before any individual surface is updated." [ref=e8925]': + - code [ref=e8926]: "**Purpose**: settle one generic queue-truth contract before any individual surface is updated." + - row "35 +" [ref=e8927]: + - cell [ref=e8928] + - cell "35" [ref=e8929]: "35" + - cell [ref=e8930] + - cell "+" [ref=e8931]: + - generic [ref=e8932]: + + - cell [ref=e8933]: + - code + - 'row "36 + **Critical**: No user-story runtime work should begin until this phase is complete." [ref=e8934]': + - cell [ref=e8935] + - cell "36" [ref=e8936]: "36" + - cell [ref=e8937] + - cell "+" [ref=e8938]: + - generic [ref=e8939]: + + - 'cell "**Critical**: No user-story runtime work should begin until this phase is complete." [ref=e8940]': + - code [ref=e8941]: "**Critical**: No user-story runtime work should begin until this phase is complete." + - row "37 +" [ref=e8942]: + - cell [ref=e8943] + - cell "37" [ref=e8944]: "37" + - cell [ref=e8945] + - cell "+" [ref=e8946]: + - generic [ref=e8947]: + + - cell [ref=e8948]: + - code + - 'row "38 + - [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." [ref=e8949]': + - cell [ref=e8950] + - cell "38" [ref=e8951]: "38" + - cell [ref=e8952] + - cell "+" [ref=e8953]: + - generic [ref=e8954]: + + - 'cell "- [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." [ref=e8955]': + - code [ref=e8956]: "- [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." + - 'row "39 + - [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." [ref=e8957]': + - cell [ref=e8958] + - cell "39" [ref=e8959]: "39" + - cell [ref=e8960] + - cell "+" [ref=e8961]: + - generic [ref=e8962]: + + - 'cell "- [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." [ref=e8963]': + - code [ref=e8964]: "- [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." + - 'row "40 + - [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." [ref=e8965]': + - cell [ref=e8966] + - cell "40" [ref=e8967]: "40" + - cell [ref=e8968] + - cell "+" [ref=e8969]: + - generic [ref=e8970]: + + - 'cell "- [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." [ref=e8971]': + - code [ref=e8972]: "- [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." + - row "41 +" [ref=e8973]: + - cell [ref=e8974] + - cell "41" [ref=e8975]: "41" + - cell [ref=e8976] + - cell "+" [ref=e8977]: + - generic [ref=e8978]: + + - cell [ref=e8979]: + - code + - 'row "42 + **Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." [ref=e8980]': + - cell [ref=e8981] + - cell "42" [ref=e8982]: "42" + - cell [ref=e8983] + - cell "+" [ref=e8984]: + - generic [ref=e8985]: + + - 'cell "**Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." [ref=e8986]': + - code [ref=e8987]: "**Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." + - row "43 +" [ref=e8988]: + - cell [ref=e8989] + - cell "43" [ref=e8990]: "43" + - cell [ref=e8991] + - cell "+" [ref=e8992]: + - generic [ref=e8993]: + + - cell [ref=e8994]: + - code + - row "44 + ---" [ref=e8995]: + - cell [ref=e8996] + - cell "44" [ref=e8997]: "44" + - cell [ref=e8998] + - cell "+" [ref=e8999]: + - generic [ref=e9000]: + + - cell "---" [ref=e9001]: + - code [ref=e9002]: "---" + - row "45 +" [ref=e9003]: + - cell [ref=e9004] + - cell "45" [ref=e9005]: "45" + - cell [ref=e9006] + - cell "+" [ref=e9007]: + - generic [ref=e9008]: + + - cell [ref=e9009]: + - code + - 'row "46 + ## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e9010]': + - cell [ref=e9011] + - cell "46" [ref=e9012]: "46" + - cell [ref=e9013] + - cell "+" [ref=e9014]: + - generic [ref=e9015]: + + - 'cell "## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e9016]': + - code [ref=e9017]: "## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" + - row "47 +" [ref=e9018]: + - cell [ref=e9019] + - cell "47" [ref=e9020]: "47" + - cell [ref=e9021] + - cell "+" [ref=e9022]: + - generic [ref=e9023]: + + - cell [ref=e9024]: + - code + - 'row "48 + **Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." [ref=e9025]': + - cell [ref=e9026] + - cell "48" [ref=e9027]: "48" + - cell [ref=e9028] + - cell "+" [ref=e9029]: + - generic [ref=e9030]: + + - 'cell "**Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." [ref=e9031]': + - code [ref=e9032]: "**Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." + - row "49 +" [ref=e9033]: + - cell [ref=e9034] + - cell "49" [ref=e9035]: "49" + - cell [ref=e9036] + - cell "+" [ref=e9037]: + - generic [ref=e9038]: + + - cell [ref=e9039]: + - code + - 'row "50 + **Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." [ref=e9040]': + - cell [ref=e9041] + - cell "50" [ref=e9042]: "50" + - cell [ref=e9043] + - cell "+" [ref=e9044]: + - generic [ref=e9045]: + + - 'cell "**Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." [ref=e9046]': + - code [ref=e9047]: "**Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." + - row "51 +" [ref=e9048]: + - cell [ref=e9049] + - cell "51" [ref=e9050]: "51" + - cell [ref=e9051] + - cell "+" [ref=e9052]: + - generic [ref=e9053]: + + - cell [ref=e9054]: + - code + - 'row "52 + ### Tests for User Story 1" [ref=e9055]': + - cell [ref=e9056] + - cell "52" [ref=e9057]: "52" + - cell [ref=e9058] + - cell "+" [ref=e9059]: + - generic [ref=e9060]: + + - cell "### Tests for User Story 1" [ref=e9061]: + - code [ref=e9062]: "### Tests for User Story 1" + - row "53 +" [ref=e9063]: + - cell [ref=e9064] + - cell "53" [ref=e9065]: "53" + - cell [ref=e9066] + - cell "+" [ref=e9067]: + - generic [ref=e9068]: + + - cell [ref=e9069]: + - code + - 'row "54 + - [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." [ref=e9070]': + - cell [ref=e9071] + - cell "54" [ref=e9072]: "54" + - cell [ref=e9073] + - cell "+" [ref=e9074]: + - generic [ref=e9075]: + + - 'cell "- [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." [ref=e9076]': + - code [ref=e9077]: "- [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." + - 'row "55 + - [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." [ref=e9078]': + - cell [ref=e9079] + - cell "55" [ref=e9080]: "55" + - cell [ref=e9081] + - cell "+" [ref=e9082]: + - generic [ref=e9083]: + + - 'cell "- [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." [ref=e9084]': + - code [ref=e9085]: "- [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." + - row "56 +" [ref=e9086]: + - cell [ref=e9087] + - cell "56" [ref=e9088]: "56" + - cell [ref=e9089] + - cell "+" [ref=e9090]: + - generic [ref=e9091]: + + - cell [ref=e9092]: + - code + - 'row "57 + ### Implementation for User Story 1" [ref=e9093]': + - cell [ref=e9094] + - cell "57" [ref=e9095]: "57" + - cell [ref=e9096] + - cell "+" [ref=e9097]: + - generic [ref=e9098]: + + - cell "### Implementation for User Story 1" [ref=e9099]: + - code [ref=e9100]: "### Implementation for User Story 1" + - row "58 +" [ref=e9101]: + - cell [ref=e9102] + - cell "58" [ref=e9103]: "58" + - cell [ref=e9104] + - cell "+" [ref=e9105]: + - generic [ref=e9106]: + + - cell [ref=e9107]: + - code + - 'row "59 + - [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." [ref=e9108]': + - cell [ref=e9109] + - cell "59" [ref=e9110]: "59" + - cell [ref=e9111] + - cell "+" [ref=e9112]: + - generic [ref=e9113]: + + - 'cell "- [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." [ref=e9114]': + - code [ref=e9115]: "- [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." + - 'row "60 + - [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." [ref=e9116]': + - cell [ref=e9117] + - cell "60" [ref=e9118]: "60" + - cell [ref=e9119] + - cell "+" [ref=e9120]: + - generic [ref=e9121]: + + - 'cell "- [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." [ref=e9122]': + - code [ref=e9123]: "- [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." + - 'row "61 + - [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." [ref=e9124]': + - cell [ref=e9125] + - cell "61" [ref=e9126]: "61" + - cell [ref=e9127] + - cell "+" [ref=e9128]: + - generic [ref=e9129]: + + - 'cell "- [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." [ref=e9130]': + - code [ref=e9131]: "- [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." + - row "62 +" [ref=e9132]: + - cell [ref=e9133] + - cell "62" [ref=e9134]: "62" + - cell [ref=e9135] + - cell "+" [ref=e9136]: + - generic [ref=e9137]: + + - cell [ref=e9138]: + - code + - 'row "63 + **Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." [ref=e9139]': + - cell [ref=e9140] + - cell "63" [ref=e9141]: "63" + - cell [ref=e9142] + - cell "+" [ref=e9143]: + - generic [ref=e9144]: + + - 'cell "**Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." [ref=e9145]': + - code [ref=e9146]: "**Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." + - row "64 +" [ref=e9147]: + - cell [ref=e9148] + - cell "64" [ref=e9149]: "64" + - cell [ref=e9150] + - cell "+" [ref=e9151]: + - generic [ref=e9152]: + + - cell [ref=e9153]: + - code + - row "65 + ---" [ref=e9154]: + - cell [ref=e9155] + - cell "65" [ref=e9156]: "65" + - cell [ref=e9157] + - cell "+" [ref=e9158]: + - generic [ref=e9159]: + + - cell "---" [ref=e9160]: + - code [ref=e9161]: "---" + - row "66 +" [ref=e9162]: + - cell [ref=e9163] + - cell "66" [ref=e9164]: "66" + - cell [ref=e9165] + - cell "+" [ref=e9166]: + - generic [ref=e9167]: + + - cell [ref=e9168]: + - code + - 'row "67 + ## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e9169]': + - cell [ref=e9170] + - cell "67" [ref=e9171]: "67" + - cell [ref=e9172] + - cell "+" [ref=e9173]: + - generic [ref=e9174]: + + - 'cell "## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e9175]': + - code [ref=e9176]: "## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" + - row "68 +" [ref=e9177]: + - cell [ref=e9178] + - cell "68" [ref=e9179]: "68" + - cell [ref=e9180] + - cell "+" [ref=e9181]: + - generic [ref=e9182]: + + - cell [ref=e9183]: + - code + - 'row "69 + **Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." [ref=e9184]': + - cell [ref=e9185] + - cell "69" [ref=e9186]: "69" + - cell [ref=e9187] + - cell "+" [ref=e9188]: + - generic [ref=e9189]: + + - 'cell "**Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." [ref=e9190]': + - code [ref=e9191]: "**Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." + - row "70 +" [ref=e9192]: + - cell [ref=e9193] + - cell "70" [ref=e9194]: "70" + - cell [ref=e9195] + - cell "+" [ref=e9196]: + - generic [ref=e9197]: + + - cell [ref=e9198]: + - code + - 'row "71 + **Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." [ref=e9199]': + - cell [ref=e9200] + - cell "71" [ref=e9201]: "71" + - cell [ref=e9202] + - cell "+" [ref=e9203]: + - generic [ref=e9204]: + + - 'cell "**Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." [ref=e9205]': + - code [ref=e9206]: "**Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." + - row "72 +" [ref=e9207]: + - cell [ref=e9208] + - cell "72" [ref=e9209]: "72" + - cell [ref=e9210] + - cell "+" [ref=e9211]: + - generic [ref=e9212]: + + - cell [ref=e9213]: + - code + - 'row "73 + ### Tests for User Story 2" [ref=e9214]': + - cell [ref=e9215] + - cell "73" [ref=e9216]: "73" + - cell [ref=e9217] + - cell "+" [ref=e9218]: + - generic [ref=e9219]: + + - cell "### Tests for User Story 2" [ref=e9220]: + - code [ref=e9221]: "### Tests for User Story 2" + - row "74 +" [ref=e9222]: + - cell [ref=e9223] + - cell "74" [ref=e9224]: "74" + - cell [ref=e9225] + - cell "+" [ref=e9226]: + - generic [ref=e9227]: + + - cell [ref=e9228]: + - code + - 'row "75 + - [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." [ref=e9229]': + - cell [ref=e9230] + - cell "75" [ref=e9231]: "75" + - cell [ref=e9232] + - cell "+" [ref=e9233]: + - generic [ref=e9234]: + + - 'cell "- [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." [ref=e9235]': + - code [ref=e9236]: "- [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." + - 'row "76 + - [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." [ref=e9237]': + - cell [ref=e9238] + - cell "76" [ref=e9239]: "76" + - cell [ref=e9240] + - cell "+" [ref=e9241]: + - generic [ref=e9242]: + + - 'cell "- [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." [ref=e9243]': + - code [ref=e9244]: "- [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." + - row "77 +" [ref=e9245]: + - cell [ref=e9246] + - cell "77" [ref=e9247]: "77" + - cell [ref=e9248] + - cell "+" [ref=e9249]: + - generic [ref=e9250]: + + - cell [ref=e9251]: + - code + - 'row "78 + ### Implementation for User Story 2" [ref=e9252]': + - cell [ref=e9253] + - cell "78" [ref=e9254]: "78" + - cell [ref=e9255] + - cell "+" [ref=e9256]: + - generic [ref=e9257]: + + - cell "### Implementation for User Story 2" [ref=e9258]: + - code [ref=e9259]: "### Implementation for User Story 2" + - row "79 +" [ref=e9260]: + - cell [ref=e9261] + - cell "79" [ref=e9262]: "79" + - cell [ref=e9263] + - cell "+" [ref=e9264]: + - generic [ref=e9265]: + + - cell [ref=e9266]: + - code + - 'row "80 + - [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." [ref=e9267]': + - cell [ref=e9268] + - cell "80" [ref=e9269]: "80" + - cell [ref=e9270] + - cell "+" [ref=e9271]: + - generic [ref=e9272]: + + - 'cell "- [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." [ref=e9273]': + - code [ref=e9274]: "- [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." + - 'row "81 + - [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." [ref=e9275]': + - cell [ref=e9276] + - cell "81" [ref=e9277]: "81" + - cell [ref=e9278] + - cell "+" [ref=e9279]: + - generic [ref=e9280]: + + - 'cell "- [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." [ref=e9281]': + - code [ref=e9282]: "- [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." + - row "82 +" [ref=e9283]: + - cell [ref=e9284] + - cell "82" [ref=e9285]: "82" + - cell [ref=e9286] + - cell "+" [ref=e9287]: + - generic [ref=e9288]: + + - cell [ref=e9289]: + - code + - 'row "83 + **Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." [ref=e9290]': + - cell [ref=e9291] + - cell "83" [ref=e9292]: "83" + - cell [ref=e9293] + - cell "+" [ref=e9294]: + - generic [ref=e9295]: + + - 'cell "**Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." [ref=e9296]': + - code [ref=e9297]: "**Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." + - row "84 +" [ref=e9298]: + - cell [ref=e9299] + - cell "84" [ref=e9300]: "84" + - cell [ref=e9301] + - cell "+" [ref=e9302]: + - generic [ref=e9303]: + + - cell [ref=e9304]: + - code + - row "85 + ---" [ref=e9305]: + - cell [ref=e9306] + - cell "85" [ref=e9307]: "85" + - cell [ref=e9308] + - cell "+" [ref=e9309]: + - generic [ref=e9310]: + + - cell "---" [ref=e9311]: + - code [ref=e9312]: "---" + - row "86 +" [ref=e9313]: + - cell [ref=e9314] + - cell "86" [ref=e9315]: "86" + - cell [ref=e9316] + - cell "+" [ref=e9317]: + - generic [ref=e9318]: + + - cell [ref=e9319]: + - code + - 'row "87 + ## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e9320]': + - cell [ref=e9321] + - cell "87" [ref=e9322]: "87" + - cell [ref=e9323] + - cell "+" [ref=e9324]: + - generic [ref=e9325]: + + - 'cell "## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e9326]': + - code [ref=e9327]: "## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" + - row "88 +" [ref=e9328]: + - cell [ref=e9329] + - cell "88" [ref=e9330]: "88" + - cell [ref=e9331] + - cell "+" [ref=e9332]: + - generic [ref=e9333]: + + - cell [ref=e9334]: + - code + - 'row "89 + **Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." [ref=e9335]': + - cell [ref=e9336] + - cell "89" [ref=e9337]: "89" + - cell [ref=e9338] + - cell "+" [ref=e9339]: + - generic [ref=e9340]: + + - 'cell "**Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." [ref=e9341]': + - code [ref=e9342]: "**Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." + - row "90 +" [ref=e9343]: + - cell [ref=e9344] + - cell "90" [ref=e9345]: "90" + - cell [ref=e9346] + - cell "+" [ref=e9347]: + - generic [ref=e9348]: + + - cell [ref=e9349]: + - code + - 'row "91 + **Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." [ref=e9350]': + - cell [ref=e9351] + - cell "91" [ref=e9352]: "91" + - cell [ref=e9353] + - cell "+" [ref=e9354]: + - generic [ref=e9355]: + + - 'cell "**Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." [ref=e9356]': + - code [ref=e9357]: "**Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." + - row "92 +" [ref=e9358]: + - cell [ref=e9359] + - cell "92" [ref=e9360]: "92" + - cell [ref=e9361] + - cell "+" [ref=e9362]: + - generic [ref=e9363]: + + - cell [ref=e9364]: + - code + - 'row "93 + ### Tests for User Story 3" [ref=e9365]': + - cell [ref=e9366] + - cell "93" [ref=e9367]: "93" + - cell [ref=e9368] + - cell "+" [ref=e9369]: + - generic [ref=e9370]: + + - cell "### Tests for User Story 3" [ref=e9371]: + - code [ref=e9372]: "### Tests for User Story 3" + - row "94 +" [ref=e9373]: + - cell [ref=e9374] + - cell "94" [ref=e9375]: "94" + - cell [ref=e9376] + - cell "+" [ref=e9377]: + - generic [ref=e9378]: + + - cell [ref=e9379]: + - code + - 'row "95 + - [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." [ref=e9380]': + - cell [ref=e9381] + - cell "95" [ref=e9382]: "95" + - cell [ref=e9383] + - cell "+" [ref=e9384]: + - generic [ref=e9385]: + + - 'cell "- [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." [ref=e9386]': + - code [ref=e9387]: "- [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." + - 'row "96 + - [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." [ref=e9388]': + - cell [ref=e9389] + - cell "96" [ref=e9390]: "96" + - cell [ref=e9391] + - cell "+" [ref=e9392]: + - generic [ref=e9393]: + + - 'cell "- [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." [ref=e9394]': + - code [ref=e9395]: "- [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." + - row "97 +" [ref=e9396]: + - cell [ref=e9397] + - cell "97" [ref=e9398]: "97" + - cell [ref=e9399] + - cell "+" [ref=e9400]: + - generic [ref=e9401]: + + - cell [ref=e9402]: + - code + - 'row "98 + ### Implementation for User Story 3" [ref=e9403]': + - cell [ref=e9404] + - cell "98" [ref=e9405]: "98" + - cell [ref=e9406] + - cell "+" [ref=e9407]: + - generic [ref=e9408]: + + - cell "### Implementation for User Story 3" [ref=e9409]: + - code [ref=e9410]: "### Implementation for User Story 3" + - row "99 +" [ref=e9411]: + - cell [ref=e9412] + - cell "99" [ref=e9413]: "99" + - cell [ref=e9414] + - cell "+" [ref=e9415]: + - generic [ref=e9416]: + + - cell [ref=e9417]: + - code + - 'row "100 + - [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." [ref=e9418]': + - cell [ref=e9419] + - cell "100" [ref=e9420]: "100" + - cell [ref=e9421] + - cell "+" [ref=e9422]: + - generic [ref=e9423]: + + - 'cell "- [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." [ref=e9424]': + - code [ref=e9425]: "- [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." + - 'row "101 + - [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." [ref=e9426]': + - cell [ref=e9427] + - cell "101" [ref=e9428]: "101" + - cell [ref=e9429] + - cell "+" [ref=e9430]: + - generic [ref=e9431]: + + - 'cell "- [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." [ref=e9432]': + - code [ref=e9433]: "- [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." + - row "102 +" [ref=e9434]: + - cell [ref=e9435] + - cell "102" [ref=e9436]: "102" + - cell [ref=e9437] + - cell "+" [ref=e9438]: + - generic [ref=e9439]: + + - cell [ref=e9440]: + - code + - 'row "103 + **Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." [ref=e9441]': + - cell [ref=e9442] + - cell "103" [ref=e9443]: "103" + - cell [ref=e9444] + - cell "+" [ref=e9445]: + - generic [ref=e9446]: + + - 'cell "**Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." [ref=e9447]': + - code [ref=e9448]: "**Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." + - row "104 +" [ref=e9449]: + - cell [ref=e9450] + - cell "104" [ref=e9451]: "104" + - cell [ref=e9452] + - cell "+" [ref=e9453]: + - generic [ref=e9454]: + + - cell [ref=e9455]: + - code + - row "105 + ---" [ref=e9456]: + - cell [ref=e9457] + - cell "105" [ref=e9458]: "105" + - cell [ref=e9459] + - cell "+" [ref=e9460]: + - generic [ref=e9461]: + + - cell "---" [ref=e9462]: + - code [ref=e9463]: "---" + - row "106 +" [ref=e9464]: + - cell [ref=e9465] + - cell "106" [ref=e9466]: "106" + - cell [ref=e9467] + - cell "+" [ref=e9468]: + - generic [ref=e9469]: + + - cell [ref=e9470]: + - code + - 'row "107 + ## Phase 6: Polish & Cross-Cutting Validation" [ref=e9471]': + - cell [ref=e9472] + - cell "107" [ref=e9473]: "107" + - cell [ref=e9474] + - cell "+" [ref=e9475]: + - generic [ref=e9476]: + + - 'cell "## Phase 6: Polish & Cross-Cutting Validation" [ref=e9477]': + - code [ref=e9478]: "## Phase 6: Polish & Cross-Cutting Validation" + - row "108 +" [ref=e9479]: + - cell [ref=e9480] + - cell "108" [ref=e9481]: "108" + - cell [ref=e9482] + - cell "+" [ref=e9483]: + - generic [ref=e9484]: + + - cell [ref=e9485]: + - code + - 'row "109 + **Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." [ref=e9486]': + - cell [ref=e9487] + - cell "109" [ref=e9488]: "109" + - cell [ref=e9489] + - cell "+" [ref=e9490]: + - generic [ref=e9491]: + + - 'cell "**Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." [ref=e9492]': + - code [ref=e9493]: "**Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." + - row "110 +" [ref=e9494]: + - cell [ref=e9495] + - cell "110" [ref=e9496]: "110" + - cell [ref=e9497] + - cell "+" [ref=e9498]: + - generic [ref=e9499]: + + - cell [ref=e9500]: + - code + - 'row "111 + - [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." [ref=e9501]': + - cell [ref=e9502] + - cell "111" [ref=e9503]: "111" + - cell [ref=e9504] + - cell "+" [ref=e9505]: + - generic [ref=e9506]: + + - 'cell "- [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." [ref=e9507]': + - code [ref=e9508]: "- [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." + - 'row "112 + - [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." [ref=e9509]': + - cell [ref=e9510] + - cell "112" [ref=e9511]: "112" + - cell [ref=e9512] + - cell "+" [ref=e9513]: + - generic [ref=e9514]: + + - 'cell "- [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." [ref=e9515]': + - code [ref=e9516]: "- [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." + - 'row "113 + - [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e9517]': + - cell [ref=e9518] + - cell "113" [ref=e9519]: "113" + - cell [ref=e9520] + - cell "+" [ref=e9521]: + - generic [ref=e9522]: + + - 'cell "- [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e9523]': + - code [ref=e9524]: "- [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." + - 'row "114 + - [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." [ref=e9525]': + - cell [ref=e9526] + - cell "114" [ref=e9527]: "114" + - cell [ref=e9528] + - cell "+" [ref=e9529]: + - generic [ref=e9530]: + + - 'cell "- [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." [ref=e9531]': + - code [ref=e9532]: "- [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." + - 'row "115 + - [x] T025 [P] Run `git diff --check`." [ref=e9533]': + - cell [ref=e9534] + - cell "115" [ref=e9535]: "115" + - cell [ref=e9536] + - cell "+" [ref=e9537]: + - generic [ref=e9538]: + + - 'cell "- [x] T025 [P] Run `git diff --check`." [ref=e9539]': + - code [ref=e9540]: "- [x] T025 [P] Run `git diff --check`." + - 'row "116 + - [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." [ref=e9541]': + - cell [ref=e9542] + - cell "116" [ref=e9543]: "116" + - cell [ref=e9544] + - cell "+" [ref=e9545]: + - generic [ref=e9546]: + + - 'cell "- [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." [ref=e9547]': + - code [ref=e9548]: "- [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." + - row "117 +" [ref=e9549]: + - cell [ref=e9550] + - cell "117" [ref=e9551]: "117" + - cell [ref=e9552] + - cell "+" [ref=e9553]: + - generic [ref=e9554]: + + - cell [ref=e9555]: + - code + - row "118 + ---" [ref=e9556]: + - cell [ref=e9557] + - cell "118" [ref=e9558]: "118" + - cell [ref=e9559] + - cell "+" [ref=e9560]: + - generic [ref=e9561]: + + - cell "---" [ref=e9562]: + - code [ref=e9563]: "---" + - row "119 +" [ref=e9564]: + - cell [ref=e9565] + - cell "119" [ref=e9566]: "119" + - cell [ref=e9567] + - cell "+" [ref=e9568]: + - generic [ref=e9569]: + + - cell [ref=e9570]: + - code + - 'row "120 + ## Dependencies & Execution Order" [ref=e9571]': + - cell [ref=e9572] + - cell "120" [ref=e9573]: "120" + - cell [ref=e9574] + - cell "+" [ref=e9575]: + - generic [ref=e9576]: + + - cell "## Dependencies & Execution Order" [ref=e9577]: + - code [ref=e9578]: "## Dependencies & Execution Order" + - row "121 +" [ref=e9579]: + - cell [ref=e9580] + - cell "121" [ref=e9581]: "121" + - cell [ref=e9582] + - cell "+" [ref=e9583]: + - generic [ref=e9584]: + + - cell [ref=e9585]: + - code + - 'row "122 + ### Phase Dependencies" [ref=e9586]': + - cell [ref=e9587] + - cell "122" [ref=e9588]: "122" + - cell [ref=e9589] + - cell "+" [ref=e9590]: + - generic [ref=e9591]: + + - cell "### Phase Dependencies" [ref=e9592]: + - code [ref=e9593]: "### Phase Dependencies" + - row "123 +" [ref=e9594]: + - cell [ref=e9595] + - cell "123" [ref=e9596]: "123" + - cell [ref=e9597] + - cell "+" [ref=e9598]: + - generic [ref=e9599]: + + - cell [ref=e9600]: + - code + - 'row "124 + - **Setup (Phase 1)**: no dependencies" [ref=e9601]': + - cell [ref=e9602] + - cell "124" [ref=e9603]: "124" + - cell [ref=e9604] + - cell "+" [ref=e9605]: + - generic [ref=e9606]: + + - 'cell "- **Setup (Phase 1)**: no dependencies" [ref=e9607]': + - code [ref=e9608]: "- **Setup (Phase 1)**: no dependencies" + - 'row "125 + - **Foundational (Phase 2)**: depends on Setup and blocks all story work" [ref=e9609]': + - cell [ref=e9610] + - cell "125" [ref=e9611]: "125" + - cell [ref=e9612] + - cell "+" [ref=e9613]: + - generic [ref=e9614]: + + - 'cell "- **Foundational (Phase 2)**: depends on Setup and blocks all story work" [ref=e9615]': + - code [ref=e9616]: "- **Foundational (Phase 2)**: depends on Setup and blocks all story work" + - 'row "126 + - **US1 (Phase 3)**: depends on Foundational completion" [ref=e9617]': + - cell [ref=e9618] + - cell "126" [ref=e9619]: "126" + - cell [ref=e9620] + - cell "+" [ref=e9621]: + - generic [ref=e9622]: + + - 'cell "- **US1 (Phase 3)**: depends on Foundational completion" [ref=e9623]': + - code [ref=e9624]: "- **US1 (Phase 3)**: depends on Foundational completion" + - 'row "127 + - **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" [ref=e9625]': + - cell [ref=e9626] + - cell "127" [ref=e9627]: "127" + - cell [ref=e9628] + - cell "+" [ref=e9629]: + - generic [ref=e9630]: + + - 'cell "- **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" [ref=e9631]': + - code [ref=e9632]: "- **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" + - 'row "128 + - **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" [ref=e9633]': + - cell [ref=e9634] + - cell "128" [ref=e9635]: "128" + - cell [ref=e9636] + - cell "+" [ref=e9637]: + - generic [ref=e9638]: + + - 'cell "- **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" [ref=e9639]': + - code [ref=e9640]: "- **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" + - 'row "129 + - **Polish (Phase 6)**: depends on all desired user stories" [ref=e9641]': + - cell [ref=e9642] + - cell "129" [ref=e9643]: "129" + - cell [ref=e9644] + - cell "+" [ref=e9645]: + - generic [ref=e9646]: + + - 'cell "- **Polish (Phase 6)**: depends on all desired user stories" [ref=e9647]': + - code [ref=e9648]: "- **Polish (Phase 6)**: depends on all desired user stories" + - row "130 +" [ref=e9649]: + - cell [ref=e9650] + - cell "130" [ref=e9651]: "130" + - cell [ref=e9652] + - cell "+" [ref=e9653]: + - generic [ref=e9654]: + + - cell [ref=e9655]: + - code + - 'row "131 + ### Parallel Opportunities" [ref=e9656]': + - cell [ref=e9657] + - cell "131" [ref=e9658]: "131" + - cell [ref=e9659] + - cell "+" [ref=e9660]: + - generic [ref=e9661]: + + - cell "### Parallel Opportunities" [ref=e9662]: + - code [ref=e9663]: "### Parallel Opportunities" + - row "132 +" [ref=e9664]: + - cell [ref=e9665] + - cell "132" [ref=e9666]: "132" + - cell [ref=e9667] + - cell "+" [ref=e9668]: + - generic [ref=e9669]: + + - cell [ref=e9670]: + - code + - 'row "133 + - `T002`, `T003`, and `T004` can run in parallel." [ref=e9671]': + - cell [ref=e9672] + - cell "133" [ref=e9673]: "133" + - cell [ref=e9674] + - cell "+" [ref=e9675]: + - generic [ref=e9676]: + + - 'cell "- `T002`, `T003`, and `T004` can run in parallel." [ref=e9677]': + - code [ref=e9678]: "- `T002`, `T003`, and `T004` can run in parallel." + - 'row "134 + - `T005` and `T006` can run in parallel after the current contradiction is confirmed." [ref=e9679]': + - cell [ref=e9680] + - cell "134" [ref=e9681]: "134" + - cell [ref=e9682] + - cell "+" [ref=e9683]: + - generic [ref=e9684]: + + - 'cell "- `T005` and `T006` can run in parallel after the current contradiction is confirmed." [ref=e9685]': + - code [ref=e9686]: "- `T005` and `T006` can run in parallel after the current contradiction is confirmed." + - 'row "135 + - `T008` and `T009` can run in parallel." [ref=e9687]': + - cell [ref=e9688] + - cell "135" [ref=e9689]: "135" + - cell [ref=e9690] + - cell "+" [ref=e9691]: + - generic [ref=e9692]: + + - 'cell "- `T008` and `T009` can run in parallel." [ref=e9693]': + - code [ref=e9694]: "- `T008` and `T009` can run in parallel." + - 'row "136 + - `T013` and `T014` can run in parallel." [ref=e9695]': + - cell [ref=e9696] + - cell "136" [ref=e9697]: "136" + - cell [ref=e9698] + - cell "+" [ref=e9699]: + - generic [ref=e9700]: + + - 'cell "- `T013` and `T014` can run in parallel." [ref=e9701]': + - code [ref=e9702]: "- `T013` and `T014` can run in parallel." + - 'row "137 + - `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." [ref=e9703]': + - cell [ref=e9704] + - cell "137" [ref=e9705]: "137" + - cell [ref=e9706] + - cell "+" [ref=e9707]: + - generic [ref=e9708]: + + - 'cell "- `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." [ref=e9709]': + - code [ref=e9710]: "- `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." + - row "138 +" [ref=e9711]: + - cell [ref=e9712] + - cell "138" [ref=e9713]: "138" + - cell [ref=e9714] + - cell "+" [ref=e9715]: + - generic [ref=e9716]: + + - cell [ref=e9717]: + - code + - 'row "139 + ### Implementation Strategy" [ref=e9718]': + - cell [ref=e9719] + - cell "139" [ref=e9720]: "139" + - cell [ref=e9721] + - cell "+" [ref=e9722]: + - generic [ref=e9723]: + + - cell "### Implementation Strategy" [ref=e9724]: + - code [ref=e9725]: "### Implementation Strategy" + - row "140 +" [ref=e9726]: + - cell [ref=e9727] + - cell "140" [ref=e9728]: "140" + - cell [ref=e9729] + - cell "+" [ref=e9730]: + - generic [ref=e9731]: + + - cell [ref=e9732]: + - code + - row "141 + 1. Freeze the shared queue-truth derivation first." [ref=e9733]: + - cell [ref=e9734] + - cell "141" [ref=e9735]: "141" + - cell [ref=e9736] + - cell "+" [ref=e9737]: + - generic [ref=e9738]: + + - cell "1. Freeze the shared queue-truth derivation first." [ref=e9739]: + - code [ref=e9740]: 1. Freeze the shared queue-truth derivation first. + - row "142 + 2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces." [ref=e9741]: + - cell [ref=e9742] + - cell "142" [ref=e9743]: "142" + - cell [ref=e9744] + - cell "+" [ref=e9745]: + - generic [ref=e9746]: + + - cell "2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces." [ref=e9747]: + - code [ref=e9748]: 2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces. + - row "143 + 3. Ship US2 so canonical detail confirms the same truth." [ref=e9749]: + - cell [ref=e9750] + - cell "143" [ref=e9751]: "143" + - cell [ref=e9752] + - cell "+" [ref=e9753]: + - generic [ref=e9754]: + + - cell "3. Ship US2 so canonical detail confirms the same truth." [ref=e9755]: + - code [ref=e9756]: 3. Ship US2 so canonical detail confirms the same truth. + - row "144 + 4. Ship US3 to protect the narrow boundary against overclaiming or framework creep." [ref=e9757]: + - cell [ref=e9758] + - cell "144" [ref=e9759]: "144" + - cell [ref=e9760] + - cell "+" [ref=e9761]: + - generic [ref=e9762]: + + - cell "4. Ship US3 to protect the narrow boundary against overclaiming or framework creep." [ref=e9763]: + - code [ref=e9764]: 4. Ship US3 to protect the narrow boundary against overclaiming or framework creep. + - row "145 + 5. Finish with the focused validation commands and close-out notes." [ref=e9765]: + - cell [ref=e9766] + - cell "145" [ref=e9767]: "145" + - cell [ref=e9768] + - cell "+" [ref=e9769]: + - generic [ref=e9770]: + + - cell "5. Finish with the focused validation commands and close-out notes." [ref=e9771]: + - code [ref=e9772]: 5. Finish with the focused validation commands and close-out notes. + - row "146 +" [ref=e9773]: + - cell [ref=e9774] + - cell "146" [ref=e9775]: "146" + - cell [ref=e9776] + - cell "+" [ref=e9777]: + - generic [ref=e9778]: + + - cell [ref=e9779]: + - code + - 'row "147 + ## Guardrail / Smoke Coverage" [ref=e9780]': + - cell [ref=e9781] + - cell "147" [ref=e9782]: "147" + - cell [ref=e9783] + - cell "+" [ref=e9784]: + - generic [ref=e9785]: + + - cell "## Guardrail / Smoke Coverage" [ref=e9786]: + - code [ref=e9787]: "## Guardrail / Smoke Coverage" + - row "148 +" [ref=e9788]: + - cell [ref=e9789] + - cell "148" [ref=e9790]: "148" + - cell [ref=e9791] + - cell "+" [ref=e9792]: + - generic [ref=e9793]: + + - cell [ref=e9794]: + - code + - 'row "149 + - Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." [ref=e9795]': + - cell [ref=e9796] + - cell "149" [ref=e9797]: "149" + - cell [ref=e9798] + - cell "+" [ref=e9799]: + - generic [ref=e9800]: + + - 'cell "- Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." [ref=e9801]': + - code [ref=e9802]: "- Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." + - 'row "150 + - Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." [ref=e9803]': + - cell [ref=e9804] + - cell "150" [ref=e9805]: "150" + - cell [ref=e9806] + - cell "+" [ref=e9807]: + - generic [ref=e9808]: + + - 'cell "- Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." [ref=e9809]': + - code [ref=e9810]: "- Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." + - 'row "151 + - Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." [ref=e9811]': + - cell [ref=e9812] + - cell "151" [ref=e9813]: "151" + - cell [ref=e9814] + - cell "+" [ref=e9815]: + - generic [ref=e9816]: + + - 'cell "- Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." [ref=e9817]': + - code [ref=e9818]: "- Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." + - 'row "152 + - Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." [ref=e9819]': + - cell [ref=e9820] + - cell "152" [ref=e9821]: "152" + - cell [ref=e9822] + - cell "+" [ref=e9823]: + - generic [ref=e9824]: + + - 'cell "- Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." [ref=e9825]': + - code [ref=e9826]: "- Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." + - 'row "153 + - No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." [ref=e9827]': + - cell [ref=e9828] + - cell "153" [ref=e9829]: "153" + - cell [ref=e9830] + - cell "+" [ref=e9831]: + - generic [ref=e9832]: + + - 'cell "- No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." [ref=e9833]': + - code [ref=e9834]: "- No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." + - row "154 + - Validation evidence:" [ref=e9835]: + - cell [ref=e9836] + - cell "154" [ref=e9837]: "154" + - cell [ref=e9838] + - cell "+" [ref=e9839]: + - generic [ref=e9840]: + + - cell "- Validation evidence:" [ref=e9841]: + - code [ref=e9842]: "- Validation evidence:" + - 'row "155 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e9843]': + - cell [ref=e9844] + - cell "155" [ref=e9845]: "155" + - cell [ref=e9846] + - cell "+" [ref=e9847]: + - generic [ref=e9848]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e9849]': + - code [ref=e9850]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "156 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e9851]': + - cell [ref=e9852] + - cell "156" [ref=e9853]: "156" + - cell [ref=e9854] + - cell "+" [ref=e9855]: + - generic [ref=e9856]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e9857]': + - code [ref=e9858]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" + - 'row "157 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e9859]': + - cell [ref=e9860] + - cell "157" [ref=e9861]: "157" + - cell [ref=e9862] + - cell "+" [ref=e9863]: + - generic [ref=e9864]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e9865]': + - code [ref=e9866]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" + - 'row "158 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e9867]': + - cell [ref=e9868] + - cell "158" [ref=e9869]: "158" + - cell [ref=e9870] + - cell "+" [ref=e9871]: + - generic [ref=e9872]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e9873]': + - code [ref=e9874]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "159 + - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" [ref=e9875]': + - cell [ref=e9876] + - cell "159" [ref=e9877]: "159" + - cell [ref=e9878] + - cell "+" [ref=e9879]: + - generic [ref=e9880]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" [ref=e9881]': + - code [ref=e9882]: "- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" + - 'row "160 + - `git diff --check`" [ref=e9883]': + - cell [ref=e9884] + - cell "160" [ref=e9885]: "160" + - cell [ref=e9886] + - cell "+" [ref=e9887]: + - generic [ref=e9888]: + + - 'cell "- `git diff --check`" [ref=e9889]': + - code [ref=e9890]: "- `git diff --check`" + - group "Fußzeile" [ref=e9891]: + - contentinfo "Über die Software" [ref=e9892]: + - link "Powered by Gitea" [ref=e9893] [cursor=pointer]: + - /url: https://about.gitea.com + - text: "Version: 1.22.3 Seite:" + - strong [ref=e9894]: 766ms + - text: "Template:" + - strong [ref=e9895]: 514ms + - group "Links" [ref=e9896]: + - menu [ref=e9897] [cursor=pointer]: + - generic [ref=e9898]: + - img [ref=e9899] + - text: Deutsch + - link "Lizenzen" [ref=e9901] [cursor=pointer]: + - /url: /assets/licenses.txt + - link "API" [ref=e9902] [cursor=pointer]: + - /url: /api/swagger \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T11-29-00-606Z.yml b/.playwright-mcp/page-2026-06-06T11-29-00-606Z.yml new file mode 100644 index 00000000..aecd40bd --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T11-29-00-606Z.yml @@ -0,0 +1,9968 @@ +- generic [ref=e1]: + - generic [ref=e2]: + - navigation "Navigationsleiste" [ref=e3]: + - generic [ref=e4]: + - link "Startseite" [ref=e5] [cursor=pointer]: + - /url: / + - img [ref=e6] + - button "Navigationsmenü" [ref=e8] [cursor=pointer]: + - img [ref=e9] + - main "Comparing b7907bd69d...03514b9e5b" [ref=e11]: + - generic [ref=e12]: + - generic [ref=e14]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: + - link "ahmido" [ref=e21] [cursor=pointer]: + - /url: /ahmido + - text: / + - link "TenantAtlas" [ref=e22] [cursor=pointer]: + - /url: /ahmido/TenantAtlas + - generic [ref=e23]: + - link "RSS Feed" [ref=e24] [cursor=pointer]: + - /url: /ahmido/TenantAtlas.rss + - img [ref=e25] + - generic "Melde dich an, um dieses Repository zu beobachten." [ref=e28] [cursor=pointer]: + - button "Beobachten" [disabled]: + - img + - generic: Beobachten + - link "1" [ref=e29]: + - /url: /ahmido/TenantAtlas/watchers + - generic "Bitte melde dich an, um dieses Repository zu favorisieren." [ref=e31] [cursor=pointer]: + - button "Favorisieren" [disabled]: + - img + - generic: Favorisieren + - link "0" [ref=e32]: + - /url: /ahmido/TenantAtlas/stars + - generic "Bitte melde dich an, um dieses Repository zu forken." [ref=e33]: + - generic: + - img + - link "0" [ref=e34] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/forks + - navigation [ref=e36]: + - generic [ref=e37]: + - link "Code" [ref=e38] [cursor=pointer]: + - /url: /ahmido/TenantAtlas + - img [ref=e39] + - generic [ref=e41]: Code + - link "Issues" [ref=e42] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/issues + - img [ref=e43] + - generic [ref=e46]: Issues + - link "Pull-Requests" [ref=e47] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/pulls + - img [ref=e48] + - generic [ref=e50]: Pull-Requests + - link "Actions" [ref=e51] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/actions + - img [ref=e52] + - generic [ref=e54]: Actions + - link "Pakete" [ref=e55] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/packages + - img [ref=e56] + - generic [ref=e58]: Pakete + - link "Projekte 1" [ref=e59] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/projects + - img [ref=e60] + - generic [ref=e62]: Projekte + - generic [ref=e63]: "1" + - button "Weitere Einträge" [expanded] [ref=e64] [cursor=pointer]: + - img [ref=e65] + - generic [ref=e68]: + - heading "Commits vergleichen" [level=2] [ref=e69] + - generic [ref=e70]: + - link "Head und Base vertauschen" [ref=e71] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/compare/358-operationrun-queue-truth-foundation...platform-dev + - img [ref=e72] + - combobox [ref=e74] [cursor=pointer]: + - generic [ref=e75]: + - generic [ref=e76]: "Ziel: ahmido:platform-dev" + - menu [ref=e77] + - link "..." [ref=e79] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/compare/platform-dev..358-operationrun-queue-truth-foundation + - img [ref=e80] + - generic [ref=e82]: ... + - combobox [ref=e83] [cursor=pointer]: + - generic [ref=e84]: + - generic [ref=e85]: "pullen von: ahmido:358-operationrun-queue-truth-foundation" + - menu [ref=e86] + - generic [ref=e88]: + - heading "1 Commits platform-d ... 358-operat" [level=4] [ref=e89]: + - generic [ref=e90]: 1 Commits + - generic [ref=e91]: + - link "platform-d" [ref=e92] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/commit/b7907bd69d169bd4b3bf37e1ee9d9e4478c7cb13 + - text: ... + - link "358-operat" [ref=e93] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - table [ref=e95]: + - rowgroup [ref=e96]: + - row "Autor Nachricht Datum" [ref=e97]: + - columnheader "Autor" [ref=e98] + - columnheader "Nachricht" [ref=e99] + - columnheader "Datum" [ref=e100] + - columnheader [ref=e101] + - rowgroup [ref=e102]: + - 'row "Ahmed Darrazi Ahmed Darrazi feat: implement operation run queue truth foundation (spec 358) 6. Juni 2026, 1:27 PM MESZ Hash kopieren An diesem Punkt im Verlauf anzeigen" [ref=e9903]': + - cell "Ahmed Darrazi Ahmed Darrazi" [ref=e104]: + - generic [ref=e105]: + - img "Ahmed Darrazi" [ref=e106] + - generic [ref=e107]: Ahmed Darrazi + - 'cell "feat: implement operation run queue truth foundation (spec 358)" [ref=e108]': + - 'generic "feat: implement operation run queue truth foundation (spec 358)" [ref=e110]': + - 'link "feat: implement operation run queue truth foundation (spec 358)" [ref=e111] [cursor=pointer]': + - /url: /ahmido/TenantAtlas/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - cell "6. Juni 2026, 1:27 PM MESZ" [ref=e9904]: 2026-06-06 13:27:48 +02:00vor 1 Minute + - cell "Hash kopieren An diesem Punkt im Verlauf anzeigen" [ref=e113]: + - button "Hash kopieren" [ref=e114] [cursor=pointer]: + - img [ref=e115] + - link "An diesem Punkt im Verlauf anzeigen" [ref=e118] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999 + - img [ref=e119] + - generic [ref=e121]: + - generic [ref=e123]: + - combobox "Leerzeichen" [ref=e124] [cursor=pointer]: + - img [ref=e125] + - link "Geteilte Ansicht" [ref=e127] [cursor=pointer]: + - /url: "?style=split&whitespace=show-all&show-outdated=" + - img [ref=e128] + - menu "Diff-Optionen" [ref=e130] [cursor=pointer]: + - img [ref=e131] + - generic [ref=e134]: + - generic [ref=e135]: + - 'heading "9 9 Änderungen: 8 Ergänzungen und 1 Löschungen apps/platform/app/Support/OpsUx/OperationRunProgressContract.php Datei anzeigen" [level=4] [ref=e136]': + - generic [ref=e137]: + - button [ref=e138] [cursor=pointer]: + - img [ref=e139] + - generic [ref=e141]: + - text: "9" + - 'generic "9 Änderungen: 8 Ergänzungen und 1 Löschungen" [ref=e142]' + - generic [ref=e144]: + - link "apps/platform/app/Support/OpsUx/OperationRunProgressContract.php" [ref=e145] [cursor=pointer]: + - /url: "#diff-af8b87c456c4a94716646dc84feac12360c69971" + - button [ref=e146] [cursor=pointer]: + - img [ref=e147] + - link "Datei anzeigen" [ref=e151] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/app/Support/OpsUx/OperationRunProgressContract.php + - table [ref=e154]: + - rowgroup [ref=e161]: + - 'row "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" [ref=e162]': + - cell [ref=e163]: + - button [ref=e165] [cursor=pointer]: + - img [ref=e166] + - cell [ref=e168] + - cell [ref=e169] + - 'cell "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" [ref=e170]': + - code [ref=e171]: "@ -38,6 +38,13 @@ public static function forRun(OperationRun $run): array" + - 'row "38 38 $context = is_array($run->context) ? $run->context : [];" [ref=e172]': + - cell "38" [ref=e173]: "38" + - cell "38" [ref=e174]: "38" + - cell [ref=e175] + - cell [ref=e176] + - 'cell "$context = is_array($run->context) ? $run->context : [];" [ref=e177]': + - code [ref=e178]: "$context = is_array($run->context) ? $run->context : [];" + - row "39 39 $capability = self::capabilityForRun($run, $summaryCounts, $context);" [ref=e179]: + - cell "39" [ref=e180]: "39" + - cell "39" [ref=e181]: "39" + - cell [ref=e182] + - cell [ref=e183] + - cell "$capability = self::capabilityForRun($run, $summaryCounts, $context);" [ref=e184]: + - code [ref=e185]: $capability = self::capabilityForRun($run, $summaryCounts, $context); + - row "40 40" [ref=e186]: + - cell "40" [ref=e187]: "40" + - cell "40" [ref=e188]: "40" + - cell [ref=e189] + - cell [ref=e190] + - cell [ref=e191]: + - code + - 'row "41 + if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" [ref=e192]': + - cell [ref=e193] + - cell "41" [ref=e194]: "41" + - cell [ref=e195] + - cell "+" [ref=e196]: + - generic [ref=e197]: + + - 'cell "if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" [ref=e198]': + - code [ref=e199]: "if ($run->isCurrentlyActive() && $run->freshnessState()->isLikelyStale()) {" + - row "42 + return self::indeterminateModel(" [ref=e200]: + - cell [ref=e201] + - cell "42" [ref=e202]: "42" + - cell [ref=e203] + - cell "+" [ref=e204]: + - generic [ref=e205]: + + - cell "return self::indeterminateModel(" [ref=e206]: + - code [ref=e207]: return self::indeterminateModel( + - row "43 + $capability," [ref=e208]: + - cell [ref=e209] + - cell "43" [ref=e210]: "43" + - cell [ref=e211] + - cell "+" [ref=e212]: + - generic [ref=e213]: + + - cell "$capability," [ref=e214]: + - code [ref=e215]: $capability, + - row "44 + RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.'," [ref=e216]: + - cell [ref=e217] + - cell "44" [ref=e218]: "44" + - cell [ref=e219] + - cell "+" [ref=e220]: + - generic [ref=e221]: + + - cell "RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.'," [ref=e222]: + - code [ref=e223]: RunDurationInsights::stuckGuidance($run) ?? 'Past the lifecycle window. Review worker health and logs before retrying.', + - row "45 + );" [ref=e224]: + - cell [ref=e225] + - cell "45" [ref=e226]: "45" + - cell [ref=e227] + - cell "+" [ref=e228]: + - generic [ref=e229]: + + - cell ");" [ref=e230]: + - code [ref=e231]: ); + - 'row "46 + }" [ref=e232]': + - cell [ref=e233] + - cell "46" [ref=e234]: "46" + - cell [ref=e235] + - cell "+" [ref=e236]: + - generic [ref=e237]: + + - 'cell "}" [ref=e238]': + - code [ref=e239]: "}" + - row "47 +" [ref=e240]: + - cell [ref=e241] + - cell "47" [ref=e242]: "47" + - cell [ref=e243] + - cell "+" [ref=e244]: + - generic [ref=e245]: + + - cell [ref=e246]: + - code + - 'row "41 48 return match ($capability) {" [ref=e247]': + - cell "41" [ref=e248]: "41" + - cell "48" [ref=e249]: "48" + - cell [ref=e250] + - cell [ref=e251] + - 'cell "return match ($capability) {" [ref=e252]': + - code [ref=e253]: "return match ($capability) {" + - row "42 49 self::COUNTED => self::countedModel($summaryCounts)," [ref=e254]: + - cell "42" [ref=e255]: "42" + - cell "49" [ref=e256]: "49" + - cell [ref=e257] + - cell [ref=e258] + - cell "self::COUNTED => self::countedModel($summaryCounts)," [ref=e259]: + - code [ref=e260]: self::COUNTED => self::countedModel($summaryCounts), + - row "43 50 self::PHASED => self::phasedModel($run, $context)," [ref=e261]: + - cell "43" [ref=e262]: "43" + - cell "50" [ref=e263]: "50" + - cell [ref=e264] + - cell [ref=e265] + - cell "self::PHASED => self::phasedModel($run, $context)," [ref=e266]: + - code [ref=e267]: self::PHASED => self::phasedModel($run, $context), + - 'row "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" [ref=e268]': + - cell [ref=e269]: + - generic [ref=e270]: + - button [ref=e271] [cursor=pointer]: + - img [ref=e272] + - button [ref=e274] [cursor=pointer]: + - img [ref=e275] + - cell [ref=e277] + - cell [ref=e278] + - 'cell "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" [ref=e279]': + - code [ref=e280]: "@ -411,4 +418,4 @@ private static function intOrNull(mixed $value): ?int" + - 'row "411 418 {" [ref=e281]': + - cell "411" [ref=e282]: "411" + - cell "418" [ref=e283]: "418" + - cell [ref=e284] + - cell [ref=e285] + - 'cell "{" [ref=e286]': + - code [ref=e287]: "{" + - 'row "412 419 return is_int($value) ? $value : null;" [ref=e288]': + - cell "412" [ref=e289]: "412" + - cell "419" [ref=e290]: "419" + - cell [ref=e291] + - cell [ref=e292] + - 'cell "return is_int($value) ? $value : null;" [ref=e293]': + - code [ref=e294]: "return is_int($value) ? $value : null;" + - 'row "413 420 }" [ref=e295]': + - cell "413" [ref=e296]: "413" + - cell "420" [ref=e297]: "420" + - cell [ref=e298] + - cell [ref=e299] + - 'cell "}" [ref=e300]': + - code [ref=e301]: "}" + - 'row "414 - }" [ref=e302]': + - cell "414" [ref=e303]: "414" + - cell [ref=e304] + - cell [ref=e305] + - cell "-" [ref=e306]: + - generic [ref=e307]: "-" + - 'cell "}" [ref=e308]': + - code [ref=e309]: "}" + - 'row "421 + }" [ref=e310]': + - cell [ref=e311] + - cell "421" [ref=e312]: "421" + - cell [ref=e313] + - cell "+" [ref=e314]: + - generic [ref=e315]: + + - 'cell "}" [ref=e316]': + - code [ref=e317]: "}" + - row [ref=e318]: + - cell [ref=e319] + - cell [ref=e320] + - cell [ref=e321] + - cell [ref=e322]: + - code + - generic [ref=e323]: + - 'heading "3 3 Änderungen: 2 Ergänzungen und 1 Löschungen apps/platform/app/Support/OpsUx/OperationUxPresenter.php Datei anzeigen" [level=4] [ref=e324]': + - generic [ref=e325]: + - button [ref=e326] [cursor=pointer]: + - img [ref=e327] + - generic [ref=e329]: + - text: "3" + - 'generic "3 Änderungen: 2 Ergänzungen und 1 Löschungen" [ref=e330]' + - generic [ref=e332]: + - link "apps/platform/app/Support/OpsUx/OperationUxPresenter.php" [ref=e333] [cursor=pointer]: + - /url: "#diff-1c19add1fd95c0b4bd4495ffc27d46c971c67709" + - button [ref=e334] [cursor=pointer]: + - img [ref=e335] + - link "Datei anzeigen" [ref=e339] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/app/Support/OpsUx/OperationUxPresenter.php + - table [ref=e342]: + - rowgroup [ref=e349]: + - 'row "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" [ref=e350]': + - cell [ref=e351]: + - button [ref=e353] [cursor=pointer]: + - img [ref=e354] + - cell [ref=e356] + - cell [ref=e357] + - 'cell "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" [ref=e358]': + - code [ref=e359]: "@ -201,7 +201,8 @@ private static function buildSurfaceGuidance(OperationRun $run): ?string" + - row "201 201 $freshnessState = self::freshnessState($run);" [ref=e360]: + - cell "201" [ref=e361]: "201" + - cell "201" [ref=e362]: "201" + - cell [ref=e363] + - cell [ref=e364] + - cell "$freshnessState = self::freshnessState($run);" [ref=e365]: + - code [ref=e366]: $freshnessState = self::freshnessState($run); + - row "202 202" [ref=e367]: + - cell "202" [ref=e368]: "202" + - cell "202" [ref=e369]: "202" + - cell [ref=e370] + - cell [ref=e371] + - cell [ref=e372]: + - code + - 'row "203 203 if ($freshnessState->isLikelyStale()) {" [ref=e373]': + - cell "203" [ref=e374]: "203" + - cell "203" [ref=e375]: "203" + - cell [ref=e376] + - cell [ref=e377] + - 'cell "if ($freshnessState->isLikelyStale()) {" [ref=e378]': + - code [ref=e379]: "if ($freshnessState->isLikelyStale()) {" + - row "204 - return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.';" [ref=e380]: + - cell "204" [ref=e381]: "204" + - cell [ref=e382] + - cell [ref=e383] + - cell "-" [ref=e384]: + - generic [ref=e385]: "-" + - cell "return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.';" [ref=e386]: + - code [ref=e387]: return 'This operation is past its lifecycle window. Review worker health and logs before retrying from the start surface.'; + - row "204 + return RunDurationInsights::stuckGuidance($run)" [ref=e388]: + - cell [ref=e389] + - cell "204" [ref=e390]: "204" + - cell [ref=e391] + - cell "+" [ref=e392]: + - generic [ref=e393]: + + - cell "return RunDurationInsights::stuckGuidance($run)" [ref=e394]: + - code [ref=e395]: return RunDurationInsights::stuckGuidance($run) + - row "205 + ?? 'Past the lifecycle window. Review worker health and logs before retrying.';" [ref=e396]: + - cell [ref=e397] + - cell "205" [ref=e398]: "205" + - cell [ref=e399] + - cell "+" [ref=e400]: + - generic [ref=e401]: + + - cell "?? 'Past the lifecycle window. Review worker health and logs before retrying.';" [ref=e402]: + - code [ref=e403]: "?? 'Past the lifecycle window. Review worker health and logs before retrying.';" + - 'row "205 206 }" [ref=e404]': + - cell "205" [ref=e405]: "205" + - cell "206" [ref=e406]: "206" + - cell [ref=e407] + - cell [ref=e408] + - 'cell "}" [ref=e409]': + - code [ref=e410]: "}" + - row "206 207" [ref=e411]: + - cell "206" [ref=e412]: "206" + - cell "207" [ref=e413]: "207" + - cell [ref=e414] + - cell [ref=e415] + - cell [ref=e416]: + - code + - 'row "207 208 if ($freshnessState->isReconciledFailed()) {" [ref=e417]': + - cell "207" [ref=e418]: "207" + - cell "208" [ref=e419]: "208" + - cell [ref=e420] + - cell [ref=e421] + - 'cell "if ($freshnessState->isReconciledFailed()) {" [ref=e422]': + - code [ref=e423]: "if ($freshnessState->isReconciledFailed()) {" + - row [ref=e424]: + - cell [ref=e425]: + - button [ref=e427] [cursor=pointer]: + - img [ref=e428] + - cell [ref=e430] + - cell [ref=e431] + - cell [ref=e432]: + - code + - generic [ref=e433]: + - 'heading "9 9 Änderungen: 7 Ergänzungen und 2 Löschungen apps/platform/resources/views/livewire/bulk-operation-progress.blade.php Datei anzeigen" [level=4] [ref=e434]': + - generic [ref=e435]: + - button [ref=e436] [cursor=pointer]: + - img [ref=e437] + - generic [ref=e439]: + - text: "9" + - 'generic "9 Änderungen: 7 Ergänzungen und 2 Löschungen" [ref=e440]' + - generic [ref=e442]: + - link "apps/platform/resources/views/livewire/bulk-operation-progress.blade.php" [ref=e443] [cursor=pointer]: + - /url: "#diff-3037cccd64c0a0bbd6b4146e8fefb38b64c8633e" + - button [ref=e444] [cursor=pointer]: + - img [ref=e445] + - link "Datei anzeigen" [ref=e449] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/resources/views/livewire/bulk-operation-progress.blade.php + - table [ref=e452]: + - rowgroup [ref=e459]: + - row "@ -13,8 +13,14 @@" [ref=e460]: + - cell [ref=e461]: + - button [ref=e463] [cursor=pointer]: + - img [ref=e464] + - cell [ref=e466] + - cell [ref=e467] + - cell "@ -13,8 +13,14 @@" [ref=e468]: + - code [ref=e469]: "@ -13,8 +13,14 @@" + - 'row "13 13 $operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" [ref=e470]': + - cell "13" [ref=e471]: "13" + - cell "13" [ref=e472]: "13" + - cell [ref=e473] + - cell [ref=e474] + - 'cell "$operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" [ref=e475]': + - code [ref=e476]: "$operationsIndexUrl = $tenant ? \\App\\Support\\OpsUx\\OperationRunUrl::index($tenant) : null;" + - 'row "14 14 $primaryActionLabel = $usesCollectivePrimaryAction ? ''Review operations'' : ''View operation'';" [ref=e477]': + - cell "14" [ref=e478]: "14" + - cell "14" [ref=e479]: "14" + - cell [ref=e480] + - cell [ref=e481] + - 'cell "$primaryActionLabel = $usesCollectivePrimaryAction ? ''Review operations'' : ''View operation'';" [ref=e482]': + - code [ref=e483]: "$primaryActionLabel = $usesCollectivePrimaryAction ? 'Review operations' : 'View operation';" + - 'row "15 15 $bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? ''Active operations'' : ''Operation updates'';" [ref=e484]': + - cell "15" [ref=e485]: "15" + - cell "15" [ref=e486]: "15" + - cell [ref=e487] + - cell [ref=e488] + - 'cell "$bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? ''Active operations'' : ''Operation updates'';" [ref=e489]': + - code [ref=e490]: "$bannerTitle = $hasActiveVisibleRuns && ! $hasTerminalVisibleRuns ? 'Active operations' : 'Operation updates';" + - row "16 + $hasStaleActiveVisibleRuns = $runs->contains(" [ref=e491]: + - cell [ref=e492] + - cell "16" [ref=e493]: "16" + - cell [ref=e494] + - cell "+" [ref=e495]: + - generic [ref=e496]: + + - cell "$hasStaleActiveVisibleRuns = $runs->contains(" [ref=e497]: + - code [ref=e498]: $hasStaleActiveVisibleRuns = $runs->contains( + - 'row "17 + fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" [ref=e499]': + - cell [ref=e500] + - cell "17" [ref=e501]: "17" + - cell [ref=e502] + - cell "+" [ref=e503]: + - generic [ref=e504]: + + - 'cell "fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" [ref=e505]': + - code [ref=e506]: "fn ($run): bool => $run instanceof \\App\\Models\\OperationRun" + - row "18 + && $run->isCurrentlyActive()" [ref=e507]: + - cell [ref=e508] + - cell "18" [ref=e509]: "18" + - cell [ref=e510] + - cell "+" [ref=e511]: + - generic [ref=e512]: + + - cell "&& $run->isCurrentlyActive()" [ref=e513]: + - code [ref=e514]: "&& $run->isCurrentlyActive()" + - row "19 + && $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" [ref=e515]: + - cell [ref=e516] + - cell "19" [ref=e517]: "19" + - cell [ref=e518] + - cell "+" [ref=e519]: + - generic [ref=e520]: + + - cell "&& $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" [ref=e521]: + - code [ref=e522]: "&& $run->problemClass() === \\App\\Models\\OperationRun::PROBLEM_CLASS_ACTIVE_STALE_ATTENTION" + - row "20 + );" [ref=e523]: + - cell [ref=e524] + - cell "20" [ref=e525]: "20" + - cell [ref=e526] + - cell "+" [ref=e527]: + - generic [ref=e528]: + + - cell ");" [ref=e529]: + - code [ref=e530]: ); + - 'row "16 21 $bannerHelper = match (true) {" [ref=e531]': + - cell "16" [ref=e532]: "16" + - cell "21" [ref=e533]: "21" + - cell [ref=e534] + - cell [ref=e535] + - 'cell "$bannerHelper = match (true) {" [ref=e536]': + - code [ref=e537]: "$bannerHelper = match (true) {" + - row "17 22 $hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.'," [ref=e538]: + - cell "17" [ref=e539]: "17" + - cell "22" [ref=e540]: "22" + - cell [ref=e541] + - cell [ref=e542] + - cell "$hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.'," [ref=e543]: + - code [ref=e544]: $hasActiveVisibleRuns && $hasTerminalFollowUpVisibleRuns => 'Active and recent operation updates that may need review.', + - row "23 + $hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.'," [ref=e545]: + - cell [ref=e546] + - cell "23" [ref=e547]: "23" + - cell [ref=e548] + - cell "+" [ref=e549]: + - generic [ref=e550]: + + - cell "$hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.'," [ref=e551]: + - code [ref=e552]: $hasStaleActiveVisibleRuns => 'One or more active operations are past their lifecycle window and need review.', + - row "18 24 $hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.'," [ref=e553]: + - cell "18" [ref=e554]: "18" + - cell "24" [ref=e555]: "24" + - cell [ref=e556] + - cell [ref=e557] + - cell "$hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.'," [ref=e558]: + - code [ref=e559]: $hasActiveVisibleRuns => 'Queued and running work stays here until diagnostics are needed.', + - row "19 25 $hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.'," [ref=e560]: + - cell "19" [ref=e561]: "19" + - cell "25" [ref=e562]: "25" + - cell [ref=e563] + - cell [ref=e564] + - cell "$hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.'," [ref=e565]: + - code [ref=e566]: $hasTerminalFollowUpVisibleRuns => 'Recent operation updates that may need review.', + - row "20 26 $hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.'," [ref=e567]: + - cell "20" [ref=e568]: "20" + - cell "26" [ref=e569]: "26" + - cell [ref=e570] + - cell [ref=e571] + - cell "$hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.'," [ref=e572]: + - code [ref=e573]: $hasTerminalVisibleRuns => 'Successful operation updates stay briefly visible so you can confirm completion and keep working.', + - row "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" [ref=e574]: + - cell [ref=e575]: + - generic [ref=e576]: + - button [ref=e577] [cursor=pointer]: + - img [ref=e578] + - button [ref=e580] [cursor=pointer]: + - img [ref=e581] + - cell [ref=e583] + - cell [ref=e584] + - cell "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" [ref=e585]: + - code [ref=e586]: "@ -111,8 +117,7 @@ class=\"inline-flex items-center justify-center rounded-lg border border-transpar" + - row "111 117 $progress = \\App\\Support\\OpsUx\\OperationRunProgressContract::forRun($run);" [ref=e587]: + - cell "111" [ref=e588]: "111" + - cell "117" [ref=e589]: "117" + - cell [ref=e590] + - cell [ref=e591] + - cell "$progress = \\App\\Support\\OpsUx\\OperationRunProgressContract::forRun($run);" [ref=e592]: + - code [ref=e593]: $progress = \App\Support\OpsUx\OperationRunProgressContract::forRun($run); + - row "112 118 $hasDeterminateProgress = $progress['display'] === 'counted';" [ref=e594]: + - cell "112" [ref=e595]: "112" + - cell "118" [ref=e596]: "118" + - cell [ref=e597] + - cell [ref=e598] + - cell "$hasDeterminateProgress = $progress['display'] === 'counted';" [ref=e599]: + - code [ref=e600]: $hasDeterminateProgress = $progress['display'] === 'counted'; + - row "113 119 $lifecycleAttention = \\App\\Support\\OpsUx\\OperationUxPresenter::lifecycleAttentionSummary($run);" [ref=e601]: + - cell "113" [ref=e602]: "113" + - cell "119" [ref=e603]: "119" + - cell [ref=e604] + - cell [ref=e605] + - cell "$lifecycleAttention = \\App\\Support\\OpsUx\\OperationUxPresenter::lifecycleAttentionSummary($run);" [ref=e606]: + - code [ref=e607]: $lifecycleAttention = \App\Support\OpsUx\OperationUxPresenter::lifecycleAttentionSummary($run); + - row "114 - $showsLifecycleAttention = $lifecycleAttention !== null" [ref=e608]: + - cell "114" [ref=e609]: "114" + - cell [ref=e610] + - cell [ref=e611] + - cell "-" [ref=e612]: + - generic [ref=e613]: "-" + - cell "$showsLifecycleAttention = $lifecycleAttention !== null" [ref=e614]: + - code [ref=e615]: $showsLifecycleAttention = $lifecycleAttention !== null + - row "115 - && ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" [ref=e616]: + - cell "115" [ref=e617]: "115" + - cell [ref=e618] + - cell [ref=e619] + - cell "-" [ref=e620]: + - generic [ref=e621]: "-" + - cell "&& ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" [ref=e622]: + - code [ref=e623]: "&& ($lifecycleAttention !== 'Likely stale' || $run->status === 'queued' || ! $hasDeterminateProgress);" + - row "120 + $showsLifecycleAttention = $lifecycleAttention !== null;" [ref=e624]: + - cell [ref=e625] + - cell "120" [ref=e626]: "120" + - cell [ref=e627] + - cell "+" [ref=e628]: + - generic [ref=e629]: + + - cell "$showsLifecycleAttention = $lifecycleAttention !== null;" [ref=e630]: + - code [ref=e631]: $showsLifecycleAttention = $lifecycleAttention !== null; + - row "116 121 $progressLabel = $progress['label'];" [ref=e632]: + - cell "116" [ref=e633]: "116" + - cell "121" [ref=e634]: "121" + - cell [ref=e635] + - cell [ref=e636] + - cell "$progressLabel = $progress['label'];" [ref=e637]: + - code [ref=e638]: $progressLabel = $progress['label']; + - row "117 122 $progressPercent = $progress['percent'];" [ref=e639]: + - cell "117" [ref=e640]: "117" + - cell "122" [ref=e641]: "122" + - cell [ref=e642] + - cell [ref=e643] + - cell "$progressPercent = $progress['percent'];" [ref=e644]: + - code [ref=e645]: $progressPercent = $progress['percent']; + - row "118 123 $showsIndeterminateProgress = $progress['display'] === 'indeterminate';" [ref=e646]: + - cell "118" [ref=e647]: "118" + - cell "123" [ref=e648]: "123" + - cell [ref=e649] + - cell [ref=e650] + - cell "$showsIndeterminateProgress = $progress['display'] === 'indeterminate';" [ref=e651]: + - code [ref=e652]: $showsIndeterminateProgress = $progress['display'] === 'indeterminate'; + - row [ref=e653]: + - cell [ref=e654]: + - button [ref=e656] [cursor=pointer]: + - img [ref=e657] + - cell [ref=e659] + - cell [ref=e660] + - cell [ref=e661]: + - code + - generic [ref=e662]: + - 'heading "28 28 Änderungen: 28 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php Datei anzeigen" [level=4] [ref=e663]': + - generic [ref=e664]: + - button [ref=e665] [cursor=pointer]: + - img [ref=e666] + - generic [ref=e668]: + - text: "28" + - 'generic "28 Änderungen: 28 Ergänzungen und 0 Löschungen" [ref=e669]' + - generic [ref=e671]: + - link "apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php" [ref=e672] [cursor=pointer]: + - /url: "#diff-5e29ae6c499f78190dc7c64c7cf044bb0a43e995" + - button [ref=e673] [cursor=pointer]: + - img [ref=e674] + - link "Datei anzeigen" [ref=e678] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php + - table [ref=e681]: + - rowgroup [ref=e688]: + - 'row "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" [ref=e689]': + - cell [ref=e690]: + - button [ref=e692] [cursor=pointer]: + - img [ref=e693] + - cell [ref=e695] + - cell [ref=e696] + - 'cell "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" [ref=e697]': + - code [ref=e698]: "@ -243,6 +243,34 @@ function baselineCompareGapContext(array $overrides = []): array" + - row "243 243 ->and($bannerPosition)->toBeLessThan($decisionPosition);" [ref=e699]: + - cell "243" [ref=e700]: "243" + - cell "243" [ref=e701]: "243" + - cell [ref=e702] + - cell [ref=e703] + - cell "->and($bannerPosition)->toBeLessThan($decisionPosition);" [ref=e704]: + - code [ref=e705]: "->and($bannerPosition)->toBeLessThan($decisionPosition);" + - 'row "244 244 });" [ref=e706]': + - cell "244" [ref=e707]: "244" + - cell "244" [ref=e708]: "244" + - cell [ref=e709] + - cell [ref=e710] + - 'cell "});" [ref=e711]': + - code [ref=e712]: "});" + - row "245 245" [ref=e713]: + - cell "245" [ref=e714]: "245" + - cell "245" [ref=e715]: "245" + - cell [ref=e716] + - cell [ref=e717] + - cell [ref=e718]: + - code + - 'row "246 + it(''keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy'', function (): void {" [ref=e719]': + - cell [ref=e720] + - cell "246" [ref=e721]: "246" + - cell [ref=e722] + - cell "+" [ref=e723]: + - generic [ref=e724]: + + - 'cell "it(''keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy'', function (): void {" [ref=e725]': + - code [ref=e726]: "it('keeps stale canonical detail aligned with lifecycle guidance instead of ordinary queued copy', function (): void {" + - 'row "247 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e727]': + - cell [ref=e728] + - cell "247" [ref=e729]: "247" + - cell [ref=e730] + - cell "+" [ref=e731]: + - generic [ref=e732]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e733]': + - code [ref=e734]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "248 +" [ref=e735]: + - cell [ref=e736] + - cell "248" [ref=e737]: "248" + - cell [ref=e738] + - cell "+" [ref=e739]: + - generic [ref=e740]: + + - cell [ref=e741]: + - code + - row "249 + setAdminPanelContext();" [ref=e742]: + - cell [ref=e743] + - cell "249" [ref=e744]: "249" + - cell [ref=e745] + - cell "+" [ref=e746]: + - generic [ref=e747]: + + - cell "setAdminPanelContext();" [ref=e748]: + - code [ref=e749]: setAdminPanelContext(); + - row "250 +" [ref=e750]: + - cell [ref=e751] + - cell "250" [ref=e752]: "250" + - cell [ref=e753] + - cell "+" [ref=e754]: + - generic [ref=e755]: + + - cell [ref=e756]: + - code + - row "251 + $run = OperationRun::factory()->create([" [ref=e757]: + - cell [ref=e758] + - cell "251" [ref=e759]: "251" + - cell [ref=e760] + - cell "+" [ref=e761]: + - generic [ref=e762]: + + - cell "$run = OperationRun::factory()->create([" [ref=e763]: + - code [ref=e764]: $run = OperationRun::factory()->create([ + - row "252 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e765]: + - cell [ref=e766] + - cell "252" [ref=e767]: "252" + - cell [ref=e768] + - cell "+" [ref=e769]: + - generic [ref=e770]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e771]: + - code [ref=e772]: "'workspace_id' => (int) $tenant->workspace_id," + - row "253 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e773]: + - cell [ref=e774] + - cell "253" [ref=e775]: "253" + - cell [ref=e776] + - cell "+" [ref=e777]: + - generic [ref=e778]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e779]: + - code [ref=e780]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "254 + 'type' => 'inventory_sync'," [ref=e781]: + - cell [ref=e782] + - cell "254" [ref=e783]: "254" + - cell [ref=e784] + - cell "+" [ref=e785]: + - generic [ref=e786]: + + - cell "'type' => 'inventory_sync'," [ref=e787]: + - code [ref=e788]: "'type' => 'inventory_sync'," + - row "255 + 'status' => OperationRunStatus::Queued->value," [ref=e789]: + - cell [ref=e790] + - cell "255" [ref=e791]: "255" + - cell [ref=e792] + - cell "+" [ref=e793]: + - generic [ref=e794]: + + - cell "'status' => OperationRunStatus::Queued->value," [ref=e795]: + - code [ref=e796]: "'status' => OperationRunStatus::Queued->value," + - row "256 + 'outcome' => OperationRunOutcome::Pending->value," [ref=e797]: + - cell [ref=e798] + - cell "256" [ref=e799]: "256" + - cell [ref=e800] + - cell "+" [ref=e801]: + - generic [ref=e802]: + + - cell "'outcome' => OperationRunOutcome::Pending->value," [ref=e803]: + - code [ref=e804]: "'outcome' => OperationRunOutcome::Pending->value," + - row "257 + 'created_at' => now()->subWeeks(2)," [ref=e805]: + - cell [ref=e806] + - cell "257" [ref=e807]: "257" + - cell [ref=e808] + - cell "+" [ref=e809]: + - generic [ref=e810]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e811]: + - code [ref=e812]: "'created_at' => now()->subWeeks(2)," + - row "258 + ]);" [ref=e813]: + - cell [ref=e814] + - cell "258" [ref=e815]: "258" + - cell [ref=e816] + - cell "+" [ref=e817]: + - generic [ref=e818]: + + - cell "]);" [ref=e819]: + - code [ref=e820]: "]);" + - row "259 +" [ref=e821]: + - cell [ref=e822] + - cell "259" [ref=e823]: "259" + - cell [ref=e824] + - cell "+" [ref=e825]: + - generic [ref=e826]: + + - cell [ref=e827]: + - code + - row "260 + $response = $this->actingAs($user)" [ref=e828]: + - cell [ref=e829] + - cell "260" [ref=e830]: "260" + - cell [ref=e831] + - cell "+" [ref=e832]: + - generic [ref=e833]: + + - cell "$response = $this->actingAs($user)" [ref=e834]: + - code [ref=e835]: $response = $this->actingAs($user) + - row "261 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e836]: + - cell [ref=e837] + - cell "261" [ref=e838]: "261" + - cell [ref=e839] + - cell "+" [ref=e840]: + - generic [ref=e841]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e842]: + - code [ref=e843]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "262 + ->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" [ref=e844]: + - cell [ref=e845] + - cell "262" [ref=e846]: "262" + - cell [ref=e847] + - cell "+" [ref=e848]: + - generic [ref=e849]: + + - cell "->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" [ref=e850]: + - code [ref=e851]: "->get(\\App\\Support\\OperationRunLinks::tenantlessView($run))" + - row "263 + ->assertOk()" [ref=e852]: + - cell [ref=e853] + - cell "263" [ref=e854]: "263" + - cell [ref=e855] + - cell "+" [ref=e856]: + - generic [ref=e857]: + + - cell "->assertOk()" [ref=e858]: + - code [ref=e859]: "->assertOk()" + - row "264 + ->assertSee('Likely stale operation')" [ref=e860]: + - cell [ref=e861] + - cell "264" [ref=e862]: "264" + - cell [ref=e863] + - cell "+" [ref=e864]: + - generic [ref=e865]: + + - cell "->assertSee('Likely stale operation')" [ref=e866]: + - code [ref=e867]: "->assertSee('Likely stale operation')" + - row "265 + ->assertSee('Decision');" [ref=e868]: + - cell [ref=e869] + - cell "265" [ref=e870]: "265" + - cell [ref=e871] + - cell "+" [ref=e872]: + - generic [ref=e873]: + + - cell "->assertSee('Decision');" [ref=e874]: + - code [ref=e875]: "->assertSee('Decision');" + - row "266 +" [ref=e876]: + - cell [ref=e877] + - cell "266" [ref=e878]: "266" + - cell [ref=e879] + - cell "+" [ref=e880]: + - generic [ref=e881]: + + - cell [ref=e882]: + - code + - row "267 + $pageText = visiblePageText($response);" [ref=e883]: + - cell [ref=e884] + - cell "267" [ref=e885]: "267" + - cell [ref=e886] + - cell "+" [ref=e887]: + - generic [ref=e888]: + + - cell "$pageText = visiblePageText($response);" [ref=e889]: + - code [ref=e890]: $pageText = visiblePageText($response); + - row "268 +" [ref=e891]: + - cell [ref=e892] + - cell "268" [ref=e893]: "268" + - cell [ref=e894] + - cell "+" [ref=e895]: + - generic [ref=e896]: + + - cell [ref=e897]: + - code + - row "269 + expect($pageText)->toContain('past its lifecycle window')" [ref=e898]: + - cell [ref=e899] + - cell "269" [ref=e900]: "269" + - cell [ref=e901] + - cell "+" [ref=e902]: + - generic [ref=e903]: + + - cell "expect($pageText)->toContain('past its lifecycle window')" [ref=e904]: + - code [ref=e905]: expect($pageText)->toContain('past its lifecycle window') + - row "270 + ->not->toContain('No action needed yet. The operation is waiting for a worker.')" [ref=e906]: + - cell [ref=e907] + - cell "270" [ref=e908]: "270" + - cell [ref=e909] + - cell "+" [ref=e910]: + - generic [ref=e911]: + + - cell "->not->toContain('No action needed yet. The operation is waiting for a worker.')" [ref=e912]: + - code [ref=e913]: "->not->toContain('No action needed yet. The operation is waiting for a worker.')" + - row "271 + ->not->toContain('Waiting for worker.');" [ref=e914]: + - cell [ref=e915] + - cell "271" [ref=e916]: "271" + - cell [ref=e917] + - cell "+" [ref=e918]: + - generic [ref=e919]: + + - cell "->not->toContain('Waiting for worker.');" [ref=e920]: + - code [ref=e921]: "->not->toContain('Waiting for worker.');" + - 'row "272 + });" [ref=e922]': + - cell [ref=e923] + - cell "272" [ref=e924]: "272" + - cell [ref=e925] + - cell "+" [ref=e926]: + - generic [ref=e927]: + + - 'cell "});" [ref=e928]': + - code [ref=e929]: "});" + - row "273 +" [ref=e930]: + - cell [ref=e931] + - cell "273" [ref=e932]: "273" + - cell [ref=e933] + - cell "+" [ref=e934]: + - generic [ref=e935]: + + - cell [ref=e936]: + - code + - 'row "246 274 it(''renders explicit sparse-data fallbacks for operation runs'', function (): void {" [ref=e937]': + - cell "246" [ref=e938]: "246" + - cell "274" [ref=e939]: "274" + - cell [ref=e940] + - cell [ref=e941] + - 'cell "it(''renders explicit sparse-data fallbacks for operation runs'', function (): void {" [ref=e942]': + - code [ref=e943]: "it('renders explicit sparse-data fallbacks for operation runs', function (): void {" + - row "247 275 $workspace = Workspace::factory()->create();" [ref=e944]: + - cell "247" [ref=e945]: "247" + - cell "275" [ref=e946]: "275" + - cell [ref=e947] + - cell [ref=e948] + - cell "$workspace = Workspace::factory()->create();" [ref=e949]: + - code [ref=e950]: $workspace = Workspace::factory()->create(); + - row "248 276 $user = User::factory()->create();" [ref=e951]: + - cell "248" [ref=e952]: "248" + - cell "276" [ref=e953]: "276" + - cell [ref=e954] + - cell [ref=e955] + - cell "$user = User::factory()->create();" [ref=e956]: + - code [ref=e957]: $user = User::factory()->create(); + - row [ref=e958]: + - cell [ref=e959]: + - button [ref=e961] [cursor=pointer]: + - img [ref=e962] + - cell [ref=e964] + - cell [ref=e965] + - cell [ref=e966]: + - code + - generic [ref=e967]: + - 'heading "26 26 Änderungen: 26 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php Datei anzeigen" [level=4] [ref=e968]': + - generic [ref=e969]: + - button [ref=e970] [cursor=pointer]: + - img [ref=e971] + - generic [ref=e973]: + - text: "26" + - 'generic "26 Änderungen: 26 Ergänzungen und 0 Löschungen" [ref=e974]' + - generic [ref=e976]: + - link "apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php" [ref=e977] [cursor=pointer]: + - /url: "#diff-4ad868f31240549fa538ce94de7e0c20c547e7da" + - button [ref=e978] [cursor=pointer]: + - img [ref=e979] + - link "Datei anzeigen" [ref=e983] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php + - table [ref=e986]: + - rowgroup [ref=e993]: + - row "@ -115,3 +115,29 @@" [ref=e994]: + - cell [ref=e995]: + - button [ref=e997] [cursor=pointer]: + - img [ref=e998] + - cell [ref=e1000] + - cell [ref=e1001] + - cell "@ -115,3 +115,29 @@" [ref=e1002]: + - code [ref=e1003]: "@ -115,3 +115,29 @@" + - row "115 115 ->assertDontSee('Operation finished Unknown')" [ref=e1004]: + - cell "115" [ref=e1005]: "115" + - cell "115" [ref=e1006]: "115" + - cell [ref=e1007] + - cell [ref=e1008] + - cell "->assertDontSee('Operation finished Unknown')" [ref=e1009]: + - code [ref=e1010]: "->assertDontSee('Operation finished Unknown')" + - row "116 116 ->assertDontSee('Completed with follow-up Unknown');" [ref=e1011]: + - cell "116" [ref=e1012]: "116" + - cell "116" [ref=e1013]: "116" + - cell [ref=e1014] + - cell [ref=e1015] + - cell "->assertDontSee('Completed with follow-up Unknown');" [ref=e1016]: + - code [ref=e1017]: "->assertDontSee('Completed with follow-up Unknown');" + - 'row "117 117 });" [ref=e1018]': + - cell "117" [ref=e1019]: "117" + - cell "117" [ref=e1020]: "117" + - cell [ref=e1021] + - cell [ref=e1022] + - 'cell "});" [ref=e1023]': + - code [ref=e1024]: "});" + - row "118 +" [ref=e1025]: + - cell [ref=e1026] + - cell "118" [ref=e1027]: "118" + - cell [ref=e1028] + - cell "+" [ref=e1029]: + - generic [ref=e1030]: + + - cell [ref=e1031]: + - code + - 'row "119 + it(''subordinates stale running progress to lifecycle guidance on the operations workbench'', function (): void {" [ref=e1032]': + - cell [ref=e1033] + - cell "119" [ref=e1034]: "119" + - cell [ref=e1035] + - cell "+" [ref=e1036]: + - generic [ref=e1037]: + + - 'cell "it(''subordinates stale running progress to lifecycle guidance on the operations workbench'', function (): void {" [ref=e1038]': + - code [ref=e1039]: "it('subordinates stale running progress to lifecycle guidance on the operations workbench', function (): void {" + - 'row "120 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e1040]': + - cell [ref=e1041] + - cell "120" [ref=e1042]: "120" + - cell [ref=e1043] + - cell "+" [ref=e1044]: + - generic [ref=e1045]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e1046]': + - code [ref=e1047]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "121 +" [ref=e1048]: + - cell [ref=e1049] + - cell "121" [ref=e1050]: "121" + - cell [ref=e1051] + - cell "+" [ref=e1052]: + - generic [ref=e1053]: + + - cell [ref=e1054]: + - code + - row "122 + OperationRun::factory()->create([" [ref=e1055]: + - cell [ref=e1056] + - cell "122" [ref=e1057]: "122" + - cell [ref=e1058] + - cell "+" [ref=e1059]: + - generic [ref=e1060]: + + - cell "OperationRun::factory()->create([" [ref=e1061]: + - code [ref=e1062]: OperationRun::factory()->create([ + - row "123 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1063]: + - cell [ref=e1064] + - cell "123" [ref=e1065]: "123" + - cell [ref=e1066] + - cell "+" [ref=e1067]: + - generic [ref=e1068]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1069]: + - code [ref=e1070]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "124 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1071]: + - cell [ref=e1072] + - cell "124" [ref=e1073]: "124" + - cell [ref=e1074] + - cell "+" [ref=e1075]: + - generic [ref=e1076]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1077]: + - code [ref=e1078]: "'workspace_id' => (int) $tenant->workspace_id," + - row "125 + 'type' => 'inventory_sync'," [ref=e1079]: + - cell [ref=e1080] + - cell "125" [ref=e1081]: "125" + - cell [ref=e1082] + - cell "+" [ref=e1083]: + - generic [ref=e1084]: + + - cell "'type' => 'inventory_sync'," [ref=e1085]: + - code [ref=e1086]: "'type' => 'inventory_sync'," + - row "126 + 'status' => 'running'," [ref=e1087]: + - cell [ref=e1088] + - cell "126" [ref=e1089]: "126" + - cell [ref=e1090] + - cell "+" [ref=e1091]: + - generic [ref=e1092]: + + - cell "'status' => 'running'," [ref=e1093]: + - code [ref=e1094]: "'status' => 'running'," + - row "127 + 'outcome' => 'pending'," [ref=e1095]: + - cell [ref=e1096] + - cell "127" [ref=e1097]: "127" + - cell [ref=e1098] + - cell "+" [ref=e1099]: + - generic [ref=e1100]: + + - cell "'outcome' => 'pending'," [ref=e1101]: + - code [ref=e1102]: "'outcome' => 'pending'," + - row "128 + 'summary_counts' => [" [ref=e1103]: + - cell [ref=e1104] + - cell "128" [ref=e1105]: "128" + - cell [ref=e1106] + - cell "+" [ref=e1107]: + - generic [ref=e1108]: + + - cell "'summary_counts' => [" [ref=e1109]: + - code [ref=e1110]: "'summary_counts' => [" + - row "129 + 'total' => 10," [ref=e1111]: + - cell [ref=e1112] + - cell "129" [ref=e1113]: "129" + - cell [ref=e1114] + - cell "+" [ref=e1115]: + - generic [ref=e1116]: + + - cell "'total' => 10," [ref=e1117]: + - code [ref=e1118]: "'total' => 10," + - row "130 + 'processed' => 4," [ref=e1119]: + - cell [ref=e1120] + - cell "130" [ref=e1121]: "130" + - cell [ref=e1122] + - cell "+" [ref=e1123]: + - generic [ref=e1124]: + + - cell "'processed' => 4," [ref=e1125]: + - code [ref=e1126]: "'processed' => 4," + - row "131 + ]," [ref=e1127]: + - cell [ref=e1128] + - cell "131" [ref=e1129]: "131" + - cell [ref=e1130] + - cell "+" [ref=e1131]: + - generic [ref=e1132]: + + - cell "]," [ref=e1133]: + - code [ref=e1134]: "]," + - row "132 + 'started_at' => now()->subWeeks(2)," [ref=e1135]: + - cell [ref=e1136] + - cell "132" [ref=e1137]: "132" + - cell [ref=e1138] + - cell "+" [ref=e1139]: + - generic [ref=e1140]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1141]: + - code [ref=e1142]: "'started_at' => now()->subWeeks(2)," + - row "133 + 'created_at' => now()->subWeeks(2)," [ref=e1143]: + - cell [ref=e1144] + - cell "133" [ref=e1145]: "133" + - cell [ref=e1146] + - cell "+" [ref=e1147]: + - generic [ref=e1148]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1149]: + - code [ref=e1150]: "'created_at' => now()->subWeeks(2)," + - row "134 + ]);" [ref=e1151]: + - cell [ref=e1152] + - cell "134" [ref=e1153]: "134" + - cell [ref=e1154] + - cell "+" [ref=e1155]: + - generic [ref=e1156]: + + - cell "]);" [ref=e1157]: + - code [ref=e1158]: "]);" + - row "135 +" [ref=e1159]: + - cell [ref=e1160] + - cell "135" [ref=e1161]: "135" + - cell [ref=e1162] + - cell "+" [ref=e1163]: + - generic [ref=e1164]: + + - cell [ref=e1165]: + - code + - row "136 + $this->actingAs($user)" [ref=e1166]: + - cell [ref=e1167] + - cell "136" [ref=e1168]: "136" + - cell [ref=e1169] + - cell "+" [ref=e1170]: + - generic [ref=e1171]: + + - cell "$this->actingAs($user)" [ref=e1172]: + - code [ref=e1173]: $this->actingAs($user) + - row "137 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1174]: + - cell [ref=e1175] + - cell "137" [ref=e1176]: "137" + - cell [ref=e1177] + - cell "+" [ref=e1178]: + - generic [ref=e1179]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1180]: + - code [ref=e1181]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "138 + ->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1182]: + - cell [ref=e1183] + - cell "138" [ref=e1184]: "138" + - cell [ref=e1185] + - cell "+" [ref=e1186]: + - generic [ref=e1187]: + + - cell "->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1188]: + - code [ref=e1189]: "->get(\\App\\Support\\OperationRunLinks::index())" + - row "139 + ->assertOk()" [ref=e1190]: + - cell [ref=e1191] + - cell "139" [ref=e1192]: "139" + - cell [ref=e1193] + - cell "+" [ref=e1194]: + - generic [ref=e1195]: + + - cell "->assertOk()" [ref=e1196]: + - code [ref=e1197]: "->assertOk()" + - row "140 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1198]: + - cell [ref=e1199] + - cell "140" [ref=e1200]: "140" + - cell [ref=e1201] + - cell "+" [ref=e1202]: + - generic [ref=e1203]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1204]: + - code [ref=e1205]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "141 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e1206]: + - cell [ref=e1207] + - cell "141" [ref=e1208]: "141" + - cell [ref=e1209] + - cell "+" [ref=e1210]: + - generic [ref=e1211]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e1212]: + - code [ref=e1213]: "->assertDontSee('4 / 10 processed (40%)')" + - row "142 + ->assertDontSee('Progress details pending.');" [ref=e1214]: + - cell [ref=e1215] + - cell "142" [ref=e1216]: "142" + - cell [ref=e1217] + - cell "+" [ref=e1218]: + - generic [ref=e1219]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1220]: + - code [ref=e1221]: "->assertDontSee('Progress details pending.');" + - 'row "143 + });" [ref=e1222]': + - cell [ref=e1223] + - cell "143" [ref=e1224]: "143" + - cell [ref=e1225] + - cell "+" [ref=e1226]: + - generic [ref=e1227]: + + - 'cell "});" [ref=e1228]': + - code [ref=e1229]: "});" + - row [ref=e1230]: + - cell [ref=e1231] + - cell [ref=e1232] + - cell [ref=e1233] + - cell [ref=e1234]: + - code + - generic [ref=e1235]: + - 'heading "6 6 Änderungen: 5 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php Datei anzeigen" [level=4] [ref=e1236]': + - generic [ref=e1237]: + - button [ref=e1238] [cursor=pointer]: + - img [ref=e1239] + - generic [ref=e1241]: + - text: "6" + - 'generic "6 Änderungen: 5 Ergänzungen und 1 Löschungen" [ref=e1242]' + - generic [ref=e1244]: + - link "apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php" [ref=e1245] [cursor=pointer]: + - /url: "#diff-47ac8fb6334ab7b20743abbd9ef0a58338ba9eaf" + - button [ref=e1246] [cursor=pointer]: + - img [ref=e1247] + - link "Datei anzeigen" [ref=e1251] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php + - table [ref=e1254]: + - rowgroup [ref=e1261]: + - row "@ -45,6 +45,8 @@" [ref=e1262]: + - cell [ref=e1263]: + - button [ref=e1265] [cursor=pointer]: + - img [ref=e1266] + - cell [ref=e1268] + - cell [ref=e1269] + - cell "@ -45,6 +45,8 @@" [ref=e1270]: + - code [ref=e1271]: "@ -45,6 +45,8 @@" + - row "45 45 ->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1272]: + - cell "45" [ref=e1273]: "45" + - cell "45" [ref=e1274]: "45" + - cell [ref=e1275] + - cell [ref=e1276] + - cell "->get(\\App\\Support\\OperationRunLinks::index())" [ref=e1277]: + - code [ref=e1278]: "->get(\\App\\Support\\OperationRunLinks::index())" + - row "46 46 ->assertOk()" [ref=e1279]: + - cell "46" [ref=e1280]: "46" + - cell "46" [ref=e1281]: "46" + - cell [ref=e1282] + - cell [ref=e1283] + - cell "->assertOk()" [ref=e1284]: + - code [ref=e1285]: "->assertOk()" + - row "47 47 ->assertSee('Likely stale')" [ref=e1286]: + - cell "47" [ref=e1287]: "47" + - cell "47" [ref=e1288]: "47" + - cell [ref=e1289] + - cell [ref=e1290] + - cell "->assertSee('Likely stale')" [ref=e1291]: + - code [ref=e1292]: "->assertSee('Likely stale')" + - row "48 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1293]: + - cell [ref=e1294] + - cell "48" [ref=e1295]: "48" + - cell [ref=e1296] + - cell "+" [ref=e1297]: + - generic [ref=e1298]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1299]: + - code [ref=e1300]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "49 + ->assertDontSee('Progress details pending.')" [ref=e1301]: + - cell [ref=e1302] + - cell "49" [ref=e1303]: "49" + - cell [ref=e1304] + - cell "+" [ref=e1305]: + - generic [ref=e1306]: + + - cell "->assertDontSee('Progress details pending.')" [ref=e1307]: + - code [ref=e1308]: "->assertDontSee('Progress details pending.')" + - row "48 50 ->assertSee('belong in terminal follow-up');" [ref=e1309]: + - cell "48" [ref=e1310]: "48" + - cell "50" [ref=e1311]: "50" + - cell [ref=e1312] + - cell [ref=e1313] + - cell "->assertSee('belong in terminal follow-up');" [ref=e1314]: + - code [ref=e1315]: "->assertSee('belong in terminal follow-up');" + - row "49 51" [ref=e1316]: + - cell "49" [ref=e1317]: "49" + - cell "51" [ref=e1318]: "51" + - cell [ref=e1319] + - cell [ref=e1320] + - cell [ref=e1321]: + - code + - row "50 52 $this->actingAs($user)" [ref=e1322]: + - cell "50" [ref=e1323]: "50" + - cell "52" [ref=e1324]: "52" + - cell [ref=e1325] + - cell [ref=e1326] + - cell "$this->actingAs($user)" [ref=e1327]: + - code [ref=e1328]: $this->actingAs($user) + - row "@ -58,7 +60,9 @@" [ref=e1329]: + - cell [ref=e1330]: + - button [ref=e1332] [cursor=pointer]: + - img [ref=e1333] + - cell [ref=e1335] + - cell [ref=e1336] + - cell "@ -58,7 +60,9 @@" [ref=e1337]: + - code [ref=e1338]: "@ -58,7 +60,9 @@" + - row "58 60 ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1339]: + - cell "58" [ref=e1340]: "58" + - cell "60" [ref=e1341]: "60" + - cell [ref=e1342] + - cell [ref=e1343] + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1344]: + - code [ref=e1345]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "59 61 ->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" [ref=e1346]: + - cell "59" [ref=e1347]: "59" + - cell "61" [ref=e1348]: "61" + - cell [ref=e1349] + - cell [ref=e1350] + - cell "->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" [ref=e1351]: + - code [ref=e1352]: "->get(\\App\\Support\\OperationRunLinks::tenantlessView($staleRun))" + - row "60 62 ->assertOk()" [ref=e1353]: + - cell "60" [ref=e1354]: "60" + - cell "62" [ref=e1355]: "62" + - cell [ref=e1356] + - cell [ref=e1357] + - cell "->assertOk()" [ref=e1358]: + - code [ref=e1359]: "->assertOk()" + - row "61 - ->assertSee('Likely stale operation');" [ref=e1360]: + - cell "61" [ref=e1361]: "61" + - cell [ref=e1362] + - cell [ref=e1363] + - cell "-" [ref=e1364]: + - generic [ref=e1365]: "-" + - cell "->assertSee('Likely stale operation');" [ref=e1366]: + - code [ref=e1367]: "->assertSee('Likely stale operation');" + - row "63 + ->assertSee('Likely stale operation')" [ref=e1368]: + - cell [ref=e1369] + - cell "63" [ref=e1370]: "63" + - cell [ref=e1371] + - cell "+" [ref=e1372]: + - generic [ref=e1373]: + + - cell "->assertSee('Likely stale operation')" [ref=e1374]: + - code [ref=e1375]: "->assertSee('Likely stale operation')" + - row "64 + ->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1376]: + - cell [ref=e1377] + - cell "64" [ref=e1378]: "64" + - cell [ref=e1379] + - cell "+" [ref=e1380]: + - generic [ref=e1381]: + + - cell "->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1382]: + - code [ref=e1383]: "->assertDontSee('No action needed yet. The operation is currently in progress.')" + - row "65 + ->assertDontSee('Progress details pending.');" [ref=e1384]: + - cell [ref=e1385] + - cell "65" [ref=e1386]: "65" + - cell [ref=e1387] + - cell "+" [ref=e1388]: + - generic [ref=e1389]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1390]: + - code [ref=e1391]: "->assertDontSee('Progress details pending.');" + - 'row "62 66 });" [ref=e1392]': + - cell "62" [ref=e1393]: "62" + - cell "66" [ref=e1394]: "66" + - cell [ref=e1395] + - cell [ref=e1396] + - 'cell "});" [ref=e1397]': + - code [ref=e1398]: "});" + - row "63 67" [ref=e1399]: + - cell "63" [ref=e1400]: "63" + - cell "67" [ref=e1401]: "67" + - cell [ref=e1402] + - cell [ref=e1403] + - cell [ref=e1404]: + - code + - 'row "64 68 it(''renders lifecycle outcome fallbacks when historical runs are missing stored outcomes'', function (): void {" [ref=e1405]': + - cell "64" [ref=e1406]: "64" + - cell "68" [ref=e1407]: "68" + - cell [ref=e1408] + - cell [ref=e1409] + - 'cell "it(''renders lifecycle outcome fallbacks when historical runs are missing stored outcomes'', function (): void {" [ref=e1410]': + - code [ref=e1411]: "it('renders lifecycle outcome fallbacks when historical runs are missing stored outcomes', function (): void {" + - row [ref=e1412]: + - cell [ref=e1413]: + - button [ref=e1415] [cursor=pointer]: + - img [ref=e1416] + - cell [ref=e1418] + - cell [ref=e1419] + - cell [ref=e1420]: + - code + - generic [ref=e1421]: + - 'heading "29 29 Änderungen: 29 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/MonitoringOperationsTest.php Datei anzeigen" [level=4] [ref=e1422]': + - generic [ref=e1423]: + - button [ref=e1424] [cursor=pointer]: + - img [ref=e1425] + - generic [ref=e1427]: + - text: "29" + - 'generic "29 Änderungen: 29 Ergänzungen und 0 Löschungen" [ref=e1428]' + - generic [ref=e1430]: + - link "apps/platform/tests/Feature/MonitoringOperationsTest.php" [ref=e1431] [cursor=pointer]: + - /url: "#diff-d10bc881823900fad101572aee338ca92084fb34" + - button [ref=e1432] [cursor=pointer]: + - img [ref=e1433] + - link "Datei anzeigen" [ref=e1437] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/MonitoringOperationsTest.php + - table [ref=e1440]: + - rowgroup [ref=e1447]: + - row "@ -186,3 +186,32 @@" [ref=e1448]: + - cell [ref=e1449]: + - button [ref=e1451] [cursor=pointer]: + - img [ref=e1452] + - cell [ref=e1454] + - cell [ref=e1455] + - cell "@ -186,3 +186,32 @@" [ref=e1456]: + - code [ref=e1457]: "@ -186,3 +186,32 @@" + - row "186 186 ->toContain('data-shared-detail-family=\"verification-report\"')" [ref=e1458]: + - cell "186" [ref=e1459]: "186" + - cell "186" [ref=e1460]: "186" + - cell [ref=e1461] + - cell [ref=e1462] + - cell "->toContain('data-shared-detail-family=\"verification-report\"')" [ref=e1463]: + - code [ref=e1464]: "->toContain('data-shared-detail-family=\"verification-report\"')" + - row "187 187 ->toContain('data-host-kind=\"operation_run_detail\"');" [ref=e1465]: + - cell "187" [ref=e1466]: "187" + - cell "187" [ref=e1467]: "187" + - cell [ref=e1468] + - cell [ref=e1469] + - cell "->toContain('data-host-kind=\"operation_run_detail\"');" [ref=e1470]: + - code [ref=e1471]: "->toContain('data-host-kind=\"operation_run_detail\"');" + - 'row "188 188 });" [ref=e1472]': + - cell "188" [ref=e1473]: "188" + - cell "188" [ref=e1474]: "188" + - cell [ref=e1475] + - cell [ref=e1476] + - 'cell "});" [ref=e1477]': + - code [ref=e1478]: "});" + - row "189 +" [ref=e1479]: + - cell [ref=e1480] + - cell "189" [ref=e1481]: "189" + - cell [ref=e1482] + - cell "+" [ref=e1483]: + - generic [ref=e1484]: + + - cell [ref=e1485]: + - code + - 'row "190 + it(''keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window'', function (): void {" [ref=e1486]': + - cell [ref=e1487] + - cell "190" [ref=e1488]: "190" + - cell [ref=e1489] + - cell "+" [ref=e1490]: + - generic [ref=e1491]: + + - 'cell "it(''keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window'', function (): void {" [ref=e1492]': + - code [ref=e1493]: "it('keeps workspace monitoring guidance stale-first when an active run is beyond its lifecycle window', function (): void {" + - row "191 + $tenant = ManagedEnvironment::factory()->create();" [ref=e1494]: + - cell [ref=e1495] + - cell "191" [ref=e1496]: "191" + - cell [ref=e1497] + - cell "+" [ref=e1498]: + - generic [ref=e1499]: + + - cell "$tenant = ManagedEnvironment::factory()->create();" [ref=e1500]: + - code [ref=e1501]: $tenant = ManagedEnvironment::factory()->create(); + - 'row "192 + [$user, $tenant] = createUserWithTenant($tenant, role: ''owner'');" [ref=e1502]': + - cell [ref=e1503] + - cell "192" [ref=e1504]: "192" + - cell [ref=e1505] + - cell "+" [ref=e1506]: + - generic [ref=e1507]: + + - 'cell "[$user, $tenant] = createUserWithTenant($tenant, role: ''owner'');" [ref=e1508]': + - code [ref=e1509]: "[$user, $tenant] = createUserWithTenant($tenant, role: 'owner');" + - row "193 +" [ref=e1510]: + - cell [ref=e1511] + - cell "193" [ref=e1512]: "193" + - cell [ref=e1513] + - cell "+" [ref=e1514]: + - generic [ref=e1515]: + + - cell [ref=e1516]: + - code + - row "194 + OperationRun::factory()->create([" [ref=e1517]: + - cell [ref=e1518] + - cell "194" [ref=e1519]: "194" + - cell [ref=e1520] + - cell "+" [ref=e1521]: + - generic [ref=e1522]: + + - cell "OperationRun::factory()->create([" [ref=e1523]: + - code [ref=e1524]: OperationRun::factory()->create([ + - row "195 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1525]: + - cell [ref=e1526] + - cell "195" [ref=e1527]: "195" + - cell [ref=e1528] + - cell "+" [ref=e1529]: + - generic [ref=e1530]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1531]: + - code [ref=e1532]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "196 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1533]: + - cell [ref=e1534] + - cell "196" [ref=e1535]: "196" + - cell [ref=e1536] + - cell "+" [ref=e1537]: + - generic [ref=e1538]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1539]: + - code [ref=e1540]: "'workspace_id' => (int) $tenant->workspace_id," + - row "197 + 'type' => 'inventory_sync'," [ref=e1541]: + - cell [ref=e1542] + - cell "197" [ref=e1543]: "197" + - cell [ref=e1544] + - cell "+" [ref=e1545]: + - generic [ref=e1546]: + + - cell "'type' => 'inventory_sync'," [ref=e1547]: + - code [ref=e1548]: "'type' => 'inventory_sync'," + - row "198 + 'status' => 'running'," [ref=e1549]: + - cell [ref=e1550] + - cell "198" [ref=e1551]: "198" + - cell [ref=e1552] + - cell "+" [ref=e1553]: + - generic [ref=e1554]: + + - cell "'status' => 'running'," [ref=e1555]: + - code [ref=e1556]: "'status' => 'running'," + - row "199 + 'outcome' => 'pending'," [ref=e1557]: + - cell [ref=e1558] + - cell "199" [ref=e1559]: "199" + - cell [ref=e1560] + - cell "+" [ref=e1561]: + - generic [ref=e1562]: + + - cell "'outcome' => 'pending'," [ref=e1563]: + - code [ref=e1564]: "'outcome' => 'pending'," + - row "200 + 'summary_counts' => [" [ref=e1565]: + - cell [ref=e1566] + - cell "200" [ref=e1567]: "200" + - cell [ref=e1568] + - cell "+" [ref=e1569]: + - generic [ref=e1570]: + + - cell "'summary_counts' => [" [ref=e1571]: + - code [ref=e1572]: "'summary_counts' => [" + - row "201 + 'total' => 10," [ref=e1573]: + - cell [ref=e1574] + - cell "201" [ref=e1575]: "201" + - cell [ref=e1576] + - cell "+" [ref=e1577]: + - generic [ref=e1578]: + + - cell "'total' => 10," [ref=e1579]: + - code [ref=e1580]: "'total' => 10," + - row "202 + 'processed' => 4," [ref=e1581]: + - cell [ref=e1582] + - cell "202" [ref=e1583]: "202" + - cell [ref=e1584] + - cell "+" [ref=e1585]: + - generic [ref=e1586]: + + - cell "'processed' => 4," [ref=e1587]: + - code [ref=e1588]: "'processed' => 4," + - row "203 + ]," [ref=e1589]: + - cell [ref=e1590] + - cell "203" [ref=e1591]: "203" + - cell [ref=e1592] + - cell "+" [ref=e1593]: + - generic [ref=e1594]: + + - cell "]," [ref=e1595]: + - code [ref=e1596]: "]," + - row "204 + 'started_at' => now()->subWeeks(2)," [ref=e1597]: + - cell [ref=e1598] + - cell "204" [ref=e1599]: "204" + - cell [ref=e1600] + - cell "+" [ref=e1601]: + - generic [ref=e1602]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1603]: + - code [ref=e1604]: "'started_at' => now()->subWeeks(2)," + - row "205 + 'created_at' => now()->subWeeks(2)," [ref=e1605]: + - cell [ref=e1606] + - cell "205" [ref=e1607]: "205" + - cell [ref=e1608] + - cell "+" [ref=e1609]: + - generic [ref=e1610]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1611]: + - code [ref=e1612]: "'created_at' => now()->subWeeks(2)," + - row "206 + ]);" [ref=e1613]: + - cell [ref=e1614] + - cell "206" [ref=e1615]: "206" + - cell [ref=e1616] + - cell "+" [ref=e1617]: + - generic [ref=e1618]: + + - cell "]);" [ref=e1619]: + - code [ref=e1620]: "]);" + - row "207 +" [ref=e1621]: + - cell [ref=e1622] + - cell "207" [ref=e1623]: "207" + - cell [ref=e1624] + - cell "+" [ref=e1625]: + - generic [ref=e1626]: + + - cell [ref=e1627]: + - code + - row "208 + Filament::setTenant(null, true);" [ref=e1628]: + - cell [ref=e1629] + - cell "208" [ref=e1630]: "208" + - cell [ref=e1631] + - cell "+" [ref=e1632]: + - generic [ref=e1633]: + + - cell "Filament::setTenant(null, true);" [ref=e1634]: + - code [ref=e1635]: Filament::setTenant(null, true); + - row "209 +" [ref=e1636]: + - cell [ref=e1637] + - cell "209" [ref=e1638]: "209" + - cell [ref=e1639] + - cell "+" [ref=e1640]: + - generic [ref=e1641]: + + - cell [ref=e1642]: + - code + - row "210 + $this->actingAs($user)" [ref=e1643]: + - cell [ref=e1644] + - cell "210" [ref=e1645]: "210" + - cell [ref=e1646] + - cell "+" [ref=e1647]: + - generic [ref=e1648]: + + - cell "$this->actingAs($user)" [ref=e1649]: + - code [ref=e1650]: $this->actingAs($user) + - row "211 + ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1651]: + - cell [ref=e1652] + - cell "211" [ref=e1653]: "211" + - cell [ref=e1654] + - cell "+" [ref=e1655]: + - generic [ref=e1656]: + + - cell "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" [ref=e1657]: + - code [ref=e1658]: "->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])" + - row "212 + ->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" [ref=e1659]: + - cell [ref=e1660] + - cell "212" [ref=e1661]: "212" + - cell [ref=e1662] + - cell "+" [ref=e1663]: + - generic [ref=e1664]: + + - cell "->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" [ref=e1665]: + - code [ref=e1666]: "->get(route('admin.operations.index', ['workspace' => $tenant->workspace]))" + - row "213 + ->assertSuccessful()" [ref=e1667]: + - cell [ref=e1668] + - cell "213" [ref=e1669]: "213" + - cell [ref=e1670] + - cell "+" [ref=e1671]: + - generic [ref=e1672]: + + - cell "->assertSuccessful()" [ref=e1673]: + - code [ref=e1674]: "->assertSuccessful()" + - row "214 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1675]: + - cell [ref=e1676] + - cell "214" [ref=e1677]: "214" + - cell [ref=e1678] + - cell "+" [ref=e1679]: + - generic [ref=e1680]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e1681]: + - code [ref=e1682]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "215 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e1683]: + - cell [ref=e1684] + - cell "215" [ref=e1685]: "215" + - cell [ref=e1686] + - cell "+" [ref=e1687]: + - generic [ref=e1688]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e1689]: + - code [ref=e1690]: "->assertDontSee('4 / 10 processed (40%)')" + - row "216 + ->assertDontSee('Progress details pending.');" [ref=e1691]: + - cell [ref=e1692] + - cell "216" [ref=e1693]: "216" + - cell [ref=e1694] + - cell "+" [ref=e1695]: + - generic [ref=e1696]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e1697]: + - code [ref=e1698]: "->assertDontSee('Progress details pending.');" + - 'row "217 + });" [ref=e1699]': + - cell [ref=e1700] + - cell "217" [ref=e1701]: "217" + - cell [ref=e1702] + - cell "+" [ref=e1703]: + - generic [ref=e1704]: + + - 'cell "});" [ref=e1705]': + - code [ref=e1706]: "});" + - row [ref=e1707]: + - cell [ref=e1708] + - cell [ref=e1709] + - cell [ref=e1710] + - cell [ref=e1711]: + - code + - generic [ref=e1712]: + - 'heading "34 34 Änderungen: 34 Ergänzungen und 0 Löschungen apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php Datei anzeigen" [level=4] [ref=e1713]': + - generic [ref=e1714]: + - button [ref=e1715] [cursor=pointer]: + - img [ref=e1716] + - generic [ref=e1718]: + - text: "34" + - 'generic "34 Änderungen: 34 Ergänzungen und 0 Löschungen" [ref=e1719]' + - generic [ref=e1721]: + - link "apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php" [ref=e1722] [cursor=pointer]: + - /url: "#diff-78926fcd2b4b82100aa7ab7f37b294989c0693e0" + - button [ref=e1723] [cursor=pointer]: + - img [ref=e1724] + - link "Datei anzeigen" [ref=e1728] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php + - table [ref=e1731]: + - rowgroup [ref=e1738]: + - row "@ -272,6 +272,40 @@" [ref=e1739]: + - cell [ref=e1740]: + - button [ref=e1742] [cursor=pointer]: + - img [ref=e1743] + - cell [ref=e1745] + - cell [ref=e1746] + - cell "@ -272,6 +272,40 @@" [ref=e1747]: + - code [ref=e1748]: "@ -272,6 +272,40 @@" + - row "272 272 expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1);" [ref=e1749]: + - cell "272" [ref=e1750]: "272" + - cell "272" [ref=e1751]: "272" + - cell [ref=e1752] + - cell [ref=e1753] + - cell "expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1);" [ref=e1754]: + - code [ref=e1755]: expect(mb_substr_count($pageText, 'Automatically reconciled'))->toBe(1); + - 'row "273 273 });" [ref=e1756]': + - cell "273" [ref=e1757]: "273" + - cell "273" [ref=e1758]: "273" + - cell [ref=e1759] + - cell [ref=e1760] + - 'cell "});" [ref=e1761]': + - code [ref=e1762]: "});" + - row "274 274" [ref=e1763]: + - cell "274" [ref=e1764]: "274" + - cell "274" [ref=e1765]: "274" + - cell [ref=e1766] + - cell [ref=e1767] + - cell [ref=e1768]: + - code + - 'row "275 + it(''keeps stale active detail aligned with lifecycle guidance when determinate progress data exists'', function (): void {" [ref=e1769]': + - cell [ref=e1770] + - cell "275" [ref=e1771]: "275" + - cell [ref=e1772] + - cell "+" [ref=e1773]: + - generic [ref=e1774]: + + - 'cell "it(''keeps stale active detail aligned with lifecycle guidance when determinate progress data exists'', function (): void {" [ref=e1775]': + - code [ref=e1776]: "it('keeps stale active detail aligned with lifecycle guidance when determinate progress data exists', function (): void {" + - row "276 + $tenant = ManagedEnvironment::factory()->create();" [ref=e1777]: + - cell [ref=e1778] + - cell "276" [ref=e1779]: "276" + - cell [ref=e1780] + - cell "+" [ref=e1781]: + - generic [ref=e1782]: + + - cell "$tenant = ManagedEnvironment::factory()->create();" [ref=e1783]: + - code [ref=e1784]: $tenant = ManagedEnvironment::factory()->create(); + - 'row "277 + [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: ''owner'');" [ref=e1785]': + - cell [ref=e1786] + - cell "277" [ref=e1787]: "277" + - cell [ref=e1788] + - cell "+" [ref=e1789]: + - generic [ref=e1790]: + + - 'cell "[$user, $tenant] = createUserWithTenant(tenant: $tenant, role: ''owner'');" [ref=e1791]': + - code [ref=e1792]: "[$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner');" + - row "278 +" [ref=e1793]: + - cell [ref=e1794] + - cell "278" [ref=e1795]: "278" + - cell [ref=e1796] + - cell "+" [ref=e1797]: + - generic [ref=e1798]: + + - cell [ref=e1799]: + - code + - row "279 + $run = OperationRun::factory()->create([" [ref=e1800]: + - cell [ref=e1801] + - cell "279" [ref=e1802]: "279" + - cell [ref=e1803] + - cell "+" [ref=e1804]: + - generic [ref=e1805]: + + - cell "$run = OperationRun::factory()->create([" [ref=e1806]: + - code [ref=e1807]: $run = OperationRun::factory()->create([ + - row "280 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e1808]: + - cell [ref=e1809] + - cell "280" [ref=e1810]: "280" + - cell [ref=e1811] + - cell "+" [ref=e1812]: + - generic [ref=e1813]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e1814]: + - code [ref=e1815]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "281 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e1816]: + - cell [ref=e1817] + - cell "281" [ref=e1818]: "281" + - cell [ref=e1819] + - cell "+" [ref=e1820]: + - generic [ref=e1821]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e1822]: + - code [ref=e1823]: "'workspace_id' => (int) $tenant->workspace_id," + - row "282 + 'user_id' => (int) $user->getKey()," [ref=e1824]: + - cell [ref=e1825] + - cell "282" [ref=e1826]: "282" + - cell [ref=e1827] + - cell "+" [ref=e1828]: + - generic [ref=e1829]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e1830]: + - code [ref=e1831]: "'user_id' => (int) $user->getKey()," + - row "283 + 'type' => 'inventory_sync'," [ref=e1832]: + - cell [ref=e1833] + - cell "283" [ref=e1834]: "283" + - cell [ref=e1835] + - cell "+" [ref=e1836]: + - generic [ref=e1837]: + + - cell "'type' => 'inventory_sync'," [ref=e1838]: + - code [ref=e1839]: "'type' => 'inventory_sync'," + - row "284 + 'status' => OperationRunStatus::Running->value," [ref=e1840]: + - cell [ref=e1841] + - cell "284" [ref=e1842]: "284" + - cell [ref=e1843] + - cell "+" [ref=e1844]: + - generic [ref=e1845]: + + - cell "'status' => OperationRunStatus::Running->value," [ref=e1846]: + - code [ref=e1847]: "'status' => OperationRunStatus::Running->value," + - row "285 + 'outcome' => OperationRunOutcome::Pending->value," [ref=e1848]: + - cell [ref=e1849] + - cell "285" [ref=e1850]: "285" + - cell [ref=e1851] + - cell "+" [ref=e1852]: + - generic [ref=e1853]: + + - cell "'outcome' => OperationRunOutcome::Pending->value," [ref=e1854]: + - code [ref=e1855]: "'outcome' => OperationRunOutcome::Pending->value," + - row "286 + 'summary_counts' => [" [ref=e1856]: + - cell [ref=e1857] + - cell "286" [ref=e1858]: "286" + - cell [ref=e1859] + - cell "+" [ref=e1860]: + - generic [ref=e1861]: + + - cell "'summary_counts' => [" [ref=e1862]: + - code [ref=e1863]: "'summary_counts' => [" + - row "287 + 'total' => 10," [ref=e1864]: + - cell [ref=e1865] + - cell "287" [ref=e1866]: "287" + - cell [ref=e1867] + - cell "+" [ref=e1868]: + - generic [ref=e1869]: + + - cell "'total' => 10," [ref=e1870]: + - code [ref=e1871]: "'total' => 10," + - row "288 + 'processed' => 4," [ref=e1872]: + - cell [ref=e1873] + - cell "288" [ref=e1874]: "288" + - cell [ref=e1875] + - cell "+" [ref=e1876]: + - generic [ref=e1877]: + + - cell "'processed' => 4," [ref=e1878]: + - code [ref=e1879]: "'processed' => 4," + - row "289 + ]," [ref=e1880]: + - cell [ref=e1881] + - cell "289" [ref=e1882]: "289" + - cell [ref=e1883] + - cell "+" [ref=e1884]: + - generic [ref=e1885]: + + - cell "]," [ref=e1886]: + - code [ref=e1887]: "]," + - row "290 + 'started_at' => now()->subWeeks(2)," [ref=e1888]: + - cell [ref=e1889] + - cell "290" [ref=e1890]: "290" + - cell [ref=e1891] + - cell "+" [ref=e1892]: + - generic [ref=e1893]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e1894]: + - code [ref=e1895]: "'started_at' => now()->subWeeks(2)," + - row "291 + 'created_at' => now()->subWeeks(2)," [ref=e1896]: + - cell [ref=e1897] + - cell "291" [ref=e1898]: "291" + - cell [ref=e1899] + - cell "+" [ref=e1900]: + - generic [ref=e1901]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e1902]: + - code [ref=e1903]: "'created_at' => now()->subWeeks(2)," + - row "292 + ]);" [ref=e1904]: + - cell [ref=e1905] + - cell "292" [ref=e1906]: "292" + - cell [ref=e1907] + - cell "+" [ref=e1908]: + - generic [ref=e1909]: + + - cell "]);" [ref=e1910]: + - code [ref=e1911]: "]);" + - row "293 +" [ref=e1912]: + - cell [ref=e1913] + - cell "293" [ref=e1914]: "293" + - cell [ref=e1915] + - cell "+" [ref=e1916]: + - generic [ref=e1917]: + + - cell [ref=e1918]: + - code + - row "294 + Filament::setTenant(null, true);" [ref=e1919]: + - cell [ref=e1920] + - cell "294" [ref=e1921]: "294" + - cell [ref=e1922] + - cell "+" [ref=e1923]: + - generic [ref=e1924]: + + - cell "Filament::setTenant(null, true);" [ref=e1925]: + - code [ref=e1926]: Filament::setTenant(null, true); + - row "295 +" [ref=e1927]: + - cell [ref=e1928] + - cell "295" [ref=e1929]: "295" + - cell [ref=e1930] + - cell "+" [ref=e1931]: + - generic [ref=e1932]: + + - cell [ref=e1933]: + - code + - row "296 + $this->actingAs($user)" [ref=e1934]: + - cell [ref=e1935] + - cell "296" [ref=e1936]: "296" + - cell [ref=e1937] + - cell "+" [ref=e1938]: + - generic [ref=e1939]: + + - cell "$this->actingAs($user)" [ref=e1940]: + - code [ref=e1941]: $this->actingAs($user) + - row "297 + ->withSession([" [ref=e1942]: + - cell [ref=e1943] + - cell "297" [ref=e1944]: "297" + - cell [ref=e1945] + - cell "+" [ref=e1946]: + - generic [ref=e1947]: + + - cell "->withSession([" [ref=e1948]: + - code [ref=e1949]: "->withSession([" + - row "298 + WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id," [ref=e1950]: + - cell [ref=e1951] + - cell "298" [ref=e1952]: "298" + - cell [ref=e1953] + - cell "+" [ref=e1954]: + - generic [ref=e1955]: + + - cell "WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id," [ref=e1956]: + - code [ref=e1957]: WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, + - row "299 + ])" [ref=e1958]: + - cell [ref=e1959] + - cell "299" [ref=e1960]: "299" + - cell [ref=e1961] + - cell "+" [ref=e1962]: + - generic [ref=e1963]: + + - cell "])" [ref=e1964]: + - code [ref=e1965]: "])" + - row "300 + ->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" [ref=e1966]: + - cell [ref=e1967] + - cell "300" [ref=e1968]: "300" + - cell [ref=e1969] + - cell "+" [ref=e1970]: + - generic [ref=e1971]: + + - cell "->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" [ref=e1972]: + - code [ref=e1973]: "->get(OperationRunLinks::tenantlessView((int) $run->getKey()))" + - row "301 + ->assertSuccessful()" [ref=e1974]: + - cell [ref=e1975] + - cell "301" [ref=e1976]: "301" + - cell [ref=e1977] + - cell "+" [ref=e1978]: + - generic [ref=e1979]: + + - cell "->assertSuccessful()" [ref=e1980]: + - code [ref=e1981]: "->assertSuccessful()" + - row "302 + ->assertSee('Likely stale operation')" [ref=e1982]: + - cell [ref=e1983] + - cell "302" [ref=e1984]: "302" + - cell [ref=e1985] + - cell "+" [ref=e1986]: + - generic [ref=e1987]: + + - cell "->assertSee('Likely stale operation')" [ref=e1988]: + - code [ref=e1989]: "->assertSee('Likely stale operation')" + - row "303 + ->assertSee('past its lifecycle window')" [ref=e1990]: + - cell [ref=e1991] + - cell "303" [ref=e1992]: "303" + - cell [ref=e1993] + - cell "+" [ref=e1994]: + - generic [ref=e1995]: + + - cell "->assertSee('past its lifecycle window')" [ref=e1996]: + - code [ref=e1997]: "->assertSee('past its lifecycle window')" + - row "304 + ->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e1998]: + - cell [ref=e1999] + - cell "304" [ref=e2000]: "304" + - cell [ref=e2001] + - cell "+" [ref=e2002]: + - generic [ref=e2003]: + + - cell "->assertDontSee('No action needed yet. The operation is currently in progress.')" [ref=e2004]: + - code [ref=e2005]: "->assertDontSee('No action needed yet. The operation is currently in progress.')" + - row "305 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e2006]: + - cell [ref=e2007] + - cell "305" [ref=e2008]: "305" + - cell [ref=e2009] + - cell "+" [ref=e2010]: + - generic [ref=e2011]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e2012]: + - code [ref=e2013]: "->assertDontSee('4 / 10 processed (40%)')" + - row "306 + ->assertDontSee('Progress details pending.');" [ref=e2014]: + - cell [ref=e2015] + - cell "306" [ref=e2016]: "306" + - cell [ref=e2017] + - cell "+" [ref=e2018]: + - generic [ref=e2019]: + + - cell "->assertDontSee('Progress details pending.');" [ref=e2020]: + - code [ref=e2021]: "->assertDontSee('Progress details pending.');" + - 'row "307 + });" [ref=e2022]': + - cell [ref=e2023] + - cell "307" [ref=e2024]: "307" + - cell [ref=e2025] + - cell "+" [ref=e2026]: + - generic [ref=e2027]: + + - 'cell "});" [ref=e2028]': + - code [ref=e2029]: "});" + - row "308 +" [ref=e2030]: + - cell [ref=e2031] + - cell "308" [ref=e2032]: "308" + - cell [ref=e2033] + - cell "+" [ref=e2034]: + - generic [ref=e2035]: + + - cell [ref=e2036]: + - code + - 'row "275 309 it(''keeps a canonical run viewer accessible when the remembered environment differs from the run tenant'', function (): void {" [ref=e2037]': + - cell "275" [ref=e2038]: "275" + - cell "309" [ref=e2039]: "309" + - cell [ref=e2040] + - cell [ref=e2041] + - 'cell "it(''keeps a canonical run viewer accessible when the remembered environment differs from the run tenant'', function (): void {" [ref=e2042]': + - code [ref=e2043]: "it('keeps a canonical run viewer accessible when the remembered environment differs from the run tenant', function (): void {" + - row "276 310 $workspace = Workspace::factory()->create();" [ref=e2044]: + - cell "276" [ref=e2045]: "276" + - cell "310" [ref=e2046]: "310" + - cell [ref=e2047] + - cell [ref=e2048] + - cell "$workspace = Workspace::factory()->create();" [ref=e2049]: + - code [ref=e2050]: $workspace = Workspace::factory()->create(); + - row "277 311 $tenantA = ManagedEnvironment::factory()->for($workspace)->create();" [ref=e2051]: + - cell "277" [ref=e2052]: "277" + - cell "311" [ref=e2053]: "311" + - cell [ref=e2054] + - cell [ref=e2055] + - cell "$tenantA = ManagedEnvironment::factory()->for($workspace)->create();" [ref=e2056]: + - code [ref=e2057]: $tenantA = ManagedEnvironment::factory()->for($workspace)->create(); + - row [ref=e2058]: + - cell [ref=e2059]: + - button [ref=e2061] [cursor=pointer]: + - img [ref=e2062] + - cell [ref=e2064] + - cell [ref=e2065] + - cell [ref=e2066]: + - code + - generic [ref=e2067]: + - 'heading "66 66 Änderungen: 65 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php Datei anzeigen" [level=4] [ref=e2068]': + - generic [ref=e2069]: + - button [ref=e2070] [cursor=pointer]: + - img [ref=e2071] + - generic [ref=e2073]: + - text: "66" + - 'generic "66 Änderungen: 65 Ergänzungen und 1 Löschungen" [ref=e2074]' + - generic [ref=e2076]: + - link "apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php" [ref=e2077] [cursor=pointer]: + - /url: "#diff-19902a15f70a89998c7c6940d74722850b9e746f" + - button [ref=e2078] [cursor=pointer]: + - img [ref=e2079] + - link "Datei anzeigen" [ref=e2083] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php + - table [ref=e2086]: + - rowgroup [ref=e2093]: + - row "@ -344,7 +344,7 @@" [ref=e2094]: + - cell [ref=e2095]: + - button [ref=e2097] [cursor=pointer]: + - img [ref=e2098] + - cell [ref=e2100] + - cell [ref=e2101] + - cell "@ -344,7 +344,7 @@" [ref=e2102]: + - code [ref=e2103]: "@ -344,7 +344,7 @@" + - row "344 344 'total' => 10," [ref=e2104]: + - cell "344" [ref=e2105]: "344" + - cell "344" [ref=e2106]: "344" + - cell [ref=e2107] + - cell [ref=e2108] + - cell "'total' => 10," [ref=e2109]: + - code [ref=e2110]: "'total' => 10," + - row "345 345 'processed' => 4," [ref=e2111]: + - cell "345" [ref=e2112]: "345" + - cell "345" [ref=e2113]: "345" + - cell [ref=e2114] + - cell [ref=e2115] + - cell "'processed' => 4," [ref=e2116]: + - code [ref=e2117]: "'processed' => 4," + - row "346 346 ]," [ref=e2118]: + - cell "346" [ref=e2119]: "346" + - cell "346" [ref=e2120]: "346" + - cell [ref=e2121] + - cell [ref=e2122] + - cell "]," [ref=e2123]: + - code [ref=e2124]: "]," + - row "347 - 'started_at' => now()->subWeeks(2)," [ref=e2125]: + - cell "347" [ref=e2126]: "347" + - cell [ref=e2127] + - cell [ref=e2128] + - cell "-" [ref=e2129]: + - generic [ref=e2130]: "-" + - cell "'started_at' => now()->subWeeks(2)," [ref=e2131]: + - code [ref=e2132]: + - text: "'started_at' => now()->sub" + - generic [ref=e2133]: Weeks(2 + - text: ), + - row "347 + 'started_at' => now()->subMinute()," [ref=e2134]: + - cell [ref=e2135] + - cell "347" [ref=e2136]: "347" + - cell [ref=e2137] + - cell "+" [ref=e2138]: + - generic [ref=e2139]: + + - cell "'started_at' => now()->subMinute()," [ref=e2140]: + - code [ref=e2141]: + - text: "'started_at' => now()->sub" + - generic [ref=e2142]: Minute( + - text: ), + - row "348 348 ]);" [ref=e2143]: + - cell "348" [ref=e2144]: "348" + - cell "348" [ref=e2145]: "348" + - cell [ref=e2146] + - cell [ref=e2147] + - cell "]);" [ref=e2148]: + - code [ref=e2149]: "]);" + - row "349 349" [ref=e2150]: + - cell "349" [ref=e2151]: "349" + - cell "349" [ref=e2152]: "349" + - cell [ref=e2153] + - cell [ref=e2154] + - cell [ref=e2155]: + - code + - row "350 350 $component = Livewire::actingAs($user)" [ref=e2156]: + - cell "350" [ref=e2157]: "350" + - cell "350" [ref=e2158]: "350" + - cell [ref=e2159] + - cell [ref=e2160] + - cell "$component = Livewire::actingAs($user)" [ref=e2161]: + - code [ref=e2162]: $component = Livewire::actingAs($user) + - row "@ -364,6 +364,70 @@" [ref=e2163]: + - cell [ref=e2164]: + - button [ref=e2166] [cursor=pointer]: + - img [ref=e2167] + - cell [ref=e2169] + - cell [ref=e2170] + - cell "@ -364,6 +364,70 @@" [ref=e2171]: + - code [ref=e2172]: "@ -364,6 +364,70 @@" + - row "364 364 ->and($html)->not->toContain('Likely stale');" [ref=e2173]: + - cell "364" [ref=e2174]: "364" + - cell "364" [ref=e2175]: "364" + - cell [ref=e2176] + - cell [ref=e2177] + - cell "->and($html)->not->toContain('Likely stale');" [ref=e2178]: + - code [ref=e2179]: "->and($html)->not->toContain('Likely stale');" + - 'row "365 365 })->group(''ops-ux'');" [ref=e2180]': + - cell "365" [ref=e2181]: "365" + - cell "365" [ref=e2182]: "365" + - cell [ref=e2183] + - cell [ref=e2184] + - 'cell "})->group(''ops-ux'');" [ref=e2185]': + - code [ref=e2186]: "})->group('ops-ux');" + - row "366 366" [ref=e2187]: + - cell "366" [ref=e2188]: "366" + - cell "366" [ref=e2189]: "366" + - cell [ref=e2190] + - cell [ref=e2191] + - cell [ref=e2192]: + - code + - 'row "367 + it(''renders stale queued activity with lifecycle guidance instead of ordinary waiting copy'', function (): void {" [ref=e2193]': + - cell [ref=e2194] + - cell "367" [ref=e2195]: "367" + - cell [ref=e2196] + - cell "+" [ref=e2197]: + - generic [ref=e2198]: + + - 'cell "it(''renders stale queued activity with lifecycle guidance instead of ordinary waiting copy'', function (): void {" [ref=e2199]': + - code [ref=e2200]: "it('renders stale queued activity with lifecycle guidance instead of ordinary waiting copy', function (): void {" + - 'row "368 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2201]': + - cell [ref=e2202] + - cell "368" [ref=e2203]: "368" + - cell [ref=e2204] + - cell "+" [ref=e2205]: + - generic [ref=e2206]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2207]': + - code [ref=e2208]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "369 +" [ref=e2209]: + - cell [ref=e2210] + - cell "369" [ref=e2211]: "369" + - cell [ref=e2212] + - cell "+" [ref=e2213]: + - generic [ref=e2214]: + + - cell [ref=e2215]: + - code + - row "370 + $this->actingAs($user);" [ref=e2216]: + - cell [ref=e2217] + - cell "370" [ref=e2218]: "370" + - cell [ref=e2219] + - cell "+" [ref=e2220]: + - generic [ref=e2221]: + + - cell "$this->actingAs($user);" [ref=e2222]: + - code [ref=e2223]: $this->actingAs($user); + - row "371 + Filament::setTenant($tenant, true);" [ref=e2224]: + - cell [ref=e2225] + - cell "371" [ref=e2226]: "371" + - cell [ref=e2227] + - cell "+" [ref=e2228]: + - generic [ref=e2229]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2230]: + - code [ref=e2231]: Filament::setTenant($tenant, true); + - row "372 +" [ref=e2232]: + - cell [ref=e2233] + - cell "372" [ref=e2234]: "372" + - cell [ref=e2235] + - cell "+" [ref=e2236]: + - generic [ref=e2237]: + + - cell [ref=e2238]: + - code + - row "373 + OperationRun::factory()->create([" [ref=e2239]: + - cell [ref=e2240] + - cell "373" [ref=e2241]: "373" + - cell [ref=e2242] + - cell "+" [ref=e2243]: + - generic [ref=e2244]: + + - cell "OperationRun::factory()->create([" [ref=e2245]: + - code [ref=e2246]: OperationRun::factory()->create([ + - row "374 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2247]: + - cell [ref=e2248] + - cell "374" [ref=e2249]: "374" + - cell [ref=e2250] + - cell "+" [ref=e2251]: + - generic [ref=e2252]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2253]: + - code [ref=e2254]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "375 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2255]: + - cell [ref=e2256] + - cell "375" [ref=e2257]: "375" + - cell [ref=e2258] + - cell "+" [ref=e2259]: + - generic [ref=e2260]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2261]: + - code [ref=e2262]: "'workspace_id' => (int) $tenant->workspace_id," + - row "376 + 'user_id' => (int) $user->getKey()," [ref=e2263]: + - cell [ref=e2264] + - cell "376" [ref=e2265]: "376" + - cell [ref=e2266] + - cell "+" [ref=e2267]: + - generic [ref=e2268]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e2269]: + - code [ref=e2270]: "'user_id' => (int) $user->getKey()," + - row "377 + 'type' => 'inventory_sync'," [ref=e2271]: + - cell [ref=e2272] + - cell "377" [ref=e2273]: "377" + - cell [ref=e2274] + - cell "+" [ref=e2275]: + - generic [ref=e2276]: + + - cell "'type' => 'inventory_sync'," [ref=e2277]: + - code [ref=e2278]: "'type' => 'inventory_sync'," + - row "378 + 'status' => 'queued'," [ref=e2279]: + - cell [ref=e2280] + - cell "378" [ref=e2281]: "378" + - cell [ref=e2282] + - cell "+" [ref=e2283]: + - generic [ref=e2284]: + + - cell "'status' => 'queued'," [ref=e2285]: + - code [ref=e2286]: "'status' => 'queued'," + - row "379 + 'outcome' => 'pending'," [ref=e2287]: + - cell [ref=e2288] + - cell "379" [ref=e2289]: "379" + - cell [ref=e2290] + - cell "+" [ref=e2291]: + - generic [ref=e2292]: + + - cell "'outcome' => 'pending'," [ref=e2293]: + - code [ref=e2294]: "'outcome' => 'pending'," + - row "380 + 'created_at' => now()->subWeeks(2)," [ref=e2295]: + - cell [ref=e2296] + - cell "380" [ref=e2297]: "380" + - cell [ref=e2298] + - cell "+" [ref=e2299]: + - generic [ref=e2300]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2301]: + - code [ref=e2302]: "'created_at' => now()->subWeeks(2)," + - row "381 + ]);" [ref=e2303]: + - cell [ref=e2304] + - cell "381" [ref=e2305]: "381" + - cell [ref=e2306] + - cell "+" [ref=e2307]: + - generic [ref=e2308]: + + - cell "]);" [ref=e2309]: + - code [ref=e2310]: "]);" + - row "382 +" [ref=e2311]: + - cell [ref=e2312] + - cell "382" [ref=e2313]: "382" + - cell [ref=e2314] + - cell "+" [ref=e2315]: + - generic [ref=e2316]: + + - cell [ref=e2317]: + - code + - row "383 + $component = Livewire::actingAs($user)" [ref=e2318]: + - cell [ref=e2319] + - cell "383" [ref=e2320]: "383" + - cell [ref=e2321] + - cell "+" [ref=e2322]: + - generic [ref=e2323]: + + - cell "$component = Livewire::actingAs($user)" [ref=e2324]: + - code [ref=e2325]: $component = Livewire::actingAs($user) + - row "384 + ->test(BulkOperationProgress::class)" [ref=e2326]: + - cell [ref=e2327] + - cell "384" [ref=e2328]: "384" + - cell [ref=e2329] + - cell "+" [ref=e2330]: + - generic [ref=e2331]: + + - cell "->test(BulkOperationProgress::class)" [ref=e2332]: + - code [ref=e2333]: "->test(BulkOperationProgress::class)" + - row "385 + ->call('refreshRuns');" [ref=e2334]: + - cell [ref=e2335] + - cell "385" [ref=e2336]: "385" + - cell [ref=e2337] + - cell "+" [ref=e2338]: + - generic [ref=e2339]: + + - cell "->call('refreshRuns');" [ref=e2340]: + - code [ref=e2341]: "->call('refreshRuns');" + - row "386 +" [ref=e2342]: + - cell [ref=e2343] + - cell "386" [ref=e2344]: "386" + - cell [ref=e2345] + - cell "+" [ref=e2346]: + - generic [ref=e2347]: + + - cell [ref=e2348]: + - code + - row "387 + $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2349]: + - cell [ref=e2350] + - cell "387" [ref=e2351]: "387" + - cell [ref=e2352] + - cell "+" [ref=e2353]: + - generic [ref=e2354]: + + - cell "$html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2355]: + - code [ref=e2356]: $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5); + - row "388 + $pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2357]: + - cell [ref=e2358] + - cell "388" [ref=e2359]: "388" + - cell [ref=e2360] + - cell "+" [ref=e2361]: + - generic [ref=e2362]: + + - cell "$pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2363]: + - code [ref=e2364]: $pageText = preg_replace('/\s+/', ' ', strip_tags($html)); + - row "389 +" [ref=e2365]: + - cell [ref=e2366] + - cell "389" [ref=e2367]: "389" + - cell [ref=e2368] + - cell "+" [ref=e2369]: + - generic [ref=e2370]: + + - cell [ref=e2371]: + - code + - row "390 + expect($html)->toContain('Likely stale')" [ref=e2372]: + - cell [ref=e2373] + - cell "390" [ref=e2374]: "390" + - cell [ref=e2375] + - cell "+" [ref=e2376]: + - generic [ref=e2377]: + + - cell "expect($html)->toContain('Likely stale')" [ref=e2378]: + - code [ref=e2379]: expect($html)->toContain('Likely stale') + - row "391 + ->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" [ref=e2380]: + - cell [ref=e2381] + - cell "391" [ref=e2382]: "391" + - cell [ref=e2383] + - cell "+" [ref=e2384]: + - generic [ref=e2385]: + + - cell "->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" [ref=e2386]: + - code [ref=e2387]: "->and($pageText)->toContain('One or more active operations are past their lifecycle window and need review.')" + - row "392 + ->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2388]: + - cell [ref=e2389] + - cell "392" [ref=e2390]: "392" + - cell [ref=e2391] + - cell "+" [ref=e2392]: + - generic [ref=e2393]: + + - cell "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2394]: + - code [ref=e2395]: "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "393 + ->and($pageText)->not->toContain('Waiting for worker.');" [ref=e2396]: + - cell [ref=e2397] + - cell "393" [ref=e2398]: "393" + - cell [ref=e2399] + - cell "+" [ref=e2400]: + - generic [ref=e2401]: + + - cell "->and($pageText)->not->toContain('Waiting for worker.');" [ref=e2402]: + - code [ref=e2403]: "->and($pageText)->not->toContain('Waiting for worker.');" + - 'row "394 + })->group(''ops-ux'');" [ref=e2404]': + - cell [ref=e2405] + - cell "394" [ref=e2406]: "394" + - cell [ref=e2407] + - cell "+" [ref=e2408]: + - generic [ref=e2409]: + + - 'cell "})->group(''ops-ux'');" [ref=e2410]': + - code [ref=e2411]: "})->group('ops-ux');" + - row "395 +" [ref=e2412]: + - cell [ref=e2413] + - cell "395" [ref=e2414]: "395" + - cell [ref=e2415] + - cell "+" [ref=e2416]: + - generic [ref=e2417]: + + - cell [ref=e2418]: + - code + - 'row "396 + it(''shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar'', function (): void {" [ref=e2419]': + - cell [ref=e2420] + - cell "396" [ref=e2421]: "396" + - cell [ref=e2422] + - cell "+" [ref=e2423]: + - generic [ref=e2424]: + + - 'cell "it(''shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar'', function (): void {" [ref=e2425]': + - code [ref=e2426]: "it('shows lifecycle attention for determinate stale-running shell cases without keeping the ordinary progress bar', function (): void {" + - 'row "397 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2427]': + - cell [ref=e2428] + - cell "397" [ref=e2429]: "397" + - cell [ref=e2430] + - cell "+" [ref=e2431]: + - generic [ref=e2432]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2433]': + - code [ref=e2434]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "398 +" [ref=e2435]: + - cell [ref=e2436] + - cell "398" [ref=e2437]: "398" + - cell [ref=e2438] + - cell "+" [ref=e2439]: + - generic [ref=e2440]: + + - cell [ref=e2441]: + - code + - row "399 + $this->actingAs($user);" [ref=e2442]: + - cell [ref=e2443] + - cell "399" [ref=e2444]: "399" + - cell [ref=e2445] + - cell "+" [ref=e2446]: + - generic [ref=e2447]: + + - cell "$this->actingAs($user);" [ref=e2448]: + - code [ref=e2449]: $this->actingAs($user); + - row "400 + Filament::setTenant($tenant, true);" [ref=e2450]: + - cell [ref=e2451] + - cell "400" [ref=e2452]: "400" + - cell [ref=e2453] + - cell "+" [ref=e2454]: + - generic [ref=e2455]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2456]: + - code [ref=e2457]: Filament::setTenant($tenant, true); + - row "401 +" [ref=e2458]: + - cell [ref=e2459] + - cell "401" [ref=e2460]: "401" + - cell [ref=e2461] + - cell "+" [ref=e2462]: + - generic [ref=e2463]: + + - cell [ref=e2464]: + - code + - row "402 + OperationRun::factory()->create([" [ref=e2465]: + - cell [ref=e2466] + - cell "402" [ref=e2467]: "402" + - cell [ref=e2468] + - cell "+" [ref=e2469]: + - generic [ref=e2470]: + + - cell "OperationRun::factory()->create([" [ref=e2471]: + - code [ref=e2472]: OperationRun::factory()->create([ + - row "403 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2473]: + - cell [ref=e2474] + - cell "403" [ref=e2475]: "403" + - cell [ref=e2476] + - cell "+" [ref=e2477]: + - generic [ref=e2478]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2479]: + - code [ref=e2480]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "404 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2481]: + - cell [ref=e2482] + - cell "404" [ref=e2483]: "404" + - cell [ref=e2484] + - cell "+" [ref=e2485]: + - generic [ref=e2486]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2487]: + - code [ref=e2488]: "'workspace_id' => (int) $tenant->workspace_id," + - row "405 + 'user_id' => (int) $user->getKey()," [ref=e2489]: + - cell [ref=e2490] + - cell "405" [ref=e2491]: "405" + - cell [ref=e2492] + - cell "+" [ref=e2493]: + - generic [ref=e2494]: + + - cell "'user_id' => (int) $user->getKey()," [ref=e2495]: + - code [ref=e2496]: "'user_id' => (int) $user->getKey()," + - row "406 + 'type' => 'inventory_sync'," [ref=e2497]: + - cell [ref=e2498] + - cell "406" [ref=e2499]: "406" + - cell [ref=e2500] + - cell "+" [ref=e2501]: + - generic [ref=e2502]: + + - cell "'type' => 'inventory_sync'," [ref=e2503]: + - code [ref=e2504]: "'type' => 'inventory_sync'," + - row "407 + 'status' => 'running'," [ref=e2505]: + - cell [ref=e2506] + - cell "407" [ref=e2507]: "407" + - cell [ref=e2508] + - cell "+" [ref=e2509]: + - generic [ref=e2510]: + + - cell "'status' => 'running'," [ref=e2511]: + - code [ref=e2512]: "'status' => 'running'," + - row "408 + 'outcome' => 'pending'," [ref=e2513]: + - cell [ref=e2514] + - cell "408" [ref=e2515]: "408" + - cell [ref=e2516] + - cell "+" [ref=e2517]: + - generic [ref=e2518]: + + - cell "'outcome' => 'pending'," [ref=e2519]: + - code [ref=e2520]: "'outcome' => 'pending'," + - row "409 + 'summary_counts' => [" [ref=e2521]: + - cell [ref=e2522] + - cell "409" [ref=e2523]: "409" + - cell [ref=e2524] + - cell "+" [ref=e2525]: + - generic [ref=e2526]: + + - cell "'summary_counts' => [" [ref=e2527]: + - code [ref=e2528]: "'summary_counts' => [" + - row "410 + 'total' => 10," [ref=e2529]: + - cell [ref=e2530] + - cell "410" [ref=e2531]: "410" + - cell [ref=e2532] + - cell "+" [ref=e2533]: + - generic [ref=e2534]: + + - cell "'total' => 10," [ref=e2535]: + - code [ref=e2536]: "'total' => 10," + - row "411 + 'processed' => 4," [ref=e2537]: + - cell [ref=e2538] + - cell "411" [ref=e2539]: "411" + - cell [ref=e2540] + - cell "+" [ref=e2541]: + - generic [ref=e2542]: + + - cell "'processed' => 4," [ref=e2543]: + - code [ref=e2544]: "'processed' => 4," + - row "412 + ]," [ref=e2545]: + - cell [ref=e2546] + - cell "412" [ref=e2547]: "412" + - cell [ref=e2548] + - cell "+" [ref=e2549]: + - generic [ref=e2550]: + + - cell "]," [ref=e2551]: + - code [ref=e2552]: "]," + - row "413 + 'started_at' => now()->subWeeks(2)," [ref=e2553]: + - cell [ref=e2554] + - cell "413" [ref=e2555]: "413" + - cell [ref=e2556] + - cell "+" [ref=e2557]: + - generic [ref=e2558]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e2559]: + - code [ref=e2560]: "'started_at' => now()->subWeeks(2)," + - row "414 + 'created_at' => now()->subWeeks(2)," [ref=e2561]: + - cell [ref=e2562] + - cell "414" [ref=e2563]: "414" + - cell [ref=e2564] + - cell "+" [ref=e2565]: + - generic [ref=e2566]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2567]: + - code [ref=e2568]: "'created_at' => now()->subWeeks(2)," + - row "415 + ]);" [ref=e2569]: + - cell [ref=e2570] + - cell "415" [ref=e2571]: "415" + - cell [ref=e2572] + - cell "+" [ref=e2573]: + - generic [ref=e2574]: + + - cell "]);" [ref=e2575]: + - code [ref=e2576]: "]);" + - row "416 +" [ref=e2577]: + - cell [ref=e2578] + - cell "416" [ref=e2579]: "416" + - cell [ref=e2580] + - cell "+" [ref=e2581]: + - generic [ref=e2582]: + + - cell [ref=e2583]: + - code + - row "417 + $component = Livewire::actingAs($user)" [ref=e2584]: + - cell [ref=e2585] + - cell "417" [ref=e2586]: "417" + - cell [ref=e2587] + - cell "+" [ref=e2588]: + - generic [ref=e2589]: + + - cell "$component = Livewire::actingAs($user)" [ref=e2590]: + - code [ref=e2591]: $component = Livewire::actingAs($user) + - row "418 + ->test(BulkOperationProgress::class)" [ref=e2592]: + - cell [ref=e2593] + - cell "418" [ref=e2594]: "418" + - cell [ref=e2595] + - cell "+" [ref=e2596]: + - generic [ref=e2597]: + + - cell "->test(BulkOperationProgress::class)" [ref=e2598]: + - code [ref=e2599]: "->test(BulkOperationProgress::class)" + - row "419 + ->call('refreshRuns');" [ref=e2600]: + - cell [ref=e2601] + - cell "419" [ref=e2602]: "419" + - cell [ref=e2603] + - cell "+" [ref=e2604]: + - generic [ref=e2605]: + + - cell "->call('refreshRuns');" [ref=e2606]: + - code [ref=e2607]: "->call('refreshRuns');" + - row "420 +" [ref=e2608]: + - cell [ref=e2609] + - cell "420" [ref=e2610]: "420" + - cell [ref=e2611] + - cell "+" [ref=e2612]: + - generic [ref=e2613]: + + - cell [ref=e2614]: + - code + - row "421 + $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2615]: + - cell [ref=e2616] + - cell "421" [ref=e2617]: "421" + - cell [ref=e2618] + - cell "+" [ref=e2619]: + - generic [ref=e2620]: + + - cell "$html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5);" [ref=e2621]: + - code [ref=e2622]: $html = html_entity_decode($component->html(), ENT_QUOTES | ENT_HTML5); + - row "422 + $pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2623]: + - cell [ref=e2624] + - cell "422" [ref=e2625]: "422" + - cell [ref=e2626] + - cell "+" [ref=e2627]: + - generic [ref=e2628]: + + - cell "$pageText = preg_replace('/\\s+/', ' ', strip_tags($html));" [ref=e2629]: + - code [ref=e2630]: $pageText = preg_replace('/\s+/', ' ', strip_tags($html)); + - row "423 +" [ref=e2631]: + - cell [ref=e2632] + - cell "423" [ref=e2633]: "423" + - cell [ref=e2634] + - cell "+" [ref=e2635]: + - generic [ref=e2636]: + + - cell [ref=e2637]: + - code + - row "424 + expect($html)->toContain('Likely stale')" [ref=e2638]: + - cell [ref=e2639] + - cell "424" [ref=e2640]: "424" + - cell [ref=e2641] + - cell "+" [ref=e2642]: + - generic [ref=e2643]: + + - cell "expect($html)->toContain('Likely stale')" [ref=e2644]: + - code [ref=e2645]: expect($html)->toContain('Likely stale') + - row "425 + ->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" [ref=e2646]: + - cell [ref=e2647] + - cell "425" [ref=e2648]: "425" + - cell [ref=e2649] + - cell "+" [ref=e2650]: + - generic [ref=e2651]: + + - cell "->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" [ref=e2652]: + - code [ref=e2653]: "->and($html)->toContain('data-testid=\"ops-ux-activity-feedback-indeterminate\"')" + - row "426 + ->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2654]: + - cell [ref=e2655] + - cell "426" [ref=e2656]: "426" + - cell [ref=e2657] + - cell "+" [ref=e2658]: + - generic [ref=e2659]: + + - cell "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2660]: + - code [ref=e2661]: "->and($pageText)->toContain('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "427 + ->and($pageText)->not->toContain('4 / 10 processed (40%)')" [ref=e2662]: + - cell [ref=e2663] + - cell "427" [ref=e2664]: "427" + - cell [ref=e2665] + - cell "+" [ref=e2666]: + - generic [ref=e2667]: + + - cell "->and($pageText)->not->toContain('4 / 10 processed (40%)')" [ref=e2668]: + - code [ref=e2669]: "->and($pageText)->not->toContain('4 / 10 processed (40%)')" + - row "428 + ->and($html)->not->toContain('aria-valuenow=\"40\"');" [ref=e2670]: + - cell [ref=e2671] + - cell "428" [ref=e2672]: "428" + - cell [ref=e2673] + - cell "+" [ref=e2674]: + - generic [ref=e2675]: + + - cell "->and($html)->not->toContain('aria-valuenow=\"40\"');" [ref=e2676]: + - code [ref=e2677]: "->and($html)->not->toContain('aria-valuenow=\"40\"');" + - 'row "429 + })->group(''ops-ux'');" [ref=e2678]': + - cell [ref=e2679] + - cell "429" [ref=e2680]: "429" + - cell [ref=e2681] + - cell "+" [ref=e2682]: + - generic [ref=e2683]: + + - 'cell "})->group(''ops-ux'');" [ref=e2684]': + - code [ref=e2685]: "})->group('ops-ux');" + - row "430 +" [ref=e2686]: + - cell [ref=e2687] + - cell "430" [ref=e2688]: "430" + - cell [ref=e2689] + - cell "+" [ref=e2690]: + - generic [ref=e2691]: + + - cell [ref=e2692]: + - code + - 'row "367 431 it(''renders phased fallback progress without inventing a counted percentage'', function (): void {" [ref=e2693]': + - cell "367" [ref=e2694]: "367" + - cell "431" [ref=e2695]: "431" + - cell [ref=e2696] + - cell [ref=e2697] + - 'cell "it(''renders phased fallback progress without inventing a counted percentage'', function (): void {" [ref=e2698]': + - code [ref=e2699]: "it('renders phased fallback progress without inventing a counted percentage', function (): void {" + - 'row "368 432 [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2700]': + - cell "368" [ref=e2701]: "368" + - cell "432" [ref=e2702]: "432" + - cell [ref=e2703] + - cell [ref=e2704] + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2705]': + - code [ref=e2706]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "369 433" [ref=e2707]: + - cell "369" [ref=e2708]: "369" + - cell "433" [ref=e2709]: "433" + - cell [ref=e2710] + - cell [ref=e2711] + - cell [ref=e2712]: + - code + - row [ref=e2713]: + - cell [ref=e2714]: + - button [ref=e2716] [cursor=pointer]: + - img [ref=e2717] + - cell [ref=e2719] + - cell [ref=e2720] + - cell [ref=e2721]: + - code + - generic [ref=e2722]: + - 'heading "33 33 Änderungen: 32 Ergänzungen und 1 Löschungen apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php Datei anzeigen" [level=4] [ref=e2723]': + - generic [ref=e2724]: + - button [ref=e2725] [cursor=pointer]: + - img [ref=e2726] + - generic [ref=e2728]: + - text: "33" + - 'generic "33 Änderungen: 32 Ergänzungen und 1 Löschungen" [ref=e2729]' + - generic [ref=e2731]: + - link "apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php" [ref=e2732] [cursor=pointer]: + - /url: "#diff-789b73397dfb1556cb3d9fbc68eec2c64714ebae" + - button [ref=e2733] [cursor=pointer]: + - img [ref=e2734] + - link "Datei anzeigen" [ref=e2738] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php + - table [ref=e2741]: + - rowgroup [ref=e2748]: + - row "@ -215,9 +215,40 @@" [ref=e2749]: + - cell [ref=e2750]: + - button [ref=e2752] [cursor=pointer]: + - img [ref=e2753] + - cell [ref=e2755] + - cell [ref=e2756] + - cell "@ -215,9 +215,40 @@" [ref=e2757]: + - code [ref=e2758]: "@ -215,9 +215,40 @@" + - row "215 215 ->test(BulkOperationProgress::class)" [ref=e2759]: + - cell "215" [ref=e2760]: "215" + - cell "215" [ref=e2761]: "215" + - cell [ref=e2762] + - cell [ref=e2763] + - cell "->test(BulkOperationProgress::class)" [ref=e2764]: + - code [ref=e2765]: "->test(BulkOperationProgress::class)" + - row "216 216 ->call('refreshRuns')" [ref=e2766]: + - cell "216" [ref=e2767]: "216" + - cell "216" [ref=e2768]: "216" + - cell [ref=e2769] + - cell [ref=e2770] + - cell "->call('refreshRuns')" [ref=e2771]: + - code [ref=e2772]: "->call('refreshRuns')" + - row "217 217 ->assertSet('hasActiveRuns', true)" [ref=e2773]: + - cell "217" [ref=e2774]: "217" + - cell "217" [ref=e2775]: "217" + - cell [ref=e2776] + - cell [ref=e2777] + - cell "->assertSet('hasActiveRuns', true)" [ref=e2778]: + - code [ref=e2779]: "->assertSet('hasActiveRuns', true)" + - row "218 + ->assertSee('One or more active operations are past their lifecycle window and need review.')" [ref=e2780]: + - cell [ref=e2781] + - cell "218" [ref=e2782]: "218" + - cell [ref=e2783] + - cell "+" [ref=e2784]: + - generic [ref=e2785]: + + - cell "->assertSee('One or more active operations are past their lifecycle window and need review.')" [ref=e2786]: + - code [ref=e2787]: "->assertSee('One or more active operations are past their lifecycle window and need review.')" + - row "218 219 ->assertSee('Inventory sync')" [ref=e2788]: + - cell "218" [ref=e2789]: "218" + - cell "219" [ref=e2790]: "219" + - cell [ref=e2791] + - cell [ref=e2792] + - cell "->assertSee('Inventory sync')" [ref=e2793]: + - code [ref=e2794]: "->assertSee('Inventory sync')" + - row "219 220 ->assertSee('Likely stale')" [ref=e2795]: + - cell "219" [ref=e2796]: "219" + - cell "220" [ref=e2797]: "220" + - cell [ref=e2798] + - cell [ref=e2799] + - cell "->assertSee('Likely stale')" [ref=e2800]: + - code [ref=e2801]: "->assertSee('Likely stale')" + - row "220 - ->assertSee('Waiting for worker.');" [ref=e2802]: + - cell "220" [ref=e2803]: "220" + - cell [ref=e2804] + - cell [ref=e2805] + - cell "-" [ref=e2806]: + - generic [ref=e2807]: "-" + - cell "->assertSee('Waiting for worker.');" [ref=e2808]: + - code [ref=e2809]: "->assertSee('Waiting for worker.');" + - row "221 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2810]: + - cell [ref=e2811] + - cell "221" [ref=e2812]: "221" + - cell [ref=e2813] + - cell "+" [ref=e2814]: + - generic [ref=e2815]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e2816]: + - code [ref=e2817]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "222 + ->assertDontSee('Waiting for worker.');" [ref=e2818]: + - cell [ref=e2819] + - cell "222" [ref=e2820]: "222" + - cell [ref=e2821] + - cell "+" [ref=e2822]: + - generic [ref=e2823]: + + - cell "->assertDontSee('Waiting for worker.');" [ref=e2824]: + - code [ref=e2825]: "->assertDontSee('Waiting for worker.');" + - 'row "223 + })->group(''ops-ux'');" [ref=e2826]': + - cell [ref=e2827] + - cell "223" [ref=e2828]: "223" + - cell [ref=e2829] + - cell "+" [ref=e2830]: + - generic [ref=e2831]: + + - 'cell "})->group(''ops-ux'');" [ref=e2832]': + - code [ref=e2833]: "})->group('ops-ux');" + - row "224 +" [ref=e2834]: + - cell [ref=e2835] + - cell "224" [ref=e2836]: "224" + - cell [ref=e2837] + - cell "+" [ref=e2838]: + - generic [ref=e2839]: + + - cell [ref=e2840]: + - code + - 'row "225 + it(''subordinates determinate stale-running shell progress to lifecycle guidance'', function () {" [ref=e2841]': + - cell [ref=e2842] + - cell "225" [ref=e2843]: "225" + - cell [ref=e2844] + - cell "+" [ref=e2845]: + - generic [ref=e2846]: + + - 'cell "it(''subordinates determinate stale-running shell progress to lifecycle guidance'', function () {" [ref=e2847]': + - code [ref=e2848]: "it('subordinates determinate stale-running shell progress to lifecycle guidance', function () {" + - 'row "226 + [$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2849]': + - cell [ref=e2850] + - cell "226" [ref=e2851]: "226" + - cell [ref=e2852] + - cell "+" [ref=e2853]: + - generic [ref=e2854]: + + - 'cell "[$user, $tenant] = createUserWithTenant(role: ''owner'');" [ref=e2855]': + - code [ref=e2856]: "[$user, $tenant] = createUserWithTenant(role: 'owner');" + - row "227 + $this->actingAs($user);" [ref=e2857]: + - cell [ref=e2858] + - cell "227" [ref=e2859]: "227" + - cell [ref=e2860] + - cell "+" [ref=e2861]: + - generic [ref=e2862]: + + - cell "$this->actingAs($user);" [ref=e2863]: + - code [ref=e2864]: $this->actingAs($user); + - row "228 + Filament::setTenant($tenant, true);" [ref=e2865]: + - cell [ref=e2866] + - cell "228" [ref=e2867]: "228" + - cell [ref=e2868] + - cell "+" [ref=e2869]: + - generic [ref=e2870]: + + - cell "Filament::setTenant($tenant, true);" [ref=e2871]: + - code [ref=e2872]: Filament::setTenant($tenant, true); + - row "229 +" [ref=e2873]: + - cell [ref=e2874] + - cell "229" [ref=e2875]: "229" + - cell [ref=e2876] + - cell "+" [ref=e2877]: + - generic [ref=e2878]: + + - cell [ref=e2879]: + - code + - row "230 + OperationRun::factory()->create([" [ref=e2880]: + - cell [ref=e2881] + - cell "230" [ref=e2882]: "230" + - cell [ref=e2883] + - cell "+" [ref=e2884]: + - generic [ref=e2885]: + + - cell "OperationRun::factory()->create([" [ref=e2886]: + - code [ref=e2887]: OperationRun::factory()->create([ + - row "231 + 'managed_environment_id' => (int) $tenant->getKey()," [ref=e2888]: + - cell [ref=e2889] + - cell "231" [ref=e2890]: "231" + - cell [ref=e2891] + - cell "+" [ref=e2892]: + - generic [ref=e2893]: + + - cell "'managed_environment_id' => (int) $tenant->getKey()," [ref=e2894]: + - code [ref=e2895]: "'managed_environment_id' => (int) $tenant->getKey()," + - row "232 + 'workspace_id' => (int) $tenant->workspace_id," [ref=e2896]: + - cell [ref=e2897] + - cell "232" [ref=e2898]: "232" + - cell [ref=e2899] + - cell "+" [ref=e2900]: + - generic [ref=e2901]: + + - cell "'workspace_id' => (int) $tenant->workspace_id," [ref=e2902]: + - code [ref=e2903]: "'workspace_id' => (int) $tenant->workspace_id," + - row "233 + 'type' => 'inventory_sync'," [ref=e2904]: + - cell [ref=e2905] + - cell "233" [ref=e2906]: "233" + - cell [ref=e2907] + - cell "+" [ref=e2908]: + - generic [ref=e2909]: + + - cell "'type' => 'inventory_sync'," [ref=e2910]: + - code [ref=e2911]: "'type' => 'inventory_sync'," + - row "234 + 'status' => 'running'," [ref=e2912]: + - cell [ref=e2913] + - cell "234" [ref=e2914]: "234" + - cell [ref=e2915] + - cell "+" [ref=e2916]: + - generic [ref=e2917]: + + - cell "'status' => 'running'," [ref=e2918]: + - code [ref=e2919]: "'status' => 'running'," + - row "235 + 'outcome' => 'pending'," [ref=e2920]: + - cell [ref=e2921] + - cell "235" [ref=e2922]: "235" + - cell [ref=e2923] + - cell "+" [ref=e2924]: + - generic [ref=e2925]: + + - cell "'outcome' => 'pending'," [ref=e2926]: + - code [ref=e2927]: "'outcome' => 'pending'," + - row "236 + 'summary_counts' => [" [ref=e2928]: + - cell [ref=e2929] + - cell "236" [ref=e2930]: "236" + - cell [ref=e2931] + - cell "+" [ref=e2932]: + - generic [ref=e2933]: + + - cell "'summary_counts' => [" [ref=e2934]: + - code [ref=e2935]: "'summary_counts' => [" + - row "237 + 'total' => 10," [ref=e2936]: + - cell [ref=e2937] + - cell "237" [ref=e2938]: "237" + - cell [ref=e2939] + - cell "+" [ref=e2940]: + - generic [ref=e2941]: + + - cell "'total' => 10," [ref=e2942]: + - code [ref=e2943]: "'total' => 10," + - row "238 + 'processed' => 4," [ref=e2944]: + - cell [ref=e2945] + - cell "238" [ref=e2946]: "238" + - cell [ref=e2947] + - cell "+" [ref=e2948]: + - generic [ref=e2949]: + + - cell "'processed' => 4," [ref=e2950]: + - code [ref=e2951]: "'processed' => 4," + - row "239 + ]," [ref=e2952]: + - cell [ref=e2953] + - cell "239" [ref=e2954]: "239" + - cell [ref=e2955] + - cell "+" [ref=e2956]: + - generic [ref=e2957]: + + - cell "]," [ref=e2958]: + - code [ref=e2959]: "]," + - row "240 + 'started_at' => now()->subWeeks(2)," [ref=e2960]: + - cell [ref=e2961] + - cell "240" [ref=e2962]: "240" + - cell [ref=e2963] + - cell "+" [ref=e2964]: + - generic [ref=e2965]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e2966]: + - code [ref=e2967]: "'started_at' => now()->subWeeks(2)," + - row "241 + 'created_at' => now()->subWeeks(2)," [ref=e2968]: + - cell [ref=e2969] + - cell "241" [ref=e2970]: "241" + - cell [ref=e2971] + - cell "+" [ref=e2972]: + - generic [ref=e2973]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e2974]: + - code [ref=e2975]: "'created_at' => now()->subWeeks(2)," + - row "242 + ]);" [ref=e2976]: + - cell [ref=e2977] + - cell "242" [ref=e2978]: "242" + - cell [ref=e2979] + - cell "+" [ref=e2980]: + - generic [ref=e2981]: + + - cell "]);" [ref=e2982]: + - code [ref=e2983]: "]);" + - row "243 +" [ref=e2984]: + - cell [ref=e2985] + - cell "243" [ref=e2986]: "243" + - cell [ref=e2987] + - cell "+" [ref=e2988]: + - generic [ref=e2989]: + + - cell [ref=e2990]: + - code + - row "244 + Livewire::actingAs($user)" [ref=e2991]: + - cell [ref=e2992] + - cell "244" [ref=e2993]: "244" + - cell [ref=e2994] + - cell "+" [ref=e2995]: + - generic [ref=e2996]: + + - cell "Livewire::actingAs($user)" [ref=e2997]: + - code [ref=e2998]: Livewire::actingAs($user) + - row "245 + ->test(BulkOperationProgress::class)" [ref=e2999]: + - cell [ref=e3000] + - cell "245" [ref=e3001]: "245" + - cell [ref=e3002] + - cell "+" [ref=e3003]: + - generic [ref=e3004]: + + - cell "->test(BulkOperationProgress::class)" [ref=e3005]: + - code [ref=e3006]: "->test(BulkOperationProgress::class)" + - row "246 + ->call('refreshRuns')" [ref=e3007]: + - cell [ref=e3008] + - cell "246" [ref=e3009]: "246" + - cell [ref=e3010] + - cell "+" [ref=e3011]: + - generic [ref=e3012]: + + - cell "->call('refreshRuns')" [ref=e3013]: + - code [ref=e3014]: "->call('refreshRuns')" + - row "247 + ->assertSet('hasActiveRuns', true)" [ref=e3015]: + - cell [ref=e3016] + - cell "247" [ref=e3017]: "247" + - cell [ref=e3018] + - cell "+" [ref=e3019]: + - generic [ref=e3020]: + + - cell "->assertSet('hasActiveRuns', true)" [ref=e3021]: + - code [ref=e3022]: "->assertSet('hasActiveRuns', true)" + - row "248 + ->assertSee('Likely stale')" [ref=e3023]: + - cell [ref=e3024] + - cell "248" [ref=e3025]: "248" + - cell [ref=e3026] + - cell "+" [ref=e3027]: + - generic [ref=e3028]: + + - cell "->assertSee('Likely stale')" [ref=e3029]: + - code [ref=e3030]: "->assertSee('Likely stale')" + - row "249 + ->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3031]: + - cell [ref=e3032] + - cell "249" [ref=e3033]: "249" + - cell [ref=e3034] + - cell "+" [ref=e3035]: + - generic [ref=e3036]: + + - cell "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3037]: + - code [ref=e3038]: "->assertSee('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "250 + ->assertDontSee('4 / 10 processed (40%)')" [ref=e3039]: + - cell [ref=e3040] + - cell "250" [ref=e3041]: "250" + - cell [ref=e3042] + - cell "+" [ref=e3043]: + - generic [ref=e3044]: + + - cell "->assertDontSee('4 / 10 processed (40%)')" [ref=e3045]: + - code [ref=e3046]: "->assertDontSee('4 / 10 processed (40%)')" + - row "251 + ->assertDontSeeHtml('aria-valuenow=\"40\"');" [ref=e3047]: + - cell [ref=e3048] + - cell "251" [ref=e3049]: "251" + - cell [ref=e3050] + - cell "+" [ref=e3051]: + - generic [ref=e3052]: + + - cell "->assertDontSeeHtml('aria-valuenow=\"40\"');" [ref=e3053]: + - code [ref=e3054]: "->assertDontSeeHtml('aria-valuenow=\"40\"');" + - 'row "221 252 })->group(''ops-ux'');" [ref=e3055]': + - cell "221" [ref=e3056]: "221" + - cell "252" [ref=e3057]: "252" + - cell [ref=e3058] + - cell [ref=e3059] + - 'cell "})->group(''ops-ux'');" [ref=e3060]': + - code [ref=e3061]: "})->group('ops-ux');" + - row "222 253" [ref=e3062]: + - cell "222" [ref=e3063]: "222" + - cell "253" [ref=e3064]: "253" + - cell [ref=e3065] + - cell [ref=e3066] + - cell [ref=e3067]: + - code + - 'row "223 254 it(''clamps counted progress at the shell host when processed exceeds total'', function () {" [ref=e3068]': + - cell "223" [ref=e3069]: "223" + - cell "254" [ref=e3070]: "254" + - cell [ref=e3071] + - cell [ref=e3072] + - 'cell "it(''clamps counted progress at the shell host when processed exceeds total'', function () {" [ref=e3073]': + - code [ref=e3074]: "it('clamps counted progress at the shell host when processed exceeds total', function () {" + - row [ref=e3075]: + - cell [ref=e3076]: + - button [ref=e3078] [cursor=pointer]: + - img [ref=e3079] + - cell [ref=e3081] + - cell [ref=e3082] + - cell [ref=e3083]: + - code + - generic [ref=e3084]: + - 'heading "103 103 Änderungen: 103 Ergänzungen und 0 Löschungen apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php Datei anzeigen" [level=4] [ref=e3085]': + - generic [ref=e3086]: + - button [ref=e3087] [cursor=pointer]: + - img [ref=e3088] + - generic [ref=e3090]: + - text: "103" + - 'generic "103 Änderungen: 103 Ergänzungen und 0 Löschungen" [ref=e3091]' + - generic [ref=e3093]: + - link "apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php" [ref=e3094] [cursor=pointer]: + - /url: "#diff-cdbc9a8da2048b55b64e7019bff171a648154715" + - button [ref=e3095] [cursor=pointer]: + - img [ref=e3096] + - link "Datei anzeigen" [ref=e3100] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php + - table [ref=e3103]: + - rowgroup [ref=e3110]: + - row "@ -67,6 +67,22 @@" [ref=e3111]: + - cell [ref=e3112]: + - button [ref=e3114] [cursor=pointer]: + - img [ref=e3115] + - cell [ref=e3117] + - cell [ref=e3118] + - cell "@ -67,6 +67,22 @@" [ref=e3119]: + - code [ref=e3120]: "@ -67,6 +67,22 @@" + - row "67 67 ->and($progress['percent'])->toBeNull();" [ref=e3121]: + - cell "67" [ref=e3122]: "67" + - cell "67" [ref=e3123]: "67" + - cell [ref=e3124] + - cell [ref=e3125] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3126]: + - code [ref=e3127]: "->and($progress['percent'])->toBeNull();" + - 'row "68 68 });" [ref=e3128]': + - cell "68" [ref=e3129]: "68" + - cell "68" [ref=e3130]: "68" + - cell [ref=e3131] + - cell [ref=e3132] + - 'cell "});" [ref=e3133]': + - code [ref=e3134]: "});" + - row "69 69" [ref=e3135]: + - cell "69" [ref=e3136]: "69" + - cell "69" [ref=e3137]: "69" + - cell [ref=e3138] + - cell [ref=e3139] + - cell [ref=e3140]: + - code + - 'row "70 + it(''replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded'', function (): void {" [ref=e3141]': + - cell [ref=e3142] + - cell "70" [ref=e3143]: "70" + - cell [ref=e3144] + - cell "+" [ref=e3145]: + - generic [ref=e3146]: + + - 'cell "it(''replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded'', function (): void {" [ref=e3147]': + - code [ref=e3148]: "it('replaces queued waiting copy with stale lifecycle guidance once the lifecycle window is exceeded', function (): void {" + - row "71 + $run = OperationRun::factory()->create([" [ref=e3149]: + - cell [ref=e3150] + - cell "71" [ref=e3151]: "71" + - cell [ref=e3152] + - cell "+" [ref=e3153]: + - generic [ref=e3154]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3155]: + - code [ref=e3156]: $run = OperationRun::factory()->create([ + - row "72 + 'type' => 'inventory_sync'," [ref=e3157]: + - cell [ref=e3158] + - cell "72" [ref=e3159]: "72" + - cell [ref=e3160] + - cell "+" [ref=e3161]: + - generic [ref=e3162]: + + - cell "'type' => 'inventory_sync'," [ref=e3163]: + - code [ref=e3164]: "'type' => 'inventory_sync'," + - row "73 + 'status' => 'queued'," [ref=e3165]: + - cell [ref=e3166] + - cell "73" [ref=e3167]: "73" + - cell [ref=e3168] + - cell "+" [ref=e3169]: + - generic [ref=e3170]: + + - cell "'status' => 'queued'," [ref=e3171]: + - code [ref=e3172]: "'status' => 'queued'," + - row "74 + 'outcome' => 'pending'," [ref=e3173]: + - cell [ref=e3174] + - cell "74" [ref=e3175]: "74" + - cell [ref=e3176] + - cell "+" [ref=e3177]: + - generic [ref=e3178]: + + - cell "'outcome' => 'pending'," [ref=e3179]: + - code [ref=e3180]: "'outcome' => 'pending'," + - row "75 + 'created_at' => now()->subWeeks(2)," [ref=e3181]: + - cell [ref=e3182] + - cell "75" [ref=e3183]: "75" + - cell [ref=e3184] + - cell "+" [ref=e3185]: + - generic [ref=e3186]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3187]: + - code [ref=e3188]: "'created_at' => now()->subWeeks(2)," + - row "76 + ]);" [ref=e3189]: + - cell [ref=e3190] + - cell "76" [ref=e3191]: "76" + - cell [ref=e3192] + - cell "+" [ref=e3193]: + - generic [ref=e3194]: + + - cell "]);" [ref=e3195]: + - code [ref=e3196]: "]);" + - row "77 +" [ref=e3197]: + - cell [ref=e3198] + - cell "77" [ref=e3199]: "77" + - cell [ref=e3200] + - cell "+" [ref=e3201]: + - generic [ref=e3202]: + + - cell [ref=e3203]: + - code + - row "78 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3204]: + - cell [ref=e3205] + - cell "78" [ref=e3206]: "78" + - cell [ref=e3207] + - cell "+" [ref=e3208]: + - generic [ref=e3209]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3210]: + - code [ref=e3211]: $progress = OperationRunProgressContract::forRun($run); + - row "79 +" [ref=e3212]: + - cell [ref=e3213] + - cell "79" [ref=e3214]: "79" + - cell [ref=e3215] + - cell "+" [ref=e3216]: + - generic [ref=e3217]: + + - cell [ref=e3218]: + - code + - row "80 + expect($progress['capability'])->toBe('activity')" [ref=e3219]: + - cell [ref=e3220] + - cell "80" [ref=e3221]: "80" + - cell [ref=e3222] + - cell "+" [ref=e3223]: + - generic [ref=e3224]: + + - cell "expect($progress['capability'])->toBe('activity')" [ref=e3225]: + - code [ref=e3226]: expect($progress['capability'])->toBe('activity') + - row "81 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3227]: + - cell [ref=e3228] + - cell "81" [ref=e3229]: "81" + - cell [ref=e3230] + - cell "+" [ref=e3231]: + - generic [ref=e3232]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3233]: + - code [ref=e3234]: "->and($progress['display'])->toBe('indeterminate')" + - row "82 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3235]: + - cell [ref=e3236] + - cell "82" [ref=e3237]: "82" + - cell [ref=e3238] + - cell "+" [ref=e3239]: + - generic [ref=e3240]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3241]: + - code [ref=e3242]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "83 + ->and($progress['percent'])->toBeNull();" [ref=e3243]: + - cell [ref=e3244] + - cell "83" [ref=e3245]: "83" + - cell [ref=e3246] + - cell "+" [ref=e3247]: + - generic [ref=e3248]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3249]: + - code [ref=e3250]: "->and($progress['percent'])->toBeNull();" + - 'row "84 + });" [ref=e3251]': + - cell [ref=e3252] + - cell "84" [ref=e3253]: "84" + - cell [ref=e3254] + - cell "+" [ref=e3255]: + - generic [ref=e3256]: + + - 'cell "});" [ref=e3257]': + - code [ref=e3258]: "});" + - row "85 +" [ref=e3259]: + - cell [ref=e3260] + - cell "85" [ref=e3261]: "85" + - cell [ref=e3262] + - cell "+" [ref=e3263]: + - generic [ref=e3264]: + + - cell [ref=e3265]: + - code + - 'row "70 86 it(''returns no progress for terminal runs even when retained counts exist'', function (): void {" [ref=e3266]': + - cell "70" [ref=e3267]: "70" + - cell "86" [ref=e3268]: "86" + - cell [ref=e3269] + - cell [ref=e3270] + - 'cell "it(''returns no progress for terminal runs even when retained counts exist'', function (): void {" [ref=e3271]': + - code [ref=e3272]: "it('returns no progress for terminal runs even when retained counts exist', function (): void {" + - row "71 87 $run = OperationRun::factory()->create([" [ref=e3273]: + - cell "71" [ref=e3274]: "71" + - cell "87" [ref=e3275]: "87" + - cell [ref=e3276] + - cell [ref=e3277] + - cell "$run = OperationRun::factory()->create([" [ref=e3278]: + - code [ref=e3279]: $run = OperationRun::factory()->create([ + - row "72 88 'status' => 'completed'," [ref=e3280]: + - cell "72" [ref=e3281]: "72" + - cell "88" [ref=e3282]: "88" + - cell [ref=e3283] + - cell [ref=e3284] + - cell "'status' => 'completed'," [ref=e3285]: + - code [ref=e3286]: "'status' => 'completed'," + - row "@ -87,6 +103,32 @@" [ref=e3287]: + - cell [ref=e3288]: + - button [ref=e3290] [cursor=pointer]: + - img [ref=e3291] + - cell [ref=e3293] + - cell [ref=e3294] + - cell "@ -87,6 +103,32 @@" [ref=e3295]: + - code [ref=e3296]: "@ -87,6 +103,32 @@" + - row "87 103 ->and($progress['percent'])->toBeNull();" [ref=e3297]: + - cell "87" [ref=e3298]: "87" + - cell "103" [ref=e3299]: "103" + - cell [ref=e3300] + - cell [ref=e3301] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3302]: + - code [ref=e3303]: "->and($progress['percent'])->toBeNull();" + - 'row "88 104 });" [ref=e3304]': + - cell "88" [ref=e3305]: "88" + - cell "104" [ref=e3306]: "104" + - cell [ref=e3307] + - cell [ref=e3308] + - 'cell "});" [ref=e3309]': + - code [ref=e3310]: "});" + - row "89 105" [ref=e3311]: + - cell "89" [ref=e3312]: "89" + - cell "105" [ref=e3313]: "105" + - cell [ref=e3314] + - cell [ref=e3315] + - cell [ref=e3316]: + - code + - 'row "106 + it(''returns no progress for reconciled terminal runs even when stale lineage is recorded'', function (): void {" [ref=e3317]': + - cell [ref=e3318] + - cell "106" [ref=e3319]: "106" + - cell [ref=e3320] + - cell "+" [ref=e3321]: + - generic [ref=e3322]: + + - 'cell "it(''returns no progress for reconciled terminal runs even when stale lineage is recorded'', function (): void {" [ref=e3323]': + - code [ref=e3324]: "it('returns no progress for reconciled terminal runs even when stale lineage is recorded', function (): void {" + - row "107 + $run = OperationRun::factory()->create([" [ref=e3325]: + - cell [ref=e3326] + - cell "107" [ref=e3327]: "107" + - cell [ref=e3328] + - cell "+" [ref=e3329]: + - generic [ref=e3330]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3331]: + - code [ref=e3332]: $run = OperationRun::factory()->create([ + - row "108 + 'status' => 'completed'," [ref=e3333]: + - cell [ref=e3334] + - cell "108" [ref=e3335]: "108" + - cell [ref=e3336] + - cell "+" [ref=e3337]: + - generic [ref=e3338]: + + - cell "'status' => 'completed'," [ref=e3339]: + - code [ref=e3340]: "'status' => 'completed'," + - row "109 + 'outcome' => 'failed'," [ref=e3341]: + - cell [ref=e3342] + - cell "109" [ref=e3343]: "109" + - cell [ref=e3344] + - cell "+" [ref=e3345]: + - generic [ref=e3346]: + + - cell "'outcome' => 'failed'," [ref=e3347]: + - code [ref=e3348]: "'outcome' => 'failed'," + - row "110 + 'context' => [" [ref=e3349]: + - cell [ref=e3350] + - cell "110" [ref=e3351]: "110" + - cell [ref=e3352] + - cell "+" [ref=e3353]: + - generic [ref=e3354]: + + - cell "'context' => [" [ref=e3355]: + - code [ref=e3356]: "'context' => [" + - row "111 + 'reconciliation' => [" [ref=e3357]: + - cell [ref=e3358] + - cell "111" [ref=e3359]: "111" + - cell [ref=e3360] + - cell "+" [ref=e3361]: + - generic [ref=e3362]: + + - cell "'reconciliation' => [" [ref=e3363]: + - code [ref=e3364]: "'reconciliation' => [" + - row "112 + 'reconciled_at' => now()->toIso8601String()," [ref=e3365]: + - cell [ref=e3366] + - cell "112" [ref=e3367]: "112" + - cell [ref=e3368] + - cell "+" [ref=e3369]: + - generic [ref=e3370]: + + - cell "'reconciled_at' => now()->toIso8601String()," [ref=e3371]: + - code [ref=e3372]: "'reconciled_at' => now()->toIso8601String()," + - row "113 + 'source' => 'adapter_reconciler'," [ref=e3373]: + - cell [ref=e3374] + - cell "113" [ref=e3375]: "113" + - cell [ref=e3376] + - cell "+" [ref=e3377]: + - generic [ref=e3378]: + + - cell "'source' => 'adapter_reconciler'," [ref=e3379]: + - code [ref=e3380]: "'source' => 'adapter_reconciler'," + - row "114 + ]," [ref=e3381]: + - cell [ref=e3382] + - cell "114" [ref=e3383]: "114" + - cell [ref=e3384] + - cell "+" [ref=e3385]: + - generic [ref=e3386]: + + - cell "]," [ref=e3387]: + - code [ref=e3388]: "]," + - row "115 + ]," [ref=e3389]: + - cell [ref=e3390] + - cell "115" [ref=e3391]: "115" + - cell [ref=e3392] + - cell "+" [ref=e3393]: + - generic [ref=e3394]: + + - cell "]," [ref=e3395]: + - code [ref=e3396]: "]," + - row "116 + 'summary_counts' => [" [ref=e3397]: + - cell [ref=e3398] + - cell "116" [ref=e3399]: "116" + - cell [ref=e3400] + - cell "+" [ref=e3401]: + - generic [ref=e3402]: + + - cell "'summary_counts' => [" [ref=e3403]: + - code [ref=e3404]: "'summary_counts' => [" + - row "117 + 'total' => 10," [ref=e3405]: + - cell [ref=e3406] + - cell "117" [ref=e3407]: "117" + - cell [ref=e3408] + - cell "+" [ref=e3409]: + - generic [ref=e3410]: + + - cell "'total' => 10," [ref=e3411]: + - code [ref=e3412]: "'total' => 10," + - row "118 + 'processed' => 10," [ref=e3413]: + - cell [ref=e3414] + - cell "118" [ref=e3415]: "118" + - cell [ref=e3416] + - cell "+" [ref=e3417]: + - generic [ref=e3418]: + + - cell "'processed' => 10," [ref=e3419]: + - code [ref=e3420]: "'processed' => 10," + - row "119 + ]," [ref=e3421]: + - cell [ref=e3422] + - cell "119" [ref=e3423]: "119" + - cell [ref=e3424] + - cell "+" [ref=e3425]: + - generic [ref=e3426]: + + - cell "]," [ref=e3427]: + - code [ref=e3428]: "]," + - row "120 + 'started_at' => now()->subMinutes(2)," [ref=e3429]: + - cell [ref=e3430] + - cell "120" [ref=e3431]: "120" + - cell [ref=e3432] + - cell "+" [ref=e3433]: + - generic [ref=e3434]: + + - cell "'started_at' => now()->subMinutes(2)," [ref=e3435]: + - code [ref=e3436]: "'started_at' => now()->subMinutes(2)," + - row "121 + 'completed_at' => now()->subSecond()," [ref=e3437]: + - cell [ref=e3438] + - cell "121" [ref=e3439]: "121" + - cell [ref=e3440] + - cell "+" [ref=e3441]: + - generic [ref=e3442]: + + - cell "'completed_at' => now()->subSecond()," [ref=e3443]: + - code [ref=e3444]: "'completed_at' => now()->subSecond()," + - row "122 + ]);" [ref=e3445]: + - cell [ref=e3446] + - cell "122" [ref=e3447]: "122" + - cell [ref=e3448] + - cell "+" [ref=e3449]: + - generic [ref=e3450]: + + - cell "]);" [ref=e3451]: + - code [ref=e3452]: "]);" + - row "123 +" [ref=e3453]: + - cell [ref=e3454] + - cell "123" [ref=e3455]: "123" + - cell [ref=e3456] + - cell "+" [ref=e3457]: + - generic [ref=e3458]: + + - cell [ref=e3459]: + - code + - row "124 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3460]: + - cell [ref=e3461] + - cell "124" [ref=e3462]: "124" + - cell [ref=e3463] + - cell "+" [ref=e3464]: + - generic [ref=e3465]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3466]: + - code [ref=e3467]: $progress = OperationRunProgressContract::forRun($run); + - row "125 +" [ref=e3468]: + - cell [ref=e3469] + - cell "125" [ref=e3470]: "125" + - cell [ref=e3471] + - cell "+" [ref=e3472]: + - generic [ref=e3473]: + + - cell [ref=e3474]: + - code + - row "126 + expect($progress['capability'])->toBe('none')" [ref=e3475]: + - cell [ref=e3476] + - cell "126" [ref=e3477]: "126" + - cell [ref=e3478] + - cell "+" [ref=e3479]: + - generic [ref=e3480]: + + - cell "expect($progress['capability'])->toBe('none')" [ref=e3481]: + - code [ref=e3482]: expect($progress['capability'])->toBe('none') + - row "127 + ->and($progress['display'])->toBe('none')" [ref=e3483]: + - cell [ref=e3484] + - cell "127" [ref=e3485]: "127" + - cell [ref=e3486] + - cell "+" [ref=e3487]: + - generic [ref=e3488]: + + - cell "->and($progress['display'])->toBe('none')" [ref=e3489]: + - code [ref=e3490]: "->and($progress['display'])->toBe('none')" + - row "128 + ->and($progress['label'])->toBeNull()" [ref=e3491]: + - cell [ref=e3492] + - cell "128" [ref=e3493]: "128" + - cell [ref=e3494] + - cell "+" [ref=e3495]: + - generic [ref=e3496]: + + - cell "->and($progress['label'])->toBeNull()" [ref=e3497]: + - code [ref=e3498]: "->and($progress['label'])->toBeNull()" + - row "129 + ->and($progress['percent'])->toBeNull();" [ref=e3499]: + - cell [ref=e3500] + - cell "129" [ref=e3501]: "129" + - cell [ref=e3502] + - cell "+" [ref=e3503]: + - generic [ref=e3504]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3505]: + - code [ref=e3506]: "->and($progress['percent'])->toBeNull();" + - 'row "130 + });" [ref=e3507]': + - cell [ref=e3508] + - cell "130" [ref=e3509]: "130" + - cell [ref=e3510] + - cell "+" [ref=e3511]: + - generic [ref=e3512]: + + - 'cell "});" [ref=e3513]': + - code [ref=e3514]: "});" + - row "131 +" [ref=e3515]: + - cell [ref=e3516] + - cell "131" [ref=e3517]: "131" + - cell [ref=e3518] + - cell "+" [ref=e3519]: + - generic [ref=e3520]: + + - cell [ref=e3521]: + - code + - 'row "90 132 it(''does not let outcome counters masquerade as counted progress'', function (): void {" [ref=e3522]': + - cell "90" [ref=e3523]: "90" + - cell "132" [ref=e3524]: "132" + - cell [ref=e3525] + - cell [ref=e3526] + - 'cell "it(''does not let outcome counters masquerade as counted progress'', function (): void {" [ref=e3527]': + - code [ref=e3528]: "it('does not let outcome counters masquerade as counted progress', function (): void {" + - row "91 133 $run = OperationRun::factory()->create([" [ref=e3529]: + - cell "91" [ref=e3530]: "91" + - cell "133" [ref=e3531]: "133" + - cell [ref=e3532] + - cell [ref=e3533] + - cell "$run = OperationRun::factory()->create([" [ref=e3534]: + - code [ref=e3535]: $run = OperationRun::factory()->create([ + - row "92 134 'status' => 'running'," [ref=e3536]: + - cell "92" [ref=e3537]: "92" + - cell "134" [ref=e3538]: "134" + - cell [ref=e3539] + - cell [ref=e3540] + - cell "'status' => 'running'," [ref=e3541]: + - code [ref=e3542]: "'status' => 'running'," + - row "@ -107,6 +149,67 @@" [ref=e3543]: + - cell [ref=e3544]: + - button [ref=e3546] [cursor=pointer]: + - img [ref=e3547] + - cell [ref=e3549] + - cell [ref=e3550] + - cell "@ -107,6 +149,67 @@" [ref=e3551]: + - code [ref=e3552]: "@ -107,6 +149,67 @@" + - row "107 149 ->and($progress['percent'])->toBeNull();" [ref=e3553]: + - cell "107" [ref=e3554]: "107" + - cell "149" [ref=e3555]: "149" + - cell [ref=e3556] + - cell [ref=e3557] + - cell "->and($progress['percent'])->toBeNull();" [ref=e3558]: + - code [ref=e3559]: "->and($progress['percent'])->toBeNull();" + - 'row "108 150 });" [ref=e3560]': + - cell "108" [ref=e3561]: "108" + - cell "150" [ref=e3562]: "150" + - cell [ref=e3563] + - cell [ref=e3564] + - 'cell "});" [ref=e3565]': + - code [ref=e3566]: "});" + - row "109 151" [ref=e3567]: + - cell "109" [ref=e3568]: "109" + - cell "151" [ref=e3569]: "151" + - cell [ref=e3570] + - cell [ref=e3571] + - cell [ref=e3572]: + - code + - 'row "152 + it(''replaces ordinary activity copy with stale lifecycle guidance for stale running runs'', function (): void {" [ref=e3573]': + - cell [ref=e3574] + - cell "152" [ref=e3575]: "152" + - cell [ref=e3576] + - cell "+" [ref=e3577]: + - generic [ref=e3578]: + + - 'cell "it(''replaces ordinary activity copy with stale lifecycle guidance for stale running runs'', function (): void {" [ref=e3579]': + - code [ref=e3580]: "it('replaces ordinary activity copy with stale lifecycle guidance for stale running runs', function (): void {" + - row "153 + $run = OperationRun::factory()->create([" [ref=e3581]: + - cell [ref=e3582] + - cell "153" [ref=e3583]: "153" + - cell [ref=e3584] + - cell "+" [ref=e3585]: + - generic [ref=e3586]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3587]: + - code [ref=e3588]: $run = OperationRun::factory()->create([ + - row "154 + 'type' => 'inventory_sync'," [ref=e3589]: + - cell [ref=e3590] + - cell "154" [ref=e3591]: "154" + - cell [ref=e3592] + - cell "+" [ref=e3593]: + - generic [ref=e3594]: + + - cell "'type' => 'inventory_sync'," [ref=e3595]: + - code [ref=e3596]: "'type' => 'inventory_sync'," + - row "155 + 'status' => 'running'," [ref=e3597]: + - cell [ref=e3598] + - cell "155" [ref=e3599]: "155" + - cell [ref=e3600] + - cell "+" [ref=e3601]: + - generic [ref=e3602]: + + - cell "'status' => 'running'," [ref=e3603]: + - code [ref=e3604]: "'status' => 'running'," + - row "156 + 'outcome' => 'pending'," [ref=e3605]: + - cell [ref=e3606] + - cell "156" [ref=e3607]: "156" + - cell [ref=e3608] + - cell "+" [ref=e3609]: + - generic [ref=e3610]: + + - cell "'outcome' => 'pending'," [ref=e3611]: + - code [ref=e3612]: "'outcome' => 'pending'," + - row "157 + 'started_at' => now()->subWeeks(2)," [ref=e3613]: + - cell [ref=e3614] + - cell "157" [ref=e3615]: "157" + - cell [ref=e3616] + - cell "+" [ref=e3617]: + - generic [ref=e3618]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3619]: + - code [ref=e3620]: "'started_at' => now()->subWeeks(2)," + - row "158 + 'created_at' => now()->subWeeks(2)," [ref=e3621]: + - cell [ref=e3622] + - cell "158" [ref=e3623]: "158" + - cell [ref=e3624] + - cell "+" [ref=e3625]: + - generic [ref=e3626]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3627]: + - code [ref=e3628]: "'created_at' => now()->subWeeks(2)," + - row "159 + ]);" [ref=e3629]: + - cell [ref=e3630] + - cell "159" [ref=e3631]: "159" + - cell [ref=e3632] + - cell "+" [ref=e3633]: + - generic [ref=e3634]: + + - cell "]);" [ref=e3635]: + - code [ref=e3636]: "]);" + - row "160 +" [ref=e3637]: + - cell [ref=e3638] + - cell "160" [ref=e3639]: "160" + - cell [ref=e3640] + - cell "+" [ref=e3641]: + - generic [ref=e3642]: + + - cell [ref=e3643]: + - code + - row "161 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3644]: + - cell [ref=e3645] + - cell "161" [ref=e3646]: "161" + - cell [ref=e3647] + - cell "+" [ref=e3648]: + - generic [ref=e3649]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3650]: + - code [ref=e3651]: $progress = OperationRunProgressContract::forRun($run); + - row "162 +" [ref=e3652]: + - cell [ref=e3653] + - cell "162" [ref=e3654]: "162" + - cell [ref=e3655] + - cell "+" [ref=e3656]: + - generic [ref=e3657]: + + - cell [ref=e3658]: + - code + - row "163 + expect($progress['capability'])->toBe('activity')" [ref=e3659]: + - cell [ref=e3660] + - cell "163" [ref=e3661]: "163" + - cell [ref=e3662] + - cell "+" [ref=e3663]: + - generic [ref=e3664]: + + - cell "expect($progress['capability'])->toBe('activity')" [ref=e3665]: + - code [ref=e3666]: expect($progress['capability'])->toBe('activity') + - row "164 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3667]: + - cell [ref=e3668] + - cell "164" [ref=e3669]: "164" + - cell [ref=e3670] + - cell "+" [ref=e3671]: + - generic [ref=e3672]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3673]: + - code [ref=e3674]: "->and($progress['display'])->toBe('indeterminate')" + - row "165 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3675]: + - cell [ref=e3676] + - cell "165" [ref=e3677]: "165" + - cell [ref=e3678] + - cell "+" [ref=e3679]: + - generic [ref=e3680]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3681]: + - code [ref=e3682]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "166 + ->and($progress['percent'])->toBeNull();" [ref=e3683]: + - cell [ref=e3684] + - cell "166" [ref=e3685]: "166" + - cell [ref=e3686] + - cell "+" [ref=e3687]: + - generic [ref=e3688]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3689]: + - code [ref=e3690]: "->and($progress['percent'])->toBeNull();" + - 'row "167 + });" [ref=e3691]': + - cell [ref=e3692] + - cell "167" [ref=e3693]: "167" + - cell [ref=e3694] + - cell "+" [ref=e3695]: + - generic [ref=e3696]: + + - 'cell "});" [ref=e3697]': + - code [ref=e3698]: "});" + - row "168 +" [ref=e3699]: + - cell [ref=e3700] + - cell "168" [ref=e3701]: "168" + - cell [ref=e3702] + - cell "+" [ref=e3703]: + - generic [ref=e3704]: + + - cell [ref=e3705]: + - code + - 'row "169 + it(''subordinates determinate stale-running progress to lifecycle guidance'', function (): void {" [ref=e3706]': + - cell [ref=e3707] + - cell "169" [ref=e3708]: "169" + - cell [ref=e3709] + - cell "+" [ref=e3710]: + - generic [ref=e3711]: + + - 'cell "it(''subordinates determinate stale-running progress to lifecycle guidance'', function (): void {" [ref=e3712]': + - code [ref=e3713]: "it('subordinates determinate stale-running progress to lifecycle guidance', function (): void {" + - row "170 + $run = OperationRun::factory()->create([" [ref=e3714]: + - cell [ref=e3715] + - cell "170" [ref=e3716]: "170" + - cell [ref=e3717] + - cell "+" [ref=e3718]: + - generic [ref=e3719]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3720]: + - code [ref=e3721]: $run = OperationRun::factory()->create([ + - row "171 + 'type' => 'inventory_sync'," [ref=e3722]: + - cell [ref=e3723] + - cell "171" [ref=e3724]: "171" + - cell [ref=e3725] + - cell "+" [ref=e3726]: + - generic [ref=e3727]: + + - cell "'type' => 'inventory_sync'," [ref=e3728]: + - code [ref=e3729]: "'type' => 'inventory_sync'," + - row "172 + 'status' => 'running'," [ref=e3730]: + - cell [ref=e3731] + - cell "172" [ref=e3732]: "172" + - cell [ref=e3733] + - cell "+" [ref=e3734]: + - generic [ref=e3735]: + + - cell "'status' => 'running'," [ref=e3736]: + - code [ref=e3737]: "'status' => 'running'," + - row "173 + 'outcome' => 'pending'," [ref=e3738]: + - cell [ref=e3739] + - cell "173" [ref=e3740]: "173" + - cell [ref=e3741] + - cell "+" [ref=e3742]: + - generic [ref=e3743]: + + - cell "'outcome' => 'pending'," [ref=e3744]: + - code [ref=e3745]: "'outcome' => 'pending'," + - row "174 + 'summary_counts' => [" [ref=e3746]: + - cell [ref=e3747] + - cell "174" [ref=e3748]: "174" + - cell [ref=e3749] + - cell "+" [ref=e3750]: + - generic [ref=e3751]: + + - cell "'summary_counts' => [" [ref=e3752]: + - code [ref=e3753]: "'summary_counts' => [" + - row "175 + 'total' => 10," [ref=e3754]: + - cell [ref=e3755] + - cell "175" [ref=e3756]: "175" + - cell [ref=e3757] + - cell "+" [ref=e3758]: + - generic [ref=e3759]: + + - cell "'total' => 10," [ref=e3760]: + - code [ref=e3761]: "'total' => 10," + - row "176 + 'processed' => 4," [ref=e3762]: + - cell [ref=e3763] + - cell "176" [ref=e3764]: "176" + - cell [ref=e3765] + - cell "+" [ref=e3766]: + - generic [ref=e3767]: + + - cell "'processed' => 4," [ref=e3768]: + - code [ref=e3769]: "'processed' => 4," + - row "177 + ]," [ref=e3770]: + - cell [ref=e3771] + - cell "177" [ref=e3772]: "177" + - cell [ref=e3773] + - cell "+" [ref=e3774]: + - generic [ref=e3775]: + + - cell "]," [ref=e3776]: + - code [ref=e3777]: "]," + - row "178 + 'started_at' => now()->subWeeks(2)," [ref=e3778]: + - cell [ref=e3779] + - cell "178" [ref=e3780]: "178" + - cell [ref=e3781] + - cell "+" [ref=e3782]: + - generic [ref=e3783]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3784]: + - code [ref=e3785]: "'started_at' => now()->subWeeks(2)," + - row "179 + 'created_at' => now()->subWeeks(2)," [ref=e3786]: + - cell [ref=e3787] + - cell "179" [ref=e3788]: "179" + - cell [ref=e3789] + - cell "+" [ref=e3790]: + - generic [ref=e3791]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3792]: + - code [ref=e3793]: "'created_at' => now()->subWeeks(2)," + - row "180 + ]);" [ref=e3794]: + - cell [ref=e3795] + - cell "180" [ref=e3796]: "180" + - cell [ref=e3797] + - cell "+" [ref=e3798]: + - generic [ref=e3799]: + + - cell "]);" [ref=e3800]: + - code [ref=e3801]: "]);" + - row "181 +" [ref=e3802]: + - cell [ref=e3803] + - cell "181" [ref=e3804]: "181" + - cell [ref=e3805] + - cell "+" [ref=e3806]: + - generic [ref=e3807]: + + - cell [ref=e3808]: + - code + - row "182 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3809]: + - cell [ref=e3810] + - cell "182" [ref=e3811]: "182" + - cell [ref=e3812] + - cell "+" [ref=e3813]: + - generic [ref=e3814]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3815]: + - code [ref=e3816]: $progress = OperationRunProgressContract::forRun($run); + - row "183 +" [ref=e3817]: + - cell [ref=e3818] + - cell "183" [ref=e3819]: "183" + - cell [ref=e3820] + - cell "+" [ref=e3821]: + - generic [ref=e3822]: + + - cell [ref=e3823]: + - code + - row "184 + expect($progress['capability'])->toBe('counted')" [ref=e3824]: + - cell [ref=e3825] + - cell "184" [ref=e3826]: "184" + - cell [ref=e3827] + - cell "+" [ref=e3828]: + - generic [ref=e3829]: + + - cell "expect($progress['capability'])->toBe('counted')" [ref=e3830]: + - code [ref=e3831]: expect($progress['capability'])->toBe('counted') + - row "185 + ->and($progress['display'])->toBe('indeterminate')" [ref=e3832]: + - cell [ref=e3833] + - cell "185" [ref=e3834]: "185" + - cell [ref=e3835] + - cell "+" [ref=e3836]: + - generic [ref=e3837]: + + - cell "->and($progress['display'])->toBe('indeterminate')" [ref=e3838]: + - code [ref=e3839]: "->and($progress['display'])->toBe('indeterminate')" + - row "186 + ->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3840]: + - cell [ref=e3841] + - cell "186" [ref=e3842]: "186" + - cell [ref=e3843] + - cell "+" [ref=e3844]: + - generic [ref=e3845]: + + - cell "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" [ref=e3846]: + - code [ref=e3847]: "->and($progress['label'])->toBe('Past the lifecycle window. Review worker health and logs before retrying.')" + - row "187 + ->and($progress['processed'])->toBeNull()" [ref=e3848]: + - cell [ref=e3849] + - cell "187" [ref=e3850]: "187" + - cell [ref=e3851] + - cell "+" [ref=e3852]: + - generic [ref=e3853]: + + - cell "->and($progress['processed'])->toBeNull()" [ref=e3854]: + - code [ref=e3855]: "->and($progress['processed'])->toBeNull()" + - row "188 + ->and($progress['total'])->toBeNull()" [ref=e3856]: + - cell [ref=e3857] + - cell "188" [ref=e3858]: "188" + - cell [ref=e3859] + - cell "+" [ref=e3860]: + - generic [ref=e3861]: + + - cell "->and($progress['total'])->toBeNull()" [ref=e3862]: + - code [ref=e3863]: "->and($progress['total'])->toBeNull()" + - row "189 + ->and($progress['percent'])->toBeNull();" [ref=e3864]: + - cell [ref=e3865] + - cell "189" [ref=e3866]: "189" + - cell [ref=e3867] + - cell "+" [ref=e3868]: + - generic [ref=e3869]: + + - cell "->and($progress['percent'])->toBeNull();" [ref=e3870]: + - code [ref=e3871]: "->and($progress['percent'])->toBeNull();" + - 'row "190 + });" [ref=e3872]': + - cell [ref=e3873] + - cell "190" [ref=e3874]: "190" + - cell [ref=e3875] + - cell "+" [ref=e3876]: + - generic [ref=e3877]: + + - 'cell "});" [ref=e3878]': + - code [ref=e3879]: "});" + - row "191 +" [ref=e3880]: + - cell [ref=e3881] + - cell "191" [ref=e3882]: "191" + - cell [ref=e3883] + - cell "+" [ref=e3884]: + - generic [ref=e3885]: + + - cell [ref=e3886]: + - code + - 'row "192 + it(''does not overclaim stale lifecycle guidance for unsupported running types'', function (): void {" [ref=e3887]': + - cell [ref=e3888] + - cell "192" [ref=e3889]: "192" + - cell [ref=e3890] + - cell "+" [ref=e3891]: + - generic [ref=e3892]: + + - 'cell "it(''does not overclaim stale lifecycle guidance for unsupported running types'', function (): void {" [ref=e3893]': + - code [ref=e3894]: "it('does not overclaim stale lifecycle guidance for unsupported running types', function (): void {" + - row "193 + $run = OperationRun::factory()->create([" [ref=e3895]: + - cell [ref=e3896] + - cell "193" [ref=e3897]: "193" + - cell [ref=e3898] + - cell "+" [ref=e3899]: + - generic [ref=e3900]: + + - cell "$run = OperationRun::factory()->create([" [ref=e3901]: + - code [ref=e3902]: $run = OperationRun::factory()->create([ + - row "194 + 'type' => 'unsupported.operation'," [ref=e3903]: + - cell [ref=e3904] + - cell "194" [ref=e3905]: "194" + - cell [ref=e3906] + - cell "+" [ref=e3907]: + - generic [ref=e3908]: + + - cell "'type' => 'unsupported.operation'," [ref=e3909]: + - code [ref=e3910]: "'type' => 'unsupported.operation'," + - row "195 + 'status' => 'running'," [ref=e3911]: + - cell [ref=e3912] + - cell "195" [ref=e3913]: "195" + - cell [ref=e3914] + - cell "+" [ref=e3915]: + - generic [ref=e3916]: + + - cell "'status' => 'running'," [ref=e3917]: + - code [ref=e3918]: "'status' => 'running'," + - row "196 + 'outcome' => 'pending'," [ref=e3919]: + - cell [ref=e3920] + - cell "196" [ref=e3921]: "196" + - cell [ref=e3922] + - cell "+" [ref=e3923]: + - generic [ref=e3924]: + + - cell "'outcome' => 'pending'," [ref=e3925]: + - code [ref=e3926]: "'outcome' => 'pending'," + - row "197 + 'summary_counts' => [" [ref=e3927]: + - cell [ref=e3928] + - cell "197" [ref=e3929]: "197" + - cell [ref=e3930] + - cell "+" [ref=e3931]: + - generic [ref=e3932]: + + - cell "'summary_counts' => [" [ref=e3933]: + - code [ref=e3934]: "'summary_counts' => [" + - row "198 + 'total' => 10," [ref=e3935]: + - cell [ref=e3936] + - cell "198" [ref=e3937]: "198" + - cell [ref=e3938] + - cell "+" [ref=e3939]: + - generic [ref=e3940]: + + - cell "'total' => 10," [ref=e3941]: + - code [ref=e3942]: "'total' => 10," + - row "199 + 'processed' => 4," [ref=e3943]: + - cell [ref=e3944] + - cell "199" [ref=e3945]: "199" + - cell [ref=e3946] + - cell "+" [ref=e3947]: + - generic [ref=e3948]: + + - cell "'processed' => 4," [ref=e3949]: + - code [ref=e3950]: "'processed' => 4," + - row "200 + ]," [ref=e3951]: + - cell [ref=e3952] + - cell "200" [ref=e3953]: "200" + - cell [ref=e3954] + - cell "+" [ref=e3955]: + - generic [ref=e3956]: + + - cell "]," [ref=e3957]: + - code [ref=e3958]: "]," + - row "201 + 'started_at' => now()->subWeeks(2)," [ref=e3959]: + - cell [ref=e3960] + - cell "201" [ref=e3961]: "201" + - cell [ref=e3962] + - cell "+" [ref=e3963]: + - generic [ref=e3964]: + + - cell "'started_at' => now()->subWeeks(2)," [ref=e3965]: + - code [ref=e3966]: "'started_at' => now()->subWeeks(2)," + - row "202 + 'created_at' => now()->subWeeks(2)," [ref=e3967]: + - cell [ref=e3968] + - cell "202" [ref=e3969]: "202" + - cell [ref=e3970] + - cell "+" [ref=e3971]: + - generic [ref=e3972]: + + - cell "'created_at' => now()->subWeeks(2)," [ref=e3973]: + - code [ref=e3974]: "'created_at' => now()->subWeeks(2)," + - row "203 + ]);" [ref=e3975]: + - cell [ref=e3976] + - cell "203" [ref=e3977]: "203" + - cell [ref=e3978] + - cell "+" [ref=e3979]: + - generic [ref=e3980]: + + - cell "]);" [ref=e3981]: + - code [ref=e3982]: "]);" + - row "204 +" [ref=e3983]: + - cell [ref=e3984] + - cell "204" [ref=e3985]: "204" + - cell [ref=e3986] + - cell "+" [ref=e3987]: + - generic [ref=e3988]: + + - cell [ref=e3989]: + - code + - row "205 + $progress = OperationRunProgressContract::forRun($run);" [ref=e3990]: + - cell [ref=e3991] + - cell "205" [ref=e3992]: "205" + - cell [ref=e3993] + - cell "+" [ref=e3994]: + - generic [ref=e3995]: + + - cell "$progress = OperationRunProgressContract::forRun($run);" [ref=e3996]: + - code [ref=e3997]: $progress = OperationRunProgressContract::forRun($run); + - row "206 +" [ref=e3998]: + - cell [ref=e3999] + - cell "206" [ref=e4000]: "206" + - cell [ref=e4001] + - cell "+" [ref=e4002]: + - generic [ref=e4003]: + + - cell [ref=e4004]: + - code + - row "207 + expect($progress['capability'])->toBe('counted')" [ref=e4005]: + - cell [ref=e4006] + - cell "207" [ref=e4007]: "207" + - cell [ref=e4008] + - cell "+" [ref=e4009]: + - generic [ref=e4010]: + + - cell "expect($progress['capability'])->toBe('counted')" [ref=e4011]: + - code [ref=e4012]: expect($progress['capability'])->toBe('counted') + - row "208 + ->and($progress['display'])->toBe('counted')" [ref=e4013]: + - cell [ref=e4014] + - cell "208" [ref=e4015]: "208" + - cell [ref=e4016] + - cell "+" [ref=e4017]: + - generic [ref=e4018]: + + - cell "->and($progress['display'])->toBe('counted')" [ref=e4019]: + - code [ref=e4020]: "->and($progress['display'])->toBe('counted')" + - row "209 + ->and($progress['label'])->toBe('4 / 10 processed (40%)')" [ref=e4021]: + - cell [ref=e4022] + - cell "209" [ref=e4023]: "209" + - cell [ref=e4024] + - cell "+" [ref=e4025]: + - generic [ref=e4026]: + + - cell "->and($progress['label'])->toBe('4 / 10 processed (40%)')" [ref=e4027]: + - code [ref=e4028]: "->and($progress['label'])->toBe('4 / 10 processed (40%)')" + - row "210 + ->and($progress['percent'])->toBe(40);" [ref=e4029]: + - cell [ref=e4030] + - cell "210" [ref=e4031]: "210" + - cell [ref=e4032] + - cell "+" [ref=e4033]: + - generic [ref=e4034]: + + - cell "->and($progress['percent'])->toBe(40);" [ref=e4035]: + - code [ref=e4036]: "->and($progress['percent'])->toBe(40);" + - 'row "211 + });" [ref=e4037]': + - cell [ref=e4038] + - cell "211" [ref=e4039]: "211" + - cell [ref=e4040] + - cell "+" [ref=e4041]: + - generic [ref=e4042]: + + - 'cell "});" [ref=e4043]': + - code [ref=e4044]: "});" + - row "212 +" [ref=e4045]: + - cell [ref=e4046] + - cell "212" [ref=e4047]: "212" + - cell [ref=e4048] + - cell "+" [ref=e4049]: + - generic [ref=e4050]: + + - cell [ref=e4051]: + - code + - 'row "110 213 it(''classifies repo-real baseline evidence capture runs as phased fallback'', function (): void {" [ref=e4052]': + - cell "110" [ref=e4053]: "110" + - cell "213" [ref=e4054]: "213" + - cell [ref=e4055] + - cell [ref=e4056] + - 'cell "it(''classifies repo-real baseline evidence capture runs as phased fallback'', function (): void {" [ref=e4057]': + - code [ref=e4058]: "it('classifies repo-real baseline evidence capture runs as phased fallback', function (): void {" + - row "111 214 $run = OperationRun::factory()->create([" [ref=e4059]: + - cell "111" [ref=e4060]: "111" + - cell "214" [ref=e4061]: "214" + - cell [ref=e4062] + - cell [ref=e4063] + - cell "$run = OperationRun::factory()->create([" [ref=e4064]: + - code [ref=e4065]: $run = OperationRun::factory()->create([ + - row "112 215 'type' => 'baseline_capture'," [ref=e4066]: + - cell "112" [ref=e4067]: "112" + - cell "215" [ref=e4068]: "215" + - cell [ref=e4069] + - cell [ref=e4070] + - cell "'type' => 'baseline_capture'," [ref=e4071]: + - code [ref=e4072]: "'type' => 'baseline_capture'," + - row [ref=e4073]: + - cell [ref=e4074]: + - button [ref=e4076] [cursor=pointer]: + - img [ref=e4077] + - cell [ref=e4079] + - cell [ref=e4080] + - cell [ref=e4081]: + - code + - generic [ref=e4082]: + - 'heading "64 64 Änderungen: 64 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/checklists/requirements.md Normale Datei Datei anzeigen" [level=4] [ref=e4083]': + - generic [ref=e4084]: + - button [ref=e4085] [cursor=pointer]: + - img [ref=e4086] + - generic [ref=e4088]: + - text: "64" + - 'generic "64 Änderungen: 64 Ergänzungen und 0 Löschungen" [ref=e4089]' + - generic [ref=e4091]: + - link "specs/358-operationrun-queue-truth-foundation/checklists/requirements.md" [ref=e4092] [cursor=pointer]: + - /url: "#diff-6bdac27a6033e74007da66e96266ee61f0bb49a3" + - button [ref=e4093] [cursor=pointer]: + - img [ref=e4094] + - generic [ref=e4097]: Normale Datei + - link "Datei anzeigen" [ref=e4099] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/checklists/requirements.md + - table [ref=e4102]: + - rowgroup [ref=e4109]: + - row "@ -0,0 +1,64 @@" [ref=e4110]: + - cell [ref=e4111] + - cell [ref=e4112] + - cell [ref=e4113] + - cell "@ -0,0 +1,64 @@" [ref=e4114]: + - code [ref=e4115]: "@ -0,0 +1,64 @@" + - 'row "1 + # Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" [ref=e4116]': + - cell [ref=e4117] + - cell "1" [ref=e4118]: "1" + - cell [ref=e4119] + - cell "+" [ref=e4120]: + - generic [ref=e4121]: + + - 'cell "# Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" [ref=e4122]': + - code [ref=e4123]: "# Requirements Checklist: Spec 358 - OperationRun Queue Truth Foundation" + - row "2 +" [ref=e4124]: + - cell [ref=e4125] + - cell "2" [ref=e4126]: "2" + - cell [ref=e4127] + - cell "+" [ref=e4128]: + - generic [ref=e4129]: + + - cell [ref=e4130]: + - code + - 'row "3 + **Purpose**: Preparation analysis for Spec 358 readiness" [ref=e4131]': + - cell [ref=e4132] + - cell "3" [ref=e4133]: "3" + - cell [ref=e4134] + - cell "+" [ref=e4135]: + - generic [ref=e4136]: + + - 'cell "**Purpose**: Preparation analysis for Spec 358 readiness" [ref=e4137]': + - code [ref=e4138]: "**Purpose**: Preparation analysis for Spec 358 readiness" + - 'row "4 + **Created**: 2026-06-06" [ref=e4139]': + - cell [ref=e4140] + - cell "4" [ref=e4141]: "4" + - cell [ref=e4142] + - cell "+" [ref=e4143]: + - generic [ref=e4144]: + + - 'cell "**Created**: 2026-06-06" [ref=e4145]': + - code [ref=e4146]: "**Created**: 2026-06-06" + - 'row "5 + **Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4147]': + - cell [ref=e4148] + - cell "5" [ref=e4149]: "5" + - cell [ref=e4150] + - cell "+" [ref=e4151]: + - generic [ref=e4152]: + + - 'cell "**Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4153]': + - code [ref=e4154]: "**Feature**: `specs/358-operationrun-queue-truth-foundation/spec.md`" + - row "6 +" [ref=e4155]: + - cell [ref=e4156] + - cell "6" [ref=e4157]: "6" + - cell [ref=e4158] + - cell "+" [ref=e4159]: + - generic [ref=e4160]: + + - cell [ref=e4161]: + - code + - 'row "7 + ## Candidate Selection And Guardrails" [ref=e4162]': + - cell [ref=e4163] + - cell "7" [ref=e4164]: "7" + - cell [ref=e4165] + - cell "+" [ref=e4166]: + - generic [ref=e4167]: + + - cell "## Candidate Selection And Guardrails" [ref=e4168]: + - code [ref=e4169]: "## Candidate Selection And Guardrails" + - row "8 +" [ref=e4170]: + - cell [ref=e4171] + - cell "8" [ref=e4172]: "8" + - cell [ref=e4173] + - cell "+" [ref=e4174]: + - generic [ref=e4175]: + + - cell [ref=e4176]: + - code + - 'row "9 + - [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." [ref=e4177]': + - cell [ref=e4178] + - cell "9" [ref=e4179]: "9" + - cell [ref=e4180] + - cell "+" [ref=e4181]: + - generic [ref=e4182]: + + - 'cell "- [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." [ref=e4183]': + - code [ref=e4184]: "- [x] CHK001 The candidate source is explicit: direct user-provided draft plus repo-verified current code truth." + - 'row "10 + - [x] CHK002 No `specs/358-*` package existed before this prep." [ref=e4185]': + - cell [ref=e4186] + - cell "10" [ref=e4187]: "10" + - cell [ref=e4188] + - cell "+" [ref=e4189]: + - generic [ref=e4190]: + + - 'cell "- [x] CHK002 No `specs/358-*` package existed before this prep." [ref=e4191]': + - code [ref=e4192]: "- [x] CHK002 No `specs/358-*` package existed before this prep." + - 'row "11 + - [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." [ref=e4193]': + - cell [ref=e4194] + - cell "11" [ref=e4195]: "11" + - cell [ref=e4196] + - cell "+" [ref=e4197]: + - generic [ref=e4198]: + + - 'cell "- [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." [ref=e4199]': + - code [ref=e4200]: "- [x] CHK003 Related historical specs are treated as context only: 149, 160, 233, 268, 270, and 272." + - 'row "12 + - [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." [ref=e4201]': + - cell [ref=e4202] + - cell "12" [ref=e4203]: "12" + - cell [ref=e4204] + - cell "+" [ref=e4205]: + - generic [ref=e4206]: + + - 'cell "- [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." [ref=e4207]': + - code [ref=e4208]: "- [x] CHK004 The selected slice is narrow and reviewable: generic queue-truth alignment only, with no new persistence or adapter framework." + - 'row "13 + - [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." [ref=e4209]': + - cell [ref=e4210] + - cell "13" [ref=e4211]: "13" + - cell [ref=e4212] + - cell "+" [ref=e4213]: + - generic [ref=e4214]: + + - 'cell "- [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." [ref=e4215]': + - code [ref=e4216]: "- [x] CHK005 Repo-truth deviations from the user draft are recorded in `spec.md`." + - row "14 +" [ref=e4217]: + - cell [ref=e4218] + - cell "14" [ref=e4219]: "14" + - cell [ref=e4220] + - cell "+" [ref=e4221]: + - generic [ref=e4222]: + + - cell [ref=e4223]: + - code + - 'row "15 + ## Required Prep Artifacts" [ref=e4224]': + - cell [ref=e4225] + - cell "15" [ref=e4226]: "15" + - cell [ref=e4227] + - cell "+" [ref=e4228]: + - generic [ref=e4229]: + + - cell "## Required Prep Artifacts" [ref=e4230]: + - code [ref=e4231]: "## Required Prep Artifacts" + - row "16 +" [ref=e4232]: + - cell [ref=e4233] + - cell "16" [ref=e4234]: "16" + - cell [ref=e4235] + - cell "+" [ref=e4236]: + - generic [ref=e4237]: + + - cell [ref=e4238]: + - code + - 'row "17 + - [x] CHK006 `spec.md` exists and contains no template placeholders." [ref=e4239]': + - cell [ref=e4240] + - cell "17" [ref=e4241]: "17" + - cell [ref=e4242] + - cell "+" [ref=e4243]: + - generic [ref=e4244]: + + - 'cell "- [x] CHK006 `spec.md` exists and contains no template placeholders." [ref=e4245]': + - code [ref=e4246]: "- [x] CHK006 `spec.md` exists and contains no template placeholders." + - 'row "18 + - [x] CHK007 `plan.md` exists and is repo-aware." [ref=e4247]': + - cell [ref=e4248] + - cell "18" [ref=e4249]: "18" + - cell [ref=e4250] + - cell "+" [ref=e4251]: + - generic [ref=e4252]: + + - 'cell "- [x] CHK007 `plan.md` exists and is repo-aware." [ref=e4253]': + - code [ref=e4254]: "- [x] CHK007 `plan.md` exists and is repo-aware." + - 'row "19 + - [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." [ref=e4255]': + - cell [ref=e4256] + - cell "19" [ref=e4257]: "19" + - cell [ref=e4258] + - cell "+" [ref=e4259]: + - generic [ref=e4260]: + + - 'cell "- [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." [ref=e4261]': + - code [ref=e4262]: "- [x] CHK008 `tasks.md` exists and is ordered, small, and verifiable." + - row "20 + - [x] CHK009 This checklist exists." [ref=e4263]: + - cell [ref=e4264] + - cell "20" [ref=e4265]: "20" + - cell [ref=e4266] + - cell "+" [ref=e4267]: + - generic [ref=e4268]: + + - cell "- [x] CHK009 This checklist exists." [ref=e4269]: + - code [ref=e4270]: "- [x] CHK009 This checklist exists." + - row "21 +" [ref=e4271]: + - cell [ref=e4272] + - cell "21" [ref=e4273]: "21" + - cell [ref=e4274] + - cell "+" [ref=e4275]: + - generic [ref=e4276]: + + - cell [ref=e4277]: + - code + - 'row "22 + ## Spec Quality" [ref=e4278]': + - cell [ref=e4279] + - cell "22" [ref=e4280]: "22" + - cell [ref=e4281] + - cell "+" [ref=e4282]: + - generic [ref=e4283]: + + - cell "## Spec Quality" [ref=e4284]: + - code [ref=e4285]: "## Spec Quality" + - row "23 +" [ref=e4286]: + - cell [ref=e4287] + - cell "23" [ref=e4288]: "23" + - cell [ref=e4289] + - cell "+" [ref=e4290]: + - generic [ref=e4291]: + + - cell [ref=e4292]: + - code + - row "24 + - [x] CHK010 Spec Candidate Check is completed." [ref=e4293]: + - cell [ref=e4294] + - cell "24" [ref=e4295]: "24" + - cell [ref=e4296] + - cell "+" [ref=e4297]: + - generic [ref=e4298]: + + - cell "- [x] CHK010 Spec Candidate Check is completed." [ref=e4299]: + - code [ref=e4300]: "- [x] CHK010 Spec Candidate Check is completed." + - 'row "25 + - [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." [ref=e4301]': + - cell [ref=e4302] + - cell "25" [ref=e4303]: "25" + - cell [ref=e4304] + - cell "+" [ref=e4305]: + - generic [ref=e4306]: + + - 'cell "- [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." [ref=e4307]': + - code [ref=e4308]: "- [x] CHK011 The spec keeps `OperationRun` truth derived-only and does not introduce new persisted lifecycle state." + - row "26 + - [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." [ref=e4309]: + - cell [ref=e4310] + - cell "26" [ref=e4311]: "26" + - cell [ref=e4312] + - cell "+" [ref=e4313]: + - generic [ref=e4314]: + + - cell "- [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." [ref=e4315]: + - code [ref=e4316]: "- [x] CHK012 The spec clearly separates current repo reconciliation truth from the user's broader future-framework wording." + - row "27 + - [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." [ref=e4317]: + - cell [ref=e4318] + - cell "27" [ref=e4319]: "27" + - cell [ref=e4320] + - cell "+" [ref=e4321]: + - generic [ref=e4322]: + + - cell "- [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." [ref=e4323]: + - code [ref=e4324]: "- [x] CHK013 The spec states clear goals, non-goals, requirements, risks, and acceptance criteria." + - row "28 + - [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." [ref=e4325]: + - cell [ref=e4326] + - cell "28" [ref=e4327]: "28" + - cell [ref=e4328] + - cell "+" [ref=e4329]: + - generic [ref=e4330]: + + - cell "- [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." [ref=e4331]: + - code [ref=e4332]: "- [x] CHK014 The proportionality review rejects a new queue-health subsystem or adapter registry by default." + - row "29 +" [ref=e4333]: + - cell [ref=e4334] + - cell "29" [ref=e4335]: "29" + - cell [ref=e4336] + - cell "+" [ref=e4337]: + - generic [ref=e4338]: + + - cell [ref=e4339]: + - code + - 'row "30 + ## Plan / Task Alignment" [ref=e4340]': + - cell [ref=e4341] + - cell "30" [ref=e4342]: "30" + - cell [ref=e4343] + - cell "+" [ref=e4344]: + - generic [ref=e4345]: + + - cell "## Plan / Task Alignment" [ref=e4346]: + - code [ref=e4347]: "## Plan / Task Alignment" + - row "31 +" [ref=e4348]: + - cell [ref=e4349] + - cell "31" [ref=e4350]: "31" + - cell [ref=e4351] + - cell "+" [ref=e4352]: + - generic [ref=e4353]: + + - cell [ref=e4354]: + - code + - row "32 + - [x] CHK015 The plan identifies the actual repo surfaces likely to change." [ref=e4355]: + - cell [ref=e4356] + - cell "32" [ref=e4357]: "32" + - cell [ref=e4358] + - cell "+" [ref=e4359]: + - generic [ref=e4360]: + + - cell "- [x] CHK015 The plan identifies the actual repo surfaces likely to change." [ref=e4361]: + - code [ref=e4362]: "- [x] CHK015 The plan identifies the actual repo surfaces likely to change." + - row "33 + - [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." [ref=e4363]: + - cell [ref=e4364] + - cell "33" [ref=e4365]: "33" + - cell [ref=e4366] + - cell "+" [ref=e4367]: + - generic [ref=e4368]: + + - cell "- [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." [ref=e4369]: + - code [ref=e4370]: "- [x] CHK016 The plan explicitly preserves existing scheduled and adapter reconciliation commands as out-of-scope context." + - row "34 + - [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." [ref=e4371]: + - cell [ref=e4372] + - cell "34" [ref=e4373]: "34" + - cell [ref=e4374] + - cell "+" [ref=e4375]: + - generic [ref=e4376]: + + - cell "- [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." [ref=e4377]: + - code [ref=e4378]: "- [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible." + - row "35 + - [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." [ref=e4379]: + - cell [ref=e4380] + - cell "35" [ref=e4381]: "35" + - cell [ref=e4382] + - cell "+" [ref=e4383]: + - generic [ref=e4384]: + + - cell "- [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." [ref=e4385]: + - code [ref=e4386]: "- [x] CHK018 The tasks include tests-first work and explicit runtime validation commands." + - row "36 + - [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." [ref=e4387]: + - cell [ref=e4388] + - cell "36" [ref=e4389]: "36" + - cell [ref=e4390] + - cell "+" [ref=e4391]: + - generic [ref=e4392]: + + - cell "- [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." [ref=e4393]: + - code [ref=e4394]: "- [x] CHK019 The task list keeps scope bounded and includes anti-creep guardrails against persistence or framework expansion." + - row "37 +" [ref=e4395]: + - cell [ref=e4396] + - cell "37" [ref=e4397]: "37" + - cell [ref=e4398] + - cell "+" [ref=e4399]: + - generic [ref=e4400]: + + - cell [ref=e4401]: + - code + - 'row "38 + ## UI / Monitoring Coverage" [ref=e4402]': + - cell [ref=e4403] + - cell "38" [ref=e4404]: "38" + - cell [ref=e4405] + - cell "+" [ref=e4406]: + - generic [ref=e4407]: + + - cell "## UI / Monitoring Coverage" [ref=e4408]: + - code [ref=e4409]: "## UI / Monitoring Coverage" + - row "39 +" [ref=e4410]: + - cell [ref=e4411] + - cell "39" [ref=e4412]: "39" + - cell [ref=e4413] + - cell "+" [ref=e4414]: + - generic [ref=e4415]: + + - cell [ref=e4416]: + - code + - row "40 + - [x] CHK020 UI Surface Impact is completed and does not claim no-impact." [ref=e4417]: + - cell [ref=e4418] + - cell "40" [ref=e4419]: "40" + - cell [ref=e4420] + - cell "+" [ref=e4421]: + - generic [ref=e4422]: + + - cell "- [x] CHK020 UI Surface Impact is completed and does not claim no-impact." [ref=e4423]: + - code [ref=e4424]: "- [x] CHK020 UI Surface Impact is completed and does not claim no-impact." + - row "41 + - [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." [ref=e4425]: + - cell [ref=e4426] + - cell "41" [ref=e4427]: "41" + - cell [ref=e4428] + - cell "+" [ref=e4429]: + - generic [ref=e4430]: + + - cell "- [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." [ref=e4431]: + - code [ref=e4432]: "- [x] CHK021 The changed surfaces are correctly classified as existing monitoring family follow-through, not a new strategic customer surface." + - row "42 + - [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." [ref=e4433]: + - cell [ref=e4434] + - cell "42" [ref=e4435]: "42" + - cell [ref=e4436] + - cell "+" [ref=e4437]: + - generic [ref=e4438]: + + - cell "- [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." [ref=e4439]: + - code [ref=e4440]: "- [x] CHK022 No new page-report identity or route-inventory expansion is required for this bounded monitoring-family wording fix." + - row "43 + - [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." [ref=e4441]: + - cell [ref=e4442] + - cell "43" [ref=e4443]: "43" + - cell [ref=e4444] + - cell "+" [ref=e4445]: + - generic [ref=e4446]: + + - cell "- [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." [ref=e4447]: + - code [ref=e4448]: "- [x] CHK023 Audience-aware disclosure and no-overclaim wording boundaries are explicit." + - row "44 +" [ref=e4449]: + - cell [ref=e4450] + - cell "44" [ref=e4451]: "44" + - cell [ref=e4452] + - cell "+" [ref=e4453]: + - generic [ref=e4454]: + + - cell [ref=e4455]: + - code + - 'row "45 + ## Test Governance" [ref=e4456]': + - cell [ref=e4457] + - cell "45" [ref=e4458]: "45" + - cell [ref=e4459] + - cell "+" [ref=e4460]: + - generic [ref=e4461]: + + - cell "## Test Governance" [ref=e4462]: + - code [ref=e4463]: "## Test Governance" + - row "46 +" [ref=e4464]: + - cell [ref=e4465] + - cell "46" [ref=e4466]: "46" + - cell [ref=e4467] + - cell "+" [ref=e4468]: + - generic [ref=e4469]: + + - cell [ref=e4470]: + - code + - 'row "47 + - [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." [ref=e4471]': + - cell [ref=e4472] + - cell "47" [ref=e4473]: "47" + - cell [ref=e4474] + - cell "+" [ref=e4475]: + - generic [ref=e4476]: + + - 'cell "- [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." [ref=e4477]': + - code [ref=e4478]: "- [x] CHK024 The declared test families are the narrowest honest proof: Unit plus focused Feature." + - row "48 + - [x] CHK025 No broad new browser or heavy-governance family is introduced." [ref=e4479]: + - cell [ref=e4480] + - cell "48" [ref=e4481]: "48" + - cell [ref=e4482] + - cell "+" [ref=e4483]: + - generic [ref=e4484]: + + - cell "- [x] CHK025 No broad new browser or heavy-governance family is introduced." [ref=e4485]: + - code [ref=e4486]: "- [x] CHK025 No broad new browser or heavy-governance family is introduced." + - row "49 + - [x] CHK026 Planned validation commands are explicit and file-scoped." [ref=e4487]: + - cell [ref=e4488] + - cell "49" [ref=e4489]: "49" + - cell [ref=e4490] + - cell "+" [ref=e4491]: + - generic [ref=e4492]: + + - cell "- [x] CHK026 Planned validation commands are explicit and file-scoped." [ref=e4493]: + - code [ref=e4494]: "- [x] CHK026 Planned validation commands are explicit and file-scoped." + - row "50 +" [ref=e4495]: + - cell [ref=e4496] + - cell "50" [ref=e4497]: "50" + - cell [ref=e4498] + - cell "+" [ref=e4499]: + - generic [ref=e4500]: + + - cell [ref=e4501]: + - code + - 'row "51 + ## Readiness Gate Outcome" [ref=e4502]': + - cell [ref=e4503] + - cell "51" [ref=e4504]: "51" + - cell [ref=e4505] + - cell "+" [ref=e4506]: + - generic [ref=e4507]: + + - cell "## Readiness Gate Outcome" [ref=e4508]: + - code [ref=e4509]: "## Readiness Gate Outcome" + - row "52 +" [ref=e4510]: + - cell [ref=e4511] + - cell "52" [ref=e4512]: "52" + - cell [ref=e4513] + - cell "+" [ref=e4514]: + - generic [ref=e4515]: + + - cell [ref=e4516]: + - code + - row "53 + - [x] CHK027 Candidate Selection Gate passes." [ref=e4517]: + - cell [ref=e4518] + - cell "53" [ref=e4519]: "53" + - cell [ref=e4520] + - cell "+" [ref=e4521]: + - generic [ref=e4522]: + + - cell "- [x] CHK027 Candidate Selection Gate passes." [ref=e4523]: + - code [ref=e4524]: "- [x] CHK027 Candidate Selection Gate passes." + - row "54 + - [x] CHK028 Spec Readiness Gate passes." [ref=e4525]: + - cell [ref=e4526] + - cell "54" [ref=e4527]: "54" + - cell [ref=e4528] + - cell "+" [ref=e4529]: + - generic [ref=e4530]: + + - cell "- [x] CHK028 Spec Readiness Gate passes." [ref=e4531]: + - code [ref=e4532]: "- [x] CHK028 Spec Readiness Gate passes." + - row "55 + - [x] CHK029 Runtime implementation has not started in this preparation step." [ref=e4533]: + - cell [ref=e4534] + - cell "55" [ref=e4535]: "55" + - cell [ref=e4536] + - cell "+" [ref=e4537]: + - generic [ref=e4538]: + + - cell "- [x] CHK029 Runtime implementation has not started in this preparation step." [ref=e4539]: + - code [ref=e4540]: "- [x] CHK029 Runtime implementation has not started in this preparation step." + - row "56 + - [x] CHK030 Recommended next step is implementation, not more prep." [ref=e4541]: + - cell [ref=e4542] + - cell "56" [ref=e4543]: "56" + - cell [ref=e4544] + - cell "+" [ref=e4545]: + - generic [ref=e4546]: + + - cell "- [x] CHK030 Recommended next step is implementation, not more prep." [ref=e4547]: + - code [ref=e4548]: "- [x] CHK030 Recommended next step is implementation, not more prep." + - row "57 +" [ref=e4549]: + - cell [ref=e4550] + - cell "57" [ref=e4551]: "57" + - cell [ref=e4552] + - cell "+" [ref=e4553]: + - generic [ref=e4554]: + + - cell [ref=e4555]: + - code + - 'row "58 + ## Review Outcome" [ref=e4556]': + - cell [ref=e4557] + - cell "58" [ref=e4558]: "58" + - cell [ref=e4559] + - cell "+" [ref=e4560]: + - generic [ref=e4561]: + + - cell "## Review Outcome" [ref=e4562]: + - code [ref=e4563]: "## Review Outcome" + - row "59 +" [ref=e4564]: + - cell [ref=e4565] + - cell "59" [ref=e4566]: "59" + - cell [ref=e4567] + - cell "+" [ref=e4568]: + - generic [ref=e4569]: + + - cell [ref=e4570]: + - code + - 'row "60 + - [x] Outcome class: acceptable-special-case" [ref=e4571]': + - cell [ref=e4572] + - cell "60" [ref=e4573]: "60" + - cell [ref=e4574] + - cell "+" [ref=e4575]: + - generic [ref=e4576]: + + - 'cell "- [x] Outcome class: acceptable-special-case" [ref=e4577]': + - code [ref=e4578]: "- [x] Outcome class: acceptable-special-case" + - 'row "61 + - [x] Workflow outcome: keep" [ref=e4579]': + - cell [ref=e4580] + - cell "61" [ref=e4581]: "61" + - cell [ref=e4582] + - cell "+" [ref=e4583]: + - generic [ref=e4584]: + + - 'cell "- [x] Workflow outcome: keep" [ref=e4585]': + - code [ref=e4586]: "- [x] Workflow outcome: keep" + - 'row "62 + - [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" [ref=e4587]': + - cell [ref=e4588] + - cell "62" [ref=e4589]: "62" + - cell [ref=e4590] + - cell "+" [ref=e4591]: + - generic [ref=e4592]: + + - 'cell "- [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" [ref=e4593]': + - code [ref=e4594]: "- [x] Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage`" + - 'row "63 + - [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" [ref=e4595]': + - cell [ref=e4596] + - cell "63" [ref=e4597]: "63" + - cell [ref=e4598] + - cell "+" [ref=e4599]: + - generic [ref=e4600]: + + - 'cell "- [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" [ref=e4601]': + - code [ref=e4602]: "- [x] Preparation analyze result: pass via repo-based artifact review checklist; no standalone local `speckit.analyze` command was available in this repo surface" + - 'row "64 + - [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" [ref=e4603]': + - cell [ref=e4604] + - cell "64" [ref=e4605]: "64" + - cell [ref=e4606] + - cell "+" [ref=e4607]: + - generic [ref=e4608]: + + - 'cell "- [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" [ref=e4609]': + - code [ref=e4610]: "- [x] Tooling note: the repo-generated branch number advanced to `1000`, and local `setup-plan.sh` rejected that 4-digit prefix; the final prep artifacts were therefore authored manually under the user-requested `358` package without changing application runtime code" + - generic [ref=e4611]: + - 'heading "209 209 Änderungen: 209 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/plan.md Normale Datei Datei anzeigen" [level=4] [ref=e4612]': + - generic [ref=e4613]: + - button [ref=e4614] [cursor=pointer]: + - img [ref=e4615] + - generic [ref=e4617]: + - text: "209" + - 'generic "209 Änderungen: 209 Ergänzungen und 0 Löschungen" [ref=e4618]' + - generic [ref=e4620]: + - link "specs/358-operationrun-queue-truth-foundation/plan.md" [ref=e4621] [cursor=pointer]: + - /url: "#diff-4aa32f063db4833018cc45ff1b404fbf79327413" + - button [ref=e4622] [cursor=pointer]: + - img [ref=e4623] + - generic [ref=e4626]: Normale Datei + - link "Datei anzeigen" [ref=e4628] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/plan.md + - table [ref=e4631]: + - rowgroup [ref=e4638]: + - row "@ -0,0 +1,209 @@" [ref=e4639]: + - cell [ref=e4640] + - cell [ref=e4641] + - cell [ref=e4642] + - cell "@ -0,0 +1,209 @@" [ref=e4643]: + - code [ref=e4644]: "@ -0,0 +1,209 @@" + - 'row "1 + # Implementation Plan: OperationRun Queue Truth Foundation" [ref=e4645]': + - cell [ref=e4646] + - cell "1" [ref=e4647]: "1" + - cell [ref=e4648] + - cell "+" [ref=e4649]: + - generic [ref=e4650]: + + - 'cell "# Implementation Plan: OperationRun Queue Truth Foundation" [ref=e4651]': + - code [ref=e4652]: "# Implementation Plan: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e4653]: + - cell [ref=e4654] + - cell "2" [ref=e4655]: "2" + - cell [ref=e4656] + - cell "+" [ref=e4657]: + - generic [ref=e4658]: + + - cell [ref=e4659]: + - code + - 'row "3 + **Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4660]': + - cell [ref=e4661] + - cell "3" [ref=e4662]: "3" + - cell [ref=e4663] + - cell "+" [ref=e4664]: + - generic [ref=e4665]: + + - 'cell "**Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4666]': + - code [ref=e4667]: "**Branch**: `358-operationrun-queue-truth-foundation` | **Date**: 2026-06-06 | **Spec**: `specs/358-operationrun-queue-truth-foundation/spec.md`" + - 'row "4 + **Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4668]': + - cell [ref=e4669] + - cell "4" [ref=e4670]: "4" + - cell [ref=e4671] + - cell "+" [ref=e4672]: + - generic [ref=e4673]: + + - 'cell "**Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" [ref=e4674]': + - code [ref=e4675]: "**Input**: Feature specification from `specs/358-operationrun-queue-truth-foundation/spec.md`" + - row "5 +" [ref=e4676]: + - cell [ref=e4677] + - cell "5" [ref=e4678]: "5" + - cell [ref=e4679] + - cell "+" [ref=e4680]: + - generic [ref=e4681]: + + - cell [ref=e4682]: + - code + - 'row "6 + ## Summary" [ref=e4683]': + - cell [ref=e4684] + - cell "6" [ref=e4685]: "6" + - cell [ref=e4686] + - cell "+" [ref=e4687]: + - generic [ref=e4688]: + + - cell "## Summary" [ref=e4689]: + - code [ref=e4690]: "## Summary" + - row "7 +" [ref=e4691]: + - cell [ref=e4692] + - cell "7" [ref=e4693]: "7" + - cell [ref=e4694] + - cell "+" [ref=e4695]: + - generic [ref=e4696]: + + - cell [ref=e4697]: + - code + - 'row "8 + Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." [ref=e4698]': + - cell [ref=e4699] + - cell "8" [ref=e4700]: "8" + - cell [ref=e4701] + - cell "+" [ref=e4702]: + - generic [ref=e4703]: + + - 'cell "Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." [ref=e4704]': + - code [ref=e4705]: "Implement a narrow follow-up that aligns generic `OperationRun` queue truth across the existing lifecycle, freshness, progress, and monitoring-detail helpers. The slice must reuse current `OperationRun` persistence, current scheduled and adapter reconciliation behavior, current run links, and current authorization boundaries while removing contradictory active-work wording from shell, list, and canonical detail surfaces." + - row "9 +" [ref=e4706]: + - cell [ref=e4707] + - cell "9" [ref=e4708]: "9" + - cell [ref=e4709] + - cell "+" [ref=e4710]: + - generic [ref=e4711]: + + - cell [ref=e4712]: + - code + - row "10 + The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code." [ref=e4713]: + - cell [ref=e4714] + - cell "10" [ref=e4715]: "10" + - cell [ref=e4716] + - cell "+" [ref=e4717]: + - generic [ref=e4718]: + + - cell "The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code." [ref=e4719]: + - code [ref=e4720]: The repo already contains the foundations from Specs 149, 160, 233, 268, 270, and 272. This plan must not reopen those packages or invent a new reconciliation framework. It only corrects the remaining generic truth gap in current runtime code. + - row "11 +" [ref=e4721]: + - cell [ref=e4722] + - cell "11" [ref=e4723]: "11" + - cell [ref=e4724] + - cell "+" [ref=e4725]: + - generic [ref=e4726]: + + - cell [ref=e4727]: + - code + - 'row "12 + ## Technical Context" [ref=e4728]': + - cell [ref=e4729] + - cell "12" [ref=e4730]: "12" + - cell [ref=e4731] + - cell "+" [ref=e4732]: + - generic [ref=e4733]: + + - cell "## Technical Context" [ref=e4734]: + - code [ref=e4735]: "## Technical Context" + - row "13 +" [ref=e4736]: + - cell [ref=e4737] + - cell "13" [ref=e4738]: "13" + - cell [ref=e4739] + - cell "+" [ref=e4740]: + - generic [ref=e4741]: + + - cell [ref=e4742]: + - code + - 'row "14 + **Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" [ref=e4743]': + - cell [ref=e4744] + - cell "14" [ref=e4745]: "14" + - cell [ref=e4746] + - cell "+" [ref=e4747]: + - generic [ref=e4748]: + + - 'cell "**Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" [ref=e4749]': + - code [ref=e4750]: "**Language/Version**: PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4" + - 'row "15 + **Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" [ref=e4751]': + - cell [ref=e4752] + - cell "15" [ref=e4753]: "15" + - cell [ref=e4754] + - cell "+" [ref=e4755]: + - generic [ref=e4756]: + + - 'cell "**Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" [ref=e4757]': + - code [ref=e4758]: "**Primary Dependencies**: existing `OperationRun` monitoring helpers, `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, current Filament Monitoring pages and shared `OperationRun` implementation seams, Pest 4.3" + - 'row "16 + **Storage**: PostgreSQL `operation_runs`; no schema change planned" [ref=e4759]': + - cell [ref=e4760] + - cell "16" [ref=e4761]: "16" + - cell [ref=e4762] + - cell "+" [ref=e4763]: + - generic [ref=e4764]: + + - 'cell "**Storage**: PostgreSQL `operation_runs`; no schema change planned" [ref=e4765]': + - code [ref=e4766]: "**Storage**: PostgreSQL `operation_runs`; no schema change planned" + - 'row "17 + **Testing**: Pest Unit + Feature" [ref=e4767]': + - cell [ref=e4768] + - cell "17" [ref=e4769]: "17" + - cell [ref=e4770] + - cell "+" [ref=e4771]: + - generic [ref=e4772]: + + - 'cell "**Testing**: Pest Unit + Feature" [ref=e4773]': + - code [ref=e4774]: "**Testing**: Pest Unit + Feature" + - 'row "18 + **Validation Lanes**: fast-feedback, confidence" [ref=e4775]': + - cell [ref=e4776] + - cell "18" [ref=e4777]: "18" + - cell [ref=e4778] + - cell "+" [ref=e4779]: + - generic [ref=e4780]: + + - 'cell "**Validation Lanes**: fast-feedback, confidence" [ref=e4781]': + - code [ref=e4782]: "**Validation Lanes**: fast-feedback, confidence" + - 'row "19 + **Target Platform**: Laravel monolith in `apps/platform`" [ref=e4783]': + - cell [ref=e4784] + - cell "19" [ref=e4785]: "19" + - cell [ref=e4786] + - cell "+" [ref=e4787]: + - generic [ref=e4788]: + + - 'cell "**Target Platform**: Laravel monolith in `apps/platform`" [ref=e4789]': + - code [ref=e4790]: "**Target Platform**: Laravel monolith in `apps/platform`" + - 'row "20 + **Project Type**: web application" [ref=e4791]': + - cell [ref=e4792] + - cell "20" [ref=e4793]: "20" + - cell [ref=e4794] + - cell "+" [ref=e4795]: + - generic [ref=e4796]: + + - 'cell "**Project Type**: web application" [ref=e4797]': + - code [ref=e4798]: "**Project Type**: web application" + - 'row "21 + **Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" [ref=e4799]': + - cell [ref=e4800] + - cell "21" [ref=e4801]: "21" + - cell [ref=e4802] + - cell "+" [ref=e4803]: + - generic [ref=e4804]: + + - 'cell "**Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" [ref=e4805]': + - code [ref=e4806]: "**Performance Goals**: keep current polling/query posture unchanged; no new queries or background work required for render-time truth" + - 'row "22 + **Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" [ref=e4807]': + - cell [ref=e4808] + - cell "22" [ref=e4809]: "22" + - cell [ref=e4810] + - cell "+" [ref=e4811]: + - generic [ref=e4812]: + + - 'cell "**Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" [ref=e4813]': + - code [ref=e4814]: "**Constraints**: no new `OperationRun` status/outcome fields, no new adapter registry, no new queue/job commands, no Graph calls, no notification policy change" + - 'row "23 + **Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" [ref=e4815]': + - cell [ref=e4816] + - cell "23" [ref=e4817]: "23" + - cell [ref=e4818] + - cell "+" [ref=e4819]: + - generic [ref=e4820]: + + - 'cell "**Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" [ref=e4821]': + - code [ref=e4822]: "**Scale/Scope**: one shared derived truth path plus current shell/list/detail monitoring surfaces and focused regression coverage" + - row "24 +" [ref=e4823]: + - cell [ref=e4824] + - cell "24" [ref=e4825]: "24" + - cell [ref=e4826] + - cell "+" [ref=e4827]: + - generic [ref=e4828]: + + - cell [ref=e4829]: + - code + - 'row "25 + ## Likely Affected Repo Surfaces" [ref=e4830]': + - cell [ref=e4831] + - cell "25" [ref=e4832]: "25" + - cell [ref=e4833] + - cell "+" [ref=e4834]: + - generic [ref=e4835]: + + - cell "## Likely Affected Repo Surfaces" [ref=e4836]: + - code [ref=e4837]: "## Likely Affected Repo Surfaces" + - row "26 +" [ref=e4838]: + - cell [ref=e4839] + - cell "26" [ref=e4840]: "26" + - cell [ref=e4841] + - cell "+" [ref=e4842]: + - generic [ref=e4843]: + + - cell [ref=e4844]: + - code + - 'row "27 + - `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" [ref=e4845]': + - cell [ref=e4846] + - cell "27" [ref=e4847]: "27" + - cell [ref=e4848] + - cell "+" [ref=e4849]: + - generic [ref=e4850]: + + - 'cell "- `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" [ref=e4851]': + - code [ref=e4852]: "- `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`" + - 'row "28 + - `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" [ref=e4853]': + - cell [ref=e4854] + - cell "28" [ref=e4855]: "28" + - cell [ref=e4856] + - cell "+" [ref=e4857]: + - generic [ref=e4858]: + + - 'cell "- `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" [ref=e4859]': + - code [ref=e4860]: "- `apps/platform/app/Support/OpsUx/RunDurationInsights.php`" + - 'row "29 + - `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" [ref=e4861]': + - cell [ref=e4862] + - cell "29" [ref=e4863]: "29" + - cell [ref=e4864] + - cell "+" [ref=e4865]: + - generic [ref=e4866]: + + - 'cell "- `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" [ref=e4867]': + - code [ref=e4868]: "- `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`" + - 'row "30 + - `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" [ref=e4869]': + - cell [ref=e4870] + - cell "30" [ref=e4871]: "30" + - cell [ref=e4872] + - cell "+" [ref=e4873]: + - generic [ref=e4874]: + + - 'cell "- `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" [ref=e4875]': + - code [ref=e4876]: "- `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` only if the current derivation needs a small bounded clarification" + - 'row "31 + - `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" [ref=e4877]': + - cell [ref=e4878] + - cell "31" [ref=e4879]: "31" + - cell [ref=e4880] + - cell "+" [ref=e4881]: + - generic [ref=e4882]: + + - 'cell "- `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" [ref=e4883]': + - code [ref=e4884]: "- `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`" + - 'row "32 + - `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" [ref=e4885]': + - cell [ref=e4886] + - cell "32" [ref=e4887]: "32" + - cell [ref=e4888] + - cell "+" [ref=e4889]: + - generic [ref=e4890]: + + - 'cell "- `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" [ref=e4891]': + - code [ref=e4892]: "- `apps/platform/app/Filament/Pages/Monitoring/Operations.php` as the current route-backed Operations hub surface" + - 'row "33 + - `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" [ref=e4893]': + - cell [ref=e4894] + - cell "33" [ref=e4895]: "33" + - cell [ref=e4896] + - cell "+" [ref=e4897]: + - generic [ref=e4898]: + + - 'cell "- `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" [ref=e4899]': + - code [ref=e4900]: "- `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php` only if current workbench/list wording needs a bounded adjustment" + - 'row "34 + - `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" [ref=e4901]': + - cell [ref=e4902] + - cell "34" [ref=e4903]: "34" + - cell [ref=e4904] + - cell "+" [ref=e4905]: + - generic [ref=e4906]: + + - 'cell "- `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" [ref=e4907]': + - code [ref=e4908]: "- `apps/platform/app/Filament/Resources/OperationRunResource.php` only as the reused table/detail payload seam, not as a route-backed surface" + - 'row "35 + - `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" [ref=e4909]': + - cell [ref=e4910] + - cell "35" [ref=e4911]: "35" + - cell [ref=e4912] + - cell "+" [ref=e4913]: + - generic [ref=e4914]: + + - 'cell "- `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" [ref=e4915]': + - code [ref=e4916]: "- `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`" + - row "36 + - focused tests under:" [ref=e4917]: + - cell [ref=e4918] + - cell "36" [ref=e4919]: "36" + - cell [ref=e4920] + - cell "+" [ref=e4921]: + - generic [ref=e4922]: + + - cell "- focused tests under:" [ref=e4923]: + - code [ref=e4924]: "- focused tests under:" + - 'row "37 + - `apps/platform/tests/Unit/Support/OpsUx/`" [ref=e4925]': + - cell [ref=e4926] + - cell "37" [ref=e4927]: "37" + - cell [ref=e4928] + - cell "+" [ref=e4929]: + - generic [ref=e4930]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/`" [ref=e4931]': + - code [ref=e4932]: "- `apps/platform/tests/Unit/Support/OpsUx/`" + - 'row "38 + - `apps/platform/tests/Feature/OpsUx/`" [ref=e4933]': + - cell [ref=e4934] + - cell "38" [ref=e4935]: "38" + - cell [ref=e4936] + - cell "+" [ref=e4937]: + - generic [ref=e4938]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/`" [ref=e4939]': + - code [ref=e4940]: "- `apps/platform/tests/Feature/OpsUx/`" + - 'row "39 + - `apps/platform/tests/Feature/Monitoring/`" [ref=e4941]': + - cell [ref=e4942] + - cell "39" [ref=e4943]: "39" + - cell [ref=e4944] + - cell "+" [ref=e4945]: + - generic [ref=e4946]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/`" [ref=e4947]': + - code [ref=e4948]: "- `apps/platform/tests/Feature/Monitoring/`" + - 'row "40 + - `apps/platform/tests/Feature/Filament/`" [ref=e4949]': + - cell [ref=e4950] + - cell "40" [ref=e4951]: "40" + - cell [ref=e4952] + - cell "+" [ref=e4953]: + - generic [ref=e4954]: + + - 'cell "- `apps/platform/tests/Feature/Filament/`" [ref=e4955]': + - code [ref=e4956]: "- `apps/platform/tests/Feature/Filament/`" + - 'row "41 + - `apps/platform/tests/Feature/Operations/`" [ref=e4957]': + - cell [ref=e4958] + - cell "41" [ref=e4959]: "41" + - cell [ref=e4960] + - cell "+" [ref=e4961]: + - generic [ref=e4962]: + + - 'cell "- `apps/platform/tests/Feature/Operations/`" [ref=e4963]': + - code [ref=e4964]: "- `apps/platform/tests/Feature/Operations/`" + - row "42 +" [ref=e4965]: + - cell [ref=e4966] + - cell "42" [ref=e4967]: "42" + - cell [ref=e4968] + - cell "+" [ref=e4969]: + - generic [ref=e4970]: + + - cell [ref=e4971]: + - code + - 'row "43 + ## UI / Surface Guardrail Plan" [ref=e4972]': + - cell [ref=e4973] + - cell "43" [ref=e4974]: "43" + - cell [ref=e4975] + - cell "+" [ref=e4976]: + - generic [ref=e4977]: + + - cell "## UI / Surface Guardrail Plan" [ref=e4978]: + - code [ref=e4979]: "## UI / Surface Guardrail Plan" + - row "44 +" [ref=e4980]: + - cell [ref=e4981] + - cell "44" [ref=e4982]: "44" + - cell [ref=e4983] + - cell "+" [ref=e4984]: + - generic [ref=e4985]: + + - cell [ref=e4986]: + - code + - 'row "45 + - **Guardrail scope**: existing operator-facing monitoring surfaces only" [ref=e4987]': + - cell [ref=e4988] + - cell "45" [ref=e4989]: "45" + - cell [ref=e4990] + - cell "+" [ref=e4991]: + - generic [ref=e4992]: + + - 'cell "- **Guardrail scope**: existing operator-facing monitoring surfaces only" [ref=e4993]': + - code [ref=e4994]: "- **Guardrail scope**: existing operator-facing monitoring surfaces only" + - row "46 + - **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" [ref=e4995]: + - cell [ref=e4996] + - cell "46" [ref=e4997]: "46" + - cell [ref=e4998] + - cell "+" [ref=e4999]: + - generic [ref=e5000]: + + - cell "- **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" [ref=e5001]: + - code [ref=e5002]: "- **Affected routes/pages/actions/states/navigation/panel/provider surfaces**:" + - row "47 + - tenant shell activity hint" [ref=e5003]: + - cell [ref=e5004] + - cell "47" [ref=e5005]: "47" + - cell [ref=e5006] + - cell "+" [ref=e5007]: + - generic [ref=e5008]: + + - cell "- tenant shell activity hint" [ref=e5009]: + - code [ref=e5010]: "- tenant shell activity hint" + - 'row "48 + - `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" [ref=e5011]': + - cell [ref=e5012] + - cell "48" [ref=e5013]: "48" + - cell [ref=e5014] + - cell "+" [ref=e5015]: + - generic [ref=e5016]: + + - 'cell "- `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" [ref=e5017]': + - code [ref=e5018]: "- `/admin/workspaces/{workspace}/operations` via `App\\Filament\\Pages\\Monitoring\\Operations`" + - 'row "49 + - `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e5019]': + - cell [ref=e5020] + - cell "49" [ref=e5021]: "49" + - cell [ref=e5022] + - cell "+" [ref=e5023]: + - generic [ref=e5024]: + + - 'cell "- `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e5025]': + - code [ref=e5026]: "- `/admin/workspaces/{workspace}/operations/{run}` via `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" + - 'row "50 + - **No-impact class, if applicable**: N/A" [ref=e5027]': + - cell [ref=e5028] + - cell "50" [ref=e5029]: "50" + - cell [ref=e5030] + - cell "+" [ref=e5031]: + - generic [ref=e5032]: + + - 'cell "- **No-impact class, if applicable**: N/A" [ref=e5033]': + - code [ref=e5034]: "- **No-impact class, if applicable**: N/A" + - 'row "51 + - **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" [ref=e5035]': + - cell [ref=e5036] + - cell "51" [ref=e5037]: "51" + - cell [ref=e5038] + - cell "+" [ref=e5039]: + - generic [ref=e5040]: + + - 'cell "- **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" [ref=e5041]': + - code [ref=e5042]: "- **Native vs custom classification summary**: native Filament surfaces plus one existing Livewire shell host" + - 'row "52 + - **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" [ref=e5043]': + - cell [ref=e5044] + - cell "52" [ref=e5045]: "52" + - cell [ref=e5046] + - cell "+" [ref=e5047]: + - generic [ref=e5048]: + + - 'cell "- **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" [ref=e5049]': + - code [ref=e5050]: "- **Shared-family relevance**: monitoring-state messaging, queue guidance, active-run hinting" + - 'row "53 + - **State layers in scope**: shell, page, detail" [ref=e5051]': + - cell [ref=e5052] + - cell "53" [ref=e5053]: "53" + - cell [ref=e5054] + - cell "+" [ref=e5055]: + - generic [ref=e5056]: + + - 'cell "- **State layers in scope**: shell, page, detail" [ref=e5057]': + - code [ref=e5058]: "- **State layers in scope**: shell, page, detail" + - 'row "54 + - **Audience modes in scope**: operator-MSP, support-platform" [ref=e5059]': + - cell [ref=e5060] + - cell "54" [ref=e5061]: "54" + - cell [ref=e5062] + - cell "+" [ref=e5063]: + - generic [ref=e5064]: + + - 'cell "- **Audience modes in scope**: operator-MSP, support-platform" [ref=e5065]': + - code [ref=e5066]: "- **Audience modes in scope**: operator-MSP, support-platform" + - 'row "55 + - **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" [ref=e5067]': + - cell [ref=e5068] + - cell "55" [ref=e5069]: "55" + - cell [ref=e5070] + - cell "+" [ref=e5071]: + - generic [ref=e5072]: + + - 'cell "- **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" [ref=e5073]': + - code [ref=e5074]: "- **Decision/diagnostic/raw hierarchy plan**: decision-first lifecycle truth before diagnostics; raw context remains secondary" + - 'row "56 + - **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" [ref=e5075]': + - cell [ref=e5076] + - cell "56" [ref=e5077]: "56" + - cell [ref=e5078] + - cell "+" [ref=e5079]: + - generic [ref=e5080]: + + - 'cell "- **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" [ref=e5081]': + - code [ref=e5082]: "- **Raw/support gating plan**: unchanged; raw/support evidence stays on current detail-only surfaces" + - 'row "57 + - **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" [ref=e5083]': + - cell [ref=e5084] + - cell "57" [ref=e5085]: "57" + - cell [ref=e5086] + - cell "+" [ref=e5087]: + - generic [ref=e5088]: + + - 'cell "- **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" [ref=e5089]': + - code [ref=e5090]: "- **One-primary-action / duplicate-truth control**: no new primary actions; existing row open and current shell open links remain authoritative" + - row "58 + - **Handling modes by drift class or surface**:" [ref=e5091]: + - cell [ref=e5092] + - cell "58" [ref=e5093]: "58" + - cell [ref=e5094] + - cell "+" [ref=e5095]: + - generic [ref=e5096]: + + - cell "- **Handling modes by drift class or surface**:" [ref=e5097]: + - code [ref=e5098]: "- **Handling modes by drift class or surface**:" + - 'row "59 + - contradictory stale vs queue guidance is `hard-stop-candidate`" [ref=e5099]': + - cell [ref=e5100] + - cell "59" [ref=e5101]: "59" + - cell [ref=e5102] + - cell "+" [ref=e5103]: + - generic [ref=e5104]: + + - 'cell "- contradictory stale vs queue guidance is `hard-stop-candidate`" [ref=e5105]': + - code [ref=e5106]: "- contradictory stale vs queue guidance is `hard-stop-candidate`" + - 'row "60 + - wording-only cleanup with no behavioral effect is `review-mandatory`" [ref=e5107]': + - cell [ref=e5108] + - cell "60" [ref=e5109]: "60" + - cell [ref=e5110] + - cell "+" [ref=e5111]: + - generic [ref=e5112]: + + - 'cell "- wording-only cleanup with no behavioral effect is `review-mandatory`" [ref=e5113]': + - code [ref=e5114]: "- wording-only cleanup with no behavioral effect is `review-mandatory`" + - 'row "61 + - **Repository-signal treatment**: review-mandatory" [ref=e5115]': + - cell [ref=e5116] + - cell "61" [ref=e5117]: "61" + - cell [ref=e5118] + - cell "+" [ref=e5119]: + - generic [ref=e5120]: + + - 'cell "- **Repository-signal treatment**: review-mandatory" [ref=e5121]': + - code [ref=e5122]: "- **Repository-signal treatment**: review-mandatory" + - 'row "62 + - **Special surface test profiles**: monitoring-state-page, shared-detail-family" [ref=e5123]': + - cell [ref=e5124] + - cell "62" [ref=e5125]: "62" + - cell [ref=e5126] + - cell "+" [ref=e5127]: + - generic [ref=e5128]: + + - 'cell "- **Special surface test profiles**: monitoring-state-page, shared-detail-family" [ref=e5129]': + - code [ref=e5130]: "- **Special surface test profiles**: monitoring-state-page, shared-detail-family" + - 'row "63 + - **Required tests or manual smoke**: focused unit and feature proof only" [ref=e5131]': + - cell [ref=e5132] + - cell "63" [ref=e5133]: "63" + - cell [ref=e5134] + - cell "+" [ref=e5135]: + - generic [ref=e5136]: + + - 'cell "- **Required tests or manual smoke**: focused unit and feature proof only" [ref=e5137]': + - code [ref=e5138]: "- **Required tests or manual smoke**: focused unit and feature proof only" + - 'row "64 + - **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" [ref=e5139]': + - cell [ref=e5140] + - cell "64" [ref=e5141]: "64" + - cell [ref=e5142] + - cell "+" [ref=e5143]: + - generic [ref=e5144]: + + - 'cell "- **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" [ref=e5145]': + - code [ref=e5146]: "- **Exception path and spread control**: any move toward new persistence, new adapter abstractions, or new queue-health orchestration is `reject-or-split`" + - 'row "65 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5147]': + - cell [ref=e5148] + - cell "65" [ref=e5149]: "65" + - cell [ref=e5150] + - cell "+" [ref=e5151]: + - generic [ref=e5152]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5153]': + - code [ref=e5154]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - 'row "66 + - **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" [ref=e5155]': + - cell [ref=e5156] + - cell "66" [ref=e5157]: "66" + - cell [ref=e5158] + - cell "+" [ref=e5159]: + - generic [ref=e5160]: + + - 'cell "- **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" [ref=e5161]': + - code [ref=e5162]: "- **Navigation / Filament provider-panel handling**: unchanged; no provider registration or panel path work" + - row "67 +" [ref=e5163]: + - cell [ref=e5164] + - cell "67" [ref=e5165]: "67" + - cell [ref=e5166] + - cell "+" [ref=e5167]: + - generic [ref=e5168]: + + - cell [ref=e5169]: + - code + - 'row "68 + ## Shared Pattern & System Fit" [ref=e5170]': + - cell [ref=e5171] + - cell "68" [ref=e5172]: "68" + - cell [ref=e5173] + - cell "+" [ref=e5174]: + - generic [ref=e5175]: + + - cell "## Shared Pattern & System Fit" [ref=e5176]: + - code [ref=e5177]: "## Shared Pattern & System Fit" + - row "69 +" [ref=e5178]: + - cell [ref=e5179] + - cell "69" [ref=e5180]: "69" + - cell [ref=e5181] + - cell "+" [ref=e5182]: + - generic [ref=e5183]: + + - cell [ref=e5184]: + - code + - 'row "70 + - **Cross-cutting feature marker**: yes" [ref=e5185]': + - cell [ref=e5186] + - cell "70" [ref=e5187]: "70" + - cell [ref=e5188] + - cell "+" [ref=e5189]: + - generic [ref=e5190]: + + - 'cell "- **Cross-cutting feature marker**: yes" [ref=e5191]': + - code [ref=e5192]: "- **Cross-cutting feature marker**: yes" + - 'row "71 + - **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" [ref=e5193]': + - cell [ref=e5194] + - cell "71" [ref=e5195]: "71" + - cell [ref=e5196] + - cell "+" [ref=e5197]: + - generic [ref=e5198]: + + - 'cell "- **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" [ref=e5199]': + - code [ref=e5200]: "- **Systems touched**: lifecycle freshness, progress derivation, queue guidance, shell render, canonical monitoring detail" + - row "72 + - **Shared abstractions reused**:" [ref=e5201]: + - cell [ref=e5202] + - cell "72" [ref=e5203]: "72" + - cell [ref=e5204] + - cell "+" [ref=e5205]: + - generic [ref=e5206]: + + - cell "- **Shared abstractions reused**:" [ref=e5207]: + - code [ref=e5208]: "- **Shared abstractions reused**:" + - 'row "73 + - `OperationRunFreshnessState`" [ref=e5209]': + - cell [ref=e5210] + - cell "73" [ref=e5211]: "73" + - cell [ref=e5212] + - cell "+" [ref=e5213]: + - generic [ref=e5214]: + + - 'cell "- `OperationRunFreshnessState`" [ref=e5215]': + - code [ref=e5216]: "- `OperationRunFreshnessState`" + - 'row "74 + - `OperationRunProgressContract`" [ref=e5217]': + - cell [ref=e5218] + - cell "74" [ref=e5219]: "74" + - cell [ref=e5220] + - cell "+" [ref=e5221]: + - generic [ref=e5222]: + + - 'cell "- `OperationRunProgressContract`" [ref=e5223]': + - code [ref=e5224]: "- `OperationRunProgressContract`" + - 'row "75 + - `RunDurationInsights`" [ref=e5225]': + - cell [ref=e5226] + - cell "75" [ref=e5227]: "75" + - cell [ref=e5228] + - cell "+" [ref=e5229]: + - generic [ref=e5230]: + + - 'cell "- `RunDurationInsights`" [ref=e5231]': + - code [ref=e5232]: "- `RunDurationInsights`" + - 'row "76 + - `OperationUxPresenter`" [ref=e5233]': + - cell [ref=e5234] + - cell "76" [ref=e5235]: "76" + - cell [ref=e5236] + - cell "+" [ref=e5237]: + - generic [ref=e5238]: + + - 'cell "- `OperationUxPresenter`" [ref=e5239]': + - code [ref=e5240]: "- `OperationUxPresenter`" + - 'row "77 + - existing `OperationRunLinks` and detail routes" [ref=e5241]': + - cell [ref=e5242] + - cell "77" [ref=e5243]: "77" + - cell [ref=e5244] + - cell "+" [ref=e5245]: + - generic [ref=e5246]: + + - 'cell "- existing `OperationRunLinks` and detail routes" [ref=e5247]': + - code [ref=e5248]: "- existing `OperationRunLinks` and detail routes" + - 'row "78 + - **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" [ref=e5249]': + - cell [ref=e5250] + - cell "78" [ref=e5251]: "78" + - cell [ref=e5252] + - cell "+" [ref=e5253]: + - generic [ref=e5254]: + + - 'cell "- **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" [ref=e5255]': + - code [ref=e5256]: "- **New abstraction introduced? why?**: none by default; if one tiny queue-truth helper is required, it must stay inside `App\\Support\\OpsUx` and remain a derivation helper rather than a strategy or adapter registry" + - 'row "79 + - **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" [ref=e5257]': + - cell [ref=e5258] + - cell "79" [ref=e5259]: "79" + - cell [ref=e5260] + - cell "+" [ref=e5261]: + - generic [ref=e5262]: + + - 'cell "- **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" [ref=e5263]': + - code [ref=e5264]: "- **Why the existing abstraction was sufficient or insufficient**: the repo already centralizes the right ingredients, but the final operator wording remains split across helpers and render sites" + - 'row "80 + - **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" [ref=e5265]': + - cell [ref=e5266] + - cell "80" [ref=e5267]: "80" + - cell [ref=e5268] + - cell "+" [ref=e5269]: + - generic [ref=e5270]: + + - 'cell "- **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" [ref=e5271]': + - code [ref=e5272]: "- **Bounded deviation / spread control**: do not create a new framework layer where extending the current presenter or progress contract is sufficient" + - row "81 +" [ref=e5273]: + - cell [ref=e5274] + - cell "81" [ref=e5275]: "81" + - cell [ref=e5276] + - cell "+" [ref=e5277]: + - generic [ref=e5278]: + + - cell [ref=e5279]: + - code + - 'row "82 + ## OperationRun UX Impact" [ref=e5280]': + - cell [ref=e5281] + - cell "82" [ref=e5282]: "82" + - cell [ref=e5283] + - cell "+" [ref=e5284]: + - generic [ref=e5285]: + + - cell "## OperationRun UX Impact" [ref=e5286]: + - code [ref=e5287]: "## OperationRun UX Impact" + - row "83 +" [ref=e5288]: + - cell [ref=e5289] + - cell "83" [ref=e5290]: "83" + - cell [ref=e5291] + - cell "+" [ref=e5292]: + - generic [ref=e5293]: + + - cell [ref=e5294]: + - code + - 'row "84 + - **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e5295]': + - cell [ref=e5296] + - cell "84" [ref=e5297]: "84" + - cell [ref=e5298] + - cell "+" [ref=e5299]: + - generic [ref=e5300]: + + - 'cell "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e5301]': + - code [ref=e5302]: "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" + - 'row "85 + - **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" [ref=e5303]': + - cell [ref=e5304] + - cell "85" [ref=e5305]: "85" + - cell [ref=e5306] + - cell "+" [ref=e5307]: + - generic [ref=e5308]: + + - 'cell "- **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" [ref=e5309]': + - code [ref=e5310]: "- **Central contract reused**: current shared run-link, queued-toast, terminal-notification, and detail-route contract" + - 'row "86 + - **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" [ref=e5311]': + - cell [ref=e5312] + - cell "86" [ref=e5313]: "86" + - cell [ref=e5314] + - cell "+" [ref=e5315]: + - generic [ref=e5316]: + + - 'cell "- **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" [ref=e5317]': + - code [ref=e5318]: "- **Delegated UX behaviors**: queued toast wording, run links, browser events, and terminal notifications remain unchanged" + - 'row "87 + - **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" [ref=e5319]': + - cell [ref=e5320] + - cell "87" [ref=e5321]: "87" + - cell [ref=e5322] + - cell "+" [ref=e5323]: + - generic [ref=e5324]: + + - 'cell "- **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" [ref=e5325]': + - code [ref=e5326]: "- **Surface-owned behavior kept local**: only density and render ordering for shell/list/detail" + - 'row "88 + - **Queued DB-notification policy**: unchanged" [ref=e5327]': + - cell [ref=e5328] + - cell "88" [ref=e5329]: "88" + - cell [ref=e5330] + - cell "+" [ref=e5331]: + - generic [ref=e5332]: + + - 'cell "- **Queued DB-notification policy**: unchanged" [ref=e5333]': + - code [ref=e5334]: "- **Queued DB-notification policy**: unchanged" + - 'row "89 + - **Terminal notification path**: unchanged" [ref=e5335]': + - cell [ref=e5336] + - cell "89" [ref=e5337]: "89" + - cell [ref=e5338] + - cell "+" [ref=e5339]: + - generic [ref=e5340]: + + - 'cell "- **Terminal notification path**: unchanged" [ref=e5341]': + - code [ref=e5342]: "- **Terminal notification path**: unchanged" + - 'row "90 + - **Exception path**: none" [ref=e5343]': + - cell [ref=e5344] + - cell "90" [ref=e5345]: "90" + - cell [ref=e5346] + - cell "+" [ref=e5347]: + - generic [ref=e5348]: + + - 'cell "- **Exception path**: none" [ref=e5349]': + - code [ref=e5350]: "- **Exception path**: none" + - row "91 +" [ref=e5351]: + - cell [ref=e5352] + - cell "91" [ref=e5353]: "91" + - cell [ref=e5354] + - cell "+" [ref=e5355]: + - generic [ref=e5356]: + + - cell [ref=e5357]: + - code + - 'row "92 + ## Provider Boundary & Portability Fit" [ref=e5358]': + - cell [ref=e5359] + - cell "92" [ref=e5360]: "92" + - cell [ref=e5361] + - cell "+" [ref=e5362]: + - generic [ref=e5363]: + + - cell "## Provider Boundary & Portability Fit" [ref=e5364]: + - code [ref=e5365]: "## Provider Boundary & Portability Fit" + - row "93 +" [ref=e5366]: + - cell [ref=e5367] + - cell "93" [ref=e5368]: "93" + - cell [ref=e5369] + - cell "+" [ref=e5370]: + - generic [ref=e5371]: + + - cell [ref=e5372]: + - code + - 'row "94 + - **Shared provider/platform boundary touched?**: no" [ref=e5373]': + - cell [ref=e5374] + - cell "94" [ref=e5375]: "94" + - cell [ref=e5376] + - cell "+" [ref=e5377]: + - generic [ref=e5378]: + + - 'cell "- **Shared provider/platform boundary touched?**: no" [ref=e5379]': + - code [ref=e5380]: "- **Shared provider/platform boundary touched?**: no" + - 'row "95 + - **Provider-owned seams**: N/A" [ref=e5381]': + - cell [ref=e5382] + - cell "95" [ref=e5383]: "95" + - cell [ref=e5384] + - cell "+" [ref=e5385]: + - generic [ref=e5386]: + + - 'cell "- **Provider-owned seams**: N/A" [ref=e5387]': + - code [ref=e5388]: "- **Provider-owned seams**: N/A" + - 'row "96 + - **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" [ref=e5389]': + - cell [ref=e5390] + - cell "96" [ref=e5391]: "96" + - cell [ref=e5392] + - cell "+" [ref=e5393]: + - generic [ref=e5394]: + + - 'cell "- **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" [ref=e5395]': + - code [ref=e5396]: "- **Platform-core seams**: platform-owned `OperationRun` monitoring truth only" + - 'row "97 + - **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" [ref=e5397]': + - cell [ref=e5398] + - cell "97" [ref=e5399]: "97" + - cell [ref=e5400] + - cell "+" [ref=e5401]: + - generic [ref=e5402]: + + - 'cell "- **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" [ref=e5403]': + - code [ref=e5404]: "- **Neutral platform terms / contracts preserved**: queued, running, lifecycle window, active operation, review worker health" + - 'row "98 + - **Retained provider-specific semantics and why**: none" [ref=e5405]': + - cell [ref=e5406] + - cell "98" [ref=e5407]: "98" + - cell [ref=e5408] + - cell "+" [ref=e5409]: + - generic [ref=e5410]: + + - 'cell "- **Retained provider-specific semantics and why**: none" [ref=e5411]': + - code [ref=e5412]: "- **Retained provider-specific semantics and why**: none" + - 'row "99 + - **Bounded extraction or follow-up path**: none" [ref=e5413]': + - cell [ref=e5414] + - cell "99" [ref=e5415]: "99" + - cell [ref=e5416] + - cell "+" [ref=e5417]: + - generic [ref=e5418]: + + - 'cell "- **Bounded extraction or follow-up path**: none" [ref=e5419]': + - code [ref=e5420]: "- **Bounded extraction or follow-up path**: none" + - row "100 +" [ref=e5421]: + - cell [ref=e5422] + - cell "100" [ref=e5423]: "100" + - cell [ref=e5424] + - cell "+" [ref=e5425]: + - generic [ref=e5426]: + + - cell [ref=e5427]: + - code + - 'row "101 + ## Constitution Check" [ref=e5428]': + - cell [ref=e5429] + - cell "101" [ref=e5430]: "101" + - cell [ref=e5431] + - cell "+" [ref=e5432]: + - generic [ref=e5433]: + + - cell "## Constitution Check" [ref=e5434]: + - code [ref=e5435]: "## Constitution Check" + - row "102 +" [ref=e5436]: + - cell [ref=e5437] + - cell "102" [ref=e5438]: "102" + - cell [ref=e5439] + - cell "+" [ref=e5440]: + - generic [ref=e5441]: + + - cell [ref=e5442]: + - code + - 'row "103 + - Inventory-first: unchanged; no new source of truth." [ref=e5443]': + - cell [ref=e5444] + - cell "103" [ref=e5445]: "103" + - cell [ref=e5446] + - cell "+" [ref=e5447]: + - generic [ref=e5448]: + + - 'cell "- Inventory-first: unchanged; no new source of truth." [ref=e5449]': + - code [ref=e5450]: "- Inventory-first: unchanged; no new source of truth." + - 'row "104 + - Read/write separation: unchanged; this is read-only monitoring truth." [ref=e5451]': + - cell [ref=e5452] + - cell "104" [ref=e5453]: "104" + - cell [ref=e5454] + - cell "+" [ref=e5455]: + - generic [ref=e5456]: + + - 'cell "- Read/write separation: unchanged; this is read-only monitoring truth." [ref=e5457]': + - code [ref=e5458]: "- Read/write separation: unchanged; this is read-only monitoring truth." + - 'row "105 + - Deterministic capabilities: unchanged." [ref=e5459]': + - cell [ref=e5460] + - cell "105" [ref=e5461]: "105" + - cell [ref=e5462] + - cell "+" [ref=e5463]: + - generic [ref=e5464]: + + - 'cell "- Deterministic capabilities: unchanged." [ref=e5465]': + - code [ref=e5466]: "- Deterministic capabilities: unchanged." + - 'row "106 + - Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." [ref=e5467]': + - cell [ref=e5468] + - cell "106" [ref=e5469]: "106" + - cell [ref=e5470] + - cell "+" [ref=e5471]: + - generic [ref=e5472]: + + - 'cell "- Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." [ref=e5473]': + - code [ref=e5474]: "- Proportionality / anti-bloat: pass only if the implementation extends current helpers instead of creating a new framework." + - 'row "107 + - Persisted truth: no new tables, entities, or status families." [ref=e5475]': + - cell [ref=e5476] + - cell "107" [ref=e5477]: "107" + - cell [ref=e5478] + - cell "+" [ref=e5479]: + - generic [ref=e5480]: + + - 'cell "- Persisted truth: no new tables, entities, or status families." [ref=e5481]': + - code [ref=e5482]: "- Persisted truth: no new tables, entities, or status families." + - 'row "108 + - State discipline: derived-only; no new persisted lifecycle category." [ref=e5483]': + - cell [ref=e5484] + - cell "108" [ref=e5485]: "108" + - cell [ref=e5486] + - cell "+" [ref=e5487]: + - generic [ref=e5488]: + + - 'cell "- State discipline: derived-only; no new persisted lifecycle category." [ref=e5489]': + - code [ref=e5490]: "- State discipline: derived-only; no new persisted lifecycle category." + - 'row "109 + - Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." [ref=e5491]': + - cell [ref=e5492] + - cell "109" [ref=e5493]: "109" + - cell [ref=e5494] + - cell "+" [ref=e5495]: + - generic [ref=e5496]: + + - 'cell "- Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." [ref=e5497]': + - code [ref=e5498]: "- Shared pattern first: extend existing Ops UX helpers and current monitoring surfaces." + - 'row "110 + - Workspace / tenant isolation: unchanged and still mandatory." [ref=e5499]': + - cell [ref=e5500] + - cell "110" [ref=e5501]: "110" + - cell [ref=e5502] + - cell "+" [ref=e5503]: + - generic [ref=e5504]: + + - 'cell "- Workspace / tenant isolation: unchanged and still mandatory." [ref=e5505]': + - code [ref=e5506]: "- Workspace / tenant isolation: unchanged and still mandatory." + - 'row "111 + - RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." [ref=e5507]': + - cell [ref=e5508] + - cell "111" [ref=e5509]: "111" + - cell [ref=e5510] + - cell "+" [ref=e5511]: + - generic [ref=e5512]: + + - 'cell "- RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." [ref=e5513]': + - code [ref=e5514]: "- RBAC-UX: no client-side authorization expansion; server-side boundaries remain the only access control." + - 'row "112 + - Test governance: unit + feature remain the narrowest honest proof." [ref=e5515]': + - cell [ref=e5516] + - cell "112" [ref=e5517]: "112" + - cell [ref=e5518] + - cell "+" [ref=e5519]: + - generic [ref=e5520]: + + - 'cell "- Test governance: unit + feature remain the narrowest honest proof." [ref=e5521]': + - code [ref=e5522]: "- Test governance: unit + feature remain the narrowest honest proof." + - 'row "113 + - Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." [ref=e5523]': + - cell [ref=e5524] + - cell "113" [ref=e5525]: "113" + - cell [ref=e5526] + - cell "+" [ref=e5527]: + - generic [ref=e5528]: + + - 'cell "- Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." [ref=e5529]': + - code [ref=e5530]: "- Filament v5 / Livewire v4 posture: unchanged; no provider-registration or asset change." + - row "114 +" [ref=e5531]: + - cell [ref=e5532] + - cell "114" [ref=e5533]: "114" + - cell [ref=e5534] + - cell "+" [ref=e5535]: + - generic [ref=e5536]: + + - cell [ref=e5537]: + - code + - 'row "115 + ## Test Governance Check" [ref=e5538]': + - cell [ref=e5539] + - cell "115" [ref=e5540]: "115" + - cell [ref=e5541] + - cell "+" [ref=e5542]: + - generic [ref=e5543]: + + - cell "## Test Governance Check" [ref=e5544]: + - code [ref=e5545]: "## Test Governance Check" + - row "116 +" [ref=e5546]: + - cell [ref=e5547] + - cell "116" [ref=e5548]: "116" + - cell [ref=e5549] + - cell "+" [ref=e5550]: + - generic [ref=e5551]: + + - cell [ref=e5552]: + - code + - row "117 + - **Test purpose / classification by changed surface**:" [ref=e5553]: + - cell [ref=e5554] + - cell "117" [ref=e5555]: "117" + - cell [ref=e5556] + - cell "+" [ref=e5557]: + - generic [ref=e5558]: + + - cell "- **Test purpose / classification by changed surface**:" [ref=e5559]: + - code [ref=e5560]: "- **Test purpose / classification by changed surface**:" + - 'row "118 + - Unit: generic queue-truth derivation" [ref=e5561]': + - cell [ref=e5562] + - cell "118" [ref=e5563]: "118" + - cell [ref=e5564] + - cell "+" [ref=e5565]: + - generic [ref=e5566]: + + - 'cell "- Unit: generic queue-truth derivation" [ref=e5567]': + - code [ref=e5568]: "- Unit: generic queue-truth derivation" + - 'row "119 + - Feature: current shell/list/detail rendering and authorization-safe presentation" [ref=e5569]': + - cell [ref=e5570] + - cell "119" [ref=e5571]: "119" + - cell [ref=e5572] + - cell "+" [ref=e5573]: + - generic [ref=e5574]: + + - 'cell "- Feature: current shell/list/detail rendering and authorization-safe presentation" [ref=e5575]': + - code [ref=e5576]: "- Feature: current shell/list/detail rendering and authorization-safe presentation" + - 'row "120 + - **Affected validation lanes**: fast-feedback, confidence" [ref=e5577]': + - cell [ref=e5578] + - cell "120" [ref=e5579]: "120" + - cell [ref=e5580] + - cell "+" [ref=e5581]: + - generic [ref=e5582]: + + - 'cell "- **Affected validation lanes**: fast-feedback, confidence" [ref=e5583]': + - code [ref=e5584]: "- **Affected validation lanes**: fast-feedback, confidence" + - 'row "121 + - **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" [ref=e5585]': + - cell [ref=e5586] + - cell "121" [ref=e5587]: "121" + - cell [ref=e5588] + - cell "+" [ref=e5589]: + - generic [ref=e5590]: + + - 'cell "- **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" [ref=e5591]': + - code [ref=e5592]: "- **Why this lane mix is the narrowest sufficient proof**: the slice corrects shared derivation and rendered copy on current surfaces without introducing JS-heavy or browser-only behavior" + - row "122 + - **Narrowest proving command(s)**:" [ref=e5593]: + - cell [ref=e5594] + - cell "122" [ref=e5595]: "122" + - cell [ref=e5596] + - cell "+" [ref=e5597]: + - generic [ref=e5598]: + + - cell "- **Narrowest proving command(s)**:" [ref=e5599]: + - code [ref=e5600]: "- **Narrowest proving command(s)**:" + - 'row "123 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e5601]': + - cell [ref=e5602] + - cell "123" [ref=e5603]: "123" + - cell [ref=e5604] + - cell "+" [ref=e5605]: + - generic [ref=e5606]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e5607]': + - code [ref=e5608]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "124 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e5609]': + - cell [ref=e5610] + - cell "124" [ref=e5611]: "124" + - cell [ref=e5612] + - cell "+" [ref=e5613]: + - generic [ref=e5614]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e5615]': + - code [ref=e5616]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "125 + - `git diff --check`" [ref=e5617]': + - cell [ref=e5618] + - cell "125" [ref=e5619]: "125" + - cell [ref=e5620] + - cell "+" [ref=e5621]: + - generic [ref=e5622]: + + - 'cell "- `git diff --check`" [ref=e5623]': + - code [ref=e5624]: "- `git diff --check`" + - 'row "126 + - **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" [ref=e5625]': + - cell [ref=e5626] + - cell "126" [ref=e5627]: "126" + - cell [ref=e5628] + - cell "+" [ref=e5629]: + - generic [ref=e5630]: + + - 'cell "- **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" [ref=e5631]': + - code [ref=e5632]: "- **Fixture / helper / factory / seed / context cost risks**: existing `OperationRun` fixtures and workspace membership helpers are sufficient; avoid widening defaults" + - 'row "127 + - **Expensive defaults or shared helper growth introduced?**: none planned" [ref=e5633]': + - cell [ref=e5634] + - cell "127" [ref=e5635]: "127" + - cell [ref=e5636] + - cell "+" [ref=e5637]: + - generic [ref=e5638]: + + - 'cell "- **Expensive defaults or shared helper growth introduced?**: none planned" [ref=e5639]': + - code [ref=e5640]: "- **Expensive defaults or shared helper growth introduced?**: none planned" + - 'row "128 + - **Heavy-family additions, promotions, or visibility changes**: none" [ref=e5641]': + - cell [ref=e5642] + - cell "128" [ref=e5643]: "128" + - cell [ref=e5644] + - cell "+" [ref=e5645]: + - generic [ref=e5646]: + + - 'cell "- **Heavy-family additions, promotions, or visibility changes**: none" [ref=e5647]': + - code [ref=e5648]: "- **Heavy-family additions, promotions, or visibility changes**: none" + - 'row "129 + - **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" [ref=e5649]': + - cell [ref=e5650] + - cell "129" [ref=e5651]: "129" + - cell [ref=e5652] + - cell "+" [ref=e5653]: + - generic [ref=e5654]: + + - 'cell "- **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" [ref=e5655]': + - code [ref=e5656]: "- **Surface-class relief / special coverage rule**: monitoring-state-page and shared-detail-family coverage is explicit" + - 'row "130 + - **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" [ref=e5657]': + - cell [ref=e5658] + - cell "130" [ref=e5659]: "130" + - cell [ref=e5660] + - cell "+" [ref=e5661]: + - generic [ref=e5662]: + + - 'cell "- **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" [ref=e5663]': + - code [ref=e5664]: "- **Closing validation and reviewer handoff**: reviewers should compare stale-active, fresh-active, and reconciled-terminal cases across shell, list, and detail and confirm that stale-active wording does not coexist with ordinary queue/progress reassurance" + - 'row "131 + - **Budget / baseline / trend follow-up**: none expected" [ref=e5665]': + - cell [ref=e5666] + - cell "131" [ref=e5667]: "131" + - cell [ref=e5668] + - cell "+" [ref=e5669]: + - generic [ref=e5670]: + + - 'cell "- **Budget / baseline / trend follow-up**: none expected" [ref=e5671]': + - code [ref=e5672]: "- **Budget / baseline / trend follow-up**: none expected" + - 'row "132 + - **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" [ref=e5673]': + - cell [ref=e5674] + - cell "132" [ref=e5675]: "132" + - cell [ref=e5676] + - cell "+" [ref=e5677]: + - generic [ref=e5678]: + + - 'cell "- **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" [ref=e5679]': + - code [ref=e5680]: "- **Review-stop questions**: Did the change add persistence? Did it invent a new adapter framework? Does any stale-active surface still combine stale attention with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress reassurance?" + - 'row "133 + - **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" [ref=e5681]': + - cell [ref=e5682] + - cell "133" [ref=e5683]: "133" + - cell [ref=e5684] + - cell "+" [ref=e5685]: + - generic [ref=e5686]: + + - 'cell "- **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" [ref=e5687]': + - code [ref=e5688]: "- **Escalation path**: `reject-or-split` if scope widens into queue runtime redesign" + - 'row "134 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5689]': + - cell [ref=e5690] + - cell "134" [ref=e5691]: "134" + - cell [ref=e5692] + - cell "+" [ref=e5693]: + - generic [ref=e5694]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e5695]': + - code [ref=e5696]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - row "135 +" [ref=e5697]: + - cell [ref=e5698] + - cell "135" [ref=e5699]: "135" + - cell [ref=e5700] + - cell "+" [ref=e5701]: + - generic [ref=e5702]: + + - cell [ref=e5703]: + - code + - 'row "136 + ## Implementation Phases" [ref=e5704]': + - cell [ref=e5705] + - cell "136" [ref=e5706]: "136" + - cell [ref=e5707] + - cell "+" [ref=e5708]: + - generic [ref=e5709]: + + - cell "## Implementation Phases" [ref=e5710]: + - code [ref=e5711]: "## Implementation Phases" + - row "137 +" [ref=e5712]: + - cell [ref=e5713] + - cell "137" [ref=e5714]: "137" + - cell [ref=e5715] + - cell "+" [ref=e5716]: + - generic [ref=e5717]: + + - cell [ref=e5718]: + - code + - 'row "138 + ### Phase 1 — Confirm the shared queue-truth inputs" [ref=e5719]': + - cell [ref=e5720] + - cell "138" [ref=e5721]: "138" + - cell [ref=e5722] + - cell "+" [ref=e5723]: + - generic [ref=e5724]: + + - cell "### Phase 1 — Confirm the shared queue-truth inputs" [ref=e5725]: + - code [ref=e5726]: "### Phase 1 — Confirm the shared queue-truth inputs" + - row "139 +" [ref=e5727]: + - cell [ref=e5728] + - cell "139" [ref=e5729]: "139" + - cell [ref=e5730] + - cell "+" [ref=e5731]: + - generic [ref=e5732]: + + - cell [ref=e5733]: + - code + - row "140 + - Inventory the exact contradictory paths in:" [ref=e5734]: + - cell [ref=e5735] + - cell "140" [ref=e5736]: "140" + - cell [ref=e5737] + - cell "+" [ref=e5738]: + - generic [ref=e5739]: + + - cell "- Inventory the exact contradictory paths in:" [ref=e5740]: + - code [ref=e5741]: "- Inventory the exact contradictory paths in:" + - 'row "141 + - `OperationRunProgressContract`" [ref=e5742]': + - cell [ref=e5743] + - cell "141" [ref=e5744]: "141" + - cell [ref=e5745] + - cell "+" [ref=e5746]: + - generic [ref=e5747]: + + - 'cell "- `OperationRunProgressContract`" [ref=e5748]': + - code [ref=e5749]: "- `OperationRunProgressContract`" + - 'row "142 + - `RunDurationInsights`" [ref=e5750]': + - cell [ref=e5751] + - cell "142" [ref=e5752]: "142" + - cell [ref=e5753] + - cell "+" [ref=e5754]: + - generic [ref=e5755]: + + - 'cell "- `RunDurationInsights`" [ref=e5756]': + - code [ref=e5757]: "- `RunDurationInsights`" + - 'row "143 + - `OperationUxPresenter`" [ref=e5758]': + - cell [ref=e5759] + - cell "143" [ref=e5760]: "143" + - cell [ref=e5761] + - cell "+" [ref=e5762]: + - generic [ref=e5763]: + + - 'cell "- `OperationUxPresenter`" [ref=e5764]': + - code [ref=e5765]: "- `OperationUxPresenter`" + - row "144 + - current shell/list/detail renderers" [ref=e5766]: + - cell [ref=e5767] + - cell "144" [ref=e5768]: "144" + - cell [ref=e5769] + - cell "+" [ref=e5770]: + - generic [ref=e5771]: + + - cell "- current shell/list/detail renderers" [ref=e5772]: + - code [ref=e5773]: "- current shell/list/detail renderers" + - row "145 + - Freeze the current shared vocabulary for:" [ref=e5774]: + - cell [ref=e5775] + - cell "145" [ref=e5776]: "145" + - cell [ref=e5777] + - cell "+" [ref=e5778]: + - generic [ref=e5779]: + + - cell "- Freeze the current shared vocabulary for:" [ref=e5780]: + - code [ref=e5781]: "- Freeze the current shared vocabulary for:" + - row "146 + - fresh queued/running" [ref=e5782]: + - cell [ref=e5783] + - cell "146" [ref=e5784]: "146" + - cell [ref=e5785] + - cell "+" [ref=e5786]: + - generic [ref=e5787]: + + - cell "- fresh queued/running" [ref=e5788]: + - code [ref=e5789]: "- fresh queued/running" + - row "147 + - stale active" [ref=e5790]: + - cell [ref=e5791] + - cell "147" [ref=e5792]: "147" + - cell [ref=e5793] + - cell "+" [ref=e5794]: + - generic [ref=e5795]: + + - cell "- stale active" [ref=e5796]: + - code [ref=e5797]: "- stale active" + - row "148 + - reconciled terminal" [ref=e5798]: + - cell [ref=e5799] + - cell "148" [ref=e5800]: "148" + - cell [ref=e5801] + - cell "+" [ref=e5802]: + - generic [ref=e5803]: + + - cell "- reconciled terminal" [ref=e5804]: + - code [ref=e5805]: "- reconciled terminal" + - row "149 + - Confirm that existing scheduled and adapter reconciliation commands remain context only" [ref=e5806]: + - cell [ref=e5807] + - cell "149" [ref=e5808]: "149" + - cell [ref=e5809] + - cell "+" [ref=e5810]: + - generic [ref=e5811]: + + - cell "- Confirm that existing scheduled and adapter reconciliation commands remain context only" [ref=e5812]: + - code [ref=e5813]: "- Confirm that existing scheduled and adapter reconciliation commands remain context only" + - row "150 +" [ref=e5814]: + - cell [ref=e5815] + - cell "150" [ref=e5816]: "150" + - cell [ref=e5817] + - cell "+" [ref=e5818]: + - generic [ref=e5819]: + + - cell [ref=e5820]: + - code + - 'row "151 + ### Phase 2 — Align the generic queue-truth derivation" [ref=e5821]': + - cell [ref=e5822] + - cell "151" [ref=e5823]: "151" + - cell [ref=e5824] + - cell "+" [ref=e5825]: + - generic [ref=e5826]: + + - cell "### Phase 2 — Align the generic queue-truth derivation" [ref=e5827]: + - code [ref=e5828]: "### Phase 2 — Align the generic queue-truth derivation" + - row "152 +" [ref=e5829]: + - cell [ref=e5830] + - cell "152" [ref=e5831]: "152" + - cell [ref=e5832] + - cell "+" [ref=e5833]: + - generic [ref=e5834]: + + - cell [ref=e5835]: + - code + - row "153 + - Extend existing helpers so freshness, queue guidance, and progress availability tell one story" [ref=e5836]: + - cell [ref=e5837] + - cell "153" [ref=e5838]: "153" + - cell [ref=e5839] + - cell "+" [ref=e5840]: + - generic [ref=e5841]: + + - cell "- Extend existing helpers so freshness, queue guidance, and progress availability tell one story" [ref=e5842]: + - code [ref=e5843]: "- Extend existing helpers so freshness, queue guidance, and progress availability tell one story" + - row "154 + - Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" [ref=e5844]: + - cell [ref=e5845] + - cell "154" [ref=e5846]: "154" + - cell [ref=e5847] + - cell "+" [ref=e5848]: + - generic [ref=e5849]: + + - cell "- Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" [ref=e5850]: + - code [ref=e5851]: "- Keep phase/composite/determinate progress derived-only and subordinate to stale lifecycle truth" + - row "155 + - Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" [ref=e5852]: + - cell [ref=e5853] + - cell "155" [ref=e5854]: "155" + - cell [ref=e5855] + - cell "+" [ref=e5856]: + - generic [ref=e5857]: + + - cell "- Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" [ref=e5858]: + - code [ref=e5859]: "- Ensure unsupported or low-evidence cases remain cautious rather than overclaiming orphaned state" + - row "156 +" [ref=e5860]: + - cell [ref=e5861] + - cell "156" [ref=e5862]: "156" + - cell [ref=e5863] + - cell "+" [ref=e5864]: + - generic [ref=e5865]: + + - cell [ref=e5866]: + - code + - 'row "157 + ### Phase 3 — Retrofit current monitoring surfaces" [ref=e5867]': + - cell [ref=e5868] + - cell "157" [ref=e5869]: "157" + - cell [ref=e5870] + - cell "+" [ref=e5871]: + - generic [ref=e5872]: + + - cell "### Phase 3 — Retrofit current monitoring surfaces" [ref=e5873]: + - code [ref=e5874]: "### Phase 3 — Retrofit current monitoring surfaces" + - row "158 +" [ref=e5875]: + - cell [ref=e5876] + - cell "158" [ref=e5877]: "158" + - cell [ref=e5878] + - cell "+" [ref=e5879]: + - generic [ref=e5880]: + + - cell [ref=e5881]: + - code + - row "159 + - Update the current shell banner so stale active work does not read as ordinary queue wait" [ref=e5882]: + - cell [ref=e5883] + - cell "159" [ref=e5884]: "159" + - cell [ref=e5885] + - cell "+" [ref=e5886]: + - generic [ref=e5887]: + + - cell "- Update the current shell banner so stale active work does not read as ordinary queue wait" [ref=e5888]: + - code [ref=e5889]: "- Update the current shell banner so stale active work does not read as ordinary queue wait" + - row "160 + - Update canonical list/detail guidance so they confirm the same lifecycle meaning" [ref=e5890]: + - cell [ref=e5891] + - cell "160" [ref=e5892]: "160" + - cell [ref=e5893] + - cell "+" [ref=e5894]: + - generic [ref=e5895]: + + - cell "- Update canonical list/detail guidance so they confirm the same lifecycle meaning" [ref=e5896]: + - code [ref=e5897]: "- Update canonical list/detail guidance so they confirm the same lifecycle meaning" + - row "161 + - Keep existing links, filters, and diagnostics structure unchanged" [ref=e5898]: + - cell [ref=e5899] + - cell "161" [ref=e5900]: "161" + - cell [ref=e5901] + - cell "+" [ref=e5902]: + - generic [ref=e5903]: + + - cell "- Keep existing links, filters, and diagnostics structure unchanged" [ref=e5904]: + - code [ref=e5905]: "- Keep existing links, filters, and diagnostics structure unchanged" + - row "162 +" [ref=e5906]: + - cell [ref=e5907] + - cell "162" [ref=e5908]: "162" + - cell [ref=e5909] + - cell "+" [ref=e5910]: + - generic [ref=e5911]: + + - cell [ref=e5912]: + - code + - 'row "163 + ### Phase 4 — Validate and lock the contract" [ref=e5913]': + - cell [ref=e5914] + - cell "163" [ref=e5915]: "163" + - cell [ref=e5916] + - cell "+" [ref=e5917]: + - generic [ref=e5918]: + + - cell "### Phase 4 — Validate and lock the contract" [ref=e5919]: + - code [ref=e5920]: "### Phase 4 — Validate and lock the contract" + - row "164 +" [ref=e5921]: + - cell [ref=e5922] + - cell "164" [ref=e5923]: "164" + - cell [ref=e5924] + - cell "+" [ref=e5925]: + - generic [ref=e5926]: + + - cell [ref=e5927]: + - code + - row "165 + - Add or update targeted unit + feature tests" [ref=e5928]: + - cell [ref=e5929] + - cell "165" [ref=e5930]: "165" + - cell [ref=e5931] + - cell "+" [ref=e5932]: + - generic [ref=e5933]: + + - cell "- Add or update targeted unit + feature tests" [ref=e5934]: + - code [ref=e5935]: "- Add or update targeted unit + feature tests" + - row "166 + - Run the focused validation commands" [ref=e5936]: + - cell [ref=e5937] + - cell "166" [ref=e5938]: "166" + - cell [ref=e5939] + - cell "+" [ref=e5940]: + - generic [ref=e5941]: + + - cell "- Run the focused validation commands" [ref=e5942]: + - code [ref=e5943]: "- Run the focused validation commands" + - row "167 + - Record any remaining bounded wording choices in the active feature close-out" [ref=e5944]: + - cell [ref=e5945] + - cell "167" [ref=e5946]: "167" + - cell [ref=e5947] + - cell "+" [ref=e5948]: + - generic [ref=e5949]: + + - cell "- Record any remaining bounded wording choices in the active feature close-out" [ref=e5950]: + - code [ref=e5951]: "- Record any remaining bounded wording choices in the active feature close-out" + - row "168 +" [ref=e5952]: + - cell [ref=e5953] + - cell "168" [ref=e5954]: "168" + - cell [ref=e5955] + - cell "+" [ref=e5956]: + - generic [ref=e5957]: + + - cell [ref=e5958]: + - code + - 'row "169 + ## Risks and Mitigations" [ref=e5959]': + - cell [ref=e5960] + - cell "169" [ref=e5961]: "169" + - cell [ref=e5962] + - cell "+" [ref=e5963]: + - generic [ref=e5964]: + + - cell "## Risks and Mitigations" [ref=e5965]: + - code [ref=e5966]: "## Risks and Mitigations" + - row "170 +" [ref=e5967]: + - cell [ref=e5968] + - cell "170" [ref=e5969]: "170" + - cell [ref=e5970] + - cell "+" [ref=e5971]: + - generic [ref=e5972]: + + - cell [ref=e5973]: + - code + - 'row "171 + - **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." [ref=e5974]': + - cell [ref=e5975] + - cell "171" [ref=e5976]: "171" + - cell [ref=e5977] + - cell "+" [ref=e5978]: + - generic [ref=e5979]: + + - 'cell "- **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." [ref=e5980]': + - code [ref=e5981]: "- **Over-escalation of healthy work**: mitigate with explicit fresh-active negative assertions." + - 'row "172 + - **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." [ref=e5982]': + - cell [ref=e5983] + - cell "172" [ref=e5984]: "172" + - cell [ref=e5985] + - cell "+" [ref=e5986]: + - generic [ref=e5987]: + + - 'cell "- **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." [ref=e5988]': + - code [ref=e5989]: "- **Residual renderer drift**: mitigate by covering shell, list, and detail in the same test set." + - 'row "173 + - **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." [ref=e5990]': + - cell [ref=e5991] + - cell "173" [ref=e5992]: "173" + - cell [ref=e5993] + - cell "+" [ref=e5994]: + - generic [ref=e5995]: + + - 'cell "- **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." [ref=e5996]': + - code [ref=e5997]: "- **Accidental framework expansion**: mitigate by rejecting new registries, adapters, or persisted truth in review." + - row "174 +" [ref=e5998]: + - cell [ref=e5999] + - cell "174" [ref=e6000]: "174" + - cell [ref=e6001] + - cell "+" [ref=e6002]: + - generic [ref=e6003]: + + - cell [ref=e6004]: + - code + - 'row "175 + ## Project Structure" [ref=e6005]': + - cell [ref=e6006] + - cell "175" [ref=e6007]: "175" + - cell [ref=e6008] + - cell "+" [ref=e6009]: + - generic [ref=e6010]: + + - cell "## Project Structure" [ref=e6011]: + - code [ref=e6012]: "## Project Structure" + - row "176 +" [ref=e6013]: + - cell [ref=e6014] + - cell "176" [ref=e6015]: "176" + - cell [ref=e6016] + - cell "+" [ref=e6017]: + - generic [ref=e6018]: + + - cell [ref=e6019]: + - code + - 'row "177 + ### Documentation" [ref=e6020]': + - cell [ref=e6021] + - cell "177" [ref=e6022]: "177" + - cell [ref=e6023] + - cell "+" [ref=e6024]: + - generic [ref=e6025]: + + - cell "### Documentation" [ref=e6026]: + - code [ref=e6027]: "### Documentation" + - row "178 +" [ref=e6028]: + - cell [ref=e6029] + - cell "178" [ref=e6030]: "178" + - cell [ref=e6031] + - cell "+" [ref=e6032]: + - generic [ref=e6033]: + + - cell [ref=e6034]: + - code + - 'row "179 + ```text" [ref=e6035]': + - cell [ref=e6036] + - cell "179" [ref=e6037]: "179" + - cell [ref=e6038] + - cell "+" [ref=e6039]: + - generic [ref=e6040]: + + - 'cell "```text" [ref=e6041]': + - code [ref=e6042]: "```text" + - row "180 + specs/358-operationrun-queue-truth-foundation/" [ref=e6043]: + - cell [ref=e6044] + - cell "180" [ref=e6045]: "180" + - cell [ref=e6046] + - cell "+" [ref=e6047]: + - generic [ref=e6048]: + + - cell "specs/358-operationrun-queue-truth-foundation/" [ref=e6049]: + - code [ref=e6050]: specs/358-operationrun-queue-truth-foundation/ + - row "181 + |-- spec.md" [ref=e6051]: + - cell [ref=e6052] + - cell "181" [ref=e6053]: "181" + - cell [ref=e6054] + - cell "+" [ref=e6055]: + - generic [ref=e6056]: + + - cell "|-- spec.md" [ref=e6057]: + - code [ref=e6058]: "|-- spec.md" + - row "182 + |-- plan.md" [ref=e6059]: + - cell [ref=e6060] + - cell "182" [ref=e6061]: "182" + - cell [ref=e6062] + - cell "+" [ref=e6063]: + - generic [ref=e6064]: + + - cell "|-- plan.md" [ref=e6065]: + - code [ref=e6066]: "|-- plan.md" + - row "183 + |-- tasks.md" [ref=e6067]: + - cell [ref=e6068] + - cell "183" [ref=e6069]: "183" + - cell [ref=e6070] + - cell "+" [ref=e6071]: + - generic [ref=e6072]: + + - cell "|-- tasks.md" [ref=e6073]: + - code [ref=e6074]: "|-- tasks.md" + - 'row "184 + `-- checklists/" [ref=e6075]': + - cell [ref=e6076] + - cell "184" [ref=e6077]: "184" + - cell [ref=e6078] + - cell "+" [ref=e6079]: + - generic [ref=e6080]: + + - 'cell "`-- checklists/" [ref=e6081]': + - code [ref=e6082]: "`-- checklists/" + - 'row "185 + `-- requirements.md" [ref=e6083]': + - cell [ref=e6084] + - cell "185" [ref=e6085]: "185" + - cell [ref=e6086] + - cell "+" [ref=e6087]: + - generic [ref=e6088]: + + - 'cell "`-- requirements.md" [ref=e6089]': + - code [ref=e6090]: "`-- requirements.md" + - 'row "186 + ```" [ref=e6091]': + - cell [ref=e6092] + - cell "186" [ref=e6093]: "186" + - cell [ref=e6094] + - cell "+" [ref=e6095]: + - generic [ref=e6096]: + + - 'cell "```" [ref=e6097]': + - code [ref=e6098]: "```" + - row "187 +" [ref=e6099]: + - cell [ref=e6100] + - cell "187" [ref=e6101]: "187" + - cell [ref=e6102] + - cell "+" [ref=e6103]: + - generic [ref=e6104]: + + - cell [ref=e6105]: + - code + - 'row "188 + ### Runtime surfaces likely to change later" [ref=e6106]': + - cell [ref=e6107] + - cell "188" [ref=e6108]: "188" + - cell [ref=e6109] + - cell "+" [ref=e6110]: + - generic [ref=e6111]: + + - cell "### Runtime surfaces likely to change later" [ref=e6112]: + - code [ref=e6113]: "### Runtime surfaces likely to change later" + - row "189 +" [ref=e6114]: + - cell [ref=e6115] + - cell "189" [ref=e6116]: "189" + - cell [ref=e6117] + - cell "+" [ref=e6118]: + - generic [ref=e6119]: + + - cell [ref=e6120]: + - code + - 'row "190 + ```text" [ref=e6121]': + - cell [ref=e6122] + - cell "190" [ref=e6123]: "190" + - cell [ref=e6124] + - cell "+" [ref=e6125]: + - generic [ref=e6126]: + + - 'cell "```text" [ref=e6127]': + - code [ref=e6128]: "```text" + - row "191 + apps/platform/app/Support/OpsUx/" [ref=e6129]: + - cell [ref=e6130] + - cell "191" [ref=e6131]: "191" + - cell [ref=e6132] + - cell "+" [ref=e6133]: + - generic [ref=e6134]: + + - cell "apps/platform/app/Support/OpsUx/" [ref=e6135]: + - code [ref=e6136]: apps/platform/app/Support/OpsUx/ + - row "192 + |-- OperationRunProgressContract.php" [ref=e6137]: + - cell [ref=e6138] + - cell "192" [ref=e6139]: "192" + - cell [ref=e6140] + - cell "+" [ref=e6141]: + - generic [ref=e6142]: + + - cell "|-- OperationRunProgressContract.php" [ref=e6143]: + - code [ref=e6144]: "|-- OperationRunProgressContract.php" + - row "193 + |-- OperationUxPresenter.php" [ref=e6145]: + - cell [ref=e6146] + - cell "193" [ref=e6147]: "193" + - cell [ref=e6148] + - cell "+" [ref=e6149]: + - generic [ref=e6150]: + + - cell "|-- OperationUxPresenter.php" [ref=e6151]: + - code [ref=e6152]: "|-- OperationUxPresenter.php" + - 'row "194 + `-- RunDurationInsights.php" [ref=e6153]': + - cell [ref=e6154] + - cell "194" [ref=e6155]: "194" + - cell [ref=e6156] + - cell "+" [ref=e6157]: + - generic [ref=e6158]: + + - 'cell "`-- RunDurationInsights.php" [ref=e6159]': + - code [ref=e6160]: "`-- RunDurationInsights.php" + - row "195 +" [ref=e6161]: + - cell [ref=e6162] + - cell "195" [ref=e6163]: "195" + - cell [ref=e6164] + - cell "+" [ref=e6165]: + - generic [ref=e6166]: + + - cell [ref=e6167]: + - code + - row "196 + apps/platform/app/Support/Operations/" [ref=e6168]: + - cell [ref=e6169] + - cell "196" [ref=e6170]: "196" + - cell [ref=e6171] + - cell "+" [ref=e6172]: + - generic [ref=e6173]: + + - cell "apps/platform/app/Support/Operations/" [ref=e6174]: + - code [ref=e6175]: apps/platform/app/Support/Operations/ + - 'row "197 + `-- OperationRunFreshnessState.php" [ref=e6176]': + - cell [ref=e6177] + - cell "197" [ref=e6178]: "197" + - cell [ref=e6179] + - cell "+" [ref=e6180]: + - generic [ref=e6181]: + + - 'cell "`-- OperationRunFreshnessState.php" [ref=e6182]': + - code [ref=e6183]: "`-- OperationRunFreshnessState.php" + - row "198 +" [ref=e6184]: + - cell [ref=e6185] + - cell "198" [ref=e6186]: "198" + - cell [ref=e6187] + - cell "+" [ref=e6188]: + - generic [ref=e6189]: + + - cell [ref=e6190]: + - code + - row "199 + apps/platform/app/Filament/" [ref=e6191]: + - cell [ref=e6192] + - cell "199" [ref=e6193]: "199" + - cell [ref=e6194] + - cell "+" [ref=e6195]: + - generic [ref=e6196]: + + - cell "apps/platform/app/Filament/" [ref=e6197]: + - code [ref=e6198]: apps/platform/app/Filament/ + - row "200 + |-- Pages/Monitoring/Operations.php" [ref=e6199]: + - cell [ref=e6200] + - cell "200" [ref=e6201]: "200" + - cell [ref=e6202] + - cell "+" [ref=e6203]: + - generic [ref=e6204]: + + - cell "|-- Pages/Monitoring/Operations.php" [ref=e6205]: + - code [ref=e6206]: "|-- Pages/Monitoring/Operations.php" + - row "201 + |-- Pages/Operations/TenantlessOperationRunViewer.php" [ref=e6207]: + - cell [ref=e6208] + - cell "201" [ref=e6209]: "201" + - cell [ref=e6210] + - cell "+" [ref=e6211]: + - generic [ref=e6212]: + + - cell "|-- Pages/Operations/TenantlessOperationRunViewer.php" [ref=e6213]: + - code [ref=e6214]: "|-- Pages/Operations/TenantlessOperationRunViewer.php" + - 'row "202 + `-- Resources/OperationRunResource.php" [ref=e6215]': + - cell [ref=e6216] + - cell "202" [ref=e6217]: "202" + - cell [ref=e6218] + - cell "+" [ref=e6219]: + - generic [ref=e6220]: + + - 'cell "`-- Resources/OperationRunResource.php" [ref=e6221]': + - code [ref=e6222]: "`-- Resources/OperationRunResource.php" + - row "203 +" [ref=e6223]: + - cell [ref=e6224] + - cell "203" [ref=e6225]: "203" + - cell [ref=e6226] + - cell "+" [ref=e6227]: + - generic [ref=e6228]: + + - cell [ref=e6229]: + - code + - row "204 + apps/platform/resources/views/filament/pages/monitoring/" [ref=e6230]: + - cell [ref=e6231] + - cell "204" [ref=e6232]: "204" + - cell [ref=e6233] + - cell "+" [ref=e6234]: + - generic [ref=e6235]: + + - cell "apps/platform/resources/views/filament/pages/monitoring/" [ref=e6236]: + - code [ref=e6237]: apps/platform/resources/views/filament/pages/monitoring/ + - 'row "205 + `-- operations.blade.php" [ref=e6238]': + - cell [ref=e6239] + - cell "205" [ref=e6240]: "205" + - cell [ref=e6241] + - cell "+" [ref=e6242]: + - generic [ref=e6243]: + + - 'cell "`-- operations.blade.php" [ref=e6244]': + - code [ref=e6245]: "`-- operations.blade.php" + - row "206 +" [ref=e6246]: + - cell [ref=e6247] + - cell "206" [ref=e6248]: "206" + - cell [ref=e6249] + - cell "+" [ref=e6250]: + - generic [ref=e6251]: + + - cell [ref=e6252]: + - code + - row "207 + apps/platform/resources/views/livewire/" [ref=e6253]: + - cell [ref=e6254] + - cell "207" [ref=e6255]: "207" + - cell [ref=e6256] + - cell "+" [ref=e6257]: + - generic [ref=e6258]: + + - cell "apps/platform/resources/views/livewire/" [ref=e6259]: + - code [ref=e6260]: apps/platform/resources/views/livewire/ + - 'row "208 + `-- bulk-operation-progress.blade.php" [ref=e6261]': + - cell [ref=e6262] + - cell "208" [ref=e6263]: "208" + - cell [ref=e6264] + - cell "+" [ref=e6265]: + - generic [ref=e6266]: + + - 'cell "`-- bulk-operation-progress.blade.php" [ref=e6267]': + - code [ref=e6268]: "`-- bulk-operation-progress.blade.php" + - 'row "209 + ```" [ref=e6269]': + - cell [ref=e6270] + - cell "209" [ref=e6271]: "209" + - cell [ref=e6272] + - cell "+" [ref=e6273]: + - generic [ref=e6274]: + + - 'cell "```" [ref=e6275]': + - code [ref=e6276]: "```" + - generic [ref=e6277]: + - 'heading "298 298 Änderungen: 298 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/spec.md Normale Datei Datei anzeigen" [level=4] [ref=e6278]': + - generic [ref=e6279]: + - button [ref=e6280] [cursor=pointer]: + - img [ref=e6281] + - generic [ref=e6283]: + - text: "298" + - 'generic "298 Änderungen: 298 Ergänzungen und 0 Löschungen" [ref=e6284]' + - generic [ref=e6286]: + - link "specs/358-operationrun-queue-truth-foundation/spec.md" [ref=e6287] [cursor=pointer]: + - /url: "#diff-cae80101b562551ce446e2172de0067cfd5d23ae" + - button [ref=e6288] [cursor=pointer]: + - img [ref=e6289] + - generic [ref=e6292]: Normale Datei + - link "Datei anzeigen" [ref=e6294] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/spec.md + - table [ref=e6297]: + - rowgroup [ref=e6304]: + - row "@ -0,0 +1,298 @@" [ref=e6305]: + - cell [ref=e6306] + - cell [ref=e6307] + - cell [ref=e6308] + - cell "@ -0,0 +1,298 @@" [ref=e6309]: + - code [ref=e6310]: "@ -0,0 +1,298 @@" + - 'row "1 + # Feature Specification: OperationRun Queue Truth Foundation" [ref=e6311]': + - cell [ref=e6312] + - cell "1" [ref=e6313]: "1" + - cell [ref=e6314] + - cell "+" [ref=e6315]: + - generic [ref=e6316]: + + - 'cell "# Feature Specification: OperationRun Queue Truth Foundation" [ref=e6317]': + - code [ref=e6318]: "# Feature Specification: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e6319]: + - cell [ref=e6320] + - cell "2" [ref=e6321]: "2" + - cell [ref=e6322] + - cell "+" [ref=e6323]: + - generic [ref=e6324]: + + - cell [ref=e6325]: + - code + - 'row "3 + **Feature Branch**: `358-operationrun-queue-truth-foundation`" [ref=e6326]': + - cell [ref=e6327] + - cell "3" [ref=e6328]: "3" + - cell [ref=e6329] + - cell "+" [ref=e6330]: + - generic [ref=e6331]: + + - 'cell "**Feature Branch**: `358-operationrun-queue-truth-foundation`" [ref=e6332]': + - code [ref=e6333]: "**Feature Branch**: `358-operationrun-queue-truth-foundation`" + - 'row "4 + **Created**: 2026-06-06" [ref=e6334]': + - cell [ref=e6335] + - cell "4" [ref=e6336]: "4" + - cell [ref=e6337] + - cell "+" [ref=e6338]: + - generic [ref=e6339]: + + - 'cell "**Created**: 2026-06-06" [ref=e6340]': + - code [ref=e6341]: "**Created**: 2026-06-06" + - 'row "5 + **Status**: Draft" [ref=e6342]': + - cell [ref=e6343] + - cell "5" [ref=e6344]: "5" + - cell [ref=e6345] + - cell "+" [ref=e6346]: + - generic [ref=e6347]: + + - 'cell "**Status**: Draft" [ref=e6348]': + - code [ref=e6349]: "**Status**: Draft" + - 'row "6 + **Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" [ref=e6350]': + - cell [ref=e6351] + - cell "6" [ref=e6352]: "6" + - cell [ref=e6353] + - cell "+" [ref=e6354]: + - generic [ref=e6355]: + + - 'cell "**Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" [ref=e6356]': + - code [ref=e6357]: "**Input**: User-provided OperationRun queue-truth draft, reconciled against current repo truth" + - row "7 +" [ref=e6358]: + - cell [ref=e6359] + - cell "7" [ref=e6360]: "7" + - cell [ref=e6361] + - cell "+" [ref=e6362]: + - generic [ref=e6363]: + + - cell [ref=e6364]: + - code + - 'row "8 + ## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" [ref=e6365]': + - cell [ref=e6366] + - cell "8" [ref=e6367]: "8" + - cell [ref=e6368] + - cell "+" [ref=e6369]: + - generic [ref=e6370]: + + - cell "## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" [ref=e6371]: + - code [ref=e6372]: "## Spec Candidate Check *(mandatory — SPEC-GATE-001)*" + - row "9 +" [ref=e6373]: + - cell [ref=e6374] + - cell "9" [ref=e6375]: "9" + - cell [ref=e6376] + - cell "+" [ref=e6377]: + - generic [ref=e6378]: + + - cell [ref=e6379]: + - code + - 'row "10 + - **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." [ref=e6380]': + - cell [ref=e6381] + - cell "10" [ref=e6382]: "10" + - cell [ref=e6383] + - cell "+" [ref=e6384]: + - generic [ref=e6385]: + + - 'cell "- **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." [ref=e6386]': + - code [ref=e6387]: "- **Problem**: Current `OperationRun` UX still allows contradictory generic queue truth. The repo can show stale-attention semantics and ordinary queue/progress reassurance for the same active run, depending on which helper or surface renders first." + - 'row "11 + - **Today''s failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." [ref=e6388]': + - cell [ref=e6389] + - cell "11" [ref=e6390]: "11" + - cell [ref=e6391] + - cell "+" [ref=e6392]: + - generic [ref=e6393]: + + - 'cell "- **Today''s failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." [ref=e6394]': + - code [ref=e6395]: "- **Today's failure**: A run can surface `Likely stale` lifecycle attention while generic copy still says `Waiting for worker.` or `No action needed yet. The operation is waiting for a worker.` This creates a false-calm operator message on active monitoring surfaces." + - 'row "12 + - **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." [ref=e6396]': + - cell [ref=e6397] + - cell "12" [ref=e6398]: "12" + - cell [ref=e6399] + - cell "+" [ref=e6400]: + - generic [ref=e6401]: + + - 'cell "- **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." [ref=e6402]': + - code [ref=e6403]: "- **User-visible improvement**: Queued and running `OperationRun` records will render one honest generic lifecycle story across shell hints, monitoring rows, and canonical detail without overclaiming domain success or orphaned queue state." + - 'row "13 + - **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." [ref=e6404]': + - cell [ref=e6405] + - cell "13" [ref=e6406]: "13" + - cell [ref=e6407] + - cell "+" [ref=e6408]: + - generic [ref=e6409]: + + - 'cell "- **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." [ref=e6410]': + - code [ref=e6411]: "- **Smallest enterprise-capable version**: Align the existing generic lifecycle helpers (`OperationRunFreshnessState`, `OperationRunProgressContract`, `RunDurationInsights`, and `OperationUxPresenter`) and apply the resulting truth to current monitoring and shell surfaces only." + - 'row "14 + - **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." [ref=e6412]': + - cell [ref=e6413] + - cell "14" [ref=e6414]: "14" + - cell [ref=e6415] + - cell "+" [ref=e6416]: + - generic [ref=e6417]: + + - 'cell "- **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." [ref=e6418]': + - code [ref=e6419]: "- **Explicit non-goals**: No new persisted `OperationRun` statuses or outcomes, no queue schema redesign, no new worker-health subsystem, no new notification family, no new adapter framework, no new domain-success reconciliation, no restore/review/backup auto-completion logic, and no destructive action changes." + - 'row "15 + - **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." [ref=e6420]': + - cell [ref=e6421] + - cell "15" [ref=e6422]: "15" + - cell [ref=e6423] + - cell "+" [ref=e6424]: + - generic [ref=e6425]: + + - 'cell "- **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." [ref=e6426]': + - code [ref=e6427]: "- **Permanent complexity imported**: One bounded derived queue-truth path over existing `OperationRun` state, plus focused tests that lock the contract across shared monitoring surfaces." + - 'row "16 + - **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." [ref=e6428]': + - cell [ref=e6429] + - cell "16" [ref=e6430]: "16" + - cell [ref=e6431] + - cell "+" [ref=e6432]: + - generic [ref=e6433]: + + - 'cell "- **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." [ref=e6434]': + - code [ref=e6435]: "- **Why now**: Historical specs already improved stale visibility and shared progress, but current repo truth still contains contradictory generic wording. This is an active operator-trust gap in currently shipped runtime paths." + - 'row "17 + - **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." [ref=e6436]': + - cell [ref=e6437] + - cell "17" [ref=e6438]: "17" + - cell [ref=e6439] + - cell "+" [ref=e6440]: + - generic [ref=e6441]: + + - 'cell "- **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." [ref=e6442]': + - code [ref=e6443]: "- **Why not local**: Fixing only one Blade view, one banner, or one detail card would leave the contradiction between progress, freshness, and queue-guidance helpers intact." + - 'row "18 + - **Approval class**: Core Enterprise" [ref=e6444]': + - cell [ref=e6445] + - cell "18" [ref=e6446]: "18" + - cell [ref=e6447] + - cell "+" [ref=e6448]: + - generic [ref=e6449]: + + - 'cell "- **Approval class**: Core Enterprise" [ref=e6450]': + - code [ref=e6451]: "- **Approval class**: Core Enterprise" + - 'row "19 + - **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." [ref=e6452]': + - cell [ref=e6453] + - cell "19" [ref=e6454]: "19" + - cell [ref=e6455] + - cell "+" [ref=e6456]: + - generic [ref=e6457]: + + - 'cell "- **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." [ref=e6458]': + - code [ref=e6459]: "- **Red flags triggered**: shared interaction family, monitoring-state semantics, and possible helper consolidation. Defense: the slice remains derived-only, persistence-free, and narrower than a new reconciliation framework." + - 'row "20 + - **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" [ref=e6460]': + - cell [ref=e6461] + - cell "20" [ref=e6462]: "20" + - cell [ref=e6463] + - cell "+" [ref=e6464]: + - generic [ref=e6465]: + + - 'cell "- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" [ref=e6466]': + - code [ref=e6467]: "- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**" + - 'row "21 + - **Decision**: approve" [ref=e6468]': + - cell [ref=e6469] + - cell "21" [ref=e6470]: "21" + - cell [ref=e6471] + - cell "+" [ref=e6472]: + - generic [ref=e6473]: + + - 'cell "- **Decision**: approve" [ref=e6474]': + - code [ref=e6475]: "- **Decision**: approve" + - row "22 +" [ref=e6476]: + - cell [ref=e6477] + - cell "22" [ref=e6478]: "22" + - cell [ref=e6479] + - cell "+" [ref=e6480]: + - generic [ref=e6481]: + + - cell [ref=e6482]: + - code + - 'row "23 + ## Repo Truth Reconciliation" [ref=e6483]': + - cell [ref=e6484] + - cell "23" [ref=e6485]: "23" + - cell [ref=e6486] + - cell "+" [ref=e6487]: + - generic [ref=e6488]: + + - cell "## Repo Truth Reconciliation" [ref=e6489]: + - code [ref=e6490]: "## Repo Truth Reconciliation" + - row "24 +" [ref=e6491]: + - cell [ref=e6492] + - cell "24" [ref=e6493]: "24" + - cell [ref=e6494] + - cell "+" [ref=e6495]: + - generic [ref=e6496]: + + - cell [ref=e6497]: + - code + - row "25 + The user draft is directionally correct, but current repo truth changes the exact framing:" [ref=e6498]: + - cell [ref=e6499] + - cell "25" [ref=e6500]: "25" + - cell [ref=e6501] + - cell "+" [ref=e6502]: + - generic [ref=e6503]: + + - cell "The user draft is directionally correct, but current repo truth changes the exact framing:" [ref=e6504]: + - code [ref=e6505]: "The user draft is directionally correct, but current repo truth changes the exact framing:" + - row "26 +" [ref=e6506]: + - cell [ref=e6507] + - cell "26" [ref=e6508]: "26" + - cell [ref=e6509] + - cell "+" [ref=e6510]: + - generic [ref=e6511]: + + - cell [ref=e6512]: + - code + - 'row "27 + 1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." [ref=e6513]': + - cell [ref=e6514] + - cell "27" [ref=e6515]: "27" + - cell [ref=e6516] + - cell "+" [ref=e6517]: + - generic [ref=e6518]: + + - 'cell "1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." [ref=e6519]': + - code [ref=e6520]: "1. The repo helper advanced to `1000` because `specs/999-seeder-external-id/` already exists, but this package is intentionally finalized as user-requested Spec `358`." + - 'row "28 + 2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." [ref=e6521]': + - cell [ref=e6522] + - cell "28" [ref=e6523]: "28" + - cell [ref=e6524] + - cell "+" [ref=e6525]: + - generic [ref=e6526]: + + - 'cell "2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." [ref=e6527]': + - code [ref=e6528]: "2. Generic stale reconciliation already exists via `TenantpilotReconcileOperationRuns` and `OperationLifecycleReconciler`; adapter-backed reconciliation already exists via `OpsReconcileAdapterRuns` and `AdapterRunReconciler`." + - 'row "29 + 3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." [ref=e6529]': + - cell [ref=e6530] + - cell "29" [ref=e6531]: "29" + - cell [ref=e6532] + - cell "+" [ref=e6533]: + - generic [ref=e6534]: + + - 'cell "3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." [ref=e6535]': + - code [ref=e6536]: "3. A shared progress helper already exists via `OperationRunProgressContract`, and Spec 272 already extended its active-progress precedence for phased/composite truth; this spec aligns stale/fresh queue guidance with that current shared contract instead of inventing a new one." + - 'row "30 + 4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." [ref=e6537]': + - cell [ref=e6538] + - cell "30" [ref=e6539]: "30" + - cell [ref=e6540] + - cell "+" [ref=e6541]: + - generic [ref=e6542]: + + - 'cell "4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." [ref=e6543]': + - code [ref=e6544]: "4. The current canonical Monitoring routes are workspace-scoped: `/admin/workspaces/{workspace}/operations` and `/admin/workspaces/{workspace}/operations/{run}`. `OperationRunResource` remains an implementation seam, not a route-backed surface." + - 'row "31 + 5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." [ref=e6545]': + - cell [ref=e6546] + - cell "31" [ref=e6547]: "31" + - cell [ref=e6548] + - cell "+" [ref=e6549]: + - generic [ref=e6550]: + + - 'cell "5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." [ref=e6551]': + - code [ref=e6552]: "5. No follow-up `Spec 359` promise is recorded here. Any later adapter or domain-success work must be promoted from fresh repo truth rather than pre-allocating a speculative framework sequence." + - row "32 +" [ref=e6553]: + - cell [ref=e6554] + - cell "32" [ref=e6555]: "32" + - cell [ref=e6556] + - cell "+" [ref=e6557]: + - generic [ref=e6558]: + + - cell [ref=e6559]: + - code + - 'row "33 + ## Spec Scope Fields *(mandatory)*" [ref=e6560]': + - cell [ref=e6561] + - cell "33" [ref=e6562]: "33" + - cell [ref=e6563] + - cell "+" [ref=e6564]: + - generic [ref=e6565]: + + - cell "## Spec Scope Fields *(mandatory)*" [ref=e6566]: + - code [ref=e6567]: "## Spec Scope Fields *(mandatory)*" + - row "34 +" [ref=e6568]: + - cell [ref=e6569] + - cell "34" [ref=e6570]: "34" + - cell [ref=e6571] + - cell "+" [ref=e6572]: + - generic [ref=e6573]: + + - cell [ref=e6574]: + - code + - 'row "35 + - **Scope**: workspace, tenant, canonical-view" [ref=e6575]': + - cell [ref=e6576] + - cell "35" [ref=e6577]: "35" + - cell [ref=e6578] + - cell "+" [ref=e6579]: + - generic [ref=e6580]: + + - 'cell "- **Scope**: workspace, tenant, canonical-view" [ref=e6581]': + - code [ref=e6582]: "- **Scope**: workspace, tenant, canonical-view" + - row "36 + - **Primary Routes**:" [ref=e6583]: + - cell [ref=e6584] + - cell "36" [ref=e6585]: "36" + - cell [ref=e6586] + - cell "+" [ref=e6587]: + - generic [ref=e6588]: + + - cell "- **Primary Routes**:" [ref=e6589]: + - code [ref=e6590]: "- **Primary Routes**:" + - 'row "37 + - workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" [ref=e6591]': + - cell [ref=e6592] + - cell "37" [ref=e6593]: "37" + - cell [ref=e6594] + - cell "+" [ref=e6595]: + - generic [ref=e6596]: + + - 'cell "- workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" [ref=e6597]': + - code [ref=e6598]: "- workspace-admin surfaces that host the shared shell activity hint while an entitled managed environment is active, including current `/admin/workspaces/{workspace}/environments/{environment}/...` starts" + - 'row "38 + - `/admin/workspaces/{workspace}/operations`" [ref=e6599]': + - cell [ref=e6600] + - cell "38" [ref=e6601]: "38" + - cell [ref=e6602] + - cell "+" [ref=e6603]: + - generic [ref=e6604]: + + - 'cell "- `/admin/workspaces/{workspace}/operations`" [ref=e6605]': + - code [ref=e6606]: "- `/admin/workspaces/{workspace}/operations`" + - 'row "39 + - `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6607]': + - cell [ref=e6608] + - cell "39" [ref=e6609]: "39" + - cell [ref=e6610] + - cell "+" [ref=e6611]: + - generic [ref=e6612]: + + - 'cell "- `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6613]': + - code [ref=e6614]: "- `/admin/workspaces/{workspace}/operations/{run}`" + - 'row "40 + - the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e6615]': + - cell [ref=e6616] + - cell "40" [ref=e6617]: "40" + - cell [ref=e6618] + - cell "+" [ref=e6619]: + - generic [ref=e6620]: + + - 'cell "- the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" [ref=e6621]': + - code [ref=e6622]: "- the current canonical Monitoring surfaces `App\\Filament\\Pages\\Monitoring\\Operations` and `App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`" + - row "41 + - **Data Ownership**:" [ref=e6623]: + - cell [ref=e6624] + - cell "41" [ref=e6625]: "41" + - cell [ref=e6626] + - cell "+" [ref=e6627]: + - generic [ref=e6628]: + + - cell "- **Data Ownership**:" [ref=e6629]: + - code [ref=e6630]: "- **Data Ownership**:" + - 'row "42 + - `operation_runs` remain the only lifecycle and freshness source of truth" [ref=e6631]': + - cell [ref=e6632] + - cell "42" [ref=e6633]: "42" + - cell [ref=e6634] + - cell "+" [ref=e6635]: + - generic [ref=e6636]: + + - 'cell "- `operation_runs` remain the only lifecycle and freshness source of truth" [ref=e6637]': + - code [ref=e6638]: "- `operation_runs` remain the only lifecycle and freshness source of truth" + - 'row "43 + - `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" [ref=e6639]': + - cell [ref=e6640] + - cell "43" [ref=e6641]: "43" + - cell [ref=e6642] + - cell "+" [ref=e6643]: + - generic [ref=e6644]: + + - 'cell "- `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" [ref=e6645]': + - code [ref=e6646]: "- `OperationRun` context remains the only place where legitimacy or reconciliation evidence may already exist" + - row "44 + - no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" [ref=e6647]: + - cell [ref=e6648] + - cell "44" [ref=e6649]: "44" + - cell [ref=e6650] + - cell "+" [ref=e6651]: + - generic [ref=e6652]: + + - cell "- no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" [ref=e6653]: + - code [ref=e6654]: "- no new persisted queue-truth mirror, no new audit artifact, and no new worker-health record are introduced" + - row "45 + - **RBAC**:" [ref=e6655]: + - cell [ref=e6656] + - cell "45" [ref=e6657]: "45" + - cell [ref=e6658] + - cell "+" [ref=e6659]: + - generic [ref=e6660]: + + - cell "- **RBAC**:" [ref=e6661]: + - code [ref=e6662]: "- **RBAC**:" + - row "46 + - existing workspace and managed-environment entitlement rules remain authoritative" [ref=e6663]: + - cell [ref=e6664] + - cell "46" [ref=e6665]: "46" + - cell [ref=e6666] + - cell "+" [ref=e6667]: + - generic [ref=e6668]: + + - cell "- existing workspace and managed-environment entitlement rules remain authoritative" [ref=e6669]: + - code [ref=e6670]: "- existing workspace and managed-environment entitlement rules remain authoritative" + - 'row "47 + - non-members and out-of-scope actors remain `404`" [ref=e6671]': + - cell [ref=e6672] + - cell "47" [ref=e6673]: "47" + - cell [ref=e6674] + - cell "+" [ref=e6675]: + - generic [ref=e6676]: + + - 'cell "- non-members and out-of-scope actors remain `404`" [ref=e6677]': + - code [ref=e6678]: "- non-members and out-of-scope actors remain `404`" + - row "48 + - this spec changes wording and derived presentation only; it does not widen access or add new capability strings" [ref=e6679]: + - cell [ref=e6680] + - cell "48" [ref=e6681]: "48" + - cell [ref=e6682] + - cell "+" [ref=e6683]: + - generic [ref=e6684]: + + - cell "- this spec changes wording and derived presentation only; it does not widen access or add new capability strings" [ref=e6685]: + - code [ref=e6686]: "- this spec changes wording and derived presentation only; it does not widen access or add new capability strings" + - row "49 +" [ref=e6687]: + - cell [ref=e6688] + - cell "49" [ref=e6689]: "49" + - cell [ref=e6690] + - cell "+" [ref=e6691]: + - generic [ref=e6692]: + + - cell [ref=e6693]: + - code + - row "50 + For canonical-view specs, the spec MUST define:" [ref=e6694]: + - cell [ref=e6695] + - cell "50" [ref=e6696]: "50" + - cell [ref=e6697] + - cell "+" [ref=e6698]: + - generic [ref=e6699]: + + - cell "For canonical-view specs, the spec MUST define:" [ref=e6700]: + - code [ref=e6701]: "For canonical-view specs, the spec MUST define:" + - row "51 +" [ref=e6702]: + - cell [ref=e6703] + - cell "51" [ref=e6704]: "51" + - cell [ref=e6705] + - cell "+" [ref=e6706]: + - generic [ref=e6707]: + + - cell [ref=e6708]: + - code + - 'row "52 + - **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." [ref=e6709]': + - cell [ref=e6710] + - cell "52" [ref=e6711]: "52" + - cell [ref=e6712] + - cell "+" [ref=e6713]: + - generic [ref=e6714]: + + - 'cell "- **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." [ref=e6715]': + - code [ref=e6716]: "- **Default filter behavior when tenant-context is active**: Existing environment-prefilter and page-state behavior on `/admin/workspaces/{workspace}/operations` remain unchanged. This spec changes queue truth, not monitoring state ownership." + - 'row "53 + - **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." [ref=e6717]': + - cell [ref=e6718] + - cell "53" [ref=e6719]: "53" + - cell [ref=e6720] + - cell "+" [ref=e6721]: + - generic [ref=e6722]: + + - 'cell "- **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." [ref=e6723]': + - code [ref=e6724]: "- **Explicit entitlement checks preventing cross-tenant leakage**: Derived stale/queued guidance must use only runs the actor is already authorized to view. No new wording may reveal hidden tenant scope or hidden run existence." + - row "54 +" [ref=e6725]: + - cell [ref=e6726] + - cell "54" [ref=e6727]: "54" + - cell [ref=e6728] + - cell "+" [ref=e6729]: + - generic [ref=e6730]: + + - cell [ref=e6731]: + - code + - 'row "55 + ## UI Surface Impact *(mandatory — UI-COV-001)*" [ref=e6732]': + - cell [ref=e6733] + - cell "55" [ref=e6734]: "55" + - cell [ref=e6735] + - cell "+" [ref=e6736]: + - generic [ref=e6737]: + + - cell "## UI Surface Impact *(mandatory — UI-COV-001)*" [ref=e6738]: + - code [ref=e6739]: "## UI Surface Impact *(mandatory — UI-COV-001)*" + - row "56 +" [ref=e6740]: + - cell [ref=e6741] + - cell "56" [ref=e6742]: "56" + - cell [ref=e6743] + - cell "+" [ref=e6744]: + - generic [ref=e6745]: + + - cell [ref=e6746]: + - code + - row "57 + - [ ] No UI surface impact" [ref=e6747]: + - cell [ref=e6748] + - cell "57" [ref=e6749]: "57" + - cell [ref=e6750] + - cell "+" [ref=e6751]: + - generic [ref=e6752]: + + - cell "- [ ] No UI surface impact" [ref=e6753]: + - code [ref=e6754]: "- [ ] No UI surface impact" + - row "58 + - [x] Existing page changed" [ref=e6755]: + - cell [ref=e6756] + - cell "58" [ref=e6757]: "58" + - cell [ref=e6758] + - cell "+" [ref=e6759]: + - generic [ref=e6760]: + + - cell "- [x] Existing page changed" [ref=e6761]: + - code [ref=e6762]: "- [x] Existing page changed" + - row "59 + - [ ] New page/route added" [ref=e6763]: + - cell [ref=e6764] + - cell "59" [ref=e6765]: "59" + - cell [ref=e6766] + - cell "+" [ref=e6767]: + - generic [ref=e6768]: + + - cell "- [ ] New page/route added" [ref=e6769]: + - code [ref=e6770]: "- [ ] New page/route added" + - row "60 + - [ ] Navigation changed" [ref=e6771]: + - cell [ref=e6772] + - cell "60" [ref=e6773]: "60" + - cell [ref=e6774] + - cell "+" [ref=e6775]: + - generic [ref=e6776]: + + - cell "- [ ] Navigation changed" [ref=e6777]: + - code [ref=e6778]: "- [ ] Navigation changed" + - row "61 + - [ ] Filament panel/provider surface changed" [ref=e6779]: + - cell [ref=e6780] + - cell "61" [ref=e6781]: "61" + - cell [ref=e6782] + - cell "+" [ref=e6783]: + - generic [ref=e6784]: + + - cell "- [ ] Filament panel/provider surface changed" [ref=e6785]: + - code [ref=e6786]: "- [ ] Filament panel/provider surface changed" + - row "62 + - [ ] New modal/drawer/wizard/action added" [ref=e6787]: + - cell [ref=e6788] + - cell "62" [ref=e6789]: "62" + - cell [ref=e6790] + - cell "+" [ref=e6791]: + - generic [ref=e6792]: + + - cell "- [ ] New modal/drawer/wizard/action added" [ref=e6793]: + - code [ref=e6794]: "- [ ] New modal/drawer/wizard/action added" + - row "63 + - [ ] New table/form/state added" [ref=e6795]: + - cell [ref=e6796] + - cell "63" [ref=e6797]: "63" + - cell [ref=e6798] + - cell "+" [ref=e6799]: + - generic [ref=e6800]: + + - cell "- [ ] New table/form/state added" [ref=e6801]: + - code [ref=e6802]: "- [ ] New table/form/state added" + - row "64 + - [ ] Customer-facing surface changed" [ref=e6803]: + - cell [ref=e6804] + - cell "64" [ref=e6805]: "64" + - cell [ref=e6806] + - cell "+" [ref=e6807]: + - generic [ref=e6808]: + + - cell "- [ ] Customer-facing surface changed" [ref=e6809]: + - code [ref=e6810]: "- [ ] Customer-facing surface changed" + - row "65 + - [ ] Dangerous action changed" [ref=e6811]: + - cell [ref=e6812] + - cell "65" [ref=e6813]: "65" + - cell [ref=e6814] + - cell "+" [ref=e6815]: + - generic [ref=e6816]: + + - cell "- [ ] Dangerous action changed" [ref=e6817]: + - code [ref=e6818]: "- [ ] Dangerous action changed" + - row "66 + - [x] Status/evidence/review presentation changed" [ref=e6819]: + - cell [ref=e6820] + - cell "66" [ref=e6821]: "66" + - cell [ref=e6822] + - cell "+" [ref=e6823]: + - generic [ref=e6824]: + + - cell "- [x] Status/evidence/review presentation changed" [ref=e6825]: + - code [ref=e6826]: "- [x] Status/evidence/review presentation changed" + - row "67 + - [x] Workspace/environment context presentation changed" [ref=e6827]: + - cell [ref=e6828] + - cell "67" [ref=e6829]: "67" + - cell [ref=e6830] + - cell "+" [ref=e6831]: + - generic [ref=e6832]: + + - cell "- [x] Workspace/environment context presentation changed" [ref=e6833]: + - code [ref=e6834]: "- [x] Workspace/environment context presentation changed" + - row "68 +" [ref=e6835]: + - cell [ref=e6836] + - cell "68" [ref=e6837]: "68" + - cell [ref=e6838] + - cell "+" [ref=e6839]: + - generic [ref=e6840]: + + - cell [ref=e6841]: + - code + - 'row "69 + ## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" [ref=e6842]': + - cell [ref=e6843] + - cell "69" [ref=e6844]: "69" + - cell [ref=e6845] + - cell "+" [ref=e6846]: + - generic [ref=e6847]: + + - cell "## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" [ref=e6848]: + - code [ref=e6849]: "## UI/Productization Coverage *(mandatory when UI Surface Impact is not \"No UI surface impact\")*" + - row "70 +" [ref=e6850]: + - cell [ref=e6851] + - cell "70" [ref=e6852]: "70" + - cell [ref=e6853] + - cell "+" [ref=e6854]: + - generic [ref=e6855]: + + - cell [ref=e6856]: + - code + - row "71 + - **Route/page/surface**:" [ref=e6857]: + - cell [ref=e6858] + - cell "71" [ref=e6859]: "71" + - cell [ref=e6860] + - cell "+" [ref=e6861]: + - generic [ref=e6862]: + + - cell "- **Route/page/surface**:" [ref=e6863]: + - code [ref=e6864]: "- **Route/page/surface**:" + - 'row "72 + - tenant shell activity hint (`BulkOperationProgress`)" [ref=e6865]': + - cell [ref=e6866] + - cell "72" [ref=e6867]: "72" + - cell [ref=e6868] + - cell "+" [ref=e6869]: + - generic [ref=e6870]: + + - 'cell "- tenant shell activity hint (`BulkOperationProgress`)" [ref=e6871]': + - code [ref=e6872]: "- tenant shell activity hint (`BulkOperationProgress`)" + - 'row "73 + - workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" [ref=e6873]': + - cell [ref=e6874] + - cell "73" [ref=e6875]: "73" + - cell [ref=e6876] + - cell "+" [ref=e6877]: + - generic [ref=e6878]: + + - 'cell "- workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" [ref=e6879]': + - code [ref=e6880]: "- workspace operations hub (`App\\Filament\\Pages\\Monitoring\\Operations`) at `/admin/workspaces/{workspace}/operations`" + - 'row "74 + - canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6881]': + - cell [ref=e6882] + - cell "74" [ref=e6883]: "74" + - cell [ref=e6884] + - cell "+" [ref=e6885]: + - generic [ref=e6886]: + + - 'cell "- canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" [ref=e6887]': + - code [ref=e6888]: "- canonical operation detail (`App\\Filament\\Pages\\Operations\\TenantlessOperationRunViewer`) at `/admin/workspaces/{workspace}/operations/{run}`" + - 'row "75 + - shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" [ref=e6889]': + - cell [ref=e6890] + - cell "75" [ref=e6891]: "75" + - cell [ref=e6892] + - cell "+" [ref=e6893]: + - generic [ref=e6894]: + + - 'cell "- shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" [ref=e6895]': + - code [ref=e6896]: "- shared implementation seam only: `App\\Filament\\Resources\\OperationRunResource` for the reused table/detail payload contract" + - 'row "76 + - **Current or new page archetype**: existing monitoring/workbench family only" [ref=e6897]': + - cell [ref=e6898] + - cell "76" [ref=e6899]: "76" + - cell [ref=e6900] + - cell "+" [ref=e6901]: + - generic [ref=e6902]: + + - 'cell "- **Current or new page archetype**: existing monitoring/workbench family only" [ref=e6903]': + - code [ref=e6904]: "- **Current or new page archetype**: existing monitoring/workbench family only" + - 'row "77 + - **Design depth**: Domain Pattern Surface" [ref=e6905]': + - cell [ref=e6906] + - cell "77" [ref=e6907]: "77" + - cell [ref=e6908] + - cell "+" [ref=e6909]: + - generic [ref=e6910]: + + - 'cell "- **Design depth**: Domain Pattern Surface" [ref=e6911]': + - code [ref=e6912]: "- **Design depth**: Domain Pattern Surface" + - 'row "78 + - **Repo-truth level**: repo-verified" [ref=e6913]': + - cell [ref=e6914] + - cell "78" [ref=e6915]: "78" + - cell [ref=e6916] + - cell "+" [ref=e6917]: + - generic [ref=e6918]: + + - 'cell "- **Repo-truth level**: repo-verified" [ref=e6919]': + - code [ref=e6920]: "- **Repo-truth level**: repo-verified" + - 'row "79 + - **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" [ref=e6921]': + - cell [ref=e6922] + - cell "79" [ref=e6923]: "79" + - cell [ref=e6924] + - cell "+" [ref=e6925]: + - generic [ref=e6926]: + + - 'cell "- **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" [ref=e6927]': + - code [ref=e6928]: "- **Existing pattern reused**: current `OperationRun` monitoring family, current shell activity hint, current monitoring detail banners" + - 'row "80 + - **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" [ref=e6929]': + - cell [ref=e6930] + - cell "80" [ref=e6931]: "80" + - cell [ref=e6932] + - cell "+" [ref=e6933]: + - generic [ref=e6934]: + + - 'cell "- **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" [ref=e6935]': + - code [ref=e6936]: "- **New pattern required**: none; this is a truth-alignment follow-up within the existing pattern family" + - 'row "81 + - **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" [ref=e6937]': + - cell [ref=e6938] + - cell "81" [ref=e6939]: "81" + - cell [ref=e6940] + - cell "+" [ref=e6941]: + - generic [ref=e6942]: + + - 'cell "- **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" [ref=e6943]': + - code [ref=e6944]: "- **Screenshot required**: no; the slice corrects shared wording/derived truth inside existing monitoring surfaces" + - 'row "82 + - **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" [ref=e6945]': + - cell [ref=e6946] + - cell "82" [ref=e6947]: "82" + - cell [ref=e6948] + - cell "+" [ref=e6949]: + - generic [ref=e6950]: + + - 'cell "- **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" [ref=e6951]': + - code [ref=e6952]: "- **Page audit required**: no new page-report identity; existing monitoring family coverage is sufficient" + - 'row "83 + - **Customer-safe review required**: no; operator-only monitoring surfaces" [ref=e6953]': + - cell [ref=e6954] + - cell "83" [ref=e6955]: "83" + - cell [ref=e6956] + - cell "+" [ref=e6957]: + - generic [ref=e6958]: + + - 'cell "- **Customer-safe review required**: no; operator-only monitoring surfaces" [ref=e6959]': + - code [ref=e6960]: "- **Customer-safe review required**: no; operator-only monitoring surfaces" + - 'row "84 + - **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" [ref=e6961]': + - cell [ref=e6962] + - cell "84" [ref=e6963]: "84" + - cell [ref=e6964] + - cell "+" [ref=e6965]: + - generic [ref=e6966]: + + - 'cell "- **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" [ref=e6967]': + - code [ref=e6968]: "- **Dangerous-action review required**: no; no action hierarchy or destructive behavior changes" + - 'row "85 + - **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" [ref=e6969]': + - cell [ref=e6970] + - cell "85" [ref=e6971]: "85" + - cell [ref=e6972] + - cell "+" [ref=e6973]: + - generic [ref=e6974]: + + - 'cell "- **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" [ref=e6975]': + - code [ref=e6976]: "- **Coverage files updated or explicitly not needed**: no new coverage file is required because the existing monitoring-family anchors already cover the touched reachable surfaces: `docs/ui-ux-enterprise-audit/route-inventory.md` (`UI-016`, `UI-017`), `docs/ui-ux-enterprise-audit/page-reports/ui-003-operations.md`, `docs/ui-ux-enterprise-audit/strategic-surfaces.md`, and `specs/313-workspace-environment-context-browser-verification/surface-inventory.md`" + - 'row "86 + - **No-impact rationale when applicable**: N/A" [ref=e6977]': + - cell [ref=e6978] + - cell "86" [ref=e6979]: "86" + - cell [ref=e6980] + - cell "+" [ref=e6981]: + - generic [ref=e6982]: + + - 'cell "- **No-impact rationale when applicable**: N/A" [ref=e6983]': + - code [ref=e6984]: "- **No-impact rationale when applicable**: N/A" + - row "87 +" [ref=e6985]: + - cell [ref=e6986] + - cell "87" [ref=e6987]: "87" + - cell [ref=e6988] + - cell "+" [ref=e6989]: + - generic [ref=e6990]: + + - cell [ref=e6991]: + - code + - 'row "88 + ## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" [ref=e6992]': + - cell [ref=e6993] + - cell "88" [ref=e6994]: "88" + - cell [ref=e6995] + - cell "+" [ref=e6996]: + - generic [ref=e6997]: + + - cell "## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" [ref=e6998]: + - code [ref=e6999]: "## Cross-Cutting / Shared Pattern Reuse *(mandatory)*" + - row "89 +" [ref=e7000]: + - cell [ref=e7001] + - cell "89" [ref=e7002]: "89" + - cell [ref=e7003] + - cell "+" [ref=e7004]: + - generic [ref=e7005]: + + - cell [ref=e7006]: + - code + - 'row "90 + - **Cross-cutting feature?**: yes" [ref=e7007]': + - cell [ref=e7008] + - cell "90" [ref=e7009]: "90" + - cell [ref=e7010] + - cell "+" [ref=e7011]: + - generic [ref=e7012]: + + - 'cell "- **Cross-cutting feature?**: yes" [ref=e7013]': + - code [ref=e7014]: "- **Cross-cutting feature?**: yes" + - 'row "91 + - **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" [ref=e7015]': + - cell [ref=e7016] + - cell "91" [ref=e7017]: "91" + - cell [ref=e7018] + - cell "+" [ref=e7019]: + - generic [ref=e7020]: + + - 'cell "- **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" [ref=e7021]': + - code [ref=e7022]: "- **Interaction class(es)**: status messaging, queue/progress guidance, monitoring detail guidance, shell active-work hint" + - row "92 + - **Systems touched**:" [ref=e7023]: + - cell [ref=e7024] + - cell "92" [ref=e7025]: "92" + - cell [ref=e7026] + - cell "+" [ref=e7027]: + - generic [ref=e7028]: + + - cell "- **Systems touched**:" [ref=e7029]: + - code [ref=e7030]: "- **Systems touched**:" + - 'row "93 + - `OperationRunFreshnessState`" [ref=e7031]': + - cell [ref=e7032] + - cell "93" [ref=e7033]: "93" + - cell [ref=e7034] + - cell "+" [ref=e7035]: + - generic [ref=e7036]: + + - 'cell "- `OperationRunFreshnessState`" [ref=e7037]': + - code [ref=e7038]: "- `OperationRunFreshnessState`" + - 'row "94 + - `OperationRunProgressContract`" [ref=e7039]': + - cell [ref=e7040] + - cell "94" [ref=e7041]: "94" + - cell [ref=e7042] + - cell "+" [ref=e7043]: + - generic [ref=e7044]: + + - 'cell "- `OperationRunProgressContract`" [ref=e7045]': + - code [ref=e7046]: "- `OperationRunProgressContract`" + - 'row "95 + - `RunDurationInsights`" [ref=e7047]': + - cell [ref=e7048] + - cell "95" [ref=e7049]: "95" + - cell [ref=e7050] + - cell "+" [ref=e7051]: + - generic [ref=e7052]: + + - 'cell "- `RunDurationInsights`" [ref=e7053]': + - code [ref=e7054]: "- `RunDurationInsights`" + - 'row "96 + - `OperationUxPresenter`" [ref=e7055]': + - cell [ref=e7056] + - cell "96" [ref=e7057]: "96" + - cell [ref=e7058] + - cell "+" [ref=e7059]: + - generic [ref=e7060]: + + - 'cell "- `OperationUxPresenter`" [ref=e7061]': + - code [ref=e7062]: "- `OperationUxPresenter`" + - row "97 + - current shell banner and canonical monitoring/detail surfaces" [ref=e7063]: + - cell [ref=e7064] + - cell "97" [ref=e7065]: "97" + - cell [ref=e7066] + - cell "+" [ref=e7067]: + - generic [ref=e7068]: + + - cell "- current shell banner and canonical monitoring/detail surfaces" [ref=e7069]: + - code [ref=e7070]: "- current shell banner and canonical monitoring/detail surfaces" + - 'row "98 + - **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" [ref=e7071]': + - cell [ref=e7072] + - cell "98" [ref=e7073]: "98" + - cell [ref=e7074] + - cell "+" [ref=e7075]: + - generic [ref=e7076]: + + - 'cell "- **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" [ref=e7077]': + - code [ref=e7078]: "- **Existing pattern(s) to extend**: current lifecycle policy, freshness derivation, the Spec-270/272 shared progress contract, monitoring detail banner, and shared run-link/presenter paths" + - 'row "99 + - **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" [ref=e7079]': + - cell [ref=e7080] + - cell "99" [ref=e7081]: "99" + - cell [ref=e7082] + - cell "+" [ref=e7083]: + - generic [ref=e7084]: + + - 'cell "- **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" [ref=e7085]': + - code [ref=e7086]: "- **Shared contract / presenter / builder / renderer to reuse**: `OperationRunProgressContract`, `OperationUxPresenter`, `OperationRunFreshnessState`, and current monitoring/view renderer paths" + - 'row "100 + - **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." [ref=e7087]': + - cell [ref=e7088] + - cell "100" [ref=e7089]: "100" + - cell [ref=e7090] + - cell "+" [ref=e7091]: + - generic [ref=e7092]: + + - 'cell "- **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." [ref=e7093]': + - code [ref=e7094]: "- **Why the existing shared path is sufficient or insufficient**: The repo already has the right ownership boundaries, but the generic queue truth is split across multiple helpers that can disagree in wording and emphasis." + - 'row "101 + - **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" [ref=e7095]': + - cell [ref=e7096] + - cell "101" [ref=e7097]: "101" + - cell [ref=e7098] + - cell "+" [ref=e7099]: + - generic [ref=e7100]: + + - 'cell "- **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" [ref=e7101]': + - code [ref=e7102]: "- **Allowed deviation and why**: none by default; if one tiny helper is required to keep existing presenters reviewable, it must remain local to current Ops UX truth and must not become an adapter registry" + - 'row "102 + - **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" [ref=e7103]': + - cell [ref=e7104] + - cell "102" [ref=e7105]: "102" + - cell [ref=e7106] + - cell "+" [ref=e7107]: + - generic [ref=e7108]: + + - 'cell "- **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" [ref=e7109]': + - code [ref=e7110]: "- **Consistency impact**: queued/running/stale wording, progress availability, lifecycle attention, and detail guidance must remain aligned across shell, list, and canonical detail" + - 'row "103 + - **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" [ref=e7111]': + - cell [ref=e7112] + - cell "103" [ref=e7113]: "103" + - cell [ref=e7114] + - cell "+" [ref=e7115]: + - generic [ref=e7116]: + + - 'cell "- **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" [ref=e7117]': + - code [ref=e7118]: "- **Review focus**: no surface may reassure with ordinary queue copy after freshness has already escalated the same active run to stale attention" + - row "104 +" [ref=e7119]: + - cell [ref=e7120] + - cell "104" [ref=e7121]: "104" + - cell [ref=e7122] + - cell "+" [ref=e7123]: + - generic [ref=e7124]: + + - cell [ref=e7125]: + - code + - 'row "105 + ## OperationRun UX Impact *(mandatory)*" [ref=e7126]': + - cell [ref=e7127] + - cell "105" [ref=e7128]: "105" + - cell [ref=e7129] + - cell "+" [ref=e7130]: + - generic [ref=e7131]: + + - cell "## OperationRun UX Impact *(mandatory)*" [ref=e7132]: + - code [ref=e7133]: "## OperationRun UX Impact *(mandatory)*" + - row "106 +" [ref=e7134]: + - cell [ref=e7135] + - cell "106" [ref=e7136]: "106" + - cell [ref=e7137] + - cell "+" [ref=e7138]: + - generic [ref=e7139]: + + - cell [ref=e7140]: + - code + - 'row "107 + - **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e7141]': + - cell [ref=e7142] + - cell "107" [ref=e7143]: "107" + - cell [ref=e7144] + - cell "+" [ref=e7145]: + - generic [ref=e7146]: + + - 'cell "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" [ref=e7147]': + - code [ref=e7148]: "- **Touches OperationRun start/completion/link UX?**: yes, reuse-only" + - 'row "108 + - **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" [ref=e7149]': + - cell [ref=e7150] + - cell "108" [ref=e7151]: "108" + - cell [ref=e7152] + - cell "+" [ref=e7153]: + - generic [ref=e7154]: + + - 'cell "- **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" [ref=e7155]': + - code [ref=e7156]: "- **Shared OperationRun UX contract/layer reused**: current `OperationRun` link, freshness, presenter, and progress helper paths" + - 'row "109 + - **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" [ref=e7157]': + - cell [ref=e7158] + - cell "109" [ref=e7159]: "109" + - cell [ref=e7160] + - cell "+" [ref=e7161]: + - generic [ref=e7162]: + + - 'cell "- **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" [ref=e7163]': + - code [ref=e7164]: "- **Delegated start/completion UX behaviors**: existing queued toasts, canonical run links, browser events, and terminal notification paths remain unchanged" + - 'row "110 + - **Local surface-owned behavior that remains**: density and placement only" [ref=e7165]': + - cell [ref=e7166] + - cell "110" [ref=e7167]: "110" + - cell [ref=e7168] + - cell "+" [ref=e7169]: + - generic [ref=e7170]: + + - 'cell "- **Local surface-owned behavior that remains**: density and placement only" [ref=e7171]': + - code [ref=e7172]: "- **Local surface-owned behavior that remains**: density and placement only" + - 'row "111 + - **Queued DB-notification policy**: unchanged" [ref=e7173]': + - cell [ref=e7174] + - cell "111" [ref=e7175]: "111" + - cell [ref=e7176] + - cell "+" [ref=e7177]: + - generic [ref=e7178]: + + - 'cell "- **Queued DB-notification policy**: unchanged" [ref=e7179]': + - code [ref=e7180]: "- **Queued DB-notification policy**: unchanged" + - 'row "112 + - **Terminal notification path**: unchanged central lifecycle mechanism" [ref=e7181]': + - cell [ref=e7182] + - cell "112" [ref=e7183]: "112" + - cell [ref=e7184] + - cell "+" [ref=e7185]: + - generic [ref=e7186]: + + - 'cell "- **Terminal notification path**: unchanged central lifecycle mechanism" [ref=e7187]': + - code [ref=e7188]: "- **Terminal notification path**: unchanged central lifecycle mechanism" + - 'row "113 + - **Exception required?**: none" [ref=e7189]': + - cell [ref=e7190] + - cell "113" [ref=e7191]: "113" + - cell [ref=e7192] + - cell "+" [ref=e7193]: + - generic [ref=e7194]: + + - 'cell "- **Exception required?**: none" [ref=e7195]': + - code [ref=e7196]: "- **Exception required?**: none" + - row "114 +" [ref=e7197]: + - cell [ref=e7198] + - cell "114" [ref=e7199]: "114" + - cell [ref=e7200] + - cell "+" [ref=e7201]: + - generic [ref=e7202]: + + - cell [ref=e7203]: + - code + - 'row "115 + ## Provider Boundary / Platform Core Check *(mandatory)*" [ref=e7204]': + - cell [ref=e7205] + - cell "115" [ref=e7206]: "115" + - cell [ref=e7207] + - cell "+" [ref=e7208]: + - generic [ref=e7209]: + + - cell "## Provider Boundary / Platform Core Check *(mandatory)*" [ref=e7210]: + - code [ref=e7211]: "## Provider Boundary / Platform Core Check *(mandatory)*" + - row "116 +" [ref=e7212]: + - cell [ref=e7213] + - cell "116" [ref=e7214]: "116" + - cell [ref=e7215] + - cell "+" [ref=e7216]: + - generic [ref=e7217]: + + - cell [ref=e7218]: + - code + - 'row "117 + - **Shared provider/platform boundary touched?**: no" [ref=e7219]': + - cell [ref=e7220] + - cell "117" [ref=e7221]: "117" + - cell [ref=e7222] + - cell "+" [ref=e7223]: + - generic [ref=e7224]: + + - 'cell "- **Shared provider/platform boundary touched?**: no" [ref=e7225]': + - code [ref=e7226]: "- **Shared provider/platform boundary touched?**: no" + - 'row "118 + - **Boundary classification**: N/A" [ref=e7227]': + - cell [ref=e7228] + - cell "118" [ref=e7229]: "118" + - cell [ref=e7230] + - cell "+" [ref=e7231]: + - generic [ref=e7232]: + + - 'cell "- **Boundary classification**: N/A" [ref=e7233]': + - code [ref=e7234]: "- **Boundary classification**: N/A" + - 'row "119 + - **Seams affected**: N/A" [ref=e7235]': + - cell [ref=e7236] + - cell "119" [ref=e7237]: "119" + - cell [ref=e7238] + - cell "+" [ref=e7239]: + - generic [ref=e7240]: + + - 'cell "- **Seams affected**: N/A" [ref=e7241]': + - code [ref=e7242]: "- **Seams affected**: N/A" + - 'row "120 + - **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" [ref=e7243]': + - cell [ref=e7244] + - cell "120" [ref=e7245]: "120" + - cell [ref=e7246] + - cell "+" [ref=e7247]: + - generic [ref=e7248]: + + - 'cell "- **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" [ref=e7249]': + - code [ref=e7250]: "- **Neutral platform terms preserved or introduced**: `operation`, `queued`, `running`, `lifecycle window`, `review worker health`" + - 'row "121 + - **Provider-specific semantics retained and why**: none" [ref=e7251]': + - cell [ref=e7252] + - cell "121" [ref=e7253]: "121" + - cell [ref=e7254] + - cell "+" [ref=e7255]: + - generic [ref=e7256]: + + - 'cell "- **Provider-specific semantics retained and why**: none" [ref=e7257]': + - code [ref=e7258]: "- **Provider-specific semantics retained and why**: none" + - 'row "122 + - **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" [ref=e7259]': + - cell [ref=e7260] + - cell "122" [ref=e7261]: "122" + - cell [ref=e7262] + - cell "+" [ref=e7263]: + - generic [ref=e7264]: + + - 'cell "- **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" [ref=e7265]': + - code [ref=e7266]: "- **Why this does not deepen provider coupling accidentally**: the slice works entirely on platform-owned `OperationRun` truth and existing shared monitoring helpers" + - 'row "123 + - **Follow-up path**: none" [ref=e7267]': + - cell [ref=e7268] + - cell "123" [ref=e7269]: "123" + - cell [ref=e7270] + - cell "+" [ref=e7271]: + - generic [ref=e7272]: + + - 'cell "- **Follow-up path**: none" [ref=e7273]': + - code [ref=e7274]: "- **Follow-up path**: none" + - row "124 +" [ref=e7275]: + - cell [ref=e7276] + - cell "124" [ref=e7277]: "124" + - cell [ref=e7278] + - cell "+" [ref=e7279]: + - generic [ref=e7280]: + + - cell [ref=e7281]: + - code + - 'row "125 + ## UI / Surface Guardrail Impact *(mandatory)*" [ref=e7282]': + - cell [ref=e7283] + - cell "125" [ref=e7284]: "125" + - cell [ref=e7285] + - cell "+" [ref=e7286]: + - generic [ref=e7287]: + + - cell "## UI / Surface Guardrail Impact *(mandatory)*" [ref=e7288]: + - code [ref=e7289]: "## UI / Surface Guardrail Impact *(mandatory)*" + - row "126 +" [ref=e7290]: + - cell [ref=e7291] + - cell "126" [ref=e7292]: "126" + - cell [ref=e7293] + - cell "+" [ref=e7294]: + - generic [ref=e7295]: + + - cell [ref=e7296]: + - code + - 'row "127 + | Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" [ref=e7297]': + - cell [ref=e7298] + - cell "127" [ref=e7299]: "127" + - cell [ref=e7300] + - cell "+" [ref=e7301]: + - generic [ref=e7302]: + + - 'cell "| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" [ref=e7303]': + - code [ref=e7304]: "| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |" + - row "128 + |---|---|---|---|---|---|---|" [ref=e7305]: + - cell [ref=e7306] + - cell "128" [ref=e7307]: "128" + - cell [ref=e7308] + - cell "+" [ref=e7309]: + - generic [ref=e7310]: + + - cell "|---|---|---|---|---|---|---|" [ref=e7311]: + - code [ref=e7312]: "|---|---|---|---|---|---|---|" + - row "129 + | Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" [ref=e7313]: + - cell [ref=e7314] + - cell "129" [ref=e7315]: "129" + - cell [ref=e7316] + - cell "+" [ref=e7317]: + - generic [ref=e7318]: + + - cell "| Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" [ref=e7319]: + - code [ref=e7320]: "| Tenant shell activity hint | yes | Native Filament + existing Livewire view | shared active-work hint family | shell, page | no | no new action or route |" + - row "130 + | Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" [ref=e7321]: + - cell [ref=e7322] + - cell "130" [ref=e7323]: "130" + - cell [ref=e7324] + - cell "+" [ref=e7325]: + - generic [ref=e7326]: + + - cell "| Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" [ref=e7327]: + - code [ref=e7328]: "| Operations list / resource detail summary | yes | Native Filament resource/detail | shared monitoring family | page, detail | no | wording-only inside existing collection/detail |" + - row "131 + | Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" [ref=e7329]: + - cell [ref=e7330] + - cell "131" [ref=e7331]: "131" + - cell [ref=e7332] + - cell "+" [ref=e7333]: + - generic [ref=e7334]: + + - cell "| Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" [ref=e7335]: + - code [ref=e7336]: "| Canonical tenantless run viewer banners | yes | Native Filament page | shared monitoring detail family | detail | no | no new diagnostics section family |" + - row "132 +" [ref=e7337]: + - cell [ref=e7338] + - cell "132" [ref=e7339]: "132" + - cell [ref=e7340] + - cell "+" [ref=e7341]: + - generic [ref=e7342]: + + - cell [ref=e7343]: + - code + - 'row "133 + ## Decision-First Surface Role *(mandatory)*" [ref=e7344]': + - cell [ref=e7345] + - cell "133" [ref=e7346]: "133" + - cell [ref=e7347] + - cell "+" [ref=e7348]: + - generic [ref=e7349]: + + - cell "## Decision-First Surface Role *(mandatory)*" [ref=e7350]: + - code [ref=e7351]: "## Decision-First Surface Role *(mandatory)*" + - row "134 +" [ref=e7352]: + - cell [ref=e7353] + - cell "134" [ref=e7354]: "134" + - cell [ref=e7355] + - cell "+" [ref=e7356]: + - generic [ref=e7357]: + + - cell [ref=e7358]: + - code + - row "135 + | Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" [ref=e7359]: + - cell [ref=e7360] + - cell "135" [ref=e7361]: "135" + - cell [ref=e7362] + - cell "+" [ref=e7363]: + - generic [ref=e7364]: + + - cell "| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" [ref=e7365]: + - code [ref=e7366]: "| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |" + - row "136 + |---|---|---|---|---|---|---|---|" [ref=e7367]: + - cell [ref=e7368] + - cell "136" [ref=e7369]: "136" + - cell [ref=e7370] + - cell "+" [ref=e7371]: + - generic [ref=e7372]: + + - cell "|---|---|---|---|---|---|---|---|" [ref=e7373]: + - code [ref=e7374]: "|---|---|---|---|---|---|---|---|" + - row "137 + | Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" [ref=e7375]: + - cell [ref=e7376] + - cell "137" [ref=e7377]: "137" + - cell [ref=e7378] + - cell "+" [ref=e7379]: + - generic [ref=e7380]: + + - cell "| Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" [ref=e7381]: + - code [ref=e7382]: "| Tenant shell activity hint | Secondary Context Surface | Decide whether an active run needs inspection now | active-state truth, one open link, honest progress availability | full diagnostics stay on canonical monitoring/detail pages | secondary because it supports ongoing work rather than owning diagnostics | follows existing start-surface workflow | removes false calmness |" + - row "138 + | Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" [ref=e7383]: + - cell [ref=e7384] + - cell "138" [ref=e7385]: "138" + - cell [ref=e7386] + - cell "+" [ref=e7387]: + - generic [ref=e7388]: + + - cell "| Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" [ref=e7389]: + - code [ref=e7390]: "| Operations list | Primary Decision Surface | Decide which active run needs inspection first | lifecycle attention, queue truth, scope, and run identity | full detail after drill-through | primary because it is the canonical monitoring queue | aligns with current monitoring triage | removes open-every-row guesswork |" + - row "139 + | Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" [ref=e7391]: + - cell [ref=e7392] + - cell "139" [ref=e7393]: "139" + - cell [ref=e7394] + - cell "+" [ref=e7395]: + - generic [ref=e7396]: + + - cell "| Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" [ref=e7397]: + - code [ref=e7398]: "| Canonical run detail | Tertiary Evidence / Diagnostics Surface | Confirm what the stale or active state really means | one honest lifecycle explanation before deep diagnostics | raw context, history, evidence, and related links | tertiary because inspection already happened | preserves current detail role | removes banner/guidance contradiction |" + - row "140 +" [ref=e7399]: + - cell [ref=e7400] + - cell "140" [ref=e7401]: "140" + - cell [ref=e7402] + - cell "+" [ref=e7403]: + - generic [ref=e7404]: + + - cell [ref=e7405]: + - code + - 'row "141 + ## Audience-Aware Disclosure *(mandatory)*" [ref=e7406]': + - cell [ref=e7407] + - cell "141" [ref=e7408]: "141" + - cell [ref=e7409] + - cell "+" [ref=e7410]: + - generic [ref=e7411]: + + - cell "## Audience-Aware Disclosure *(mandatory)*" [ref=e7412]: + - code [ref=e7413]: "## Audience-Aware Disclosure *(mandatory)*" + - row "142 +" [ref=e7414]: + - cell [ref=e7415] + - cell "142" [ref=e7416]: "142" + - cell [ref=e7417] + - cell "+" [ref=e7418]: + - generic [ref=e7419]: + + - cell [ref=e7420]: + - code + - row "143 + | Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" [ref=e7421]: + - cell [ref=e7422] + - cell "143" [ref=e7423]: "143" + - cell [ref=e7424] + - cell "+" [ref=e7425]: + - generic [ref=e7426]: + + - cell "| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" [ref=e7427]: + - code [ref=e7428]: "| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |" + - row "144 + |---|---|---|---|---|---|---|---|" [ref=e7429]: + - cell [ref=e7430] + - cell "144" [ref=e7431]: "144" + - cell [ref=e7432] + - cell "+" [ref=e7433]: + - generic [ref=e7434]: + + - cell "|---|---|---|---|---|---|---|---|" [ref=e7435]: + - code [ref=e7436]: "|---|---|---|---|---|---|---|---|" + - 'row "145 + | Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" [ref=e7437]': + - cell [ref=e7438] + - cell "145" [ref=e7439]: "145" + - cell [ref=e7440] + - cell "+" [ref=e7441]: + - generic [ref=e7442]: + + - 'cell "| Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" [ref=e7443]': + - code [ref=e7444]: "| Tenant shell activity hint | operator-MSP | active-state summary plus one open action | minimal guidance only | raw/support data stays off-surface | `View operation` or current collective review action | raw detail stays on canonical monitoring surfaces | do not repeat stale explanation multiple ways |" + - row "146 + | Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" [ref=e7445]: + - cell [ref=e7446] + - cell "146" [ref=e7447]: "146" + - cell [ref=e7448] + - cell "+" [ref=e7449]: + - generic [ref=e7450]: + + - cell "| Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" [ref=e7451]: + - code [ref=e7452]: "| Operations list | operator-MSP | row-level stale/queued truth and scope | detail remains secondary | raw payloads stay on detail | row open | raw and related evidence stay on detail | one row summary, not multiple competing summaries |" + - row "147 + | Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" [ref=e7453]: + - cell [ref=e7454] + - cell "147" [ref=e7455]: "147" + - cell [ref=e7456] + - cell "+" [ref=e7457]: + - generic [ref=e7458]: + + - cell "| Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" [ref=e7459]: + - code [ref=e7460]: "| Canonical run detail | operator-MSP, support-platform | one honest lifecycle banner | diagnostics sections below the banner | raw context remains lower-priority | existing return/open actions | support/raw detail remains secondary to the top summary | lifecycle banner and queue guidance must not disagree |" + - row "148 +" [ref=e7461]: + - cell [ref=e7462] + - cell "148" [ref=e7463]: "148" + - cell [ref=e7464] + - cell "+" [ref=e7465]: + - generic [ref=e7466]: + + - cell [ref=e7467]: + - code + - 'row "149 + ## UI/UX Surface Classification *(mandatory)*" [ref=e7468]': + - cell [ref=e7469] + - cell "149" [ref=e7470]: "149" + - cell [ref=e7471] + - cell "+" [ref=e7472]: + - generic [ref=e7473]: + + - cell "## UI/UX Surface Classification *(mandatory)*" [ref=e7474]: + - code [ref=e7475]: "## UI/UX Surface Classification *(mandatory)*" + - row "150 +" [ref=e7476]: + - cell [ref=e7477] + - cell "150" [ref=e7478]: "150" + - cell [ref=e7479] + - cell "+" [ref=e7480]: + - generic [ref=e7481]: + + - cell [ref=e7482]: + - code + - row "151 + | Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" [ref=e7483]: + - cell [ref=e7484] + - cell "151" [ref=e7485]: "151" + - cell [ref=e7486] + - cell "+" [ref=e7487]: + - generic [ref=e7488]: + + - cell "| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" [ref=e7489]: + - code [ref=e7490]: "| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |" + - row "152 + |---|---|---|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7491]: + - cell [ref=e7492] + - cell "152" [ref=e7493]: "152" + - cell [ref=e7494] + - cell "+" [ref=e7495]: + - generic [ref=e7496]: + + - cell "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7497]: + - code [ref=e7498]: "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|" + - 'row "153 + | Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" [ref=e7499]': + - cell [ref=e7500] + - cell "153" [ref=e7501]: "153" + - cell [ref=e7502] + - cell "+" [ref=e7503]: + - generic [ref=e7504]: + + - 'cell "| Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" [ref=e7505]': + - code [ref=e7506]: "| Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the active run if guidance escalates | explicit open link | forbidden | existing shell secondary actions only | none | `/admin/workspaces/{workspace}/operations` with current contextual prefilter rules | `/admin/workspaces/{workspace}/operations/{run}` | current tenant/workspace shell context | Operation | whether the run is ordinary active work or already stale | none |" + - 'row "154 + | Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" [ref=e7507]': + - cell [ref=e7508] + - cell "154" [ref=e7509]: "154" + - cell [ref=e7510] + - cell "+" [ref=e7511]: + - generic [ref=e7512]: + + - 'cell "| Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" [ref=e7513]': + - code [ref=e7514]: "| Operations list | List / Table / Monitoring | Read-only monitoring registry | Open the run that needs follow-up | full-row open | required | existing table controls only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope and current filters | Operation run | honest queued/running lifecycle truth | none |" + - 'row "155 + | Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" [ref=e7515]': + - cell [ref=e7516] + - cell "155" [ref=e7517]: "155" + - cell [ref=e7518] + - cell "+" [ref=e7519]: + - generic [ref=e7520]: + + - 'cell "| Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" [ref=e7521]': + - code [ref=e7522]: "| Canonical run detail | Record / Detail / Monitoring | Diagnostics-first detail surface | Inspect lifecycle truth before deeper diagnosis | canonical detail page | N/A | existing header/related links only | none | `/admin/workspaces/{workspace}/operations` | `/admin/workspaces/{workspace}/operations/{run}` | workspace scope plus entitled tenant context | Operation run | honest active-state explanation | none |" + - row "156 +" [ref=e7523]: + - cell [ref=e7524] + - cell "156" [ref=e7525]: "156" + - cell [ref=e7526] + - cell "+" [ref=e7527]: + - generic [ref=e7528]: + + - cell [ref=e7529]: + - code + - 'row "157 + ## Operator Surface Contract *(mandatory)*" [ref=e7530]': + - cell [ref=e7531] + - cell "157" [ref=e7532]: "157" + - cell [ref=e7533] + - cell "+" [ref=e7534]: + - generic [ref=e7535]: + + - cell "## Operator Surface Contract *(mandatory)*" [ref=e7536]: + - code [ref=e7537]: "## Operator Surface Contract *(mandatory)*" + - row "158 +" [ref=e7538]: + - cell [ref=e7539] + - cell "158" [ref=e7540]: "158" + - cell [ref=e7541] + - cell "+" [ref=e7542]: + - generic [ref=e7543]: + + - cell [ref=e7544]: + - code + - row "159 + | Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" [ref=e7545]: + - cell [ref=e7546] + - cell "159" [ref=e7547]: "159" + - cell [ref=e7548] + - cell "+" [ref=e7549]: + - generic [ref=e7550]: + + - cell "| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" [ref=e7551]: + - code [ref=e7552]: "| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |" + - row "160 + |---|---|---|---|---|---|---|---|---|---|---|" [ref=e7553]: + - cell [ref=e7554] + - cell "160" [ref=e7555]: "160" + - cell [ref=e7556] + - cell "+" [ref=e7557]: + - generic [ref=e7558]: + + - cell "|---|---|---|---|---|---|---|---|---|---|---|" [ref=e7559]: + - code [ref=e7560]: "|---|---|---|---|---|---|---|---|---|---|---|" + - row "161 + | Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" [ref=e7561]: + - cell [ref=e7562] + - cell "161" [ref=e7563]: "161" + - cell [ref=e7564] + - cell "+" [ref=e7565]: + - generic [ref=e7566]: + + - cell "| Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" [ref=e7567]: + - code [ref=e7568]: "| Tenant shell activity hint | tenant operator | Decide whether to inspect active work now | shell hint | Is this active work still ordinary, or is it already stale? | label, status, progress availability, open link | deep diagnostics remain elsewhere | lifecycle, freshness, progress availability | none | current open/review action | none |" + - row "162 + | Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" [ref=e7569]: + - cell [ref=e7570] + - cell "162" [ref=e7571]: "162" + - cell [ref=e7572] + - cell "+" [ref=e7573]: + - generic [ref=e7574]: + + - cell "| Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" [ref=e7575]: + - code [ref=e7576]: "| Operations list | workspace operator | Prioritize which active run to inspect | monitoring registry | Which run is actually waiting, progressing, or already stale? | row summary, scope, lifecycle attention | raw payloads on detail | lifecycle, freshness, queue truth | none | open row | none |" + - row "163 + | Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" [ref=e7577]: + - cell [ref=e7578] + - cell "163" [ref=e7579]: "163" + - cell [ref=e7580] + - cell "+" [ref=e7581]: + - generic [ref=e7582]: + + - cell "| Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" [ref=e7583]: + - code [ref=e7584]: "| Canonical run detail | workspace operator | Confirm generic lifecycle truth before diagnosing | detail surface | Why does this run read as stale or still-active? | one lifecycle banner and queue guidance | raw context, failure payloads, related artifacts | lifecycle, freshness, legitimacy evidence | none | existing navigation and related links | none |" + - row "164 +" [ref=e7585]: + - cell [ref=e7586] + - cell "164" [ref=e7587]: "164" + - cell [ref=e7588] + - cell "+" [ref=e7589]: + - generic [ref=e7590]: + + - cell [ref=e7591]: + - code + - 'row "165 + ## Proportionality Review *(mandatory when structural complexity is introduced)*" [ref=e7592]': + - cell [ref=e7593] + - cell "165" [ref=e7594]: "165" + - cell [ref=e7595] + - cell "+" [ref=e7596]: + - generic [ref=e7597]: + + - cell "## Proportionality Review *(mandatory when structural complexity is introduced)*" [ref=e7598]: + - code [ref=e7599]: "## Proportionality Review *(mandatory when structural complexity is introduced)*" + - row "166 +" [ref=e7600]: + - cell [ref=e7601] + - cell "166" [ref=e7602]: "166" + - cell [ref=e7603] + - cell "+" [ref=e7604]: + - generic [ref=e7605]: + + - cell [ref=e7606]: + - code + - 'row "167 + - **New source of truth?**: no" [ref=e7607]': + - cell [ref=e7608] + - cell "167" [ref=e7609]: "167" + - cell [ref=e7610] + - cell "+" [ref=e7611]: + - generic [ref=e7612]: + + - 'cell "- **New source of truth?**: no" [ref=e7613]': + - code [ref=e7614]: "- **New source of truth?**: no" + - 'row "168 + - **New persisted entity/table/artifact?**: no" [ref=e7615]': + - cell [ref=e7616] + - cell "168" [ref=e7617]: "168" + - cell [ref=e7618] + - cell "+" [ref=e7619]: + - generic [ref=e7620]: + + - 'cell "- **New persisted entity/table/artifact?**: no" [ref=e7621]': + - code [ref=e7622]: "- **New persisted entity/table/artifact?**: no" + - 'row "169 + - **New abstraction?**: no by default; prefer extending existing helpers" [ref=e7623]': + - cell [ref=e7624] + - cell "169" [ref=e7625]: "169" + - cell [ref=e7626] + - cell "+" [ref=e7627]: + - generic [ref=e7628]: + + - 'cell "- **New abstraction?**: no by default; prefer extending existing helpers" [ref=e7629]': + - code [ref=e7630]: "- **New abstraction?**: no by default; prefer extending existing helpers" + - 'row "170 + - **New enum/state/reason family?**: no" [ref=e7631]': + - cell [ref=e7632] + - cell "170" [ref=e7633]: "170" + - cell [ref=e7634] + - cell "+" [ref=e7635]: + - generic [ref=e7636]: + + - 'cell "- **New enum/state/reason family?**: no" [ref=e7637]': + - code [ref=e7638]: "- **New enum/state/reason family?**: no" + - 'row "171 + - **New cross-domain UI framework/taxonomy?**: no" [ref=e7639]': + - cell [ref=e7640] + - cell "171" [ref=e7641]: "171" + - cell [ref=e7642] + - cell "+" [ref=e7643]: + - generic [ref=e7644]: + + - 'cell "- **New cross-domain UI framework/taxonomy?**: no" [ref=e7645]': + - code [ref=e7646]: "- **New cross-domain UI framework/taxonomy?**: no" + - 'row "172 + - **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" [ref=e7647]': + - cell [ref=e7648] + - cell "172" [ref=e7649]: "172" + - cell [ref=e7650] + - cell "+" [ref=e7651]: + - generic [ref=e7652]: + + - 'cell "- **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" [ref=e7653]': + - code [ref=e7654]: "- **Current operator problem**: current generic queue truth can contradict itself across existing shared monitoring surfaces" + - 'row "173 + - **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" [ref=e7655]': + - cell [ref=e7656] + - cell "173" [ref=e7657]: "173" + - cell [ref=e7658] + - cell "+" [ref=e7659]: + - generic [ref=e7660]: + + - 'cell "- **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" [ref=e7661]': + - code [ref=e7662]: "- **Existing structure is insufficient because**: lifecycle, freshness, progress, and queue guidance currently live in separate helpers that can drift in wording and emphasis" + - 'row "174 + - **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" [ref=e7663]': + - cell [ref=e7664] + - cell "174" [ref=e7665]: "174" + - cell [ref=e7666] + - cell "+" [ref=e7667]: + - generic [ref=e7668]: + + - 'cell "- **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" [ref=e7669]': + - code [ref=e7670]: "- **Narrowest correct implementation**: align existing shared helpers and current monitoring renderers without adding a new framework, status family, or persistence layer" + - 'row "175 + - **Ownership cost**: bounded shared-helper review burden plus focused tests" [ref=e7671]': + - cell [ref=e7672] + - cell "175" [ref=e7673]: "175" + - cell [ref=e7674] + - cell "+" [ref=e7675]: + - generic [ref=e7676]: + + - 'cell "- **Ownership cost**: bounded shared-helper review burden plus focused tests" [ref=e7677]': + - code [ref=e7678]: "- **Ownership cost**: bounded shared-helper review burden plus focused tests" + - 'row "176 + - **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" [ref=e7679]': + - cell [ref=e7680] + - cell "176" [ref=e7681]: "176" + - cell [ref=e7682] + - cell "+" [ref=e7683]: + - generic [ref=e7684]: + + - 'cell "- **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" [ref=e7685]': + - code [ref=e7686]: "- **Alternative intentionally rejected**: a new reconciliation framework or queue-health persistence layer was rejected because the current issue is derived wording drift, not missing stored truth" + - 'row "177 + - **Release truth**: current-release operator-trust correction" [ref=e7687]': + - cell [ref=e7688] + - cell "177" [ref=e7689]: "177" + - cell [ref=e7690] + - cell "+" [ref=e7691]: + - generic [ref=e7692]: + + - 'cell "- **Release truth**: current-release operator-trust correction" [ref=e7693]': + - code [ref=e7694]: "- **Release truth**: current-release operator-trust correction" + - row "178 +" [ref=e7695]: + - cell [ref=e7696] + - cell "178" [ref=e7697]: "178" + - cell [ref=e7698] + - cell "+" [ref=e7699]: + - generic [ref=e7700]: + + - cell [ref=e7701]: + - code + - 'row "179 + ## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" [ref=e7702]': + - cell [ref=e7703] + - cell "179" [ref=e7704]: "179" + - cell [ref=e7705] + - cell "+" [ref=e7706]: + - generic [ref=e7707]: + + - cell "## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" [ref=e7708]: + - code [ref=e7709]: "## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*" + - row "180 +" [ref=e7710]: + - cell [ref=e7711] + - cell "180" [ref=e7712]: "180" + - cell [ref=e7713] + - cell "+" [ref=e7714]: + - generic [ref=e7715]: + + - cell [ref=e7716]: + - code + - 'row "181 + - **Test purpose / classification**: Unit + Feature" [ref=e7717]': + - cell [ref=e7718] + - cell "181" [ref=e7719]: "181" + - cell [ref=e7720] + - cell "+" [ref=e7721]: + - generic [ref=e7722]: + + - 'cell "- **Test purpose / classification**: Unit + Feature" [ref=e7723]': + - code [ref=e7724]: "- **Test purpose / classification**: Unit + Feature" + - 'row "182 + - **Validation lane(s)**: fast-feedback, confidence" [ref=e7725]': + - cell [ref=e7726] + - cell "182" [ref=e7727]: "182" + - cell [ref=e7728] + - cell "+" [ref=e7729]: + - generic [ref=e7730]: + + - 'cell "- **Validation lane(s)**: fast-feedback, confidence" [ref=e7731]': + - code [ref=e7732]: "- **Validation lane(s)**: fast-feedback, confidence" + - 'row "183 + - **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" [ref=e7733]': + - cell [ref=e7734] + - cell "183" [ref=e7735]: "183" + - cell [ref=e7736] + - cell "+" [ref=e7737]: + - generic [ref=e7738]: + + - 'cell "- **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" [ref=e7739]': + - code [ref=e7740]: "- **Why this classification and these lanes are sufficient**: the feature changes derived queue truth and current rendered monitoring output; focused unit and feature proof are sufficient without a new browser or heavy-governance lane" + - row "184 + - **New or expanded test families**:" [ref=e7741]: + - cell [ref=e7742] + - cell "184" [ref=e7743]: "184" + - cell [ref=e7744] + - cell "+" [ref=e7745]: + - generic [ref=e7746]: + + - cell "- **New or expanded test families**:" [ref=e7747]: + - code [ref=e7748]: "- **New or expanded test families**:" + - 'row "185 + - `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7749]': + - cell [ref=e7750] + - cell "185" [ref=e7751]: "185" + - cell [ref=e7752] + - cell "+" [ref=e7753]: + - generic [ref=e7754]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7755]': + - code [ref=e7756]: "- `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "186 + - `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" [ref=e7757]': + - cell [ref=e7758] + - cell "186" [ref=e7759]: "186" + - cell [ref=e7760] + - cell "+" [ref=e7761]: + - generic [ref=e7762]: + + - 'cell "- `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" [ref=e7763]': + - code [ref=e7764]: "- `apps/platform/tests/Unit/Support/OpsUx/RunDurationInsightsTest.php` or adjacent focused unit coverage if the repo keeps these assertions in an existing file" + - 'row "187 + - `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e7765]': + - cell [ref=e7766] + - cell "187" [ref=e7767]: "187" + - cell [ref=e7768] + - cell "+" [ref=e7769]: + - generic [ref=e7770]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e7771]': + - code [ref=e7772]: "- `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" + - 'row "188 + - `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" [ref=e7773]': + - cell [ref=e7774] + - cell "188" [ref=e7775]: "188" + - cell [ref=e7776] + - cell "+" [ref=e7777]: + - generic [ref=e7778]: + + - 'cell "- `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" [ref=e7779]': + - code [ref=e7780]: "- `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`" + - 'row "189 + - `apps/platform/tests/Feature/MonitoringOperationsTest.php`" [ref=e7781]': + - cell [ref=e7782] + - cell "189" [ref=e7783]: "189" + - cell [ref=e7784] + - cell "+" [ref=e7785]: + - generic [ref=e7786]: + + - 'cell "- `apps/platform/tests/Feature/MonitoringOperationsTest.php`" [ref=e7787]': + - code [ref=e7788]: "- `apps/platform/tests/Feature/MonitoringOperationsTest.php`" + - 'row "190 + - `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" [ref=e7789]': + - cell [ref=e7790] + - cell "190" [ref=e7791]: "190" + - cell [ref=e7792] + - cell "+" [ref=e7793]: + - generic [ref=e7794]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" [ref=e7795]': + - code [ref=e7796]: "- `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`" + - 'row "191 + - `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e7797]': + - cell [ref=e7798] + - cell "191" [ref=e7799]: "191" + - cell [ref=e7800] + - cell "+" [ref=e7801]: + - generic [ref=e7802]: + + - 'cell "- `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e7803]': + - code [ref=e7804]: "- `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`" + - 'row "192 + - `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" [ref=e7805]': + - cell [ref=e7806] + - cell "192" [ref=e7807]: "192" + - cell [ref=e7808] + - cell "+" [ref=e7809]: + - generic [ref=e7810]: + + - 'cell "- `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" [ref=e7811]': + - code [ref=e7812]: "- `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`" + - 'row "193 + - `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7813]': + - cell [ref=e7814] + - cell "193" [ref=e7815]: "193" + - cell [ref=e7816] + - cell "+" [ref=e7817]: + - generic [ref=e7818]: + + - 'cell "- `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7819]': + - code [ref=e7820]: "- `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "194 + - **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" [ref=e7821]': + - cell [ref=e7822] + - cell "194" [ref=e7823]: "194" + - cell [ref=e7824] + - cell "+" [ref=e7825]: + - generic [ref=e7826]: + + - 'cell "- **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" [ref=e7827]': + - code [ref=e7828]: "- **Fixture / helper cost impact**: low to moderate; reuse existing `OperationRun` factories, workspace membership helpers, and monitoring fixtures only" + - 'row "195 + - **Heavy-family visibility / justification**: none" [ref=e7829]': + - cell [ref=e7830] + - cell "195" [ref=e7831]: "195" + - cell [ref=e7832] + - cell "+" [ref=e7833]: + - generic [ref=e7834]: + + - 'cell "- **Heavy-family visibility / justification**: none" [ref=e7835]': + - code [ref=e7836]: "- **Heavy-family visibility / justification**: none" + - 'row "196 + - **Special surface test profile**: monitoring-state-page plus shared-detail-family" [ref=e7837]': + - cell [ref=e7838] + - cell "196" [ref=e7839]: "196" + - cell [ref=e7840] + - cell "+" [ref=e7841]: + - generic [ref=e7842]: + + - 'cell "- **Special surface test profile**: monitoring-state-page plus shared-detail-family" [ref=e7843]': + - code [ref=e7844]: "- **Special surface test profile**: monitoring-state-page plus shared-detail-family" + - 'row "197 + - **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" [ref=e7845]': + - cell [ref=e7846] + - cell "197" [ref=e7847]: "197" + - cell [ref=e7848] + - cell "+" [ref=e7849]: + - generic [ref=e7850]: + + - 'cell "- **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" [ref=e7851]': + - code [ref=e7852]: "- **Standard-native relief or required special coverage**: feature coverage is sufficient; no browser smoke is required unless implementation later proves a render-only regression that unit/feature coverage cannot catch" + - 'row "198 + - **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" [ref=e7853]': + - cell [ref=e7854] + - cell "198" [ref=e7855]: "198" + - cell [ref=e7856] + - cell "+" [ref=e7857]: + - generic [ref=e7858]: + + - 'cell "- **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" [ref=e7859]': + - code [ref=e7860]: "- **Reviewer handoff**: reviewers must confirm the same stale run no longer mixes stale attention with ordinary queue/progress reassurance on shell, list, and detail surfaces" + - 'row "199 + - **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" [ref=e7861]': + - cell [ref=e7862] + - cell "199" [ref=e7863]: "199" + - cell [ref=e7864] + - cell "+" [ref=e7865]: + - generic [ref=e7866]: + + - 'cell "- **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" [ref=e7867]': + - code [ref=e7868]: "- **Budget / baseline / trend impact**: none expected beyond small feature-local coverage growth" + - 'row "200 + - **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" [ref=e7869]': + - cell [ref=e7870] + - cell "200" [ref=e7871]: "200" + - cell [ref=e7872] + - cell "+" [ref=e7873]: + - generic [ref=e7874]: + + - 'cell "- **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" [ref=e7875]': + - code [ref=e7876]: "- **Escalation needed**: `reject-or-split` if the slice expands into new persistence, adapter orchestration, or queue runtime redesign" + - 'row "201 + - **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e7877]': + - cell [ref=e7878] + - cell "201" [ref=e7879]: "201" + - cell [ref=e7880] + - cell "+" [ref=e7881]: + - generic [ref=e7882]: + + - 'cell "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" [ref=e7883]': + - code [ref=e7884]: "- **Active feature PR close-out entry**: Guardrail / Smoke Coverage" + - row "202 + - **Planned validation commands**:" [ref=e7885]: + - cell [ref=e7886] + - cell "202" [ref=e7887]: "202" + - cell [ref=e7888] + - cell "+" [ref=e7889]: + - generic [ref=e7890]: + + - cell "- **Planned validation commands**:" [ref=e7891]: + - code [ref=e7892]: "- **Planned validation commands**:" + - 'row "203 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7893]': + - cell [ref=e7894] + - cell "203" [ref=e7895]: "203" + - cell [ref=e7896] + - cell "+" [ref=e7897]: + - generic [ref=e7898]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e7899]': + - code [ref=e7900]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "204 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7901]': + - cell [ref=e7902] + - cell "204" [ref=e7903]: "204" + - cell [ref=e7904] + - cell "+" [ref=e7905]: + - generic [ref=e7906]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e7907]': + - code [ref=e7908]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "205 + - `git diff --check`" [ref=e7909]': + - cell [ref=e7910] + - cell "205" [ref=e7911]: "205" + - cell [ref=e7912] + - cell "+" [ref=e7913]: + - generic [ref=e7914]: + + - 'cell "- `git diff --check`" [ref=e7915]': + - code [ref=e7916]: "- `git diff --check`" + - row "206 +" [ref=e7917]: + - cell [ref=e7918] + - cell "206" [ref=e7919]: "206" + - cell [ref=e7920] + - cell "+" [ref=e7921]: + - generic [ref=e7922]: + + - cell [ref=e7923]: + - code + - 'row "207 + ## User Scenarios & Testing *(mandatory)*" [ref=e7924]': + - cell [ref=e7925] + - cell "207" [ref=e7926]: "207" + - cell [ref=e7927] + - cell "+" [ref=e7928]: + - generic [ref=e7929]: + + - cell "## User Scenarios & Testing *(mandatory)*" [ref=e7930]: + - code [ref=e7931]: "## User Scenarios & Testing *(mandatory)*" + - row "208 +" [ref=e7932]: + - cell [ref=e7933] + - cell "208" [ref=e7934]: "208" + - cell [ref=e7935] + - cell "+" [ref=e7936]: + - generic [ref=e7937]: + + - cell [ref=e7938]: + - code + - 'row "209 + ### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e7939]': + - cell [ref=e7940] + - cell "209" [ref=e7941]: "209" + - cell [ref=e7942] + - cell "+" [ref=e7943]: + - generic [ref=e7944]: + + - 'cell "### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e7945]': + - code [ref=e7946]: "### User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" + - row "210 +" [ref=e7947]: + - cell [ref=e7948] + - cell "210" [ref=e7949]: "210" + - cell [ref=e7950] + - cell "+" [ref=e7951]: + - generic [ref=e7952]: + + - cell [ref=e7953]: + - code + - row "211 + As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state." [ref=e7954]: + - cell [ref=e7955] + - cell "211" [ref=e7956]: "211" + - cell [ref=e7957] + - cell "+" [ref=e7958]: + - generic [ref=e7959]: + + - cell "As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state." [ref=e7960]: + - code [ref=e7961]: As an operator, I need active monitoring surfaces to distinguish normal queued/running work from stale lifecycle drift without mixing calm queue reassurance into the same state. + - row "212 +" [ref=e7962]: + - cell [ref=e7963] + - cell "212" [ref=e7964]: "212" + - cell [ref=e7965] + - cell "+" [ref=e7966]: + - generic [ref=e7967]: + + - cell [ref=e7968]: + - code + - 'row "213 + **Why this priority**: This is the direct trust gap visible in current runtime surfaces." [ref=e7969]': + - cell [ref=e7970] + - cell "213" [ref=e7971]: "213" + - cell [ref=e7972] + - cell "+" [ref=e7973]: + - generic [ref=e7974]: + + - 'cell "**Why this priority**: This is the direct trust gap visible in current runtime surfaces." [ref=e7975]': + - code [ref=e7976]: "**Why this priority**: This is the direct trust gap visible in current runtime surfaces." + - row "214 +" [ref=e7977]: + - cell [ref=e7978] + - cell "214" [ref=e7979]: "214" + - cell [ref=e7980] + - cell "+" [ref=e7981]: + - generic [ref=e7982]: + + - cell [ref=e7983]: + - code + - 'row "215 + **Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." [ref=e7984]': + - cell [ref=e7985] + - cell "215" [ref=e7986]: "215" + - cell [ref=e7987] + - cell "+" [ref=e7988]: + - generic [ref=e7989]: + + - 'cell "**Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." [ref=e7990]': + - code [ref=e7991]: "**Independent Test**: Seed fresh and stale queued/running runs, open the shell activity hint and monitoring list, and verify that stale-active runs do not mix stale attention with ordinary queue or progress reassurance." + - row "216 +" [ref=e7992]: + - cell [ref=e7993] + - cell "216" [ref=e7994]: "216" + - cell [ref=e7995] + - cell "+" [ref=e7996]: + - generic [ref=e7997]: + + - cell [ref=e7998]: + - code + - row "217 + **Acceptance Scenarios**:" [ref=e7999]: + - cell [ref=e8000] + - cell "217" [ref=e8001]: "217" + - cell [ref=e8002] + - cell "+" [ref=e8003]: + - generic [ref=e8004]: + + - cell "**Acceptance Scenarios**:" [ref=e8005]: + - code [ref=e8006]: "**Acceptance Scenarios**:" + - row "218 +" [ref=e8007]: + - cell [ref=e8008] + - cell "218" [ref=e8009]: "218" + - cell [ref=e8010] + - cell "+" [ref=e8011]: + - generic [ref=e8012]: + + - cell [ref=e8013]: + - code + - 'row "219 + 1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." [ref=e8014]': + - cell [ref=e8015] + - cell "219" [ref=e8016]: "219" + - cell [ref=e8017] + - cell "+" [ref=e8018]: + - generic [ref=e8019]: + + - 'cell "1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." [ref=e8020]': + - code [ref=e8021]: "1. **Given** a queued or running run is past its lifecycle window, **When** the shell or monitoring list renders it, **Then** the visible stale-active state does not also reassure with ordinary `Waiting for worker.`, `Progress details pending.`, or equivalent calm queue/progress copy." + - row "220 + 2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale." [ref=e8022]: + - cell [ref=e8023] + - cell "220" [ref=e8024]: "220" + - cell [ref=e8025] + - cell "+" [ref=e8026]: + - generic [ref=e8027]: + + - cell "2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale." [ref=e8028]: + - code [ref=e8029]: 2. **Given** a fresh queued or running run is still within its lifecycle window, **When** the same surfaces render it, **Then** the copy remains calm and does not falsely escalate it as stale. + - row "221 +" [ref=e8030]: + - cell [ref=e8031] + - cell "221" [ref=e8032]: "221" + - cell [ref=e8033] + - cell "+" [ref=e8034]: + - generic [ref=e8035]: + + - cell [ref=e8036]: + - code + - 'row "222 + ### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e8037]': + - cell [ref=e8038] + - cell "222" [ref=e8039]: "222" + - cell [ref=e8040] + - cell "+" [ref=e8041]: + - generic [ref=e8042]: + + - 'cell "### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e8043]': + - code [ref=e8044]: "### User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" + - row "223 +" [ref=e8045]: + - cell [ref=e8046] + - cell "223" [ref=e8047]: "223" + - cell [ref=e8048] + - cell "+" [ref=e8049]: + - generic [ref=e8050]: + + - cell [ref=e8051]: + - code + - row "224 + As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics." [ref=e8052]: + - cell [ref=e8053] + - cell "224" [ref=e8054]: "224" + - cell [ref=e8055] + - cell "+" [ref=e8056]: + - generic [ref=e8057]: + + - cell "As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics." [ref=e8058]: + - code [ref=e8059]: As an operator, I need canonical run detail to confirm the same generic lifecycle meaning that list and shell surfaces already communicate before I inspect deeper diagnostics. + - row "225 +" [ref=e8060]: + - cell [ref=e8061] + - cell "225" [ref=e8062]: "225" + - cell [ref=e8063] + - cell "+" [ref=e8064]: + - generic [ref=e8065]: + + - cell [ref=e8066]: + - code + - 'row "226 + **Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." [ref=e8067]': + - cell [ref=e8068] + - cell "226" [ref=e8069]: "226" + - cell [ref=e8070] + - cell "+" [ref=e8071]: + - generic [ref=e8072]: + + - 'cell "**Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." [ref=e8073]': + - code [ref=e8074]: "**Why this priority**: The current contradiction is most damaging when detail and compact surfaces disagree." + - row "227 +" [ref=e8075]: + - cell [ref=e8076] + - cell "227" [ref=e8077]: "227" + - cell [ref=e8078] + - cell "+" [ref=e8079]: + - generic [ref=e8080]: + + - cell [ref=e8081]: + - code + - 'row "228 + **Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." [ref=e8082]': + - cell [ref=e8083] + - cell "228" [ref=e8084]: "228" + - cell [ref=e8085] + - cell "+" [ref=e8086]: + - generic [ref=e8087]: + + - 'cell "**Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." [ref=e8088]': + - code [ref=e8089]: "**Independent Test**: Open canonical detail for fresh, stale, and reconciled runs and verify that lifecycle banners, queue guidance, and top summary agree with the generic monitoring truth." + - row "229 +" [ref=e8090]: + - cell [ref=e8091] + - cell "229" [ref=e8092]: "229" + - cell [ref=e8093] + - cell "+" [ref=e8094]: + - generic [ref=e8095]: + + - cell [ref=e8096]: + - code + - row "230 + **Acceptance Scenarios**:" [ref=e8097]: + - cell [ref=e8098] + - cell "230" [ref=e8099]: "230" + - cell [ref=e8100] + - cell "+" [ref=e8101]: + - generic [ref=e8102]: + + - cell "**Acceptance Scenarios**:" [ref=e8103]: + - code [ref=e8104]: "**Acceptance Scenarios**:" + - row "231 +" [ref=e8105]: + - cell [ref=e8106] + - cell "231" [ref=e8107]: "231" + - cell [ref=e8108] + - cell "+" [ref=e8109]: + - generic [ref=e8110]: + + - cell [ref=e8111]: + - code + - row "232 + 1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render." [ref=e8112]: + - cell [ref=e8113] + - cell "232" [ref=e8114]: "232" + - cell [ref=e8115] + - cell "+" [ref=e8116]: + - generic [ref=e8117]: + + - cell "1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render." [ref=e8118]: + - code [ref=e8119]: 1. **Given** a stale queued or stale running run, **When** the detail page opens, **Then** the top summary explains that the run is past its lifecycle window before deeper diagnostics render. + - row "233 + 2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance." [ref=e8120]: + - cell [ref=e8121] + - cell "233" [ref=e8122]: "233" + - cell [ref=e8123] + - cell "+" [ref=e8124]: + - generic [ref=e8125]: + + - cell "2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance." [ref=e8126]: + - code [ref=e8127]: 2. **Given** a reconciled terminal run, **When** the detail page opens, **Then** it preserves the existing reconciled truth and does not regress to ordinary active-work guidance. + - row "234 +" [ref=e8128]: + - cell [ref=e8129] + - cell "234" [ref=e8130]: "234" + - cell [ref=e8131] + - cell "+" [ref=e8132]: + - generic [ref=e8133]: + + - cell [ref=e8134]: + - code + - 'row "235 + ### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e8135]': + - cell [ref=e8136] + - cell "235" [ref=e8137]: "235" + - cell [ref=e8138] + - cell "+" [ref=e8139]: + - generic [ref=e8140]: + + - 'cell "### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e8141]': + - code [ref=e8142]: "### User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" + - row "236 +" [ref=e8143]: + - cell [ref=e8144] + - cell "236" [ref=e8145]: "236" + - cell [ref=e8146] + - cell "+" [ref=e8147]: + - generic [ref=e8148]: + + - cell [ref=e8149]: + - code + - row "237 + As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine." [ref=e8150]: + - cell [ref=e8151] + - cell "237" [ref=e8152]: "237" + - cell [ref=e8153] + - cell "+" [ref=e8154]: + - generic [ref=e8155]: + + - cell "As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine." [ref=e8156]: + - code [ref=e8157]: As a product owner, I need generic queue truth to stay separate from domain-success or adapter reconciliation so that stale monitoring copy does not silently become a business-completion engine. + - row "238 +" [ref=e8158]: + - cell [ref=e8159] + - cell "238" [ref=e8160]: "238" + - cell [ref=e8161] + - cell "+" [ref=e8162]: + - generic [ref=e8163]: + + - cell [ref=e8164]: + - code + - 'row "239 + **Why this priority**: The slice must stay narrow and avoid speculative framework growth." [ref=e8165]': + - cell [ref=e8166] + - cell "239" [ref=e8167]: "239" + - cell [ref=e8168] + - cell "+" [ref=e8169]: + - generic [ref=e8170]: + + - 'cell "**Why this priority**: The slice must stay narrow and avoid speculative framework growth." [ref=e8171]': + - code [ref=e8172]: "**Why this priority**: The slice must stay narrow and avoid speculative framework growth." + - row "240 +" [ref=e8173]: + - cell [ref=e8174] + - cell "240" [ref=e8175]: "240" + - cell [ref=e8176] + - cell "+" [ref=e8177]: + - generic [ref=e8178]: + + - cell [ref=e8179]: + - code + - 'row "241 + **Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." [ref=e8180]': + - cell [ref=e8181] + - cell "241" [ref=e8182]: "241" + - cell [ref=e8183] + - cell "+" [ref=e8184]: + - generic [ref=e8185]: + + - 'cell "**Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." [ref=e8186]': + - code [ref=e8187]: "**Independent Test**: Compare a stale generic run and an adapter-reconciled run, then verify that generic stale wording remains cautious while existing reconciled evidence paths still drive terminal truth where already implemented." + - row "242 +" [ref=e8188]: + - cell [ref=e8189] + - cell "242" [ref=e8190]: "242" + - cell [ref=e8191] + - cell "+" [ref=e8192]: + - generic [ref=e8193]: + + - cell [ref=e8194]: + - code + - row "243 + **Acceptance Scenarios**:" [ref=e8195]: + - cell [ref=e8196] + - cell "243" [ref=e8197]: "243" + - cell [ref=e8198] + - cell "+" [ref=e8199]: + - generic [ref=e8200]: + + - cell "**Acceptance Scenarios**:" [ref=e8201]: + - code [ref=e8202]: "**Acceptance Scenarios**:" + - row "244 +" [ref=e8203]: + - cell [ref=e8204] + - cell "244" [ref=e8205]: "244" + - cell [ref=e8206] + - cell "+" [ref=e8207]: + - generic [ref=e8208]: + + - cell [ref=e8209]: + - code + - 'row "245 + 1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." [ref=e8210]': + - cell [ref=e8211] + - cell "245" [ref=e8212]: "245" + - cell [ref=e8213] + - cell "+" [ref=e8214]: + - generic [ref=e8215]: + + - 'cell "1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." [ref=e8216]': + - code [ref=e8217]: "1. **Given** a stale active run without proof-backed queue legitimacy evidence, **When** the UI renders it, **Then** the wording stays at `past lifecycle window` or equivalent cautious language and does not claim orphaned or domain-complete truth." + - row "246 + 2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting." [ref=e8218]: + - cell [ref=e8219] + - cell "246" [ref=e8220]: "246" + - cell [ref=e8221] + - cell "+" [ref=e8222]: + - generic [ref=e8223]: + + - cell "2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting." [ref=e8224]: + - code [ref=e8225]: 2. **Given** a run already completed through scheduled or adapter reconciliation, **When** the UI renders it, **Then** the existing reconciled terminal semantics remain intact and are not rewritten as generic queue waiting. + - row "247 +" [ref=e8226]: + - cell [ref=e8227] + - cell "247" [ref=e8228]: "247" + - cell [ref=e8229] + - cell "+" [ref=e8230]: + - generic [ref=e8231]: + + - cell [ref=e8232]: + - code + - 'row "248 + ### Edge Cases" [ref=e8233]': + - cell [ref=e8234] + - cell "248" [ref=e8235]: "248" + - cell [ref=e8236] + - cell "+" [ref=e8237]: + - generic [ref=e8238]: + + - cell "### Edge Cases" [ref=e8239]: + - code [ref=e8240]: "### Edge Cases" + - row "249 +" [ref=e8241]: + - cell [ref=e8242] + - cell "249" [ref=e8243]: "249" + - cell [ref=e8244] + - cell "+" [ref=e8245]: + - generic [ref=e8246]: + + - cell [ref=e8247]: + - code + - row "250 + - A queued run is stale but has no trustworthy worker correlation or job identifier." [ref=e8248]: + - cell [ref=e8249] + - cell "250" [ref=e8250]: "250" + - cell [ref=e8251] + - cell "+" [ref=e8252]: + - generic [ref=e8253]: + + - cell "- A queued run is stale but has no trustworthy worker correlation or job identifier." [ref=e8254]: + - code [ref=e8255]: "- A queued run is stale but has no trustworthy worker correlation or job identifier." + - row "251 + - A running run has determinate counts but is still past the lifecycle window." [ref=e8256]: + - cell [ref=e8257] + - cell "251" [ref=e8258]: "251" + - cell [ref=e8259] + - cell "+" [ref=e8260]: + - generic [ref=e8261]: + + - cell "- A running run has determinate counts but is still past the lifecycle window." [ref=e8262]: + - code [ref=e8263]: "- A running run has determinate counts but is still past the lifecycle window." + - row "252 + - A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." [ref=e8264]: + - cell [ref=e8265] + - cell "252" [ref=e8266]: "252" + - cell [ref=e8267] + - cell "+" [ref=e8268]: + - generic [ref=e8269]: + + - cell "- A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." [ref=e8270]: + - code [ref=e8271]: "- A run is unsupported by current lifecycle policy and therefore should not receive stale overclaiming." + - 'row "253 + - A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." [ref=e8272]': + - cell [ref=e8273] + - cell "253" [ref=e8274]: "253" + - cell [ref=e8275] + - cell "+" [ref=e8276]: + - generic [ref=e8277]: + + - 'cell "- A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." [ref=e8278]': + - code [ref=e8279]: "- A run became terminal through `scheduled_reconciler` or `adapter_reconciler`." + - row "254 + - A system-initiated run has no human initiator but still needs honest lifecycle wording." [ref=e8280]: + - cell [ref=e8281] + - cell "254" [ref=e8282]: "254" + - cell [ref=e8283] + - cell "+" [ref=e8284]: + - generic [ref=e8285]: + + - cell "- A system-initiated run has no human initiator but still needs honest lifecycle wording." [ref=e8286]: + - code [ref=e8287]: "- A system-initiated run has no human initiator but still needs honest lifecycle wording." + - row "255 + - Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." [ref=e8288]: + - cell [ref=e8289] + - cell "255" [ref=e8290]: "255" + - cell [ref=e8291] + - cell "+" [ref=e8292]: + - generic [ref=e8293]: + + - cell "- Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." [ref=e8294]: + - code [ref=e8295]: "- Existing phase or composite progress hints exist in context and must not override stale lifecycle truth with false reassurance." + - row "256 +" [ref=e8296]: + - cell [ref=e8297] + - cell "256" [ref=e8298]: "256" + - cell [ref=e8299] + - cell "+" [ref=e8300]: + - generic [ref=e8301]: + + - cell [ref=e8302]: + - code + - 'row "257 + ## Requirements *(mandatory)*" [ref=e8303]': + - cell [ref=e8304] + - cell "257" [ref=e8305]: "257" + - cell [ref=e8306] + - cell "+" [ref=e8307]: + - generic [ref=e8308]: + + - cell "## Requirements *(mandatory)*" [ref=e8309]: + - code [ref=e8310]: "## Requirements *(mandatory)*" + - row "258 +" [ref=e8311]: + - cell [ref=e8312] + - cell "258" [ref=e8313]: "258" + - cell [ref=e8314] + - cell "+" [ref=e8315]: + - generic [ref=e8316]: + + - cell [ref=e8317]: + - code + - 'row "259 + - **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." [ref=e8318]': + - cell [ref=e8319] + - cell "259" [ref=e8320]: "259" + - cell [ref=e8321] + - cell "+" [ref=e8322]: + - generic [ref=e8323]: + + - 'cell "- **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." [ref=e8324]': + - code [ref=e8325]: "- **FR-358-001**: The system MUST keep `OperationRun.status` and `OperationRun.outcome` as the only persisted lifecycle fields for this slice." + - 'row "260 + - **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." [ref=e8326]': + - cell [ref=e8327] + - cell "260" [ref=e8328]: "260" + - cell [ref=e8329] + - cell "+" [ref=e8330]: + - generic [ref=e8331]: + + - 'cell "- **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." [ref=e8332]': + - code [ref=e8333]: "- **FR-358-002**: Generic queue truth MUST be derived from current lifecycle, freshness, and trusted context only." + - 'row "261 + - **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." [ref=e8334]': + - cell [ref=e8335] + - cell "261" [ref=e8336]: "261" + - cell [ref=e8337] + - cell "+" [ref=e8338]: + - generic [ref=e8339]: + + - 'cell "- **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." [ref=e8340]': + - code [ref=e8341]: "- **FR-358-003**: A run that is `likely_stale` by current lifecycle policy MUST NOT render ordinary queue or ordinary progress reassurance as visible stale-active guidance on shell, list, or canonical detail surfaces, whether that reassurance appears alone or alongside a stale label, banner, or attention cue." + - 'row "262 + - **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." [ref=e8342]': + - cell [ref=e8343] + - cell "262" [ref=e8344]: "262" + - cell [ref=e8345] + - cell "+" [ref=e8346]: + - generic [ref=e8347]: + + - 'cell "- **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." [ref=e8348]': + - code [ref=e8349]: "- **FR-358-004**: Fresh queued and fresh running runs MUST remain visibly calm and MUST NOT inherit stale emphasis." + - 'row "263 + - **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." [ref=e8350]': + - cell [ref=e8351] + - cell "263" [ref=e8352]: "263" + - cell [ref=e8353] + - cell "+" [ref=e8354]: + - generic [ref=e8355]: + + - 'cell "- **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." [ref=e8356]': + - code [ref=e8357]: "- **FR-358-005**: Existing scheduled or adapter reconciliation paths MUST remain authoritative for terminal truth where they already exist." + - 'row "264 + - **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." [ref=e8358]': + - cell [ref=e8359] + - cell "264" [ref=e8360]: "264" + - cell [ref=e8361] + - cell "+" [ref=e8362]: + - generic [ref=e8363]: + + - 'cell "- **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." [ref=e8364]': + - code [ref=e8365]: "- **FR-358-006**: This feature MUST NOT introduce a new queue-orphaned, reconciled, or business-success persistence family." + - 'row "265 + - **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." [ref=e8366]': + - cell [ref=e8367] + - cell "265" [ref=e8368]: "265" + - cell [ref=e8369] + - cell "+" [ref=e8370]: + - generic [ref=e8371]: + + - 'cell "- **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." [ref=e8372]': + - code [ref=e8373]: "- **FR-358-007**: This feature MUST NOT claim hard orphaned queue state unless current repo truth already provides trustworthy legitimacy evidence for that specific run." + - 'row "266 + - **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." [ref=e8374]': + - cell [ref=e8375] + - cell "266" [ref=e8376]: "266" + - cell [ref=e8377] + - cell "+" [ref=e8378]: + - generic [ref=e8379]: + + - 'cell "- **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." [ref=e8380]': + - code [ref=e8381]: "- **FR-358-008**: Existing `OperationRun` links, queued toasts, browser events, and terminal notification paths MUST remain unchanged." + - 'row "267 + - **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." [ref=e8382]': + - cell [ref=e8383] + - cell "267" [ref=e8384]: "267" + - cell [ref=e8385] + - cell "+" [ref=e8386]: + - generic [ref=e8387]: + + - 'cell "- **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." [ref=e8388]': + - code [ref=e8389]: "- **FR-358-009**: Existing workspace and tenant authorization boundaries MUST remain unchanged." + - 'row "268 + - **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." [ref=e8390]': + - cell [ref=e8391] + - cell "268" [ref=e8392]: "268" + - cell [ref=e8393] + - cell "+" [ref=e8394]: + - generic [ref=e8395]: + + - 'cell "- **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." [ref=e8396]': + - code [ref=e8397]: "- **FR-358-010**: The canonical monitoring list, shell hint, and canonical run detail MUST use one aligned generic lifecycle vocabulary for fresh queued/running work, stale active work, and reconciled terminal work." + - 'row "269 + - **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." [ref=e8398]': + - cell [ref=e8399] + - cell "269" [ref=e8400]: "269" + - cell [ref=e8401] + - cell "+" [ref=e8402]: + - generic [ref=e8403]: + + - 'cell "- **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." [ref=e8404]': + - code [ref=e8405]: "- **FR-358-011**: The implementation MUST stay within current helper ownership unless one small local helper is required to avoid unreadable presenter logic." + - 'row "270 + - **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." [ref=e8406]': + - cell [ref=e8407] + - cell "270" [ref=e8408]: "270" + - cell [ref=e8409] + - cell "+" [ref=e8410]: + - generic [ref=e8411]: + + - 'cell "- **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." [ref=e8412]': + - code [ref=e8413]: "- **FR-358-012**: Focused unit and feature coverage MUST prove both positive and negative cases for fresh vs stale queue truth." + - row "271 +" [ref=e8414]: + - cell [ref=e8415] + - cell "271" [ref=e8416]: "271" + - cell [ref=e8417] + - cell "+" [ref=e8418]: + - generic [ref=e8419]: + + - cell [ref=e8420]: + - code + - 'row "272 + ## Success Criteria *(mandatory)*" [ref=e8421]': + - cell [ref=e8422] + - cell "272" [ref=e8423]: "272" + - cell [ref=e8424] + - cell "+" [ref=e8425]: + - generic [ref=e8426]: + + - cell "## Success Criteria *(mandatory)*" [ref=e8427]: + - code [ref=e8428]: "## Success Criteria *(mandatory)*" + - row "273 +" [ref=e8429]: + - cell [ref=e8430] + - cell "273" [ref=e8431]: "273" + - cell [ref=e8432] + - cell "+" [ref=e8433]: + - generic [ref=e8434]: + + - cell [ref=e8435]: + - code + - 'row "274 + - **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." [ref=e8436]': + - cell [ref=e8437] + - cell "274" [ref=e8438]: "274" + - cell [ref=e8439] + - cell "+" [ref=e8440]: + - generic [ref=e8441]: + + - 'cell "- **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." [ref=e8442]': + - code [ref=e8443]: "- **SC-358-001**: In focused regression coverage, stale queued/running runs no longer mix stale attention with ordinary queue/progress reassurance on the affected surfaces." + - 'row "275 + - **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." [ref=e8444]': + - cell [ref=e8445] + - cell "275" [ref=e8446]: "275" + - cell [ref=e8447] + - cell "+" [ref=e8448]: + - generic [ref=e8449]: + + - 'cell "- **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." [ref=e8450]': + - code [ref=e8451]: "- **SC-358-002**: In focused regression coverage, fresh queued/running runs remain calm and do not falsely escalate to stale." + - 'row "276 + - **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." [ref=e8452]': + - cell [ref=e8453] + - cell "276" [ref=e8454]: "276" + - cell [ref=e8455] + - cell "+" [ref=e8456]: + - generic [ref=e8457]: + + - 'cell "- **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." [ref=e8458]': + - code [ref=e8459]: "- **SC-358-003**: Existing reconciled terminal behavior remains intact for runs already completed by scheduled or adapter truth." + - 'row "277 + - **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." [ref=e8460]': + - cell [ref=e8461] + - cell "277" [ref=e8462]: "277" + - cell [ref=e8463] + - cell "+" [ref=e8464]: + - generic [ref=e8465]: + + - 'cell "- **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." [ref=e8466]': + - code [ref=e8467]: "- **SC-358-004**: No new persisted lifecycle field, queue artifact, or adapter framework is introduced." + - row "278 +" [ref=e8468]: + - cell [ref=e8469] + - cell "278" [ref=e8470]: "278" + - cell [ref=e8471] + - cell "+" [ref=e8472]: + - generic [ref=e8473]: + + - cell [ref=e8474]: + - code + - 'row "279 + ## Assumptions" [ref=e8475]': + - cell [ref=e8476] + - cell "279" [ref=e8477]: "279" + - cell [ref=e8478] + - cell "+" [ref=e8479]: + - generic [ref=e8480]: + + - cell "## Assumptions" [ref=e8481]: + - code [ref=e8482]: "## Assumptions" + - row "280 +" [ref=e8483]: + - cell [ref=e8484] + - cell "280" [ref=e8485]: "280" + - cell [ref=e8486] + - cell "+" [ref=e8487]: + - generic [ref=e8488]: + + - cell [ref=e8489]: + - code + - row "281 + - The current contradiction is a derived UX-truth problem, not a missing persistence problem." [ref=e8490]: + - cell [ref=e8491] + - cell "281" [ref=e8492]: "281" + - cell [ref=e8493] + - cell "+" [ref=e8494]: + - generic [ref=e8495]: + + - cell "- The current contradiction is a derived UX-truth problem, not a missing persistence problem." [ref=e8496]: + - code [ref=e8497]: "- The current contradiction is a derived UX-truth problem, not a missing persistence problem." + - row "282 + - Existing lifecycle policy thresholds remain valid for this slice." [ref=e8498]: + - cell [ref=e8499] + - cell "282" [ref=e8500]: "282" + - cell [ref=e8501] + - cell "+" [ref=e8502]: + - generic [ref=e8503]: + + - cell "- Existing lifecycle policy thresholds remain valid for this slice." [ref=e8504]: + - code [ref=e8505]: "- Existing lifecycle policy thresholds remain valid for this slice." + - row "283 + - Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." [ref=e8506]: + - cell [ref=e8507] + - cell "283" [ref=e8508]: "283" + - cell [ref=e8509] + - cell "+" [ref=e8510]: + - generic [ref=e8511]: + + - cell "- Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." [ref=e8512]: + - code [ref=e8513]: "- Existing generic and adapter reconciliation commands remain out of scope except as historical context the UI must respect." + - row "284 +" [ref=e8514]: + - cell [ref=e8515] + - cell "284" [ref=e8516]: "284" + - cell [ref=e8517] + - cell "+" [ref=e8518]: + - generic [ref=e8519]: + + - cell [ref=e8520]: + - code + - 'row "285 + ## Risks" [ref=e8521]': + - cell [ref=e8522] + - cell "285" [ref=e8523]: "285" + - cell [ref=e8524] + - cell "+" [ref=e8525]: + - generic [ref=e8526]: + + - cell "## Risks" [ref=e8527]: + - code [ref=e8528]: "## Risks" + - row "286 +" [ref=e8529]: + - cell [ref=e8530] + - cell "286" [ref=e8531]: "286" + - cell [ref=e8532] + - cell "+" [ref=e8533]: + - generic [ref=e8534]: + + - cell [ref=e8535]: + - code + - 'row "287 + - **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." [ref=e8536]': + - cell [ref=e8537] + - cell "287" [ref=e8538]: "287" + - cell [ref=e8539] + - cell "+" [ref=e8540]: + - generic [ref=e8541]: + + - 'cell "- **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." [ref=e8542]': + - code [ref=e8543]: "- **Over-correction**: the slice could make all active work sound problematic. Mitigation: explicit fresh vs stale negative assertions." + - 'row "288 + - **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." [ref=e8544]': + - cell [ref=e8545] + - cell "288" [ref=e8546]: "288" + - cell [ref=e8547] + - cell "+" [ref=e8548]: + - generic [ref=e8549]: + + - 'cell "- **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." [ref=e8550]': + - code [ref=e8551]: "- **Framework creep**: the slice could drift into a new generic queue-health subsystem. Mitigation: no new persistence, no new adapter registry, and explicit out-of-scope boundaries." + - 'row "289 + - **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." [ref=e8552]': + - cell [ref=e8553] + - cell "289" [ref=e8554]: "289" + - cell [ref=e8555] + - cell "+" [ref=e8556]: + - generic [ref=e8557]: + + - 'cell "- **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." [ref=e8558]': + - code [ref=e8559]: "- **Detail/list drift survives**: one renderer could remain on old wording. Mitigation: focused list + detail + shell coverage in the same package." + - row "290 +" [ref=e8560]: + - cell [ref=e8561] + - cell "290" [ref=e8562]: "290" + - cell [ref=e8563] + - cell "+" [ref=e8564]: + - generic [ref=e8565]: + + - cell [ref=e8566]: + - code + - 'row "291 + ## Out of Scope" [ref=e8567]': + - cell [ref=e8568] + - cell "291" [ref=e8569]: "291" + - cell [ref=e8570] + - cell "+" [ref=e8571]: + - generic [ref=e8572]: + + - cell "## Out of Scope" [ref=e8573]: + - code [ref=e8574]: "## Out of Scope" + - row "292 +" [ref=e8575]: + - cell [ref=e8576] + - cell "292" [ref=e8577]: "292" + - cell [ref=e8578] + - cell "+" [ref=e8579]: + - generic [ref=e8580]: + + - cell [ref=e8581]: + - code + - row "293 + - Queue worker health automation" [ref=e8582]: + - cell [ref=e8583] + - cell "293" [ref=e8584]: "293" + - cell [ref=e8585] + - cell "+" [ref=e8586]: + - generic [ref=e8587]: + + - cell "- Queue worker health automation" [ref=e8588]: + - code [ref=e8589]: "- Queue worker health automation" + - row "294 + - New scheduler, command, or job families" [ref=e8590]: + - cell [ref=e8591] + - cell "294" [ref=e8592]: "294" + - cell [ref=e8593] + - cell "+" [ref=e8594]: + - generic [ref=e8595]: + + - cell "- New scheduler, command, or job families" [ref=e8596]: + - code [ref=e8597]: "- New scheduler, command, or job families" + - 'row "295 + - New `OperationRun` statuses or outcomes" [ref=e8598]': + - cell [ref=e8599] + - cell "295" [ref=e8600]: "295" + - cell [ref=e8601] + - cell "+" [ref=e8602]: + - generic [ref=e8603]: + + - 'cell "- New `OperationRun` statuses or outcomes" [ref=e8604]': + - code [ref=e8605]: "- New `OperationRun` statuses or outcomes" + - row "296 + - Domain-success reconciliation for review, restore, backup, sync, or export runs" [ref=e8606]: + - cell [ref=e8607] + - cell "296" [ref=e8608]: "296" + - cell [ref=e8609] + - cell "+" [ref=e8610]: + - generic [ref=e8611]: + + - cell "- Domain-success reconciliation for review, restore, backup, sync, or export runs" [ref=e8612]: + - code [ref=e8613]: "- Domain-success reconciliation for review, restore, backup, sync, or export runs" + - row "297 + - Adapter framework expansion" [ref=e8614]: + - cell [ref=e8615] + - cell "297" [ref=e8616]: "297" + - cell [ref=e8617] + - cell "+" [ref=e8618]: + - generic [ref=e8619]: + + - cell "- Adapter framework expansion" [ref=e8620]: + - code [ref=e8621]: "- Adapter framework expansion" + - row "298 + - New Filament resources, routes, or destructive actions" [ref=e8622]: + - cell [ref=e8623] + - cell "298" [ref=e8624]: "298" + - cell [ref=e8625] + - cell "+" [ref=e8626]: + - generic [ref=e8627]: + + - cell "- New Filament resources, routes, or destructive actions" [ref=e8628]: + - code [ref=e8629]: "- New Filament resources, routes, or destructive actions" + - generic [ref=e8630]: + - 'heading "160 160 Änderungen: 160 Ergänzungen und 0 Löschungen specs/358-operationrun-queue-truth-foundation/tasks.md Normale Datei Datei anzeigen" [level=4] [ref=e8631]': + - generic [ref=e8632]: + - button [ref=e8633] [cursor=pointer]: + - img [ref=e8634] + - generic [ref=e8636]: + - text: "160" + - 'generic "160 Änderungen: 160 Ergänzungen und 0 Löschungen" [ref=e8637]' + - generic [ref=e8639]: + - link "specs/358-operationrun-queue-truth-foundation/tasks.md" [ref=e8640] [cursor=pointer]: + - /url: "#diff-778998a295ffde42d87399c953196b492df71792" + - button [ref=e8641] [cursor=pointer]: + - img [ref=e8642] + - generic [ref=e8645]: Normale Datei + - link "Datei anzeigen" [ref=e8647] [cursor=pointer]: + - /url: /ahmido/TenantAtlas/src/commit/03514b9e5b2addf53d5441f0fc122ccef0b51999/specs/358-operationrun-queue-truth-foundation/tasks.md + - table [ref=e8650]: + - rowgroup [ref=e8657]: + - row "@ -0,0 +1,160 @@" [ref=e8658]: + - cell [ref=e8659] + - cell [ref=e8660] + - cell [ref=e8661] + - cell "@ -0,0 +1,160 @@" [ref=e8662]: + - code [ref=e8663]: "@ -0,0 +1,160 @@" + - 'row "1 + # Tasks: OperationRun Queue Truth Foundation" [ref=e8664]': + - cell [ref=e8665] + - cell "1" [ref=e8666]: "1" + - cell [ref=e8667] + - cell "+" [ref=e8668]: + - generic [ref=e8669]: + + - 'cell "# Tasks: OperationRun Queue Truth Foundation" [ref=e8670]': + - code [ref=e8671]: "# Tasks: OperationRun Queue Truth Foundation" + - row "2 +" [ref=e8672]: + - cell [ref=e8673] + - cell "2" [ref=e8674]: "2" + - cell [ref=e8675] + - cell "+" [ref=e8676]: + - generic [ref=e8677]: + + - cell [ref=e8678]: + - code + - 'row "3 + **Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" [ref=e8679]': + - cell [ref=e8680] + - cell "3" [ref=e8681]: "3" + - cell [ref=e8682] + - cell "+" [ref=e8683]: + - generic [ref=e8684]: + + - 'cell "**Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" [ref=e8685]': + - code [ref=e8686]: "**Input**: `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md`" + - 'row "4 + **Prerequisites**: `spec.md` and `plan.md`" [ref=e8687]': + - cell [ref=e8688] + - cell "4" [ref=e8689]: "4" + - cell [ref=e8690] + - cell "+" [ref=e8691]: + - generic [ref=e8692]: + + - 'cell "**Prerequisites**: `spec.md` and `plan.md`" [ref=e8693]': + - code [ref=e8694]: "**Prerequisites**: `spec.md` and `plan.md`" + - 'row "5 + **Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." [ref=e8695]': + - cell [ref=e8696] + - cell "5" [ref=e8697]: "5" + - cell [ref=e8698] + - cell "+" [ref=e8699]: + - generic [ref=e8700]: + + - 'cell "**Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." [ref=e8701]': + - code [ref=e8702]: "**Tests**: REQUIRED (Pest). Keep proof bounded to one unit family plus focused monitoring/detail feature tests." + - 'row "6 + **Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." [ref=e8703]': + - cell [ref=e8704] + - cell "6" [ref=e8705]: "6" + - cell [ref=e8706] + - cell "+" [ref=e8707]: + - generic [ref=e8708]: + + - 'cell "**Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." [ref=e8709]': + - code [ref=e8710]: "**Operations**: No new `OperationRun` type, no new queue family, no new notification path, no new reconciliation command, and no new persisted lifecycle state." + - 'row "7 + **RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." [ref=e8711]': + - cell [ref=e8712] + - cell "7" [ref=e8713]: "7" + - cell [ref=e8714] + - cell "+" [ref=e8715]: + - generic [ref=e8716]: + + - 'cell "**RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." [ref=e8717]': + - code [ref=e8718]: "**RBAC**: Reuse current workspace and managed-environment authorization rules; presentation must never reveal unauthorized runs." + - 'row "8 + **Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." [ref=e8719]': + - cell [ref=e8720] + - cell "8" [ref=e8721]: "8" + - cell [ref=e8722] + - cell "+" [ref=e8723]: + - generic [ref=e8724]: + + - 'cell "**Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." [ref=e8725]': + - code [ref=e8726]: "**Shared Pattern Reuse**: Reuse `OperationRunProgressContract`, `RunDurationInsights`, `OperationUxPresenter`, `OperationRunFreshnessState`, and existing monitoring renderers. Do not introduce a new adapter registry or queue-health framework." + - 'row "9 + **Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." [ref=e8727]': + - cell [ref=e8728] + - cell "9" [ref=e8729]: "9" + - cell [ref=e8730] + - cell "+" [ref=e8731]: + - generic [ref=e8732]: + + - 'cell "**Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." [ref=e8733]': + - code [ref=e8734]: "**Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, route family, or asset strategy is allowed." + - 'row "10 + **Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." [ref=e8735]': + - cell [ref=e8736] + - cell "10" [ref=e8737]: "10" + - cell [ref=e8738] + - cell "+" [ref=e8739]: + - generic [ref=e8740]: + + - 'cell "**Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." [ref=e8741]': + - code [ref=e8742]: "**Organization**: Tasks are grouped by user story so the generic derivation, surface retrofit, and follow-up guardrails remain independently reviewable." + - row "11 +" [ref=e8743]: + - cell [ref=e8744] + - cell "11" [ref=e8745]: "11" + - cell [ref=e8746] + - cell "+" [ref=e8747]: + - generic [ref=e8748]: + + - cell [ref=e8749]: + - code + - 'row "12 + ## Test Governance Checklist" [ref=e8750]': + - cell [ref=e8751] + - cell "12" [ref=e8752]: "12" + - cell [ref=e8753] + - cell "+" [ref=e8754]: + - generic [ref=e8755]: + + - cell "## Test Governance Checklist" [ref=e8756]: + - code [ref=e8757]: "## Test Governance Checklist" + - row "13 +" [ref=e8758]: + - cell [ref=e8759] + - cell "13" [ref=e8760]: "13" + - cell [ref=e8761] + - cell "+" [ref=e8762]: + - generic [ref=e8763]: + + - cell [ref=e8764]: + - code + - row "14 + - [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." [ref=e8765]: + - cell [ref=e8766] + - cell "14" [ref=e8767]: "14" + - cell [ref=e8768] + - cell "+" [ref=e8769]: + - generic [ref=e8770]: + + - cell "- [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." [ref=e8771]: + - code [ref=e8772]: "- [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior." + - row "15 + - [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." [ref=e8773]: + - cell [ref=e8774] + - cell "15" [ref=e8775]: "15" + - cell [ref=e8776] + - cell "+" [ref=e8777]: + - generic [ref=e8778]: + + - cell "- [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." [ref=e8779]: + - code [ref=e8780]: "- [x] New or changed tests stay in the smallest honest family, and no hidden browser or heavy-governance proof is introduced." + - row "16 + - [x] Shared helpers, fixtures, and context defaults stay cheap by default." [ref=e8781]: + - cell [ref=e8782] + - cell "16" [ref=e8783]: "16" + - cell [ref=e8784] + - cell "+" [ref=e8785]: + - generic [ref=e8786]: + + - cell "- [x] Shared helpers, fixtures, and context defaults stay cheap by default." [ref=e8787]: + - code [ref=e8788]: "- [x] Shared helpers, fixtures, and context defaults stay cheap by default." + - row "17 + - [x] Planned validation commands cover the change without widening into unrelated lanes." [ref=e8789]: + - cell [ref=e8790] + - cell "17" [ref=e8791]: "17" + - cell [ref=e8792] + - cell "+" [ref=e8793]: + - generic [ref=e8794]: + + - cell "- [x] Planned validation commands cover the change without widening into unrelated lanes." [ref=e8795]: + - code [ref=e8796]: "- [x] Planned validation commands cover the change without widening into unrelated lanes." + - row "18 + - [x] The declared monitoring/detail surface test profile is explicit." [ref=e8797]: + - cell [ref=e8798] + - cell "18" [ref=e8799]: "18" + - cell [ref=e8800] + - cell "+" [ref=e8801]: + - generic [ref=e8802]: + + - cell "- [x] The declared monitoring/detail surface test profile is explicit." [ref=e8803]: + - code [ref=e8804]: "- [x] The declared monitoring/detail surface test profile is explicit." + - row "19 + - [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." [ref=e8805]: + - cell [ref=e8806] + - cell "19" [ref=e8807]: "19" + - cell [ref=e8808] + - cell "+" [ref=e8809]: + - generic [ref=e8810]: + + - cell "- [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." [ref=e8811]: + - code [ref=e8812]: "- [x] Any material budget, baseline, or escalation note is recorded in the active feature close-out." + - row "20 +" [ref=e8813]: + - cell [ref=e8814] + - cell "20" [ref=e8815]: "20" + - cell [ref=e8816] + - cell "+" [ref=e8817]: + - generic [ref=e8818]: + + - cell [ref=e8819]: + - code + - 'row "21 + ## Phase 1: Setup (Shared Truth Inventory)" [ref=e8820]': + - cell [ref=e8821] + - cell "21" [ref=e8822]: "21" + - cell [ref=e8823] + - cell "+" [ref=e8824]: + - generic [ref=e8825]: + + - 'cell "## Phase 1: Setup (Shared Truth Inventory)" [ref=e8826]': + - code [ref=e8827]: "## Phase 1: Setup (Shared Truth Inventory)" + - row "22 +" [ref=e8828]: + - cell [ref=e8829] + - cell "22" [ref=e8830]: "22" + - cell [ref=e8831] + - cell "+" [ref=e8832]: + - generic [ref=e8833]: + + - cell [ref=e8834]: + - code + - 'row "23 + **Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." [ref=e8835]': + - cell [ref=e8836] + - cell "23" [ref=e8837]: "23" + - cell [ref=e8838] + - cell "+" [ref=e8839]: + - generic [ref=e8840]: + + - 'cell "**Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." [ref=e8841]': + - code [ref=e8842]: "**Purpose**: confirm the current contradiction and the exact shared helper boundaries before runtime edits begin." + - row "24 +" [ref=e8843]: + - cell [ref=e8844] + - cell "24" [ref=e8845]: "24" + - cell [ref=e8846] + - cell "+" [ref=e8847]: + - generic [ref=e8848]: + + - cell [ref=e8849]: + - code + - 'row "25 + - [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." [ref=e8850]': + - cell [ref=e8851] + - cell "25" [ref=e8852]: "25" + - cell [ref=e8853] + - cell "+" [ref=e8854]: + - generic [ref=e8855]: + + - 'cell "- [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." [ref=e8856]': + - code [ref=e8857]: "- [x] T001 Review `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `specs/149-queued-execution-reauthorization/spec.md`, `specs/160-operation-lifecycle-guarantees/spec.md`, `specs/233-stale-run-visibility/spec.md`, `specs/268-operationrun-activity-feedback/spec.md`, `specs/270-operationrun-progress-contract/spec.md`, and `specs/272-operationrun-phase-composite-progress/spec.md` together so the implementation stays on current repo truth." + - 'row "26 + - [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." [ref=e8858]': + - cell [ref=e8859] + - cell "26" [ref=e8860]: "26" + - cell [ref=e8861] + - cell "+" [ref=e8862]: + - generic [ref=e8863]: + + - 'cell "- [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." [ref=e8864]': + - code [ref=e8865]: "- [x] T002 [P] Confirm the current generic derivation seams in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php`." + - 'row "27 + - [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." [ref=e8866]': + - cell [ref=e8867] + - cell "27" [ref=e8868]: "27" + - cell [ref=e8869] + - cell "+" [ref=e8870]: + - generic [ref=e8871]: + + - 'cell "- [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." [ref=e8872]': + - code [ref=e8873]: "- [x] T003 [P] Confirm the current render seams in `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/resources/views/filament/pages/monitoring/operations.blade.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php` as the shared table/detail seam, and `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`." + - 'row "28 + - [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e8874]': + - cell [ref=e8875] + - cell "28" [ref=e8876]: "28" + - cell [ref=e8877] + - cell "+" [ref=e8878]: + - generic [ref=e8879]: + + - 'cell "- [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e8880]': + - code [ref=e8881]: "- [x] T004 [P] Confirm the focused proof owners in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`, `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, `apps/platform/tests/Feature/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php`, `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php`, `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php`, and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." + - row "29 +" [ref=e8882]: + - cell [ref=e8883] + - cell "29" [ref=e8884]: "29" + - cell [ref=e8885] + - cell "+" [ref=e8886]: + - generic [ref=e8887]: + + - cell [ref=e8888]: + - code + - row "30 + ---" [ref=e8889]: + - cell [ref=e8890] + - cell "30" [ref=e8891]: "30" + - cell [ref=e8892] + - cell "+" [ref=e8893]: + - generic [ref=e8894]: + + - cell "---" [ref=e8895]: + - code [ref=e8896]: "---" + - row "31 +" [ref=e8897]: + - cell [ref=e8898] + - cell "31" [ref=e8899]: "31" + - cell [ref=e8900] + - cell "+" [ref=e8901]: + - generic [ref=e8902]: + + - cell [ref=e8903]: + - code + - 'row "32 + ## Phase 2: Foundational (Blocking Queue-Truth Contract)" [ref=e8904]': + - cell [ref=e8905] + - cell "32" [ref=e8906]: "32" + - cell [ref=e8907] + - cell "+" [ref=e8908]: + - generic [ref=e8909]: + + - 'cell "## Phase 2: Foundational (Blocking Queue-Truth Contract)" [ref=e8910]': + - code [ref=e8911]: "## Phase 2: Foundational (Blocking Queue-Truth Contract)" + - row "33 +" [ref=e8912]: + - cell [ref=e8913] + - cell "33" [ref=e8914]: "33" + - cell [ref=e8915] + - cell "+" [ref=e8916]: + - generic [ref=e8917]: + + - cell [ref=e8918]: + - code + - 'row "34 + **Purpose**: settle one generic queue-truth contract before any individual surface is updated." [ref=e8919]': + - cell [ref=e8920] + - cell "34" [ref=e8921]: "34" + - cell [ref=e8922] + - cell "+" [ref=e8923]: + - generic [ref=e8924]: + + - 'cell "**Purpose**: settle one generic queue-truth contract before any individual surface is updated." [ref=e8925]': + - code [ref=e8926]: "**Purpose**: settle one generic queue-truth contract before any individual surface is updated." + - row "35 +" [ref=e8927]: + - cell [ref=e8928] + - cell "35" [ref=e8929]: "35" + - cell [ref=e8930] + - cell "+" [ref=e8931]: + - generic [ref=e8932]: + + - cell [ref=e8933]: + - code + - 'row "36 + **Critical**: No user-story runtime work should begin until this phase is complete." [ref=e8934]': + - cell [ref=e8935] + - cell "36" [ref=e8936]: "36" + - cell [ref=e8937] + - cell "+" [ref=e8938]: + - generic [ref=e8939]: + + - 'cell "**Critical**: No user-story runtime work should begin until this phase is complete." [ref=e8940]': + - code [ref=e8941]: "**Critical**: No user-story runtime work should begin until this phase is complete." + - row "37 +" [ref=e8942]: + - cell [ref=e8943] + - cell "37" [ref=e8944]: "37" + - cell [ref=e8945] + - cell "+" [ref=e8946]: + - generic [ref=e8947]: + + - cell [ref=e8948]: + - code + - 'row "38 + - [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." [ref=e8949]': + - cell [ref=e8950] + - cell "38" [ref=e8951]: "38" + - cell [ref=e8952] + - cell "+" [ref=e8953]: + - generic [ref=e8954]: + + - 'cell "- [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." [ref=e8955]': + - code [ref=e8956]: "- [x] T005 [P] Add or extend failing unit coverage in `apps/platform/tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php` for fresh queued, stale queued, fresh running, stale running, determinate-progress stale running, unsupported lifecycle, and reconciled-terminal cases." + - 'row "39 + - [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." [ref=e8957]': + - cell [ref=e8958] + - cell "39" [ref=e8959]: "39" + - cell [ref=e8960] + - cell "+" [ref=e8961]: + - generic [ref=e8962]: + + - 'cell "- [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." [ref=e8963]': + - code [ref=e8964]: "- [x] T006 [P] Add or extend focused feature coverage in `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`, `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` proving that stale-active runs do not mix stale attention with ordinary queue/progress reassurance." + - 'row "40 + - [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." [ref=e8965]': + - cell [ref=e8966] + - cell "40" [ref=e8967]: "40" + - cell [ref=e8968] + - cell "+" [ref=e8969]: + - generic [ref=e8970]: + + - 'cell "- [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." [ref=e8971]': + - code [ref=e8972]: "- [x] T007 Freeze the canonical derivation boundary in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, `apps/platform/app/Support/OpsUx/OperationUxPresenter.php`, and `apps/platform/app/Support/Operations/OperationRunFreshnessState.php` without introducing new persisted state or a new registry." + - row "41 +" [ref=e8973]: + - cell [ref=e8974] + - cell "41" [ref=e8975]: "41" + - cell [ref=e8976] + - cell "+" [ref=e8977]: + - generic [ref=e8978]: + + - cell [ref=e8979]: + - code + - 'row "42 + **Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." [ref=e8980]': + - cell [ref=e8981] + - cell "42" [ref=e8982]: "42" + - cell [ref=e8983] + - cell "+" [ref=e8984]: + - generic [ref=e8985]: + + - 'cell "**Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." [ref=e8986]': + - code [ref=e8987]: "**Checkpoint**: Generic queue truth is derived from one aligned helper path before shell/list/detail surfaces are edited." + - row "43 +" [ref=e8988]: + - cell [ref=e8989] + - cell "43" [ref=e8990]: "43" + - cell [ref=e8991] + - cell "+" [ref=e8992]: + - generic [ref=e8993]: + + - cell [ref=e8994]: + - code + - row "44 + ---" [ref=e8995]: + - cell [ref=e8996] + - cell "44" [ref=e8997]: "44" + - cell [ref=e8998] + - cell "+" [ref=e8999]: + - generic [ref=e9000]: + + - cell "---" [ref=e9001]: + - code [ref=e9002]: "---" + - row "45 +" [ref=e9003]: + - cell [ref=e9004] + - cell "45" [ref=e9005]: "45" + - cell [ref=e9006] + - cell "+" [ref=e9007]: + - generic [ref=e9008]: + + - cell [ref=e9009]: + - code + - 'row "46 + ## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e9010]': + - cell [ref=e9011] + - cell "46" [ref=e9012]: "46" + - cell [ref=e9013] + - cell "+" [ref=e9014]: + - generic [ref=e9015]: + + - 'cell "## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" [ref=e9016]': + - code [ref=e9017]: "## Phase 3: User Story 1 - See honest queued and stale truth on active monitoring surfaces (Priority: P1)" + - row "47 +" [ref=e9018]: + - cell [ref=e9019] + - cell "47" [ref=e9020]: "47" + - cell [ref=e9021] + - cell "+" [ref=e9022]: + - generic [ref=e9023]: + + - cell [ref=e9024]: + - code + - 'row "48 + **Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." [ref=e9025]': + - cell [ref=e9026] + - cell "48" [ref=e9027]: "48" + - cell [ref=e9028] + - cell "+" [ref=e9029]: + - generic [ref=e9030]: + + - 'cell "**Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." [ref=e9031]': + - code [ref=e9032]: "**Goal**: shell and list surfaces no longer mix stale-active attention with calm queue or progress reassurance." + - row "49 +" [ref=e9033]: + - cell [ref=e9034] + - cell "49" [ref=e9035]: "49" + - cell [ref=e9036] + - cell "+" [ref=e9037]: + - generic [ref=e9038]: + + - cell [ref=e9039]: + - code + - 'row "50 + **Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." [ref=e9040]': + - cell [ref=e9041] + - cell "50" [ref=e9042]: "50" + - cell [ref=e9043] + - cell "+" [ref=e9044]: + - generic [ref=e9045]: + + - 'cell "**Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." [ref=e9046]': + - code [ref=e9047]: "**Independent Test**: seed fresh and stale queued/running runs, render the shell hint and operations list, and verify that only fresh active work keeps calm queue/progress copy." + - row "51 +" [ref=e9048]: + - cell [ref=e9049] + - cell "51" [ref=e9050]: "51" + - cell [ref=e9051] + - cell "+" [ref=e9052]: + - generic [ref=e9053]: + + - cell [ref=e9054]: + - code + - 'row "52 + ### Tests for User Story 1" [ref=e9055]': + - cell [ref=e9056] + - cell "52" [ref=e9057]: "52" + - cell [ref=e9058] + - cell "+" [ref=e9059]: + - generic [ref=e9060]: + + - cell "### Tests for User Story 1" [ref=e9061]: + - code [ref=e9062]: "### Tests for User Story 1" + - row "53 +" [ref=e9063]: + - cell [ref=e9064] + - cell "53" [ref=e9065]: "53" + - cell [ref=e9066] + - cell "+" [ref=e9067]: + - generic [ref=e9068]: + + - cell [ref=e9069]: + - code + - 'row "54 + - [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." [ref=e9070]': + - cell [ref=e9071] + - cell "54" [ref=e9072]: "54" + - cell [ref=e9073] + - cell "+" [ref=e9074]: + - generic [ref=e9075]: + + - 'cell "- [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." [ref=e9076]': + - code [ref=e9077]: "- [x] T008 [P] [US1] Extend `apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php` and `apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php` for stale queued, stale running, and determinate-progress stale-running shell cases." + - 'row "55 + - [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." [ref=e9078]': + - cell [ref=e9079] + - cell "55" [ref=e9080]: "55" + - cell [ref=e9081] + - cell "+" [ref=e9082]: + - generic [ref=e9083]: + + - 'cell "- [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." [ref=e9084]': + - code [ref=e9085]: "- [x] T009 [P] [US1] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php` for operations-list row truth and lifecycle-attention alignment." + - row "56 +" [ref=e9086]: + - cell [ref=e9087] + - cell "56" [ref=e9088]: "56" + - cell [ref=e9089] + - cell "+" [ref=e9090]: + - generic [ref=e9091]: + + - cell [ref=e9092]: + - code + - 'row "57 + ### Implementation for User Story 1" [ref=e9093]': + - cell [ref=e9094] + - cell "57" [ref=e9095]: "57" + - cell [ref=e9096] + - cell "+" [ref=e9097]: + - generic [ref=e9098]: + + - cell "### Implementation for User Story 1" [ref=e9099]: + - code [ref=e9100]: "### Implementation for User Story 1" + - row "58 +" [ref=e9101]: + - cell [ref=e9102] + - cell "58" [ref=e9103]: "58" + - cell [ref=e9104] + - cell "+" [ref=e9105]: + - generic [ref=e9106]: + + - cell [ref=e9107]: + - code + - 'row "59 + - [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." [ref=e9108]': + - cell [ref=e9109] + - cell "59" [ref=e9110]: "59" + - cell [ref=e9111] + - cell "+" [ref=e9112]: + - generic [ref=e9113]: + + - 'cell "- [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." [ref=e9114]': + - code [ref=e9115]: "- [x] T010 [US1] Align generic progress and queue guidance in `apps/platform/app/Support/OpsUx/OperationRunProgressContract.php`, `apps/platform/app/Support/OpsUx/RunDurationInsights.php`, and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so stale-active work no longer presents ordinary queue/progress reassurance." + - 'row "60 + - [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." [ref=e9116]': + - cell [ref=e9117] + - cell "60" [ref=e9118]: "60" + - cell [ref=e9119] + - cell "+" [ref=e9120]: + - generic [ref=e9121]: + + - 'cell "- [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." [ref=e9122]': + - code [ref=e9123]: "- [x] T011 [US1] Update `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php` so the shell activity hint consumes the aligned generic queue truth without local contradictory fallback copy." + - 'row "61 + - [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." [ref=e9124]': + - cell [ref=e9125] + - cell "61" [ref=e9126]: "61" + - cell [ref=e9127] + - cell "+" [ref=e9128]: + - generic [ref=e9129]: + + - 'cell "- [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." [ref=e9130]': + - code [ref=e9131]: "- [x] T012 [US1] Update `apps/platform/app/Filament/Pages/Monitoring/Operations.php` and `apps/platform/app/Filament/Resources/OperationRunResource.php` only as needed so the route-backed operations hub plus the shared table/detail summaries expose the same generic queue truth." + - row "62 +" [ref=e9132]: + - cell [ref=e9133] + - cell "62" [ref=e9134]: "62" + - cell [ref=e9135] + - cell "+" [ref=e9136]: + - generic [ref=e9137]: + + - cell [ref=e9138]: + - code + - 'row "63 + **Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." [ref=e9139]': + - cell [ref=e9140] + - cell "63" [ref=e9141]: "63" + - cell [ref=e9142] + - cell "+" [ref=e9143]: + - generic [ref=e9144]: + + - 'cell "**Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." [ref=e9145]': + - code [ref=e9146]: "**Checkpoint**: User Story 1 is independently functional when stale-active work reads honestly on shell and list surfaces." + - row "64 +" [ref=e9147]: + - cell [ref=e9148] + - cell "64" [ref=e9149]: "64" + - cell [ref=e9150] + - cell "+" [ref=e9151]: + - generic [ref=e9152]: + + - cell [ref=e9153]: + - code + - row "65 + ---" [ref=e9154]: + - cell [ref=e9155] + - cell "65" [ref=e9156]: "65" + - cell [ref=e9157] + - cell "+" [ref=e9158]: + - generic [ref=e9159]: + + - cell "---" [ref=e9160]: + - code [ref=e9161]: "---" + - row "66 +" [ref=e9162]: + - cell [ref=e9163] + - cell "66" [ref=e9164]: "66" + - cell [ref=e9165] + - cell "+" [ref=e9166]: + - generic [ref=e9167]: + + - cell [ref=e9168]: + - code + - 'row "67 + ## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e9169]': + - cell [ref=e9170] + - cell "67" [ref=e9171]: "67" + - cell [ref=e9172] + - cell "+" [ref=e9173]: + - generic [ref=e9174]: + + - 'cell "## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" [ref=e9175]': + - code [ref=e9176]: "## Phase 4: User Story 2 - Keep canonical run detail aligned with generic queue truth (Priority: P1)" + - row "68 +" [ref=e9177]: + - cell [ref=e9178] + - cell "68" [ref=e9179]: "68" + - cell [ref=e9180] + - cell "+" [ref=e9181]: + - generic [ref=e9182]: + + - cell [ref=e9183]: + - code + - 'row "69 + **Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." [ref=e9184]': + - cell [ref=e9185] + - cell "69" [ref=e9186]: "69" + - cell [ref=e9187] + - cell "+" [ref=e9188]: + - generic [ref=e9189]: + + - 'cell "**Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." [ref=e9190]': + - code [ref=e9191]: "**Goal**: canonical run detail confirms the same lifecycle meaning before deeper diagnostics render." + - row "70 +" [ref=e9192]: + - cell [ref=e9193] + - cell "70" [ref=e9194]: "70" + - cell [ref=e9195] + - cell "+" [ref=e9196]: + - generic [ref=e9197]: + + - cell [ref=e9198]: + - code + - 'row "71 + **Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." [ref=e9199]': + - cell [ref=e9200] + - cell "71" [ref=e9201]: "71" + - cell [ref=e9202] + - cell "+" [ref=e9203]: + - generic [ref=e9204]: + + - 'cell "**Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." [ref=e9205]': + - code [ref=e9206]: "**Independent Test**: open canonical detail for fresh, stale, and reconciled runs and verify that top-level lifecycle guidance matches shell/list semantics." + - row "72 +" [ref=e9207]: + - cell [ref=e9208] + - cell "72" [ref=e9209]: "72" + - cell [ref=e9210] + - cell "+" [ref=e9211]: + - generic [ref=e9212]: + + - cell [ref=e9213]: + - code + - 'row "73 + ### Tests for User Story 2" [ref=e9214]': + - cell [ref=e9215] + - cell "73" [ref=e9216]: "73" + - cell [ref=e9217] + - cell "+" [ref=e9218]: + - generic [ref=e9219]: + + - cell "### Tests for User Story 2" [ref=e9220]: + - code [ref=e9221]: "### Tests for User Story 2" + - row "74 +" [ref=e9222]: + - cell [ref=e9223] + - cell "74" [ref=e9224]: "74" + - cell [ref=e9225] + - cell "+" [ref=e9226]: + - generic [ref=e9227]: + + - cell [ref=e9228]: + - code + - 'row "75 + - [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." [ref=e9229]': + - cell [ref=e9230] + - cell "75" [ref=e9231]: "75" + - cell [ref=e9232] + - cell "+" [ref=e9233]: + - generic [ref=e9234]: + + - 'cell "- [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." [ref=e9235]': + - code [ref=e9236]: "- [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php` and `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` for fresh, stale, and reconciled-terminal top-summary behavior." + - 'row "76 + - [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." [ref=e9237]': + - cell [ref=e9238] + - cell "76" [ref=e9239]: "76" + - cell [ref=e9240] + - cell "+" [ref=e9241]: + - generic [ref=e9242]: + + - 'cell "- [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." [ref=e9243]': + - code [ref=e9244]: "- [x] T014 [P] [US2] Extend `apps/platform/tests/Feature/Monitoring/MonitoringOperationsTest.php` for compact-to-detail continuity where the same run is opened from the list after stale-active presentation." + - row "77 +" [ref=e9245]: + - cell [ref=e9246] + - cell "77" [ref=e9247]: "77" + - cell [ref=e9248] + - cell "+" [ref=e9249]: + - generic [ref=e9250]: + + - cell [ref=e9251]: + - code + - 'row "78 + ### Implementation for User Story 2" [ref=e9252]': + - cell [ref=e9253] + - cell "78" [ref=e9254]: "78" + - cell [ref=e9255] + - cell "+" [ref=e9256]: + - generic [ref=e9257]: + + - cell "### Implementation for User Story 2" [ref=e9258]: + - code [ref=e9259]: "### Implementation for User Story 2" + - row "79 +" [ref=e9260]: + - cell [ref=e9261] + - cell "79" [ref=e9262]: "79" + - cell [ref=e9263] + - cell "+" [ref=e9264]: + - generic [ref=e9265]: + + - cell [ref=e9266]: + - code + - 'row "80 + - [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." [ref=e9267]': + - cell [ref=e9268] + - cell "80" [ref=e9269]: "80" + - cell [ref=e9270] + - cell "+" [ref=e9271]: + - generic [ref=e9272]: + + - 'cell "- [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." [ref=e9273]': + - code [ref=e9274]: "- [x] T015 [US2] Update `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php` so lifecycle banners and detail guidance reflect the aligned generic queue truth before raw diagnostics." + - 'row "81 + - [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." [ref=e9275]': + - cell [ref=e9276] + - cell "81" [ref=e9277]: "81" + - cell [ref=e9278] + - cell "+" [ref=e9279]: + - generic [ref=e9280]: + + - 'cell "- [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." [ref=e9281]': + - code [ref=e9282]: "- [x] T016 [US2] Update `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` and any touched `OperationRunResource` summary helpers so canonical detail and resource detail stay aligned." + - row "82 +" [ref=e9283]: + - cell [ref=e9284] + - cell "82" [ref=e9285]: "82" + - cell [ref=e9286] + - cell "+" [ref=e9287]: + - generic [ref=e9288]: + + - cell [ref=e9289]: + - code + - 'row "83 + **Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." [ref=e9290]': + - cell [ref=e9291] + - cell "83" [ref=e9292]: "83" + - cell [ref=e9293] + - cell "+" [ref=e9294]: + - generic [ref=e9295]: + + - 'cell "**Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." [ref=e9296]': + - code [ref=e9297]: "**Checkpoint**: User Story 2 is independently functional when canonical detail confirms, rather than contradicts, generic queue truth." + - row "84 +" [ref=e9298]: + - cell [ref=e9299] + - cell "84" [ref=e9300]: "84" + - cell [ref=e9301] + - cell "+" [ref=e9302]: + - generic [ref=e9303]: + + - cell [ref=e9304]: + - code + - row "85 + ---" [ref=e9305]: + - cell [ref=e9306] + - cell "85" [ref=e9307]: "85" + - cell [ref=e9308] + - cell "+" [ref=e9309]: + - generic [ref=e9310]: + + - cell "---" [ref=e9311]: + - code [ref=e9312]: "---" + - row "86 +" [ref=e9313]: + - cell [ref=e9314] + - cell "86" [ref=e9315]: "86" + - cell [ref=e9316] + - cell "+" [ref=e9317]: + - generic [ref=e9318]: + + - cell [ref=e9319]: + - code + - 'row "87 + ## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e9320]': + - cell [ref=e9321] + - cell "87" [ref=e9322]: "87" + - cell [ref=e9323] + - cell "+" [ref=e9324]: + - generic [ref=e9325]: + + - 'cell "## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" [ref=e9326]': + - code [ref=e9327]: "## Phase 5: User Story 3 - Keep proof-backed reconciliation separate from generic queue truth (Priority: P2)" + - row "88 +" [ref=e9328]: + - cell [ref=e9329] + - cell "88" [ref=e9330]: "88" + - cell [ref=e9331] + - cell "+" [ref=e9332]: + - generic [ref=e9333]: + + - cell [ref=e9334]: + - code + - 'row "89 + **Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." [ref=e9335]': + - cell [ref=e9336] + - cell "89" [ref=e9337]: "89" + - cell [ref=e9338] + - cell "+" [ref=e9339]: + - generic [ref=e9340]: + + - 'cell "**Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." [ref=e9341]': + - code [ref=e9342]: "**Goal**: generic stale wording stays cautious, while existing scheduled/adapter reconciliation remains authoritative for terminal truth." + - row "90 +" [ref=e9343]: + - cell [ref=e9344] + - cell "90" [ref=e9345]: "90" + - cell [ref=e9346] + - cell "+" [ref=e9347]: + - generic [ref=e9348]: + + - cell [ref=e9349]: + - code + - 'row "91 + **Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." [ref=e9350]': + - cell [ref=e9351] + - cell "91" [ref=e9352]: "91" + - cell [ref=e9353] + - cell "+" [ref=e9354]: + - generic [ref=e9355]: + + - 'cell "**Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." [ref=e9356]': + - code [ref=e9357]: "**Independent Test**: compare stale active runs and already-reconciled terminal runs to verify that cautious generic wording and existing reconciled semantics both survive." + - row "92 +" [ref=e9358]: + - cell [ref=e9359] + - cell "92" [ref=e9360]: "92" + - cell [ref=e9361] + - cell "+" [ref=e9362]: + - generic [ref=e9363]: + + - cell [ref=e9364]: + - code + - 'row "93 + ### Tests for User Story 3" [ref=e9365]': + - cell [ref=e9366] + - cell "93" [ref=e9367]: "93" + - cell [ref=e9368] + - cell "+" [ref=e9369]: + - generic [ref=e9370]: + + - cell "### Tests for User Story 3" [ref=e9371]: + - code [ref=e9372]: "### Tests for User Story 3" + - row "94 +" [ref=e9373]: + - cell [ref=e9374] + - cell "94" [ref=e9375]: "94" + - cell [ref=e9376] + - cell "+" [ref=e9377]: + - generic [ref=e9378]: + + - cell [ref=e9379]: + - code + - 'row "95 + - [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." [ref=e9380]': + - cell [ref=e9381] + - cell "95" [ref=e9382]: "95" + - cell [ref=e9383] + - cell "+" [ref=e9384]: + - generic [ref=e9385]: + + - 'cell "- [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." [ref=e9386]': + - code [ref=e9387]: "- [x] T017 [P] [US3] Extend unit or feature coverage, including `apps/platform/tests/Feature/MonitoringOperationsTest.php` where the operations aggregate wording is already asserted, so stale active runs without strong legitimacy evidence do not claim orphaned or domain-complete truth while existing scheduled/adapter-reconciled terminal runs keep their terminal semantics." + - 'row "96 + - [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." [ref=e9388]': + - cell [ref=e9389] + - cell "96" [ref=e9390]: "96" + - cell [ref=e9391] + - cell "+" [ref=e9392]: + - generic [ref=e9393]: + + - 'cell "- [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." [ref=e9394]': + - code [ref=e9395]: "- [x] T018 [P] [US3] Extend `apps/platform/tests/Feature/Operations/TenantlessOperationRunViewerTest.php` or the nearest focused monitoring suite for reconciled-terminal detail language regression protection." + - row "97 +" [ref=e9396]: + - cell [ref=e9397] + - cell "97" [ref=e9398]: "97" + - cell [ref=e9399] + - cell "+" [ref=e9400]: + - generic [ref=e9401]: + + - cell [ref=e9402]: + - code + - 'row "98 + ### Implementation for User Story 3" [ref=e9403]': + - cell [ref=e9404] + - cell "98" [ref=e9405]: "98" + - cell [ref=e9406] + - cell "+" [ref=e9407]: + - generic [ref=e9408]: + + - cell "### Implementation for User Story 3" [ref=e9409]: + - code [ref=e9410]: "### Implementation for User Story 3" + - row "99 +" [ref=e9411]: + - cell [ref=e9412] + - cell "99" [ref=e9413]: "99" + - cell [ref=e9414] + - cell "+" [ref=e9415]: + - generic [ref=e9416]: + + - cell [ref=e9417]: + - code + - 'row "100 + - [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." [ref=e9418]': + - cell [ref=e9419] + - cell "100" [ref=e9420]: "100" + - cell [ref=e9421] + - cell "+" [ref=e9422]: + - generic [ref=e9423]: + + - 'cell "- [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." [ref=e9424]': + - code [ref=e9425]: "- [x] T019 [US3] Tighten cautious stale-active wording in `apps/platform/app/Support/OpsUx/RunDurationInsights.php` and `apps/platform/app/Support/OpsUx/OperationUxPresenter.php` so the generic path says only what current lifecycle truth can prove." + - 'row "101 + - [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." [ref=e9426]': + - cell [ref=e9427] + - cell "101" [ref=e9428]: "101" + - cell [ref=e9429] + - cell "+" [ref=e9430]: + - generic [ref=e9431]: + + - 'cell "- [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." [ref=e9432]': + - code [ref=e9433]: "- [x] T020 [US3] Confirm `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php` and `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php` need no runtime change and document that no command-layer change was required." + - row "102 +" [ref=e9434]: + - cell [ref=e9435] + - cell "102" [ref=e9436]: "102" + - cell [ref=e9437] + - cell "+" [ref=e9438]: + - generic [ref=e9439]: + + - cell [ref=e9440]: + - code + - 'row "103 + **Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." [ref=e9441]': + - cell [ref=e9442] + - cell "103" [ref=e9443]: "103" + - cell [ref=e9444] + - cell "+" [ref=e9445]: + - generic [ref=e9446]: + + - 'cell "**Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." [ref=e9447]': + - code [ref=e9448]: "**Checkpoint**: User Story 3 is independently functional when generic stale wording stays cautious and existing terminal reconciliation remains intact." + - row "104 +" [ref=e9449]: + - cell [ref=e9450] + - cell "104" [ref=e9451]: "104" + - cell [ref=e9452] + - cell "+" [ref=e9453]: + - generic [ref=e9454]: + + - cell [ref=e9455]: + - code + - row "105 + ---" [ref=e9456]: + - cell [ref=e9457] + - cell "105" [ref=e9458]: "105" + - cell [ref=e9459] + - cell "+" [ref=e9460]: + - generic [ref=e9461]: + + - cell "---" [ref=e9462]: + - code [ref=e9463]: "---" + - row "106 +" [ref=e9464]: + - cell [ref=e9465] + - cell "106" [ref=e9466]: "106" + - cell [ref=e9467] + - cell "+" [ref=e9468]: + - generic [ref=e9469]: + + - cell [ref=e9470]: + - code + - 'row "107 + ## Phase 6: Polish & Cross-Cutting Validation" [ref=e9471]': + - cell [ref=e9472] + - cell "107" [ref=e9473]: "107" + - cell [ref=e9474] + - cell "+" [ref=e9475]: + - generic [ref=e9476]: + + - 'cell "## Phase 6: Polish & Cross-Cutting Validation" [ref=e9477]': + - code [ref=e9478]: "## Phase 6: Polish & Cross-Cutting Validation" + - row "108 +" [ref=e9479]: + - cell [ref=e9480] + - cell "108" [ref=e9481]: "108" + - cell [ref=e9482] + - cell "+" [ref=e9483]: + - generic [ref=e9484]: + + - cell [ref=e9485]: + - code + - 'row "109 + **Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." [ref=e9486]': + - cell [ref=e9487] + - cell "109" [ref=e9488]: "109" + - cell [ref=e9489] + - cell "+" [ref=e9490]: + - generic [ref=e9491]: + + - 'cell "**Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." [ref=e9492]': + - code [ref=e9493]: "**Purpose**: validate the bounded slice, stop drift, and hand off a clean implementation path." + - row "110 +" [ref=e9494]: + - cell [ref=e9495] + - cell "110" [ref=e9496]: "110" + - cell [ref=e9497] + - cell "+" [ref=e9498]: + - generic [ref=e9499]: + + - cell [ref=e9500]: + - code + - 'row "111 + - [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." [ref=e9501]': + - cell [ref=e9502] + - cell "111" [ref=e9503]: "111" + - cell [ref=e9504] + - cell "+" [ref=e9505]: + - generic [ref=e9506]: + + - 'cell "- [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." [ref=e9507]': + - code [ref=e9508]: "- [x] T021 [P] Refresh `specs/358-operationrun-queue-truth-foundation/spec.md`, `plan.md`, and `checklists/requirements.md` only if implementation proves a thinner or broader touched-file boundary." + - 'row "112 + - [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." [ref=e9509]': + - cell [ref=e9510] + - cell "112" [ref=e9511]: "112" + - cell [ref=e9512] + - cell "+" [ref=e9513]: + - generic [ref=e9514]: + + - 'cell "- [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." [ref=e9515]': + - code [ref=e9516]: "- [x] T022 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`." + - 'row "113 + - [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e9517]': + - cell [ref=e9518] + - cell "113" [ref=e9519]: "113" + - cell [ref=e9520] + - cell "+" [ref=e9521]: + - generic [ref=e9522]: + + - 'cell "- [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." [ref=e9523]': + - code [ref=e9524]: "- [x] T023 [P] Run `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`." + - 'row "114 + - [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." [ref=e9525]': + - cell [ref=e9526] + - cell "114" [ref=e9527]: "114" + - cell [ref=e9528] + - cell "+" [ref=e9529]: + - generic [ref=e9530]: + + - 'cell "- [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." [ref=e9531]': + - code [ref=e9532]: "- [x] T024 [P] Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` for touched platform files." + - 'row "115 + - [x] T025 [P] Run `git diff --check`." [ref=e9533]': + - cell [ref=e9534] + - cell "115" [ref=e9535]: "115" + - cell [ref=e9536] + - cell "+" [ref=e9537]: + - generic [ref=e9538]: + + - 'cell "- [x] T025 [P] Run `git diff --check`." [ref=e9539]': + - code [ref=e9540]: "- [x] T025 [P] Run `git diff --check`." + - 'row "116 + - [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." [ref=e9541]': + - cell [ref=e9542] + - cell "116" [ref=e9543]: "116" + - cell [ref=e9544] + - cell "+" [ref=e9545]: + - generic [ref=e9546]: + + - 'cell "- [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." [ref=e9547]': + - code [ref=e9548]: "- [x] T026 [P] Record the final queue-truth wording, proof boundaries, and any retained cautious-language decisions in the active feature close-out entry `Guardrail / Smoke Coverage`." + - row "117 +" [ref=e9549]: + - cell [ref=e9550] + - cell "117" [ref=e9551]: "117" + - cell [ref=e9552] + - cell "+" [ref=e9553]: + - generic [ref=e9554]: + + - cell [ref=e9555]: + - code + - row "118 + ---" [ref=e9556]: + - cell [ref=e9557] + - cell "118" [ref=e9558]: "118" + - cell [ref=e9559] + - cell "+" [ref=e9560]: + - generic [ref=e9561]: + + - cell "---" [ref=e9562]: + - code [ref=e9563]: "---" + - row "119 +" [ref=e9564]: + - cell [ref=e9565] + - cell "119" [ref=e9566]: "119" + - cell [ref=e9567] + - cell "+" [ref=e9568]: + - generic [ref=e9569]: + + - cell [ref=e9570]: + - code + - 'row "120 + ## Dependencies & Execution Order" [ref=e9571]': + - cell [ref=e9572] + - cell "120" [ref=e9573]: "120" + - cell [ref=e9574] + - cell "+" [ref=e9575]: + - generic [ref=e9576]: + + - cell "## Dependencies & Execution Order" [ref=e9577]: + - code [ref=e9578]: "## Dependencies & Execution Order" + - row "121 +" [ref=e9579]: + - cell [ref=e9580] + - cell "121" [ref=e9581]: "121" + - cell [ref=e9582] + - cell "+" [ref=e9583]: + - generic [ref=e9584]: + + - cell [ref=e9585]: + - code + - 'row "122 + ### Phase Dependencies" [ref=e9586]': + - cell [ref=e9587] + - cell "122" [ref=e9588]: "122" + - cell [ref=e9589] + - cell "+" [ref=e9590]: + - generic [ref=e9591]: + + - cell "### Phase Dependencies" [ref=e9592]: + - code [ref=e9593]: "### Phase Dependencies" + - row "123 +" [ref=e9594]: + - cell [ref=e9595] + - cell "123" [ref=e9596]: "123" + - cell [ref=e9597] + - cell "+" [ref=e9598]: + - generic [ref=e9599]: + + - cell [ref=e9600]: + - code + - 'row "124 + - **Setup (Phase 1)**: no dependencies" [ref=e9601]': + - cell [ref=e9602] + - cell "124" [ref=e9603]: "124" + - cell [ref=e9604] + - cell "+" [ref=e9605]: + - generic [ref=e9606]: + + - 'cell "- **Setup (Phase 1)**: no dependencies" [ref=e9607]': + - code [ref=e9608]: "- **Setup (Phase 1)**: no dependencies" + - 'row "125 + - **Foundational (Phase 2)**: depends on Setup and blocks all story work" [ref=e9609]': + - cell [ref=e9610] + - cell "125" [ref=e9611]: "125" + - cell [ref=e9612] + - cell "+" [ref=e9613]: + - generic [ref=e9614]: + + - 'cell "- **Foundational (Phase 2)**: depends on Setup and blocks all story work" [ref=e9615]': + - code [ref=e9616]: "- **Foundational (Phase 2)**: depends on Setup and blocks all story work" + - 'row "126 + - **US1 (Phase 3)**: depends on Foundational completion" [ref=e9617]': + - cell [ref=e9618] + - cell "126" [ref=e9619]: "126" + - cell [ref=e9620] + - cell "+" [ref=e9621]: + - generic [ref=e9622]: + + - 'cell "- **US1 (Phase 3)**: depends on Foundational completion" [ref=e9623]': + - code [ref=e9624]: "- **US1 (Phase 3)**: depends on Foundational completion" + - 'row "127 + - **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" [ref=e9625]': + - cell [ref=e9626] + - cell "127" [ref=e9627]: "127" + - cell [ref=e9628] + - cell "+" [ref=e9629]: + - generic [ref=e9630]: + + - 'cell "- **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" [ref=e9631]': + - code [ref=e9632]: "- **US2 (Phase 4)**: depends on Foundational completion and is easiest after US1 settles the shared wording" + - 'row "128 + - **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" [ref=e9633]': + - cell [ref=e9634] + - cell "128" [ref=e9635]: "128" + - cell [ref=e9636] + - cell "+" [ref=e9637]: + - generic [ref=e9638]: + + - 'cell "- **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" [ref=e9639]': + - code [ref=e9640]: "- **US3 (Phase 5)**: depends on US1 and US2 because it confirms the final generic truth boundary" + - 'row "129 + - **Polish (Phase 6)**: depends on all desired user stories" [ref=e9641]': + - cell [ref=e9642] + - cell "129" [ref=e9643]: "129" + - cell [ref=e9644] + - cell "+" [ref=e9645]: + - generic [ref=e9646]: + + - 'cell "- **Polish (Phase 6)**: depends on all desired user stories" [ref=e9647]': + - code [ref=e9648]: "- **Polish (Phase 6)**: depends on all desired user stories" + - row "130 +" [ref=e9649]: + - cell [ref=e9650] + - cell "130" [ref=e9651]: "130" + - cell [ref=e9652] + - cell "+" [ref=e9653]: + - generic [ref=e9654]: + + - cell [ref=e9655]: + - code + - 'row "131 + ### Parallel Opportunities" [ref=e9656]': + - cell [ref=e9657] + - cell "131" [ref=e9658]: "131" + - cell [ref=e9659] + - cell "+" [ref=e9660]: + - generic [ref=e9661]: + + - cell "### Parallel Opportunities" [ref=e9662]: + - code [ref=e9663]: "### Parallel Opportunities" + - row "132 +" [ref=e9664]: + - cell [ref=e9665] + - cell "132" [ref=e9666]: "132" + - cell [ref=e9667] + - cell "+" [ref=e9668]: + - generic [ref=e9669]: + + - cell [ref=e9670]: + - code + - 'row "133 + - `T002`, `T003`, and `T004` can run in parallel." [ref=e9671]': + - cell [ref=e9672] + - cell "133" [ref=e9673]: "133" + - cell [ref=e9674] + - cell "+" [ref=e9675]: + - generic [ref=e9676]: + + - 'cell "- `T002`, `T003`, and `T004` can run in parallel." [ref=e9677]': + - code [ref=e9678]: "- `T002`, `T003`, and `T004` can run in parallel." + - 'row "134 + - `T005` and `T006` can run in parallel after the current contradiction is confirmed." [ref=e9679]': + - cell [ref=e9680] + - cell "134" [ref=e9681]: "134" + - cell [ref=e9682] + - cell "+" [ref=e9683]: + - generic [ref=e9684]: + + - 'cell "- `T005` and `T006` can run in parallel after the current contradiction is confirmed." [ref=e9685]': + - code [ref=e9686]: "- `T005` and `T006` can run in parallel after the current contradiction is confirmed." + - 'row "135 + - `T008` and `T009` can run in parallel." [ref=e9687]': + - cell [ref=e9688] + - cell "135" [ref=e9689]: "135" + - cell [ref=e9690] + - cell "+" [ref=e9691]: + - generic [ref=e9692]: + + - 'cell "- `T008` and `T009` can run in parallel." [ref=e9693]': + - code [ref=e9694]: "- `T008` and `T009` can run in parallel." + - 'row "136 + - `T013` and `T014` can run in parallel." [ref=e9695]': + - cell [ref=e9696] + - cell "136" [ref=e9697]: "136" + - cell [ref=e9698] + - cell "+" [ref=e9699]: + - generic [ref=e9700]: + + - 'cell "- `T013` and `T014` can run in parallel." [ref=e9701]': + - code [ref=e9702]: "- `T013` and `T014` can run in parallel." + - 'row "137 + - `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." [ref=e9703]': + - cell [ref=e9704] + - cell "137" [ref=e9705]: "137" + - cell [ref=e9706] + - cell "+" [ref=e9707]: + - generic [ref=e9708]: + + - 'cell "- `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." [ref=e9709]': + - code [ref=e9710]: "- `T022`, `T023`, `T024`, and `T025` can run in parallel after implementation is stable." + - row "138 +" [ref=e9711]: + - cell [ref=e9712] + - cell "138" [ref=e9713]: "138" + - cell [ref=e9714] + - cell "+" [ref=e9715]: + - generic [ref=e9716]: + + - cell [ref=e9717]: + - code + - 'row "139 + ### Implementation Strategy" [ref=e9718]': + - cell [ref=e9719] + - cell "139" [ref=e9720]: "139" + - cell [ref=e9721] + - cell "+" [ref=e9722]: + - generic [ref=e9723]: + + - cell "### Implementation Strategy" [ref=e9724]: + - code [ref=e9725]: "### Implementation Strategy" + - row "140 +" [ref=e9726]: + - cell [ref=e9727] + - cell "140" [ref=e9728]: "140" + - cell [ref=e9729] + - cell "+" [ref=e9730]: + - generic [ref=e9731]: + + - cell [ref=e9732]: + - code + - row "141 + 1. Freeze the shared queue-truth derivation first." [ref=e9733]: + - cell [ref=e9734] + - cell "141" [ref=e9735]: "141" + - cell [ref=e9736] + - cell "+" [ref=e9737]: + - generic [ref=e9738]: + + - cell "1. Freeze the shared queue-truth derivation first." [ref=e9739]: + - code [ref=e9740]: 1. Freeze the shared queue-truth derivation first. + - row "142 + 2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces." [ref=e9741]: + - cell [ref=e9742] + - cell "142" [ref=e9743]: "142" + - cell [ref=e9744] + - cell "+" [ref=e9745]: + - generic [ref=e9746]: + + - cell "2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces." [ref=e9747]: + - code [ref=e9748]: 2. Ship US1 to remove the stale-vs-queue contradiction on shell/list surfaces. + - row "143 + 3. Ship US2 so canonical detail confirms the same truth." [ref=e9749]: + - cell [ref=e9750] + - cell "143" [ref=e9751]: "143" + - cell [ref=e9752] + - cell "+" [ref=e9753]: + - generic [ref=e9754]: + + - cell "3. Ship US2 so canonical detail confirms the same truth." [ref=e9755]: + - code [ref=e9756]: 3. Ship US2 so canonical detail confirms the same truth. + - row "144 + 4. Ship US3 to protect the narrow boundary against overclaiming or framework creep." [ref=e9757]: + - cell [ref=e9758] + - cell "144" [ref=e9759]: "144" + - cell [ref=e9760] + - cell "+" [ref=e9761]: + - generic [ref=e9762]: + + - cell "4. Ship US3 to protect the narrow boundary against overclaiming or framework creep." [ref=e9763]: + - code [ref=e9764]: 4. Ship US3 to protect the narrow boundary against overclaiming or framework creep. + - row "145 + 5. Finish with the focused validation commands and close-out notes." [ref=e9765]: + - cell [ref=e9766] + - cell "145" [ref=e9767]: "145" + - cell [ref=e9768] + - cell "+" [ref=e9769]: + - generic [ref=e9770]: + + - cell "5. Finish with the focused validation commands and close-out notes." [ref=e9771]: + - code [ref=e9772]: 5. Finish with the focused validation commands and close-out notes. + - row "146 +" [ref=e9773]: + - cell [ref=e9774] + - cell "146" [ref=e9775]: "146" + - cell [ref=e9776] + - cell "+" [ref=e9777]: + - generic [ref=e9778]: + + - cell [ref=e9779]: + - code + - 'row "147 + ## Guardrail / Smoke Coverage" [ref=e9780]': + - cell [ref=e9781] + - cell "147" [ref=e9782]: "147" + - cell [ref=e9783] + - cell "+" [ref=e9784]: + - generic [ref=e9785]: + + - cell "## Guardrail / Smoke Coverage" [ref=e9786]: + - code [ref=e9787]: "## Guardrail / Smoke Coverage" + - row "148 +" [ref=e9788]: + - cell [ref=e9789] + - cell "148" [ref=e9790]: "148" + - cell [ref=e9791] + - cell "+" [ref=e9792]: + - generic [ref=e9793]: + + - cell [ref=e9794]: + - code + - 'row "149 + - Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." [ref=e9795]': + - cell [ref=e9796] + - cell "149" [ref=e9797]: "149" + - cell [ref=e9798] + - cell "+" [ref=e9799]: + - generic [ref=e9800]: + + - 'cell "- Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." [ref=e9801]': + - code [ref=e9802]: "- Final queue-truth wording keeps stale-active guidance at `Past the lifecycle window. Review worker health and logs before retrying.` and removes competing calm queue/progress copy from shell, list, and top-level detail surfaces." + - 'row "150 + - Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." [ref=e9803]': + - cell [ref=e9804] + - cell "150" [ref=e9805]: "150" + - cell [ref=e9806] + - cell "+" [ref=e9807]: + - generic [ref=e9808]: + + - 'cell "- Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." [ref=e9809]': + - code [ref=e9810]: "- Proof boundary remains shared-first: `OperationRunProgressContract` owns stale-active progress truth, `OperationUxPresenter` owns aligned lifecycle/detail guidance, and the shell/list/detail surfaces consume those shared seams instead of local fallback wording." + - 'row "151 + - Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." [ref=e9811]': + - cell [ref=e9812] + - cell "151" [ref=e9813]: "151" + - cell [ref=e9814] + - cell "+" [ref=e9815]: + - generic [ref=e9816]: + + - 'cell "- Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." [ref=e9817]': + - code [ref=e9818]: "- Browser smoke path used the real local route `GET /admin/local/smoke-login` and verified `/admin/workspaces/38/operations` followed by the primary `Open operation` drilldown to `/admin/workspaces/38/operations/82`." + - 'row "152 + - Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." [ref=e9819]': + - cell [ref=e9820] + - cell "152" [ref=e9821]: "152" + - cell [ref=e9822] + - cell "+" [ref=e9823]: + - generic [ref=e9824]: + + - 'cell "- Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." [ref=e9825]': + - code [ref=e9826]: "- Browser smoke confirmed stale wording is visible on both hub and detail, while `Waiting for worker.`, `Progress details pending.`, and `4 / 10 processed (40%)` do not appear as primary stale-active guidance." + - 'row "153 + - No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." [ref=e9827]': + - cell [ref=e9828] + - cell "153" [ref=e9829]: "153" + - cell [ref=e9830] + - cell "+" [ref=e9831]: + - generic [ref=e9832]: + + - 'cell "- No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." [ref=e9833]': + - code [ref=e9834]: "- No runtime change was required in `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Filament/Resources/OperationRunResource.php`, `apps/platform/app/Filament/Pages/Operations/TenantlessOperationRunViewer.php`, `apps/platform/app/Console/Commands/TenantpilotReconcileOperationRuns.php`, or `apps/platform/app/Console/Commands/OpsReconcileAdapterRuns.php`; the existing shared seams consumed the contract/presenter updates directly." + - row "154 + - Validation evidence:" [ref=e9835]: + - cell [ref=e9836] + - cell "154" [ref=e9837]: "154" + - cell [ref=e9838] + - cell "+" [ref=e9839]: + - generic [ref=e9840]: + + - cell "- Validation evidence:" [ref=e9841]: + - code [ref=e9842]: "- Validation evidence:" + - 'row "155 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e9843]': + - cell [ref=e9844] + - cell "155" [ref=e9845]: "155" + - cell [ref=e9846] + - cell "+" [ref=e9847]: + - generic [ref=e9848]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" [ref=e9849]': + - code [ref=e9850]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/OpsUx/OperationRunProgressContractTest.php`" + - 'row "156 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e9851]': + - cell [ref=e9852] + - cell "156" [ref=e9853]: "156" + - cell [ref=e9854] + - cell "+" [ref=e9855]: + - generic [ref=e9856]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" [ref=e9857]': + - code [ref=e9858]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php`" + - 'row "157 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e9859]': + - cell [ref=e9860] + - cell "157" [ref=e9861]: "157" + - cell [ref=e9862] + - cell "+" [ref=e9863]: + - generic [ref=e9864]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" [ref=e9865]': + - code [ref=e9866]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/MonitoringOperationsTest.php tests/Feature/Monitoring/OperationLifecycleFreshnessPresentationTest.php tests/Feature/Monitoring/MonitoringOperationsTest.php`" + - 'row "158 + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e9867]': + - cell [ref=e9868] + - cell "158" [ref=e9869]: "158" + - cell [ref=e9870] + - cell "+" [ref=e9871]: + - generic [ref=e9872]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" [ref=e9873]': + - code [ref=e9874]: "- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/OperationRunEnterpriseDetailPageTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php`" + - 'row "159 + - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" [ref=e9875]': + - cell [ref=e9876] + - cell "159" [ref=e9877]: "159" + - cell [ref=e9878] + - cell "+" [ref=e9879]: + - generic [ref=e9880]: + + - 'cell "- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" [ref=e9881]': + - code [ref=e9882]: "- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`" + - 'row "160 + - `git diff --check`" [ref=e9883]': + - cell [ref=e9884] + - cell "160" [ref=e9885]: "160" + - cell [ref=e9886] + - cell "+" [ref=e9887]: + - generic [ref=e9888]: + + - 'cell "- `git diff --check`" [ref=e9889]': + - code [ref=e9890]: "- `git diff --check`" + - group "Fußzeile" [ref=e9891]: + - contentinfo "Über die Software" [ref=e9892]: + - link "Powered by Gitea" [ref=e9893] [cursor=pointer]: + - /url: https://about.gitea.com + - text: "Version: 1.22.3 Seite:" + - strong [ref=e9894]: 766ms + - text: "Template:" + - strong [ref=e9895]: 514ms + - group "Links" [ref=e9896]: + - menu [ref=e9897] [cursor=pointer]: + - generic [ref=e9898]: + - img [ref=e9899] + - text: Deutsch + - link "Lizenzen" [ref=e9901] [cursor=pointer]: + - /url: /assets/licenses.txt + - link "API" [ref=e9902] [cursor=pointer]: + - /url: /api/swagger + - menu [ref=e9906]: + - generic [active] [ref=e9908]: + - menuitem "Releases" [ref=e9909] [cursor=pointer]: + - img [ref=e9910] + - generic [ref=e9912]: Releases + - menuitem "Wiki" [ref=e9913] [cursor=pointer]: + - img [ref=e9914] + - generic [ref=e9916]: Wiki + - menuitem "Aktivität" [ref=e9917] [cursor=pointer]: + - img [ref=e9918] + - generic [ref=e9920]: Aktivität + - img [ref=e9922] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T20-24-13-558Z.yml b/.playwright-mcp/page-2026-06-06T20-24-13-558Z.yml new file mode 100644 index 00000000..29976a44 --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T20-24-13-558Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 380ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-06T20-27-09-786Z.yml b/.playwright-mcp/page-2026-06-06T20-27-09-786Z.yml new file mode 100644 index 00000000..788af688 --- /dev/null +++ b/.playwright-mcp/page-2026-06-06T20-27-09-786Z.yml @@ -0,0 +1,58 @@ +- generic [active] [ref=e1]: + - main [ref=e4]: + - generic [ref=e6]: + - generic [ref=e7]: + - generic [ref=e9]: + - img [ref=e10] + - generic [ref=e13]: TenantPilot + - heading "Sign in" [level=1] [ref=e14] + - generic [ref=e16]: + - link "Sign in with Microsoft" [ref=e17] [cursor=pointer]: + - /url: http://localhost/auth/entra/redirect + - generic [ref=e18]: Admin access requires an environment membership. + - generic: + - status + - generic [ref=e19]: + - generic [ref=e21]: + - generic [ref=e23]: + - generic [ref=e24] [cursor=pointer]: + - text:  + - generic: Request + - text:  + - generic [ref=e25] [cursor=pointer]: + - text:  + - generic: Timeline + - text:  + - generic [ref=e26] [cursor=pointer]: + - text:  + - generic: Views + - generic [ref=e27]: "4" + - generic [ref=e28] [cursor=pointer]: + - text:  + - generic: Queries + - generic [ref=e29]: "2" + - text:  + - generic [ref=e30] [cursor=pointer]: + - text:  + - generic: Livewire + - generic [ref=e31]: "2" + - text:   + - generic [ref=e32]: + - generic [ref=e35] [cursor=pointer]: + - generic:  + - generic [ref=e37] [cursor=pointer]: + - generic:  + - generic [ref=e38] [cursor=pointer]: + - generic:  + - generic: 217ms + - generic [ref=e39]: + - generic:  + - generic: 13MB + - generic [ref=e40]: + - generic:  + - generic: 12.x + - generic [ref=e41] [cursor=pointer]: + - generic:  + - generic: GET admin/login + - text:                                   + - text:  \ No newline at end of file diff --git a/apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php b/apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php index 9d4e29d7..8a2cd918 100644 --- a/apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php +++ b/apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php @@ -7,6 +7,7 @@ use App\Models\Tenant; use App\Support\OperateHub\OperateHubShell; use Filament\Facades\Filament; +use Illuminate\Database\Eloquent\Builder; use RuntimeException; trait ResolvesPanelTenantContext @@ -21,6 +22,20 @@ protected static function resolveTenantContextForCurrentPanel(): ?Tenant return $tenant instanceof Tenant ? $tenant : null; } + if (static::currentPanelId($request) === 'tenant') { + $tenant = Filament::getTenant(); + + if ($tenant instanceof Tenant) { + return $tenant; + } + + $tenant = static::tenantFromRequestPathOrReferer($request); + + if ($tenant instanceof Tenant) { + return $tenant; + } + } + $tenant = Tenant::current(); return $tenant instanceof Tenant ? $tenant : null; @@ -86,6 +101,75 @@ private static function currentPanelId(mixed $request): ?string return 'admin'; } + $refererPath = static::refererPath($request); + + if (is_string($refererPath) && str_starts_with($refererPath, '/admin/t/')) { + return 'tenant'; + } + + if (is_string($refererPath) && str_starts_with($refererPath, '/admin/')) { + return 'admin'; + } + return null; } + + private static function tenantFromRequestPathOrReferer(mixed $request): ?Tenant + { + $path = is_object($request) && method_exists($request, 'path') + ? '/'.ltrim((string) $request->path(), '/') + : null; + + $identifier = static::tenantIdentifierFromPath($path) + ?? static::tenantIdentifierFromPath(static::refererPath($request)); + + if (! is_string($identifier) || $identifier === '') { + return null; + } + + return Tenant::query() + ->withTrashed() + ->where(static function (Builder $query) use ($identifier): void { + $query->where('external_id', $identifier); + + if (ctype_digit($identifier)) { + $query->orWhereKey((int) $identifier); + } + }) + ->first(); + } + + private static function tenantIdentifierFromPath(?string $path): ?string + { + if (! is_string($path)) { + return null; + } + + $normalizedPath = '/'.ltrim($path, '/'); + + if (preg_match('#^/admin/t/([^/]+)(?:/|$)#', $normalizedPath, $matches) !== 1) { + return null; + } + + $identifier = urldecode((string) $matches[1]); + + return $identifier === '' ? null : $identifier; + } + + private static function refererPath(mixed $request): ?string + { + if (! is_object($request) || ! method_exists($request, 'headers')) { + return null; + } + + $referer = $request->headers->get('referer'); + + if (! is_string($referer) || $referer === '') { + return null; + } + + $path = parse_url($referer, PHP_URL_PATH); + + return is_string($path) && $path !== '' ? $path : null; + } } diff --git a/apps/platform/app/Filament/Pages/TenantDashboard.php b/apps/platform/app/Filament/Pages/TenantDashboard.php index 63b1fb61..f3576440 100644 --- a/apps/platform/app/Filament/Pages/TenantDashboard.php +++ b/apps/platform/app/Filament/Pages/TenantDashboard.php @@ -4,6 +4,7 @@ namespace App\Filament\Pages; +use App\Filament\Concerns\ResolvesPanelTenantContext; use App\Filament\Widgets\Tenant\TenantTriageArrivalContinuity; use App\Filament\Widgets\Dashboard\BaselineCompareNow; use App\Filament\Widgets\Dashboard\DashboardKpis; @@ -19,12 +20,13 @@ use App\Support\Auth\Capabilities; use App\Support\ProductTelemetry\ProductTelemetryRecorder; use App\Support\ProductTelemetry\ProductUsageEventCatalog; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\SupportDiagnostics\SupportDiagnosticBundleBuilder; use App\Support\SupportRequests\ExternalSupportDeskHandoffService; use App\Support\SupportRequests\SupportRequestSubmissionService; use Filament\Actions\Action; -use Filament\Facades\Filament; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -39,6 +41,9 @@ class TenantDashboard extends Dashboard { + use ResolvesPanelTenantContext; + use ResolvesUiActionContext; + /** * @var list */ @@ -188,7 +193,10 @@ private function requestSupportAction(): Action ->send(); }); - return UiEnforcement::forAction($action) + return UiEnforcement::forScopedAction( + $action, + fn (): UiActionContext => static::tenantUiActionContext(), + ) ->requireCapability(Capabilities::SUPPORT_REQUESTS_CREATE) ->apply(); } @@ -213,7 +221,10 @@ private function openSupportDiagnosticsAction(): Action 'bundle' => $this->tenantSupportDiagnosticBundle(), ])); - return UiEnforcement::forAction($action) + return UiEnforcement::forScopedAction( + $action, + fn (): UiActionContext => static::tenantUiActionContext(), + ) ->requireCapability(Capabilities::SUPPORT_DIAGNOSTICS_VIEW) ->apply(); } @@ -288,7 +299,7 @@ private function resolveDashboardActor(): User private function resolveCurrentTenantForCapability(string $capability): Tenant { $user = $this->resolveDashboardActor(); - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); if (! $tenant instanceof Tenant) { abort(404); @@ -309,7 +320,7 @@ private function resolveCurrentTenantForCapability(string $capability): Tenant private function tenantSupportRequestAttachmentSummary(): string { - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { diff --git a/apps/platform/app/Filament/Pages/TenantDiagnostics.php b/apps/platform/app/Filament/Pages/TenantDiagnostics.php index 1ce207ef..e88e3f9d 100644 --- a/apps/platform/app/Filament/Pages/TenantDiagnostics.php +++ b/apps/platform/app/Filament/Pages/TenantDiagnostics.php @@ -10,6 +10,8 @@ use App\Services\Auth\TenantDiagnosticsService; use App\Services\Auth\TenantMembershipManager; use App\Support\Auth\Capabilities; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\Rbac\UiTooltips; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; @@ -20,6 +22,7 @@ class TenantDiagnostics extends Page { + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static bool $shouldRegisterNavigation = false; @@ -67,11 +70,12 @@ public function mount(): void protected function getHeaderActions(): array { return [ - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Action::make('bootstrapOwner') ->label('Bootstrap owner') ->requiresConfirmation() ->action(fn () => $this->bootstrapOwner()), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::TENANT_MANAGE) ->destructive() @@ -79,11 +83,12 @@ protected function getHeaderActions(): array ->apply() ->visible(fn (): bool => $this->missingOwner), - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Action::make('mergeDuplicateMemberships') ->label('Merge duplicate memberships') ->requiresConfirmation() ->action(fn () => $this->mergeDuplicateMemberships()), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::TENANT_MANAGE) ->destructive() diff --git a/apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php b/apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php index 354313f8..7304296c 100644 --- a/apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php +++ b/apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php @@ -11,6 +11,8 @@ use App\Support\OperationRunLinks; use App\Support\OpsUx\OpsUxBrowserEvents; use App\Support\OpsUx\ProviderOperationStartResultPresenter; +use App\Support\Rbac\Actions\UiActionContext; +use App\Support\Rbac\Actions\UiActionContextSource; use App\Support\Rbac\UiEnforcement; use Filament\Actions\Action; use Filament\Facades\Filament; @@ -48,7 +50,7 @@ protected function getHeaderActions(): array ->icon('heroicon-o-clock') ->url(fn (): string => OperationRunLinks::index($tenant)) ->visible(fn (): bool => $tenant instanceof Tenant), - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Action::make('sync_groups') ->label('Sync Groups') ->icon('heroicon-o-arrow-path') @@ -73,7 +75,11 @@ protected function getHeaderActions(): array } $notification->send(); - }) + }), + fn (): UiActionContext => UiActionContext::forEnvironment( + EntraGroupResource::panelTenantContext(), + UiActionContextSource::PageResolver, + ), ) ->requireCapability(Capabilities::TENANT_SYNC) ->tooltip('You do not have permission to sync groups.') diff --git a/apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php b/apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php index 7bdd6ca4..36c52b30 100644 --- a/apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php +++ b/apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php @@ -25,6 +25,8 @@ use App\Support\OperationRunLinks; use App\Support\OperationRunOutcome; use App\Support\OperationRunStatus; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\Rbac\UiTooltips; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; @@ -63,6 +65,7 @@ class EvidenceSnapshotResource extends Resource { use InteractsWithTenantOwnedRecords; + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static ?string $model = EvidenceSnapshot::class; @@ -396,11 +399,12 @@ public static function table(Table $table): Table ->emptyStateHeading('No evidence snapshots yet') ->emptyStateDescription('Create the first snapshot to capture immutable evidence for this tenant.') ->emptyStateActions([ - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Actions\Action::make('create_first_snapshot') ->label('Create first snapshot') ->icon('heroicon-o-plus') ->action(fn (): mixed => static::executeGeneration([])), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->tooltip(UiTooltips::INSUFFICIENT_PERMISSION) @@ -769,7 +773,7 @@ private static function stringifySummaryValue(mixed $value): string */ public static function executeGeneration(array $data): void { - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { diff --git a/apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php b/apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php index efb012c1..4774569a 100644 --- a/apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php +++ b/apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php @@ -6,6 +6,8 @@ use App\Filament\Resources\EvidenceSnapshotResource; use App\Support\Auth\Capabilities; +use App\Support\Rbac\Actions\UiActionContext; +use App\Support\Rbac\Actions\UiActionContextSource; use App\Support\Rbac\UiEnforcement; use Filament\Actions; use Filament\Forms\Components\Toggle; @@ -19,7 +21,7 @@ class ListEvidenceSnapshots extends ListRecords protected function getHeaderActions(): array { return [ - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Actions\Action::make('create_snapshot') ->label('Create snapshot') ->icon('heroicon-o-plus') @@ -32,6 +34,10 @@ protected function getHeaderActions(): array ->default(false), ]), ]), + fn (): UiActionContext => UiActionContext::forEnvironment( + EvidenceSnapshotResource::panelTenantContext(), + UiActionContextSource::PageResolver, + ), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->apply(), diff --git a/apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php b/apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php index 6a8da46c..fb9372ba 100644 --- a/apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php +++ b/apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php @@ -18,6 +18,8 @@ use App\Support\OperationRunType; use App\Support\OpsUx\OperationUxPresenter; use App\Support\OpsUx\OpsUxBrowserEvents; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\Rbac\UiTooltips; use App\Support\Workspaces\WorkspaceContext; @@ -32,6 +34,7 @@ class ListInventoryItems extends ListRecords { + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static string $resource = InventoryItemResource::class; @@ -63,7 +66,7 @@ protected function getHeaderWidgets(): array protected function getHeaderActions(): array { return [ - UiEnforcement::forAction( + UiEnforcement::forScopedAction( Action::make('run_inventory_sync') ->label('Run Inventory Sync') ->icon('heroicon-o-arrow-path') @@ -238,7 +241,8 @@ protected function getHeaderActions(): array ->send(); OpsUxBrowserEvents::dispatchRunEnqueued($livewire); - }) + }), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->preserveVisibility() ->requireCapability(Capabilities::TENANT_INVENTORY_SYNC_RUN) diff --git a/apps/platform/app/Filament/Resources/PolicyResource.php b/apps/platform/app/Filament/Resources/PolicyResource.php index 206fee38..01f78acc 100644 --- a/apps/platform/app/Filament/Resources/PolicyResource.php +++ b/apps/platform/app/Filament/Resources/PolicyResource.php @@ -28,6 +28,8 @@ use App\Support\OperationRunLinks; use App\Support\OpsUx\OperationUxPresenter; use App\Support\OpsUx\OpsUxBrowserEvents; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; use App\Support\Ui\ActionSurface\Enums\ActionSurfaceInspectAffordance; @@ -59,6 +61,7 @@ class PolicyResource extends Resource { use InteractsWithTenantOwnedRecords; + use ResolvesUiActionContext; use ResolvesPanelTenantContext; use ScopesGlobalSearchToTenant; @@ -110,7 +113,7 @@ public static function actionSurfaceDeclaration(): ActionSurfaceDeclaration public static function makeSyncAction(string $name = 'sync'): Actions\Action { - return UiEnforcement::forAction( + return UiEnforcement::forScopedAction( Actions\Action::make($name) ->label('Sync from Intune') ->icon('heroicon-o-arrow-path') @@ -169,7 +172,8 @@ public static function makeSyncAction(string $name = 'sync'): Actions\Action ->url(OperationRunLinks::view($opRun, $tenant)), ]) ->send(); - }) + }), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::TENANT_SYNC) ->tooltip('You do not have permission to sync policies.') diff --git a/apps/platform/app/Filament/Resources/RestoreRunResource.php b/apps/platform/app/Filament/Resources/RestoreRunResource.php index e1e8a781..5ff5d30e 100644 --- a/apps/platform/app/Filament/Resources/RestoreRunResource.php +++ b/apps/platform/app/Filament/Resources/RestoreRunResource.php @@ -45,6 +45,8 @@ use App\Support\OpsUx\ProviderOperationStartResultPresenter; use App\Support\OperationalControls\OperationalControlBlockedException; use App\Support\OperationalControls\OperationalControlEvaluator; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\RestoreRunIdempotency; use App\Support\RestoreRunStatus; @@ -87,6 +89,7 @@ class RestoreRunResource extends Resource { use InteractsWithTenantOwnedRecords; + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static ?string $model = RestoreRun::class; @@ -265,7 +268,10 @@ public static function makeCreateAction(): Actions\CreateAction $action = Actions\CreateAction::make() ->label('New restore run'); - UiEnforcement::forAction($action) + UiEnforcement::forScopedAction( + $action, + fn (): UiActionContext => static::tenantUiActionContext(), + ) ->requireCapability(Capabilities::TENANT_MANAGE) ->apply(); diff --git a/apps/platform/app/Filament/Resources/ReviewPackResource.php b/apps/platform/app/Filament/Resources/ReviewPackResource.php index d589692d..55f2d64e 100644 --- a/apps/platform/app/Filament/Resources/ReviewPackResource.php +++ b/apps/platform/app/Filament/Resources/ReviewPackResource.php @@ -19,6 +19,8 @@ use App\Support\Badges\BadgeRenderer; use App\Support\OperationRunLinks; use App\Support\OpsUx\OperationUxPresenter; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\ReviewPackStatus; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; @@ -32,7 +34,6 @@ use App\Support\Ui\GovernanceArtifactTruth\SurfaceCompressionContext; use BackedEnum; use Filament\Actions; -use Filament\Facades\Filament; use Filament\Forms\Components\Toggle; use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Components\ViewEntry; @@ -49,6 +50,7 @@ class ReviewPackResource extends Resource { + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static ?string $model = ReviewPack::class; @@ -67,7 +69,7 @@ class ReviewPackResource extends Resource public static function canViewAny(): bool { - $tenant = Tenant::current(); + $tenant = static::resolveTenantContextForCurrentPanel() ?? Tenant::current(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { @@ -83,7 +85,7 @@ public static function canViewAny(): bool public static function canView(Model $record): bool { - $tenant = Tenant::current(); + $tenant = static::resolveTenantContextForCurrentPanel() ?? Tenant::current(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { @@ -372,7 +374,7 @@ public static function table(Table $table): Table public static function generatePackAction(string $name = 'generate_pack', string $label = 'Generate Pack'): Actions\Action { - $action = UiEnforcement::forAction( + $action = UiEnforcement::forScopedAction( Actions\Action::make($name) ->label($label) ->icon('heroicon-o-plus') @@ -380,7 +382,8 @@ public static function generatePackAction(string $name = 'generate_pack', string ->action(function (array $data): void { static::executeGeneration($data); }) - ->form(static::reviewPackGenerationFormSchema()) + ->form(static::reviewPackGenerationFormSchema()), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::REVIEW_PACK_MANAGE) ->preserveDisabled() @@ -413,7 +416,7 @@ public static function reviewPackGenerationFormSchema(): array public static function getEloquentQuery(): Builder { - $tenant = Tenant::current() ?? static::resolveTenantContextForCurrentPanel() ?? Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel() ?? Tenant::current(); if (! $tenant instanceof Tenant) { return parent::getEloquentQuery()->whereRaw('1 = 0'); @@ -501,7 +504,7 @@ private static function compressedOutcome(ReviewPack $record, bool $fresh = fals */ public static function executeGeneration(array $data): void { - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { @@ -574,7 +577,7 @@ public static function executeGeneration(array $data): void */ public static function reviewPackGenerationDecision(?Tenant $tenant = null): array { - $tenant ??= Tenant::current() ?? static::resolveTenantContextForCurrentPanel() ?? Filament::getTenant(); + $tenant ??= static::resolveTenantContextForCurrentPanel() ?? Tenant::current(); if (! $tenant instanceof Tenant) { return []; @@ -585,7 +588,7 @@ public static function reviewPackGenerationDecision(?Tenant $tenant = null): arr public static function currentTenantContext(): ?Tenant { - $tenant = Tenant::current() ?? static::resolveTenantContextForCurrentPanel() ?? Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel() ?? Tenant::current(); return $tenant instanceof Tenant ? $tenant : null; } diff --git a/apps/platform/app/Filament/Resources/TenantReviewResource.php b/apps/platform/app/Filament/Resources/TenantReviewResource.php index 62341052..b8d5d05e 100644 --- a/apps/platform/app/Filament/Resources/TenantReviewResource.php +++ b/apps/platform/app/Filament/Resources/TenantReviewResource.php @@ -26,6 +26,8 @@ use App\Support\OperationRunType; use App\Support\OpsUx\OperationUxPresenter; use App\Support\ReasonTranslation\ReasonPresenter; +use App\Support\Rbac\Actions\ResolvesUiActionContext; +use App\Support\Rbac\Actions\UiActionContext; use App\Support\Rbac\UiEnforcement; use App\Support\TenantReviewCompletenessState; use App\Support\TenantReviewStatus; @@ -60,6 +62,7 @@ class TenantReviewResource extends Resource { use InteractsWithTenantOwnedRecords; + use ResolvesUiActionContext; use ResolvesPanelTenantContext; protected static bool $isDiscovered = false; @@ -361,7 +364,7 @@ public static function makeCreateReviewAction( ? __('localization.review.create_review') : $label; - return UiEnforcement::forAction( + return UiEnforcement::forScopedAction( Actions\Action::make($name) ->label($label) ->icon($icon) @@ -377,6 +380,7 @@ public static function makeCreateReviewAction( ]), ]) ->action(fn (array $data): mixed => static::executeCreateReview($data)), + fn (): UiActionContext => static::tenantUiActionContext(), ) ->requireCapability(Capabilities::TENANT_REVIEW_MANAGE) ->apply(); @@ -387,7 +391,7 @@ public static function makeCreateReviewAction( */ public static function executeCreateReview(array $data): void { - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { @@ -462,7 +466,7 @@ public static function executeCreateReview(array $data): void */ public static function reviewPackGenerationDecision(?Tenant $tenant = null): array { - $tenant ??= Filament::getTenant(); + $tenant ??= static::resolveTenantContextForCurrentPanel(); if (! $tenant instanceof Tenant) { return []; @@ -601,7 +605,7 @@ public static function tenantScopedUrl( */ private static function evidenceSnapshotOptions(): array { - $tenant = Filament::getTenant(); + $tenant = static::resolveTenantContextForCurrentPanel(); if (! $tenant instanceof Tenant) { return []; diff --git a/apps/platform/app/Support/Rbac/Actions/ResolvesUiActionContext.php b/apps/platform/app/Support/Rbac/Actions/ResolvesUiActionContext.php new file mode 100644 index 00000000..a7376231 --- /dev/null +++ b/apps/platform/app/Support/Rbac/Actions/ResolvesUiActionContext.php @@ -0,0 +1,35 @@ +workspace, + environment: $environment, + ); + } + + public static function forRecord(Model $record, UiActionContextSource $source = UiActionContextSource::Record): self + { + $environment = self::environmentFromRecord($record); + + return new self( + scope: UiActionScope::Record, + source: $source, + workspace: $environment?->workspace, + environment: $environment, + record: $record, + ); + } + + public static function forSystem(UiActionContextSource $source = UiActionContextSource::Explicit): self + { + return new self( + scope: UiActionScope::System, + source: $source, + ); + } + + public static function missing( + string $reason = self::CONTEXT_MISSING, + UiActionContextSource $source = UiActionContextSource::Missing, + ): self { + return new self( + scope: UiActionScope::Missing, + source: $source, + missingReason: $reason === '' ? self::CONTEXT_MISSING : $reason, + ); + } + + public function isMissing(): bool + { + return $this->scope === UiActionScope::Missing || $this->missingReason !== null; + } + + public function missingReason(): ?string + { + return $this->missingReason; + } + + public function workspace(): ?Workspace + { + return $this->workspace; + } + + public function environment(): ?Tenant + { + return $this->environment; + } + + public function tenant(): ?Tenant + { + return $this->environment(); + } + + public function record(): ?Model + { + return $this->record; + } + + public function requireWorkspace(): Workspace + { + if ($this->workspace instanceof Workspace) { + return $this->workspace; + } + + throw new RuntimeException($this->missingReason ?? self::WORKSPACE_MISSING); + } + + public function requireEnvironment(): Tenant + { + if ($this->environment instanceof Tenant) { + return $this->environment; + } + + throw new RuntimeException($this->missingReason ?? self::ENVIRONMENT_MISSING); + } + + private static function environmentFromRecord(Model $record): ?Tenant + { + if ($record instanceof Tenant) { + return $record; + } + + if (method_exists($record, 'relationLoaded') && $record->relationLoaded('tenant')) { + $tenant = $record->getRelation('tenant'); + + if ($tenant instanceof Tenant) { + return $tenant; + } + } + + if (method_exists($record, 'tenant')) { + $tenant = $record->getAttribute('tenant'); + + if ($tenant instanceof Tenant) { + return $tenant; + } + } + + return null; + } +} diff --git a/apps/platform/app/Support/Rbac/Actions/UiActionContextSource.php b/apps/platform/app/Support/Rbac/Actions/UiActionContextSource.php new file mode 100644 index 00000000..d9a7b9ee --- /dev/null +++ b/apps/platform/app/Support/Rbac/Actions/UiActionContextSource.php @@ -0,0 +1,15 @@ +isMember; } + public function isContextMissing(): bool + { + return in_array($this->denialReason, [ + 'context_missing', + 'workspace_missing', + 'environment_missing', + 'tenant_missing', + ], true); + } + /** * Members without capability should receive 403 (forbidden). */ diff --git a/apps/platform/app/Support/Rbac/UiEnforcement.php b/apps/platform/app/Support/Rbac/UiEnforcement.php index 96a97c54..dc345bee 100644 --- a/apps/platform/app/Support/Rbac/UiEnforcement.php +++ b/apps/platform/app/Support/Rbac/UiEnforcement.php @@ -9,6 +9,8 @@ use App\Services\Auth\CapabilityResolver; use App\Support\Auth\Capabilities; use App\Support\Auth\UiTooltips as AuthUiTooltips; +use App\Support\Rbac\Actions\UiActionContext; +use App\Support\Rbac\Actions\UiActionContextSource; use Closure; use Filament\Actions\Action; use Filament\Actions\BulkAction; @@ -48,6 +50,8 @@ final class UiEnforcement private bool $isBulk = false; + private UiActionContext|Closure|null $actionContext = null; + private bool $preserveExistingVisibility = false; private bool $preserveExistingDisabled = false; @@ -67,6 +71,14 @@ public static function forAction(Action $action): self return new self($action); } + public static function forScopedAction(Action $action, UiActionContext|Closure $context): self + { + $instance = new self($action); + $instance->actionContext = $context; + + return $instance; + } + /** * Create enforcement for a table row action. * @@ -256,6 +268,10 @@ private function applyVisibility(): void $this->action->visible(function (?Model $record = null) use ($existingVisibility) { $context = $this->resolveContextWithRecord($record); + if ($context->isContextMissing()) { + return true; + } + if (! $context->isMember) { return false; } @@ -359,6 +375,10 @@ private function applyDisabledState(): void $context = $this->resolveContextWithRecord($record); + if ($context->isContextMissing()) { + return true; + } + // Non-members are hidden, so this only affects members if (! $context->isMember) { return true; @@ -388,6 +408,10 @@ private function applyDisabledState(): void $context = $this->resolveContextWithRecord($record); + if ($context->isContextMissing()) { + return UiTooltips::CONTEXT_UNAVAILABLE; + } + if ($context->isMember && ! $context->hasCapability) { return $tooltip; } @@ -604,16 +628,24 @@ private function makeTenantStub(int $tenantId): Tenant private function resolveContextWithRecord(?Model $record = null): TenantAccessContext { $user = auth()->user(); + $explicitContext = $this->resolveExplicitActionContext(); // For table actions, resolve the record and use it as tenant if it's a Tenant - $tenant = $this->resolveTenantWithRecord($record); + $tenant = $explicitContext instanceof UiActionContext + ? $explicitContext->tenant() + : $this->resolveTenantWithRecord($record); + + $denialReason = $explicitContext?->isMissing() === true + ? $explicitContext->missingReason() + : (! $tenant instanceof Tenant ? 'tenant_missing' : null); if (! $user instanceof User || ! $tenant instanceof Tenant) { return new TenantAccessContext( - user: null, + user: $user instanceof User ? $user : null, tenant: null, isMember: false, hasCapability: false, + denialReason: $denialReason, ); } @@ -632,9 +664,39 @@ private function resolveContextWithRecord(?Model $record = null): TenantAccessCo tenant: $tenant, isMember: $isMember, hasCapability: $hasCapability, + denialReason: ! $isMember ? 'not_member' : ($hasCapability ? null : 'missing_capability'), ); } + private function resolveExplicitActionContext(): ?UiActionContext + { + if ($this->actionContext === null) { + return null; + } + + try { + $resolved = $this->actionContext instanceof Closure + ? ($this->actionContext)() + : $this->actionContext; + } catch (Throwable) { + return UiActionContext::missing(UiActionContext::CONTEXT_MISSING, UiActionContextSource::Missing); + } + + if ($resolved instanceof UiActionContext) { + return $resolved; + } + + if ($resolved instanceof Tenant) { + return UiActionContext::forEnvironment($resolved, UiActionContextSource::Explicit); + } + + if ($resolved instanceof Model) { + return UiActionContext::forRecord($resolved); + } + + return UiActionContext::missing(UiActionContext::CONTEXT_MISSING, UiActionContextSource::Missing); + } + /** * Resolve the tenant for this action with an optional record. * diff --git a/apps/platform/app/Support/Rbac/UiTooltips.php b/apps/platform/app/Support/Rbac/UiTooltips.php index e77ebfe1..0e01e71c 100644 --- a/apps/platform/app/Support/Rbac/UiTooltips.php +++ b/apps/platform/app/Support/Rbac/UiTooltips.php @@ -21,6 +21,11 @@ final class UiTooltips */ public const INSUFFICIENT_PERMISSION = 'Insufficient permission — ask a tenant Owner.'; + /** + * Tooltip shown when Livewire/action transport cannot resolve product scope. + */ + public const CONTEXT_UNAVAILABLE = 'Environment context unavailable.'; + /** * Modal heading for destructive action confirmation. */ diff --git a/apps/platform/tests/Feature/Architecture/ScopedUiActionContextContractTest.php b/apps/platform/tests/Feature/Architecture/ScopedUiActionContextContractTest.php new file mode 100644 index 00000000..e649c9af --- /dev/null +++ b/apps/platform/tests/Feature/Architecture/ScopedUiActionContextContractTest.php @@ -0,0 +1,124 @@ + [ + 'file' => 'app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php', + 'action' => 'run_inventory_sync', + ], + 'policy sync action factory' => [ + 'file' => 'app/Filament/Resources/PolicyResource.php', + 'action' => 'sync', + 'anchor' => 'public static function makeSyncAction', + ], + 'directory group sync header action' => [ + 'file' => 'app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php', + 'action' => 'sync_groups', + ], + 'evidence snapshot header action' => [ + 'file' => 'app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php', + 'action' => 'create_snapshot', + ], + 'evidence snapshot empty-state action' => [ + 'file' => 'app/Filament/Resources/EvidenceSnapshotResource.php', + 'action' => 'create_first_snapshot', + ], + 'review pack generation action factory' => [ + 'file' => 'app/Filament/Resources/ReviewPackResource.php', + 'action' => 'generate_pack', + 'anchor' => 'public static function generatePackAction', + ], + 'tenant review creation action factory' => [ + 'file' => 'app/Filament/Resources/TenantReviewResource.php', + 'action' => 'create_review', + 'anchor' => 'public static function makeCreateReviewAction', + ], + 'tenant diagnostics bootstrap action' => [ + 'file' => 'app/Filament/Pages/TenantDiagnostics.php', + 'action' => 'bootstrapOwner', + ], + 'tenant diagnostics merge action' => [ + 'file' => 'app/Filament/Pages/TenantDiagnostics.php', + 'action' => 'mergeDuplicateMemberships', + ], + 'restore run create action factory' => [ + 'file' => 'app/Filament/Resources/RestoreRunResource.php', + 'action' => 'New restore run', + 'anchor' => 'public static function makeCreateAction', + ], + 'tenant dashboard support request action' => [ + 'file' => 'app/Filament/Pages/TenantDashboard.php', + 'action' => 'requestSupport', + 'anchor' => 'private function requestSupportAction', + ], + 'tenant dashboard support diagnostics action' => [ + 'file' => 'app/Filament/Pages/TenantDashboard.php', + 'action' => 'openSupportDiagnostics', + 'anchor' => 'private function openSupportDiagnosticsAction', + ], + ]; +} + +it('requires explicit UiActionContext for representative risky scoped no-record actions', function (array $check): void { + $path = base_path($check['file']); + $source = file_get_contents($path); + + expect($source)->not->toBeFalse(); + + $source = (string) $source; + $anchor = $check['anchor'] ?? "Action::make('{$check['action']}'"; + $position = strpos($source, $anchor); + + expect($position) + ->not->toBeFalse("Could not find {$check['action']} in {$check['file']}."); + + $slice = substr($source, max(0, (int) $position - 500), 10000); + + expect($slice) + ->toContain('UiEnforcement::forScopedAction') + ->and($source) + ->toContain('UiActionContext'); +})->with(fn (): array => collect(scopedUiActionContextContractChecks()) + ->mapWithKeys(static fn (array $check, string $name): array => [$name => [$check]]) + ->all()); + +it('does not reintroduce the guarded no-record scoped action names through UiEnforcement::forAction', function (): void { + $checks = scopedUiActionContextContractChecks(); + $guardedFiles = collect($checks)->pluck('file')->unique()->values()->all(); + $guardedActionNames = collect($checks) + ->pluck('action') + ->reject(static fn (string $action): bool => $action === 'sync' || $action === 'New restore run') + ->map(static fn (string $action): string => preg_quote($action, '/')) + ->implode('|'); + + $violations = []; + + foreach ($guardedFiles as $relativePath) { + $path = base_path($relativePath); + $source = file_get_contents($path); + + if (! is_string($source) || ! str_contains($source, 'UiEnforcement::forAction')) { + continue; + } + + $patterns = [ + '/UiEnforcement::forAction\s*\(.{0,1200}Action::make\(\s*[\'"](?:'.$guardedActionNames.')[\'"]/s', + '/public static function makeSyncAction.{0,1400}UiEnforcement::forAction/s', + '/public static function makeCreateAction.{0,1400}UiEnforcement::forAction/s', + ]; + + foreach ($patterns as $pattern) { + if (preg_match($pattern, $source, $match, PREG_OFFSET_CAPTURE) !== 1) { + continue; + } + + $line = substr_count(substr($source, 0, (int) $match[0][1]), "\n") + 1; + $violations[] = "{$relativePath}:{$line} use UiEnforcement::forScopedAction(..., UiActionContext resolver) for risky no-record scoped actions."; + } + } + + expect($violations)->toBeEmpty(implode("\n", $violations)); +}); diff --git a/apps/platform/tests/Feature/Evidence/EvidenceSnapshotResourceTest.php b/apps/platform/tests/Feature/Evidence/EvidenceSnapshotResourceTest.php index b75bf9d2..ae450097 100644 --- a/apps/platform/tests/Feature/Evidence/EvidenceSnapshotResourceTest.php +++ b/apps/platform/tests/Feature/Evidence/EvidenceSnapshotResourceTest.php @@ -159,6 +159,26 @@ function suspendEvidenceSnapshotWorkspace(Tenant $tenant): void Queue::assertPushed(GenerateEvidenceSnapshotJob::class); }); +it('opens the create snapshot modal without creating a snapshot or queueing work', function (): void { + Queue::fake(); + + $tenant = Tenant::factory()->create(); + [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner'); + + seedEvidenceDomain($tenant); + + $tenant->makeCurrent(); + Filament::setTenant($tenant, true); + + Livewire::actingAs($user) + ->test(ListEvidenceSnapshots::class) + ->mountAction('create_snapshot') + ->assertActionMounted('create_snapshot'); + + expect(EvidenceSnapshot::query()->count())->toBe(0); + Queue::assertNotPushed(GenerateEvidenceSnapshotJob::class); +}); + it('renders the view page for an active snapshot', function (): void { $tenant = Tenant::factory()->create(); [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner'); diff --git a/apps/platform/tests/Feature/Inventory/InventorySyncStartSurfaceTest.php b/apps/platform/tests/Feature/Inventory/InventorySyncStartSurfaceTest.php index b922549b..211d1432 100644 --- a/apps/platform/tests/Feature/Inventory/InventorySyncStartSurfaceTest.php +++ b/apps/platform/tests/Feature/Inventory/InventorySyncStartSurfaceTest.php @@ -104,3 +104,24 @@ expect(array_values(collect($coverage)->map(fn (array $row): int => (int) ($row['item_count'] ?? 0))->all())) ->toBe(array_fill(0, count($policyTypes), 1)); }); + +it('opens inventory sync action without creating a run or queueing work', function (): void { + Queue::fake(); + + [$user, $tenant] = createUserWithTenant(role: 'owner'); + $this->actingAs($user); + + $tenant->makeCurrent(); + Filament::setTenant($tenant, true); + + Livewire::test(ListInventoryItems::class) + ->mountAction('run_inventory_sync') + ->assertActionMounted('run_inventory_sync'); + + Queue::assertNotPushed(RunInventorySyncJob::class); + + expect(OperationRun::query() + ->where('tenant_id', $tenant->getKey()) + ->where('type', 'inventory.sync') + ->exists())->toBeFalse(); +}); diff --git a/apps/platform/tests/Feature/PolicySyncStartSurfaceTest.php b/apps/platform/tests/Feature/PolicySyncStartSurfaceTest.php index ea42e853..34b7a5e3 100644 --- a/apps/platform/tests/Feature/PolicySyncStartSurfaceTest.php +++ b/apps/platform/tests/Feature/PolicySyncStartSurfaceTest.php @@ -64,6 +64,28 @@ function getPolicyEmptyStateAction(Testable $component, string $name): ?Action }); }); +it('opens policy sync confirmation without creating a run or queueing work', function (): void { + Queue::fake(); + bindFailHardGraphClient(); + + [$user, $tenant] = createUserWithTenant(role: 'owner'); + $this->actingAs($user); + + $tenant->makeCurrent(); + Filament::setTenant($tenant, true); + + Livewire::test(ListPolicies::class) + ->mountAction('sync') + ->assertActionMounted('sync'); + + Queue::assertNotPushed(SyncPoliciesJob::class); + + expect(OperationRun::query() + ->where('tenant_id', $tenant->getKey()) + ->where('type', 'policy.sync') + ->exists())->toBeFalse(); +}); + it('reuses an active policy sync run and does not enqueue twice', function () { Queue::fake(); diff --git a/apps/platform/tests/Feature/ReviewPack/ReviewPackResourceTest.php b/apps/platform/tests/Feature/ReviewPack/ReviewPackResourceTest.php index eb5a6266..53e2e8d9 100644 --- a/apps/platform/tests/Feature/ReviewPack/ReviewPackResourceTest.php +++ b/apps/platform/tests/Feature/ReviewPack/ReviewPackResourceTest.php @@ -218,6 +218,32 @@ function seedReviewPackEvidence(Tenant $tenant): EvidenceSnapshot ->assertActionVisible('generate_pack'); }); +it('opens review pack generation without creating a pack or queueing work', function (): void { + Queue::fake(); + + $tenant = Tenant::factory()->create(); + [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner'); + + seedReviewPackEvidence($tenant); + + ReviewPack::factory()->ready()->create([ + 'tenant_id' => (int) $tenant->getKey(), + 'workspace_id' => (int) $tenant->workspace_id, + 'initiated_by_user_id' => (int) $user->getKey(), + ]); + + $tenant->makeCurrent(); + Filament::setTenant($tenant, true); + + Livewire::actingAs($user) + ->test(ListReviewPacks::class) + ->mountAction('generate_pack') + ->assertActionMounted('generate_pack'); + + expect(ReviewPack::query()->where('tenant_id', (int) $tenant->getKey())->count())->toBe(1); + Queue::assertNothingPushed(); +}); + it('disables the generate_first action for a readonly user in the empty state', function (): void { $tenant = Tenant::factory()->create(); [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'readonly'); diff --git a/apps/platform/tests/Unit/Support/Rbac/Actions/ResolvesUiActionContextTest.php b/apps/platform/tests/Unit/Support/Rbac/Actions/ResolvesUiActionContextTest.php new file mode 100644 index 00000000..cdc671ec --- /dev/null +++ b/apps/platform/tests/Unit/Support/Rbac/Actions/ResolvesUiActionContextTest.php @@ -0,0 +1,96 @@ +create(); + $fallbackTenant = Tenant::factory()->create(); + + Filament::setTenant($fallbackTenant, true); + + $context = uiActionContextProbe($tenant)->tenantContext(); + + expect($context->tenant())->toBe($tenant) + ->and($context->source)->toBe(UiActionContextSource::PageResolver); +}); + +it('uses explicit tenant context before fallback sources', function (): void { + $tenant = Tenant::factory()->create(); + $fallbackTenant = Tenant::factory()->create(); + + Filament::setTenant($fallbackTenant, true); + + $context = uiActionContextProbe()->tenantContext($tenant); + + expect($context->tenant())->toBe($tenant) + ->and($context->source)->toBe(UiActionContextSource::PageResolver); +}); + +it('uses Filament tenant as the last tenant-panel fallback', function (): void { + $tenant = Tenant::factory()->create(); + + Filament::setTenant($tenant, true); + + $context = uiActionContextProbe()->tenantContext(); + + expect($context->tenant())->toBe($tenant) + ->and($context->isMissing())->toBeFalse(); +}); + +it('returns missing environment context when no tenant can be resolved', function (): void { + Filament::setTenant(null, true); + + $context = uiActionContextProbe()->tenantContext(); + + expect($context->isMissing())->toBeTrue() + ->and($context->missingReason())->toBe(UiActionContext::ENVIRONMENT_MISSING); +}); + +it('builds workspace context with explicit workspace source', function (): void { + $workspace = Workspace::factory()->create(); + + $context = uiActionContextProbe()->workspaceContext($workspace); + + expect($context->workspace())->toBe($workspace) + ->and($context->source)->toBe(UiActionContextSource::WorkspaceContext); +}); diff --git a/apps/platform/tests/Unit/Support/Rbac/Actions/UiActionContextTest.php b/apps/platform/tests/Unit/Support/Rbac/Actions/UiActionContextTest.php new file mode 100644 index 00000000..d17aed0d --- /dev/null +++ b/apps/platform/tests/Unit/Support/Rbac/Actions/UiActionContextTest.php @@ -0,0 +1,81 @@ +create(); + + $context = UiActionContext::forWorkspace($workspace); + + expect($context->scope)->toBe(UiActionScope::Workspace) + ->and($context->source)->toBe(UiActionContextSource::Explicit) + ->and($context->workspace())->toBe($workspace) + ->and($context->requireWorkspace())->toBe($workspace) + ->and($context->environment())->toBeNull() + ->and($context->isMissing())->toBeFalse(); +}); + +it('builds environment action context with workspace ownership', function (): void { + $tenant = Tenant::factory()->create(); + + $context = UiActionContext::forEnvironment($tenant, UiActionContextSource::PageResolver); + + expect($context->scope)->toBe(UiActionScope::Environment) + ->and($context->source)->toBe(UiActionContextSource::PageResolver) + ->and($context->environment())->toBe($tenant) + ->and($context->tenant())->toBe($tenant) + ->and($context->requireEnvironment())->toBe($tenant) + ->and($context->workspace()?->getKey())->toBe($tenant->workspace_id) + ->and($context->isMissing())->toBeFalse(); +}); + +it('builds record context from tenant records and loaded tenant relations', function (): void { + $tenant = Tenant::factory()->create(); + $policy = Policy::factory()->for($tenant)->create()->load('tenant'); + + $tenantContext = UiActionContext::forRecord($tenant); + $policyContext = UiActionContext::forRecord($policy); + + expect($tenantContext->scope)->toBe(UiActionScope::Record) + ->and($tenantContext->environment())->toBe($tenant) + ->and($tenantContext->record())->toBe($tenant) + ->and($policyContext->scope)->toBe(UiActionScope::Record) + ->and($policyContext->environment()?->getKey())->toBe($tenant->getKey()) + ->and($policyContext->record())->toBe($policy); +}); + +it('builds system context without workspace or environment requirements', function (): void { + $context = UiActionContext::forSystem(); + + expect($context->scope)->toBe(UiActionScope::System) + ->and($context->workspace())->toBeNull() + ->and($context->environment())->toBeNull() + ->and($context->isMissing())->toBeFalse(); + + expect(fn () => $context->requireWorkspace())->toThrow(RuntimeException::class, UiActionContext::WORKSPACE_MISSING); + expect(fn () => $context->requireEnvironment())->toThrow(RuntimeException::class, UiActionContext::ENVIRONMENT_MISSING); +}); + +it('represents missing context with stable reasons', function (): void { + $workspaceContext = UiActionContext::forWorkspace(null, UiActionContextSource::WorkspaceContext); + $environmentContext = UiActionContext::forEnvironment(null, UiActionContextSource::PageResolver); + $genericContext = UiActionContext::missing(''); + + expect($workspaceContext->scope)->toBe(UiActionScope::Missing) + ->and($workspaceContext->source)->toBe(UiActionContextSource::WorkspaceContext) + ->and($workspaceContext->missingReason())->toBe(UiActionContext::WORKSPACE_MISSING) + ->and($environmentContext->missingReason())->toBe(UiActionContext::ENVIRONMENT_MISSING) + ->and($genericContext->missingReason())->toBe(UiActionContext::CONTEXT_MISSING); + + expect(fn () => $environmentContext->requireEnvironment())->toThrow(RuntimeException::class, UiActionContext::ENVIRONMENT_MISSING); +}); diff --git a/apps/platform/tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php b/apps/platform/tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php new file mode 100644 index 00000000..05be0d72 --- /dev/null +++ b/apps/platform/tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php @@ -0,0 +1,87 @@ +actingAs($user); + + Filament::setTenant($tenant, true); + + $action = UiEnforcement::forScopedAction( + Action::make('sync')->action(fn (): null => null), + UiActionContext::missing(UiActionContext::ENVIRONMENT_MISSING), + ) + ->requireCapability(Capabilities::TENANT_SYNC) + ->apply(); + + expect($action->isVisible())->toBeTrue() + ->and($action->isDisabled())->toBeTrue() + ->and($action->getTooltip())->toBe(UiTooltips::CONTEXT_UNAVAILABLE); +}); + +it('enables scoped actions for members with capability when explicit context is present', function (): void { + [$user, $tenant] = createUserWithTenant(role: 'owner'); + $this->actingAs($user); + + Filament::setTenant(null, true); + + $action = UiEnforcement::forScopedAction( + Action::make('sync')->action(fn (): null => null), + UiActionContext::forEnvironment($tenant), + ) + ->requireCapability(Capabilities::TENANT_SYNC) + ->apply(); + + expect($action->isVisible())->toBeTrue() + ->and($action->isDisabled())->toBeFalse() + ->and($action->getTooltip())->toBeNull(); +}); + +it('keeps explicit scoped context distinct from non-membership', function (): void { + $tenant = Tenant::factory()->create(); + $user = User::factory()->create(); + + $this->actingAs($user); + Filament::setTenant(null, true); + + $action = UiEnforcement::forScopedAction( + Action::make('sync')->action(fn (): null => null), + UiActionContext::forEnvironment($tenant), + ) + ->requireCapability(Capabilities::TENANT_SYNC) + ->apply(); + + expect($action->isVisible())->toBeFalse() + ->and($action->isDisabled())->toBeTrue() + ->and($action->getTooltip())->toBeNull(); +}); + +it('preserves record-backed action resolution without explicit no-record context', function (): void { + [$user, $tenant] = createUserWithTenant(role: 'owner'); + $this->actingAs($user); + + Filament::setTenant(null, true); + + $action = UiEnforcement::forTableAction( + Action::make('view')->action(fn (): null => null), + $tenant, + ) + ->requireCapability(Capabilities::TENANT_VIEW) + ->apply(); + + expect($action->isVisible())->toBeTrue() + ->and($action->isDisabled())->toBeFalse(); +}); diff --git a/specs/363-explicit-uiactioncontext-contract/checklists/requirements.md b/specs/363-explicit-uiactioncontext-contract/checklists/requirements.md new file mode 100644 index 00000000..0f2d7009 --- /dev/null +++ b/specs/363-explicit-uiactioncontext-contract/checklists/requirements.md @@ -0,0 +1,77 @@ +# Requirements Checklist: Spec 363 - Explicit UiActionContext Contract for Scoped No-Record Actions + +**Purpose**: Preparation analysis for Spec 363 readiness +**Created**: 2026-06-07 +**Feature**: `/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/363-explicit-uiactioncontext-contract/spec.md` + +## Candidate Selection And Guardrails + +- [x] CHK001 The candidate source is explicit: the direct user-provided Spec 363 draft from `/Users/ahmeddarrazi/.codex/attachments/36f3aea8-0303-4548-a83c-9f1cdd15f527/pasted-text.txt`. +- [x] CHK002 No `specs/363-*` package existed before Spec Kit branch creation. +- [x] CHK003 No existing `363-*` branch was found before Spec Kit branch creation. +- [x] CHK004 The active candidate queue's empty-state note is respected; this package is an intentional manual promotion, not an auto-selected queue item. +- [x] CHK005 Related completed specs were checked and treated correctly: Specs 338, 340, 358, 359, 360, 361, and 362 remain historical/context packages and were not modified. +- [x] CHK006 Repo-truth deviations from the user draft are recorded in `spec.md`, especially the explicit preparation boundary, no application implementation, and the guard that broader OperationRun authorization hardening becomes a follow-up only if repo-verified. + +## Required Prep Artifacts + +- [x] CHK007 `spec.md` exists and contains no template placeholders. +- [x] CHK008 `plan.md` exists and is repo-aware. +- [x] CHK009 `tasks.md` exists and is ordered, small, and verifiable. +- [x] CHK010 This checklist exists. + +## Spec Quality + +- [x] CHK011 Spec Candidate Check is completed and scores above the approval threshold. +- [x] CHK012 The spec explains why new request-time context classes and enums are justified under PROP-001 / ABSTR-001 / BLOAT-001. +- [x] CHK013 The spec keeps scope bounded to scoped no-record action context, representative retrofits, first-click modal/no-run tests, and a static recurrence guard. +- [x] CHK014 The spec keeps `OperationRun`, RBAC, policies, migrations, panel providers, assets, routes, capabilities, and global search unchanged unless a later implementation proves a blocker and updates artifacts first. +- [x] CHK015 The spec preserves record-backed action context as a valid source and does not force broad record action churn. + +## Plan / Task Alignment + +- [x] CHK016 The plan identifies actual repo surfaces likely to change, including `UiEnforcement`, `ResolvesPanelTenantContext`, representative Filament action classes, and test/guard files. +- [x] CHK017 The plan keeps Filament v5 / Livewire v4 posture and provider-registration location visible. +- [x] CHK018 The plan explicitly states no migration, no new panel/provider, no global-search change, and no new asset strategy are expected. +- [x] CHK019 The tasks start with repo truth and failing tests before runtime edits. +- [x] CHK020 The tasks include anti-creep guardrails against compatibility shims, OperationRun redesign, product-feature expansion, and broad record-backed action migration. +- [x] CHK021 The tasks include final validation and close-out requirements. + +## UI / Action Lifecycle Coverage + +- [x] CHK022 UI Surface Impact is completed and classifies existing action/page behavior changes without claiming a new page family. +- [x] CHK023 Dangerous/high-impact action implications are explicit: destructive/high-impact actions keep confirmation, authorization, audit, and tests. +- [x] CHK024 First-click modal mount and modal-no-run/no-job behavior are explicit acceptance criteria and tasks. +- [x] CHK025 Missing-context UX is distinct from permission denial and avoids low-level Livewire/Filament copy. +- [x] CHK026 OperationRun start behavior is limited to submit/execute and reuses existing OperationRun UX helpers. + +## Test Governance + +- [x] CHK027 The declared test families are the narrowest honest proof: Unit + Feature/Filament-Livewire + Architecture/guard; Browser optional only if visible hierarchy/copy changes materially. +- [x] CHK028 Planned validation commands are explicit and scoped to Spec 363 plus directly related existing action tests. +- [x] CHK029 No heavy-governance, PGSQL-only schema, or browser family is introduced by default. +- [x] CHK030 Shared test helper growth is bounded and justified only if it reduces duplication across at least two retrofitted actions. + +## Filament v5 Blueprint Output Contract + +- [x] CHK031 Livewire v4.0+ compliance is stated in `spec.md`, `plan.md`, and `tasks.md`. +- [x] CHK032 Provider registration location remains `apps/platform/bootstrap/providers.php`; no provider change is planned. +- [x] CHK033 No globally searchable resource is added or changed; global search behavior remains unchanged. +- [x] CHK034 Destructive/high-impact action confirmation + authorization handling is explicitly preserved. +- [x] CHK035 Asset strategy remains unchanged; no new asset registration or `filament:assets` deployment impact is expected from this spec. +- [x] CHK036 Testing plan names Filament/Livewire action tests, static guard tests, and optional Browser smoke boundary. + +## Readiness Gate Outcome + +- [x] CHK037 Candidate Selection Gate passes. +- [x] CHK038 Spec Readiness Gate passes. +- [x] CHK039 Runtime implementation has not started in this preparation step. +- [x] CHK040 Recommended next step is implementation, not more prep. + +## Review Outcome + +- [x] CHK041 Outcome class: acceptable-special-case +- [x] CHK042 Workflow outcome: keep +- [x] CHK043 Final note location: active feature PR close-out entry `Guardrail / Smoke Coverage` +- [x] CHK044 Preparation analyze result: pass via repo-based cross-artifact review; no standalone local `speckit.analyze` generator command was exposed in this repo surface beyond prompts and agent instructions. +- [x] CHK045 Tooling note: Spec Kit branch/spec creation succeeded via `create-new-feature.sh`, `setup-plan.sh` generated the plan file, and `tasks.md` plus this checklist were authored manually to match the repo's Spec Kit templates and agent instructions. diff --git a/specs/363-explicit-uiactioncontext-contract/plan.md b/specs/363-explicit-uiactioncontext-contract/plan.md new file mode 100644 index 00000000..b6b8dc8f --- /dev/null +++ b/specs/363-explicit-uiactioncontext-contract/plan.md @@ -0,0 +1,252 @@ +# Implementation Plan: Spec 363 - Explicit UiActionContext Contract for Scoped No-Record Actions + +**Branch**: `feat/363-explicit-uiactioncontext-contract` | **Preparation Branch**: `363-explicit-uiactioncontext-contract` | **Date**: 2026-06-07 | **Spec**: `/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/363-explicit-uiactioncontext-contract/spec.md` +**Input**: Feature specification from `/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/363-explicit-uiactioncontext-contract/spec.md` + +**Note**: This plan is repo-aware and preparation-only. No application implementation is performed in this step. + +## Summary + +Add an explicit action-context contract for workspace- and environment-scoped no-record Filament actions. + +The implementation should: + +- introduce a narrow request-time `UiActionContext` contract +- harden `UiEnforcement` so scoped no-record actions cannot silently use implicit `Filament::getTenant()` as product scope truth +- preserve record-backed action behavior where scope comes from the record +- retrofit representative latent-risk no-record actions +- add first-click modal/no-run test helpers and action lifecycle tests +- add a static guard that fails future risky scoped no-record actions without explicit context + +No migrations, panel/provider changes, global-search changes, asset strategy changes, or new product workflows are planned. + +## Technical Context + +**Language/Version**: PHP 8.4.15 +**Primary Dependencies**: Laravel 12.52, Filament 5.2.1, Livewire 4.1.4, Pest 4.3.1 +**Storage**: PostgreSQL via Sail, but no schema changes are planned +**Testing**: Pest Unit + Feature/Filament-Livewire + Architecture/guard; Browser optional only if visible UI hierarchy/copy changes materially +**Validation Lanes**: fast-feedback, confidence, browser optional +**Target Platform**: Laravel monolith in Sail / Dokploy container workflow +**Project Type**: single web application (`apps/platform`) +**Performance Goals**: no Graph calls during render/action-state/modal mount; static scan remains bounded and deterministic +**Constraints**: no new persistence, no operation type, no capability string, no panel/provider, no asset registration, no global-search change, no compatibility shim, no broad record-backed action rewrite +**Scale/Scope**: no-record scoped actions first, plus representative action retrofits and static recurrence guard + +## UI / Surface Guardrail Plan + +- **Guardrail scope**: changed existing actions on existing pages +- **Affected routes/pages/actions/states/navigation/panel/provider surfaces**: + - Inventory list `run_inventory_sync` + - Policy list/header sync and related Policy Sync start surface + - Entra Groups `sync_groups` + - Evidence Snapshot `create_snapshot` and `create_first_snapshot` + - Review Pack `generate_pack` and `generate_first` + - Environment Review `create_review` + - Environment Diagnostics `bootstrapOwner` and `mergeDuplicateMemberships` + - Restore Run create entrypoint and create wizard + - Environment Dashboard support request / support diagnostics actions +- **No-impact class, if applicable**: N/A, because existing high-impact actions change context behavior +- **Native vs custom classification summary**: native Filament pages/resources/actions with shared RBAC enforcement +- **Shared-family relevance**: header/page/empty-state action family, RBAC UI enforcement family, OperationRun start family +- **State layers in scope**: page render, action visibility, action disabled state, first-click modal mount, submit/execute handler +- **Audience modes in scope**: operator-MSP and support-platform +- **Decision/diagnostic/raw hierarchy plan**: show safe action state and missing-context copy only; keep low-level Livewire/Filament request details out of UI +- **Raw/support gating plan**: no raw request, referer, token, Graph, credential, or payload data in visible UI +- **One-primary-action / duplicate-truth control**: do not duplicate run outcome truth in action modals; after submit reuse existing OperationRun links/toasts +- **Handling modes by drift class or surface**: review-mandatory for any scoped no-record action that opens a modal, dispatches work, creates an `OperationRun`, or mutates state +- **Repository-signal treatment**: record-backed actions are context only unless the static guard proves they behave like no-record scoped actions +- **Special surface test profiles**: standard-native-filament plus action-lifecycle-contract +- **Required tests or manual smoke**: Unit + Feature/Filament-Livewire + static guard; Browser only if implementation changes visible copy/hierarchy materially +- **Exception path and spread control**: bounded static-guard exceptions must name the file/action and why record/page scope is safe +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage +- **UI/Productization coverage decision**: no new UI coverage registry update is expected because no new route/page family is introduced +- **Coverage artifacts to update**: none by default +- **No-impact rationale**: N/A +- **Navigation / Filament provider-panel handling**: no panel provider, panel path, navigation, or cluster change +- **Screenshot or page-report need**: no by default + +## Shared Pattern & System Fit + +- **Cross-cutting feature marker**: yes +- **Systems touched**: + - `apps/platform/app/Support/Rbac/UiEnforcement.php` + - `apps/platform/app/Support/Rbac/WorkspaceUiEnforcement.php` as reference/comparison only unless small shared context support is justified + - new `apps/platform/app/Support/Rbac/Actions/` contract classes if implementation confirms this namespace is still best + - `apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php` + - selected existing Filament resources/pages/actions + - selected existing action tests and new guard/test helper +- **Shared abstractions reused**: existing RBAC helpers, capability resolvers, policies/gates, page context resolvers, OperationRun start helpers, Filament action testing helpers +- **New abstraction introduced? why?**: yes, a narrow `UiActionContext` request-time contract is allowed because the problem is RBAC/isolation/queue legitimacy-critical and already repo-verified across multiple surfaces +- **Why the existing abstraction was sufficient or insufficient**: `UiEnforcement` is the right shared path, but it currently allows ambiguous nullable no-record context and implicit Filament tenant fallback +- **Bounded deviation / spread control**: keep new classes under an RBAC/action namespace; do not create a generic UI framework, presenter, workflow engine, or action catalog rewrite + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: yes, start/mount/submit lifecycle only +- **Central contract reused**: existing `OperationRunService`, run dispatch handlers, `OperationRunLinks`, `OperationUxPresenter`, and `OpsUxBrowserEvents` +- **Delegated UX behaviors**: queued toasts, run links, run-enqueued browser events, and terminal lifecycle notifications remain unchanged +- **Surface-owned behavior kept local**: action form values and confirmation/missing-context copy +- **Queued DB-notification policy**: unchanged +- **Terminal notification path**: unchanged +- **Exception path**: if broader execution reauthorization is weaker than UI gating, stop and propose `OperationRun Start Authorization Contract Hardening` + +## Provider Boundary & Portability Fit + +- **Shared provider/platform boundary touched?**: no new provider seam +- **Provider-owned seams**: existing Graph/provider jobs and services remain provider-owned and are not modified beyond receiving explicit, reauthorized scope +- **Platform-core seams**: workspace/environment action context and RBAC UI enforcement +- **Neutral platform terms / contracts preserved**: workspace, environment, record, system, product scope, action context +- **Retained provider-specific semantics and why**: only current Microsoft/Graph semantics inside existing actions/jobs remain +- **Bounded extraction or follow-up path**: none unless broader OperationRun execution authorization weakness is discovered + +## Constitution Check + +*GATE: Must pass before implementation starts. Re-check if scope changes.* + +- Inventory-first: PASS. No inventory truth changes; Inventory Sync action context becomes explicit only. +- Read/write separation: PASS. Modal open remains non-mutating; submit/execute must reauthorize before writes/jobs. +- Graph contract path: PASS. No new Graph calls; render/mount must remain no-Graph. +- Deterministic capabilities: PASS. Existing capabilities remain authoritative. +- Workspace and tenant isolation: PASS. Explicit context improves workspace/environment scope safety. +- RBAC-UX: PASS. UI state remains affordance only; server-side policies/gates remain execution truth. +- TEST-GOV-001: PASS. Unit + Feature/action + static guard are the narrowest honest proof. +- PROP-001 / ABSTR-001: PASS only because the new abstraction is security/isolation/action-lifecycle critical and already justified by repeated repo evidence. +- PERSIST-001 / STATE-001: PASS. No new persisted truth or persisted status family is introduced. +- XCUT-001 / LAYER-001: PASS. Extend the existing shared `UiEnforcement` path instead of adding local one-off action rules. +- UI-COV-001: PASS. Existing reachable surfaces are classified; no new page family is expected. +- LEAN-001: PASS. No compatibility shim for old no-record fallback behavior. + +## Test Governance Check + +- **Test purpose / classification by changed surface**: + - Unit: `UiActionContext`, scope/source enums, resolver helpers, missing-context behavior, `UiEnforcement` context resolution + - Feature/Filament-Livewire: selected page/resource actions, first-click modal mount, no-run/no-job on modal open, submit reauthorization, wrong-context/readonly behavior + - Architecture/Feature guard: static source scan for risky scoped no-record actions without explicit context + - Browser: optional smoke only if visible hierarchy/copy changes materially +- **Affected validation lanes**: fast-feedback, confidence, browser optional +- **Why this lane mix is the narrowest sufficient proof**: the behavior is request-time action lifecycle and static source guard behavior, not DB schema or provider API behavior +- **Narrowest proving command(s)**: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/Rbac/Actions tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php` + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Architecture/ScopedUiActionContextContractTest.php tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/PolicySyncStartSurfaceTest.php tests/Feature/RunStartAuthorizationTest.php` + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/EntraGroupAdminScopeTest.php tests/Feature/Evidence/EvidenceSnapshotResourceTest.php tests/Feature/ReviewPack/ReviewPackResourceTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` +- **Fixture / helper / factory / seed / context cost risks**: keep workspace/environment/member/capability setup explicit; do not introduce full-context defaults in shared helpers +- **Expensive defaults or shared helper growth introduced?**: no +- **Heavy-family additions, promotions, or visibility changes**: none by default +- **Surface-class relief / special coverage rule**: standard-native-filament plus action-lifecycle-contract +- **Closing validation and reviewer handoff**: reviewers should verify no hidden `Filament::getTenant()` product-scope fallback for scoped no-record actions, no modal-open side effects, and no compatibility path +- **Budget / baseline / trend follow-up**: none expected +- **Review-stop questions**: did implementation broaden into record-backed action migration, OperationRun redesign, UI redesign, or product features? +- **Escalation path**: document-in-feature for contained static-guard false positives; follow-up-spec for broader execution authorization weakness; reject-or-split for scope creep +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage +- **Why no dedicated follow-up spec is needed now**: the root issue is explicit enough to solve as one bounded action-context contract + +## Repo-Verified Runtime Surfaces Likely Affected + +### Core RBAC / Context + +- `apps/platform/app/Support/Rbac/UiEnforcement.php` +- `apps/platform/app/Support/Rbac/WorkspaceUiEnforcement.php` (context/reference only unless sharing is justified) +- `apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php` +- new `apps/platform/app/Support/Rbac/Actions/UiActionContext.php` +- new `apps/platform/app/Support/Rbac/Actions/UiActionScope.php` +- new `apps/platform/app/Support/Rbac/Actions/UiActionContextSource.php` +- new `apps/platform/app/Support/Rbac/Actions/ResolvesUiActionContext.php` + +### Representative Action Surfaces + +- `apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php` +- `apps/platform/app/Filament/Resources/PolicyResource.php` +- `apps/platform/app/Filament/Resources/PolicyResource/Pages/ListPolicies.php` +- `apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php` +- `apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php` +- `apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php` +- `apps/platform/app/Filament/Resources/ReviewPackResource.php` +- `apps/platform/app/Filament/Resources/EnvironmentReviewResource.php` +- `apps/platform/app/Filament/Pages/EnvironmentDiagnostics.php` +- `apps/platform/app/Filament/Resources/RestoreRunResource.php` +- `apps/platform/app/Filament/Resources/RestoreRunResource/Pages/CreateRestoreRun.php` +- `apps/platform/app/Filament/Pages/EnvironmentDashboard.php` + +### Tests / Guards + +- `apps/platform/tests/Unit/Support/Rbac/Actions/*` +- `apps/platform/tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php` +- `apps/platform/tests/Feature/Architecture/ScopedUiActionContextContractTest.php` +- `apps/platform/tests/Support/Filament/ScopedActionAssertions.php` +- existing action tests under `apps/platform/tests/Feature/Filament`, `apps/platform/tests/Feature/Evidence`, `apps/platform/tests/Feature/ReviewPack`, and `apps/platform/tests/Feature/RunStartAuthorizationTest.php` +- existing support action tests under `apps/platform/tests/Feature/SupportDiagnostics` and `apps/platform/tests/Feature/SupportRequests` + +## Technical Approach + +1. Re-read this spec, plan, tasks, checklist, the constitution, and relevant guidelines before runtime edits. +2. Re-verify the current action callsites and exact action names. +3. Add failing Unit coverage for context value objects and `UiEnforcement` scoped behavior. +4. Add failing Feature/Filament coverage for the known latent-risk actions. +5. Add the narrow `UiActionContext` contract and helper/trait. +6. Harden `UiEnforcement` to require explicit context for scoped no-record actions while preserving record-backed paths. +7. Retrofit representative actions to pass explicit context and reauthorize on submit. +8. Add reusable first-click modal/no-run helper only where it reduces duplication. +9. Add the static guard with actionable failures. +10. Run focused tests, Pint dirty, and diff checks. + +## Risk Controls + +- Keep the first implementation scoped to no-record workspace/environment actions. +- Do not remove valid record-backed context resolution. +- Do not allow `Filament::getTenant()` as fallback product-scope truth for scoped no-record actions. +- Keep modal open non-mutating. +- Keep server-side authorization in handlers/services/policies. +- Keep missing-context copy enterprise-safe and localizable later. +- No new migrations, assets, global search, panel provider, navigation, capability, operation type, or route. +- Stop if implementation needs persistence, broad OperationRun redesign, or many static-guard false positives across record-backed actions. + +## Implementation Phases + +### Phase 1: Baseline and Repo-Truth Inventory + +Confirm current branch/worktree, re-read dependencies, and inventory exact callsites/action names before edits. + +### Phase 2: Contract and Unit Tests + +Add the action-context value object/enums/trait or equivalent and Unit coverage for workspace, environment, record, system, and missing context behavior. + +### Phase 3: UiEnforcement Contract + +Add explicit scoped-action API or compatible signature changes, remove implicit scoped no-record fallback, preserve record-backed behavior, and cover missing-context classification. + +### Phase 4: Representative Action Retrofits + +Retrofit Inventory Sync, Policy Sync, Entra Group Sync, Evidence Snapshot, Review Pack, Environment Review, Environment Diagnostics, Restore create, and Environment Dashboard support actions. + +### Phase 5: Test Helper and Static Guard + +Add the reusable first-click modal/no-run helper and static architecture guard. + +### Phase 6: Validation and Close-Out + +Run focused tests, optional browser smoke only if needed, Pint dirty, `git diff --check`, and record no-migration/no-asset/no-provider/global-search status. + +## Project Structure + +### Documentation (this feature) + +```text +specs/363-explicit-uiactioncontext-contract/ +├── spec.md +├── plan.md +├── tasks.md +└── checklists/ + └── requirements.md +``` + +### Application (later implementation only) + +```text +apps/platform/app/Support/Rbac/Actions/ +apps/platform/app/Support/Rbac/UiEnforcement.php +apps/platform/app/Filament/... +apps/platform/tests/... +``` + +No application files are changed during this preparation step. diff --git a/specs/363-explicit-uiactioncontext-contract/spec.md b/specs/363-explicit-uiactioncontext-contract/spec.md new file mode 100644 index 00000000..8e1113c5 --- /dev/null +++ b/specs/363-explicit-uiactioncontext-contract/spec.md @@ -0,0 +1,462 @@ +# Feature Specification: Spec 363 - Explicit UiActionContext Contract for Scoped No-Record Actions + +**Feature Branch**: `feat/363-explicit-uiactioncontext-contract` +**Preparation Branch**: `363-explicit-uiactioncontext-contract` +**Created**: 2026-06-07 +**Status**: Implemented +**Type**: Filament/Livewire action-context safety / RBAC UX hardening / no new persistence +**Runtime posture**: Harden workspace- and environment-scoped no-record Filament actions so render, first-click modal mount, and submit execution use explicit product scope instead of implicit Filament tenant fallback. +**Input**: Direct user-provided Spec 363 draft in `/Users/ahmeddarrazi/.codex/attachments/36f3aea8-0303-4548-a83c-9f1cdd15f527/pasted-text.txt` plus repo inspection of Spec 362 root-cause audit and current action/RBAC seams. + +## Dependencies And Historical Context + +This package follows the action-context root-cause audit produced during Spec 362: + +- `specs/362-sync-capture-backup-operation-semantics/artifacts/action-context-root-cause-audit.md` classifies the issue as **Case C - Systemic Action Context Contract Gap**. +- The audit shows that Inventory Sync and Policy Sync already needed an explicit page resolver pattern to make first-click modal mounting reliable under `/livewire/update`. +- The same latent class remains on no-record environment/workspace actions that can open modals, create `OperationRun` records, dispatch jobs, generate artifacts, or mutate support/diagnostics state. + +Current repo truth already provides useful foundations: + +- `App\Support\Rbac\UiEnforcement` centralizes environment-scoped UI affordance rules. +- `App\Support\Rbac\WorkspaceUiEnforcement` already uses a stricter explicit workspace source pattern. +- `App\Filament\Concerns\ResolvesPanelTenantContext` can resolve panel context across Livewire referer requests. +- `OperationRun` and OperationRun UX helpers already make queued work observable. +- Existing Filament/Livewire tests already use `mountAction()`, `callAction()`, queue fakes, and no-run assertions for Inventory and Policy Sync. + +This spec turns those local fixes into an explicit product contract. + +## Spec Candidate Check *(mandatory - SPEC-GATE-001)* + +- **Problem**: Workspace- and environment-scoped no-record Filament actions can lose their original route/page context on Livewire update requests. When `UiEnforcement` falls back to `Filament::getTenant()` as product scope truth, an authorized operator can see silent disabled/hidden actions, modals that do not open, or render/submit scope divergence. +- **Today's failure**: + - Initial `/admin/...` page render can have enough context, while first-click `/livewire/update` action mounting does not. + - Missing product context is collapsed into ordinary non-membership or missing-capability state. + - Modal-open tests and "no OperationRun/job on modal mount" tests exist only for selected local fixes. + - Latent no-record actions such as Entra Group Sync, Evidence Snapshot create, Review Pack generate, Environment Review create, Environment Diagnostics repair, Restore create entry, and Environment Dashboard support actions still need the same contract. +- **User-visible improvement**: Authorized operators get reliable first-click modals and truthful disabled/missing-context states. High-impact actions create runs, dispatch jobs, generate artifacts, or mutate records only on submit after explicit reauthorization with the same workspace/environment context. +- **Smallest enterprise-capable version**: + - introduce a narrow `UiActionContext` contract for action product scope + - make scoped no-record action enforcement require explicit context + - preserve record-backed action behavior where scope comes from the record + - retrofit representative latent-risk no-record actions + - add reusable first-click modal/no-run test support + - add a static guard for risky scoped no-record actions without explicit context +- **Explicit non-goals**: + - no migrations or persisted action-context table + - no new product feature + - no UI redesign or new route family + - no OperationRun model redesign + - no RBAC architecture rewrite + - no broad rewrite of record-backed row/table/detail actions + - no compatibility mode for old scoped no-record actions + - no Filament panel/provider change + - no global-search behavior change + - no asset pipeline change + - no broad support desk, billing, promotion, AI, or governance-inbox feature work +- **Permanent complexity imported**: one value object, two small enums, one resolver trait or equivalent helper, one explicit scoped-action API on `UiEnforcement`, one reusable test helper, and one static architecture/guard test. No new persistence, operation type, capability string, or cross-domain UI framework is introduced. +- **Why now**: Spec 362 proved this is not a local Inventory/Policy bug. New roadmap/productization work is likely to add modal-first, approval, support, entitlement, and OperationRun-starting actions; those should not inherit an implicit context fallback. +- **Why not local**: A per-page resolver fix already repeated once. Continuing local fixes would keep every future no-record action responsible for rediscovering the same Livewire transport edge case and would leave no static guard against recurrence. +- **Approval class**: Core Enterprise. +- **Red flags triggered**: new abstraction and enum family, static guard, cross-cutting action-contract change. **Defense**: the abstraction is required for RBAC, tenant/workspace isolation, queue/job legitimacy, and operator trust; scope is limited to no-record scoped actions first and preserves record-backed paths. +- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexitaet: 1 | Produktnaehe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12** +- **Decision**: approve. + +## Candidate Source And Completed-Spec Guardrail + +- **Candidate source**: + - direct user-provided Spec 363 draft in `pasted-text.txt` + - Spec 362 root-cause audit artifact under `specs/362-sync-capture-backup-operation-semantics/artifacts/action-context-root-cause-audit.md` + - repo-verified current action patterns under `apps/platform/app/Filament` and `apps/platform/app/Support/Rbac` +- **Queue boundary**: `docs/product/spec-candidates.md` states that no safe automatic next-best-prep target remains in the active queue. This package is an intentional manual promotion from direct user input, not an auto-selected backlog item. +- **Completed-spec check result**: + - no `specs/363-*` package existed before this prep + - no `363-*` branch existed before this prep + - runtime implementation must run from `feat/363-explicit-uiactioncontext-contract` based on `dev`; the current prep branch is not the final PR branch shape + - Spec 362 is treated as implemented/root-cause context and is not modified + - Specs 338, 340, 358, 359, 360, 361, and 362 are dependency/history context only and must not be rewritten or normalized here + - completed implementation close-out, validation, smoke, and completed task markers in related specs remain historical evidence +- **Close alternatives deferred**: + - `OperationRun Start Authorization Contract Hardening` is deferred unless implementation proves execution authorization is weaker than the UI gate across more than this context class + - full migration of every record-backed row/table/detail action is deferred because record-derived scope is a different, currently valid context source + - customer-review, governance-inbox, promotion, commercial-entitlement, support-desk, and AI runtime productization remain future consumers of this contract, not hidden scope +- **Smallest viable implementation slice**: explicit scoped-action context contract, representative no-record action retrofit, reusable tests, and static recurrence guard. + +## Summary + +This feature makes product scope explicit for workspace- and environment-scoped no-record Filament actions. + +It does not replace Filament tenancy or record-backed authorization. It says that a no-record action that depends on workspace/environment scope must be given that scope explicitly at render, modal mount, and submit time. Missing context is a distinct fail-closed state, not an ordinary "you are not a member" or "you lack permission" state. + +## Business/Product Value + +- Prevents trust-damaging admin UX failures such as first-click modal misses, mysteriously disabled actions, and context-dependent action state drift. +- Makes high-impact sync, evidence, review, restore, diagnostics, and support actions safer before broader productization work adds more modal-first workflows. +- Reduces repeated implementation drift by making explicit action context a shared contract and a testable guardrail. + +## Primary Users / Operators + +- Tenant/MSP operators who start sync, evidence, review, restore, diagnostics, and support workflows from Filament admin surfaces. +- Workspace owners/managers who expect capability-gated actions to be stable and honest. +- Platform/support operators who need missing-context states to be diagnosable without exposing low-level transport details in the UI. + +## Roadmap Relationship + +This is governance and architecture hardening for the current sellable platform path. + +It directly protects future features that will add modal-first and OperationRun-starting actions: + +- Customer Review Workspace completion +- Decision-Based Governance Inbox +- Cross-Tenant Compare and Promotion +- Commercial entitlement and billing-state gates +- External Support Desk / PSA Handoff +- governed AI execution surfaces + +Those features should build on explicit action context rather than repeating the current local resolver pattern. + +## Spec Scope Fields *(mandatory)* + +- **Scope**: canonical-view plus workspace/environment action scope +- **Primary Routes**: + - existing `/admin/...` workspace-owned and environment-scoped Filament pages that expose no-record header/page/empty-state actions + - existing environment resource pages for Inventory, Policies, Entra Groups, Evidence Snapshots, Review Packs, Environment Reviews, Restore Runs, Environment Diagnostics, and Environment Dashboard +- **Data Ownership**: + - no new table, column, or persisted truth + - `Workspace` remains primary SaaS context + - `ManagedEnvironment` remains managed target context inside a workspace + - existing `OperationRun`, audit, evidence, review, backup, restore, and support records keep their current ownership +- **RBAC**: + - UI visibility/disabled state continues to use `UiEnforcement` or `WorkspaceUiEnforcement` + - execution handlers must reauthorize server-side using the explicit workspace/environment context + - non-members and wrong-scope actors remain deny-as-not-found where policy/route semantics require it + - readonly and entitlement states must use the same explicit context used by modal and submit paths + +For canonical-view specs: + +- **Default filter behavior when tenant-context is active**: no-record action scope must come from an explicit page, workspace, environment, or record context resolver. It must not silently use remembered environment state or `Filament::getTenant()` as product scope truth. +- **Explicit entitlement checks preventing cross-tenant leakage**: every submitted action must resolve a workspace/environment context that belongs to the current workspace and actor entitlement before creating runs, dispatching jobs, generating artifacts, or mutating records. + +## UI Surface Impact *(mandatory - UI-COV-001)* + +Does this spec add, remove, rename, or materially change any reachable UI surface? + +- [ ] No UI surface impact +- [x] Existing page changed +- [ ] New page/route added +- [ ] Navigation changed +- [ ] Filament panel/provider surface changed +- [ ] New modal/drawer/wizard/action added +- [ ] New table/form/state added +- [ ] Customer-facing surface changed +- [x] Dangerous action changed +- [ ] Status/evidence/review presentation changed +- [x] Workspace/environment context presentation changed + +## UI/Productization Coverage *(mandatory when UI Surface Impact is not "No UI surface impact")* + +- **Route/page/surface**: + - `App\Filament\Resources\InventoryItemResource\Pages\ListInventoryItems` + - `App\Filament\Resources\PolicyResource` + - `App\Filament\Resources\PolicyResource\Pages\ListPolicies` + - `App\Filament\Resources\EntraGroupResource\Pages\ListEntraGroups` + - `App\Filament\Resources\EvidenceSnapshotResource` and `Pages\ListEvidenceSnapshots` + - `App\Filament\Resources\ReviewPackResource` + - `App\Filament\Resources\EnvironmentReviewResource` + - `App\Filament\Pages\EnvironmentDiagnostics` + - `App\Filament\Resources\RestoreRunResource` + - `App\Filament\Pages\EnvironmentDashboard` +- **Current or new page archetype**: existing native Filament resource/list/page/action surfaces +- **Design depth**: Domain Pattern Surface +- **Repo-truth level**: repo-verified +- **Existing pattern reused**: `UiEnforcement`, `WorkspaceUiEnforcement`, `ResolvesPanelTenantContext`, existing Filament action/modal testing patterns, existing OperationRun UX helpers +- **New pattern required**: small action-context contract and static guard; no new page pattern or visual redesign +- **Screenshot required**: no by default; one bounded Browser smoke only if implementation changes visible hierarchy or missing-context copy beyond existing tooltips/notifications +- **Page audit required**: no new page-report identity is required by default +- **Customer-safe review required**: no; affected surfaces are operator/admin surfaces +- **Dangerous-action review required**: yes for high-impact and destructive-adjacent actions. Existing destructive actions must keep `->action(...)`, `->requiresConfirmation()`, server-side authorization, audit logging, and tests. Modal open must not create `OperationRun` records or dispatch jobs. +- **Coverage files updated or explicitly not needed**: + - [ ] `docs/ui-ux-enterprise-audit/route-inventory.md` + - [ ] `docs/ui-ux-enterprise-audit/design-coverage-matrix.md` + - [ ] `docs/ui-ux-enterprise-audit/page-reports/...` + - [ ] `docs/ui-ux-enterprise-audit/strategic-surfaces.md` + - [ ] `docs/ui-ux-enterprise-audit/grouped-follow-up-candidates.md` + - [ ] `docs/ui-ux-enterprise-audit/unresolved-pages.md` + - [x] `N/A - existing reachable UI surface families only` +- **No-impact rationale when applicable**: N/A. This feature changes existing action behavior and workspace/environment context presentation, but does not add a new reachable route/page family. + +## Cross-Cutting / Shared Pattern Reuse *(mandatory)* + +- **Cross-cutting feature?**: yes +- **Interaction class(es)**: header actions, page actions, empty-state actions, modal actions, OperationRun-starting actions, support/diagnostic actions, status/tooltip copy +- **Systems touched**: + - `App\Support\Rbac\UiEnforcement` + - `App\Support\Rbac\WorkspaceUiEnforcement` as comparison context only unless implementation chooses to share a small value object + - `App\Filament\Concerns\ResolvesPanelTenantContext` + - existing Filament resource/page action definitions + - existing action tests and guard tests + - existing `OperationRun` creation/dispatch paths only through current handlers +- **Existing pattern(s) to extend**: `UiEnforcement`, `WorkspaceUiEnforcement`, current page context resolvers, current Filament action tests +- **Shared contract / presenter / builder / renderer to reuse**: `UiEnforcement` and page/record resolvers; no presenter or renderer is introduced +- **Why the existing shared path is sufficient or insufficient**: the shared path exists, but `UiEnforcement` still allows ambiguous no-record scoped actions to fall back to implicit Filament tenant context. The contract must make scoped action context explicit. +- **Allowed deviation and why**: a small new `App\Support\Rbac\Actions` namespace is allowed if it keeps action context isolated and avoids bloating `UiEnforcement` with unrelated UI framework semantics. +- **Consistency impact**: missing-context handling, readonly/capability disabled state, modal mount behavior, OperationRun dispatch timing, and server reauthorization must stay consistent across all retrofitted actions. +- **Review focus**: no hidden `Filament::getTenant()` fallback for no-record scoped actions, no modal-open side effects, no compatibility shim, no broad record-backed rewrite. + +## OperationRun UX Impact *(mandatory)* + +- **Touches OperationRun start/completion/link UX?**: yes, start semantics only +- **Shared OperationRun UX contract/layer reused**: existing `OperationRunService`, action handlers, `OperationRunLinks`, `OperationUxPresenter`, and `OpsUxBrowserEvents` +- **Delegated start/completion UX behaviors**: queued toast, `Open operation` / `View run` links, run-enqueued browser events, and terminal notification paths remain unchanged +- **Local surface-owned behavior that remains**: action form inputs, confirmation wording, and missing-context notification/tooltip copy +- **Queued DB-notification policy**: unchanged +- **Terminal notification path**: unchanged +- **Exception required?**: none. If execution authorization is found weaker than the UI gate beyond this context class, stop and create a follow-up instead of widening this spec. + +## Provider Boundary / Platform Core Check *(mandatory)* + +- **Shared provider/platform boundary touched?**: no new provider boundary is introduced +- **Boundary classification**: platform-core UI/RBAC action context over current provider-backed operations +- **Seams affected**: Filament action scope, workspace/environment context, run/job dispatch inputs, support/diagnostic mutation inputs +- **Neutral platform terms preserved or introduced**: `workspace`, `environment`, `record`, `system`, `product scope`, `action context` +- **Provider-specific semantics retained and why**: Microsoft/Graph semantics remain inside existing job/service handlers; this spec does not add provider-specific endpoints or contracts +- **Why this does not deepen provider coupling accidentally**: the new contract names workspace/environment product scope rather than Microsoft tenant transport state, and it forbids treating Filament tenant context as platform truth for no-record scoped actions +- **Follow-up path**: only `OperationRun Start Authorization Contract Hardening` if broader execution weakness is repo-verified during implementation + +## UI / Surface Guardrail Impact + +| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note | +|---|---|---|---|---|---|---| +| Scoped no-record header/page actions | yes | Native Filament actions | header/page/modal action family | page, modal, Livewire action mount | no | existing pages only | +| Missing action context state | yes | Native disabled/hidden/notification affordances | RBAC UX family | page, action state | no | copy must remain enterprise-safe | +| OperationRun-starting action submit path | yes | Existing services/jobs | OperationRun start family | action submit, queue/job dispatch | no | completion UX unchanged | + +## Decision-First Surface Role + +| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction | +|---|---|---|---|---|---|---|---| +| Scoped action button/modal | Primary Action Surface | Operator decides whether to start sync, generate artifact, create review, repair diagnostics, restore, or request support | action enabled/disabled state and confirmation/modal availability | existing form fields, modal text, run link after submit | primary because it is where work begins | keeps scope decision attached to the action | avoids "button does nothing" and wrong permission interpretation | +| Missing-context tooltip/notification | Secondary Explanation Surface | Operator needs to understand why a scoped action is unavailable | concise "environment context unavailable" explanation | none by default | secondary because it explains a blocked action | prevents false permission framing | avoids support/debug reconstruction | +| OperationRun link after submit | Secondary Follow-through Surface | Operator inspects queued work | existing run link/notification | existing operation detail diagnostics | unchanged existing pattern | same OperationRun workflow | avoids duplicating result truth in modal | + +## Audience-Aware Disclosure + +| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention | +|---|---|---|---|---|---|---|---| +| Scoped action button/modal | operator-MSP, support-platform | action state, form, confirmation, safe context wording | context source only in tests/log-safe diagnostics unless already appropriate | no raw Livewire/request detail in UI | run/submit the action or reload/select environment | technical transport details such as `getTenant null` | modal state and submit handler use one explicit context | +| Missing-context state | operator-MSP, support-platform | "Environment context unavailable" style copy | no default raw IDs | raw request/referer data remains outside UI | reload workspace or select environment | low-level Livewire/Filament internals | missing context is distinct from permission denial | + +## UI/UX Surface Classification + +| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Existing resource/page header actions | Action / Modal / Workbench | High-impact no-record action | open modal, confirm, submit, or reload/select context | action/modal | N/A | existing page actions | existing confirmation/modal patterns | existing route family | existing route family | workspace/environment action context | Action / Operation | whether context and capability allow the action | none | +| Existing empty-state actions | Action / Empty State | No-record generation action | create first snapshot/pack/review where allowed | action/modal | N/A | empty state | existing confirmation/modal patterns | existing route family | existing route family | explicit environment context | Action / Artifact | context and authorization are consistent | none | + +## Operator Surface Contract + +| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions | +|---|---|---|---|---|---|---|---|---|---|---| +| Scoped no-record actions | Tenant operator / MSP operator | Start or generate environment/workspace work safely | existing Filament action/modal | Can I run this action for this exact workspace/environment now? | enabled/disabled/missing-context state and modal inputs | context source and technical request details only in tests/log-safe diagnostics | context present, membership, capability, entitlement, readonly | TenantPilot and queued provider work depending action | sync, generate, create, repair, request support | restore, diagnostics repair, delete/expire-adjacent actions keep confirmation and server authorization | + +## Proportionality Review *(mandatory when structural complexity is introduced)* + +- **New source of truth?**: no persisted source of truth. `UiActionContext` is a request-time product-scope contract. +- **New persisted entity/table/artifact?**: no. +- **New abstraction?**: yes, a narrow action-context value object/helper contract. +- **New enum/state/reason family?**: yes, small request-time scope/source enums and missing-context reason classification. +- **New cross-domain UI framework/taxonomy?**: no. +- **Current operator problem**: trusted admin actions can silently fail, hide, disable, or mount inconsistently because product scope is implicit on Livewire update requests. +- **Existing structure is insufficient because**: `UiEnforcement` accepts nullable no-record context and can fall back to `Filament::getTenant()`, while workspace-first admin surfaces need page/record/workspace/environment product context. +- **Narrowest correct implementation**: make scoped no-record action context explicit, preserve valid record-backed context resolution, and guard only the risky class first. +- **Ownership cost**: one reusable contract, focused action retrofits, static guard maintenance, and action lifecycle tests for high-impact no-record actions. +- **Alternative intentionally rejected**: keep adding local page resolver closures without a central contract. Rejected because it leaves recurrence likely and missing context indistinguishable from authorization denial. +- **Release truth**: current-release truth. The issue is repo-verified and already required local fixes. + +### Compatibility posture + +This feature assumes a pre-production environment. + +Backward compatibility, legacy aliases, migration shims, historical fixtures, and compatibility-specific tests are out of scope. No compatibility fallback is allowed for scoped no-record actions that should use explicit context. + +Record-backed actions are not legacy exceptions; they are a different valid context source. + +## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)* + +- **Test purpose / classification**: Unit for context value objects and `UiEnforcement` context handling; Feature/Filament-Livewire for action visibility, first-click modal mount, submit reauthorization, and no-run/no-job-on-modal-open; Architecture/Feature guard for static source scanning; Browser optional smoke only if visible hierarchy/copy changes materially. +- **Validation lane(s)**: fast-feedback, confidence, browser optional +- **Why this classification and these lanes are sufficient**: the risk is request-time action context and Filament/Livewire lifecycle behavior, not schema or PostgreSQL-specific persistence. +- **New or expanded test families**: one explicit Spec 363 Unit family, one explicit Spec 363 Feature/Architecture guard, and targeted extensions to existing action tests. +- **Fixture / helper cost impact**: existing workspace/environment/user/capability factories plus current queue fakes; no new global seed or heavy default context. +- **Heavy-family visibility / justification**: no heavy-governance family by default; Browser only if UI copy/hierarchy changes require visual smoke. +- **Special surface test profile**: standard-native-filament plus action-lifecycle-contract. +- **Standard-native relief or required special coverage**: use Filament action testing helpers for pages/actions. Header actions use `mountAction()` / `callAction()` and table header actions may use `Filament\Actions\Testing\TestAction::make(...)->table()` where appropriate. +- **Reviewer handoff**: reviewers must confirm no modal-open side effects, no implicit `Filament::getTenant()` product-scope fallback for scoped no-record actions, no compatibility shim, and no broad record-backed churn. +- **Budget / baseline / trend impact**: none expected beyond targeted action lifecycle tests. +- **Escalation needed**: document-in-feature if a single false positive needs a bounded static-guard exception; follow-up-spec if execution authorization is broadly weaker than UI gating. +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage. +- **Planned validation commands**: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/Rbac/Actions tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php` + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Architecture/ScopedUiActionContextContractTest.php tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/PolicySyncStartSurfaceTest.php tests/Feature/RunStartAuthorizationTest.php` + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/EntraGroupAdminScopeTest.php tests/Feature/Evidence/EvidenceSnapshotResourceTest.php tests/Feature/ReviewPack/ReviewPackResourceTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` + - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` + - `git diff --check` + +## User Scenarios & Testing *(mandatory)* + +### User Story 1 - Explicit Context Contract (Priority: P1) + +As a tenant operator, I need scoped actions to evaluate against the same workspace/environment context during render, first click, and submit, so that action state is reliable and not dependent on Livewire transport details. + +**Why this priority**: This is the foundation that prevents first-click modal failures and render/submit drift across all retrofitted actions. + +**Independent Test**: Unit tests prove `UiActionContext` can represent workspace, environment, record, system, and missing context, and `UiEnforcement` fails closed for scoped no-record actions without explicit context while preserving record-backed behavior. + +**Acceptance Scenarios**: + +1. **Given** a no-record environment-scoped action with explicit environment context, **When** Livewire evaluates visibility and disabled state, **Then** it uses that context instead of implicit Filament tenant fallback. +2. **Given** a no-record environment-scoped action with missing context, **When** action state is evaluated, **Then** the action fails closed with missing-context reason distinct from non-membership and missing capability. +3. **Given** a record-backed table/detail action, **When** action state is evaluated, **Then** the existing record-derived scope remains valid without broad retrofit churn. + +--- + +### User Story 2 - Stable First-Click Modal Lifecycle (Priority: P1) + +As an operator starting sync, evidence, review, restore, diagnostics, or support work, I need the modal or confirmation to open on first click without creating a run, dispatching a job, or mutating records until I submit. + +**Why this priority**: The repo-verified failure mode is user-visible trust damage: buttons appear broken or create inconsistent action lifecycle behavior. + +**Independent Test**: Filament/Livewire action tests mount each representative no-record action under workspace-scoped Livewire referer context, assert the action is mounted/open, and assert no `OperationRun`, queued provider job, audit side effect, or domain mutation happens on modal open unless explicitly intended and tested. + +**Acceptance Scenarios**: + +1. **Given** an authorized operator on the Inventory list with no Filament tenant on the Livewire update request, **When** they first click Run Inventory Sync, **Then** the modal mounts and no `inventory.sync` run or job is created. +2. **Given** an authorized operator on Evidence Snapshot, Review Pack, Environment Review, Restore, Diagnostics, or Environment Dashboard surfaces, **When** they first click the scoped action, **Then** modal/confirmation state uses explicit action context and creates no run/job/mutation until submit. +3. **Given** a readonly or entitlement-blocked operator, **When** action state is evaluated and submitted, **Then** disabled state and server-side denial use the same explicit context and no work is queued. + +--- + +### User Story 3 - Recurrence Guard For Risky Actions (Priority: P1) + +As a reviewer, I need a static guard that flags risky no-record scoped actions without explicit context so future feature work cannot reintroduce the same pattern. + +**Why this priority**: Without a guard, the next modal-first or OperationRun-starting feature can repeat the bug even if current actions are fixed. + +**Independent Test**: A Pest architecture/guard test scans `apps/platform/app/Filament` for risky scoped no-record action patterns and fails with actionable output when a candidate lacks `UiActionContext` / `forScopedAction` / canonical resolver markers. + +**Acceptance Scenarios**: + +1. **Given** a new no-record scoped action that uses `UiEnforcement::forAction()` and can dispatch work, open a modal, or create an `OperationRun`, **When** it lacks explicit context, **Then** the guard fails with file/action/fix guidance. +2. **Given** a record-backed row/table/detail action, **When** it safely derives scope from the record, **Then** the guard does not require unnecessary `UiActionContext` churn. +3. **Given** an unavoidable false positive, **When** a bounded exception is needed, **Then** it must be documented in this feature or a follow-up with a specific reason, not hidden in a permanent legacy allowlist. + +--- + +### User Story 4 - Operator-Safe Missing Context Copy (Priority: P2) + +As an operator, I need missing context to be explained as context unavailability, not as a false permission denial or low-level Livewire/Filament error. + +**Why this priority**: The primary trust issue is silent or misleading UX. Copy does not need a full localization project, but it must be localizable later and not expose transport internals. + +**Independent Test**: Feature tests assert missing-context state produces a distinct reason and, where visible, enterprise-safe copy such as "Environment context unavailable." + +**Acceptance Scenarios**: + +1. **Given** an action should remain visible but context cannot be resolved, **When** the operator sees the disabled state, **Then** the tooltip/notification says the environment/workspace context is unavailable rather than "you lack permission." +2. **Given** missing context is logged or asserted in tests, **When** diagnostics are inspected, **Then** no secret, token, raw Graph payload, or unsupported request internals are exposed in UI copy. + +## Functional Requirements + +- **FR-363-001**: The implementation MUST introduce an explicit action-context contract that can represent workspace, environment, record, system, and missing scoped action context without persistence. +- **FR-363-002**: The implementation MUST support a distinct missing-context reason such as `context_missing`, `workspace_missing`, or `environment_missing`. +- **FR-363-003**: `UiEnforcement` MUST accept explicit scoped action context for no-record workspace/environment actions. +- **FR-363-004**: Scoped no-record actions MUST NOT silently rely on `Filament::getTenant()` as product scope truth. +- **FR-363-005**: Record-backed actions MAY continue to resolve context from their record when that record is the product scope source. +- **FR-363-006**: Missing context MUST fail closed and MUST be distinguishable from non-membership and missing capability in tests. +- **FR-363-007**: First-click modal/confirmation mount MUST NOT create an `OperationRun`, dispatch provider/write jobs, or mutate domain state unless a specific action intentionally audits open and tests that behavior. +- **FR-363-008**: Submit/execute handlers MUST reauthorize server-side using the explicit context before creating runs, dispatching jobs, generating artifacts, or mutating data. +- **FR-363-009**: Representative no-record actions MUST be retrofitted: `run_inventory_sync`, Policy Sync, `sync_groups`, `create_snapshot`, `create_first_snapshot`, `generate_pack`, `generate_first`, `create_review`, `bootstrapOwner`, `mergeDuplicateMemberships`, Restore create entry, and Environment Dashboard support actions. +- **FR-363-010**: A static guard MUST flag risky scoped no-record action patterns without explicit context and provide actionable failure output. +- **FR-363-011**: The implementation MUST keep destructive and high-impact actions on `Action::make(...)->action(...)` with `->requiresConfirmation()` where currently required. +- **FR-363-012**: The implementation MUST NOT add new capabilities, operation types, routes, panels, assets, migrations, or global-search behavior. + +## Non-Functional Requirements + +- **NFR-363-001**: Filament remains v5 and Livewire remains v4.0+ compliant. +- **NFR-363-002**: Laravel 12 panel providers remain registered in `apps/platform/bootstrap/providers.php`; no provider registration change is planned. +- **NFR-363-003**: No Graph call may occur during render, action visibility, disabled-state evaluation, or modal mount. +- **NFR-363-004**: Tests must stay focused: Unit + Feature/Filament-Livewire + static guard, with Browser only if visible behavior changes materially. +- **NFR-363-005**: Missing-context copy must be enterprise-safe and localizable later; it must not expose low-level Livewire request state. +- **NFR-363-006**: Static guard false positives must be resolved by narrowing the guard or documenting bounded exceptions, not by a broad legacy allowlist. + +## Out Of Scope + +- OperationRun status/outcome redesign. +- New persisted context/audit table. +- Full action-surface discovery framework rewrite. +- Full migration of every record-backed action. +- UI redesign or navigation changes. +- Customer-facing portal/review productization. +- Commercial billing-state implementation. +- Cross-tenant promotion execution. +- Support desk/PSA integration. +- AI execution governance implementation. + +## Acceptance Criteria + +- `UiActionContext` or an equivalent explicit request-time context contract exists and is covered by Unit tests. +- `UiEnforcement` supports explicit scoped action context and no scoped no-record action silently relies on `Filament::getTenant()` as product scope truth. +- Missing workspace/environment context fails closed and is test-observable as missing context, not only as non-membership or missing capability. +- Representative no-record actions listed in this spec use explicit context or have documented repo-verified reasons for deferral. +- First-click modal/confirmation mount tests prove no `OperationRun`, provider/write job, or domain mutation occurs before submit. +- Submit/execute tests prove server-side reauthorization with explicit context. +- A static guard fails future risky scoped no-record actions without explicit context and reports actionable fix guidance. +- No migrations, assets, panel/provider changes, route/navigation changes, capability strings, operation types, or global-search changes are introduced. + +## Data And Truth Source Requirements + +- `UiActionContext` is request-time derived truth, not persistence. +- Workspace/environment product scope is authoritative for no-record scoped actions. +- Filament tenant context remains a framework transport/detail and may be used only when explicitly resolved into product context by a repo-approved resolver. +- `OperationRun` remains the run/dispatch truth after submit. +- Existing audit logs remain action-side-effect truth where handlers already audit. + +## Auditability And Observability Requirements + +- Existing audit events for support, diagnostics, restore, generation, sync, and run-start actions must remain. +- Modal open must not create audit records unless the existing action intentionally records a safe open/read event and tests it. +- OperationRun creation must include explicit workspace/environment scope as it does today through the handler's run-start path. +- Static guard failures must name the file/action/reason/fix so reviewers can act without reverse-engineering the scan. + +## Assumptions + +- Current application versions are PHP 8.4.15, Laravel 12.52, Filament 5.2.1, Livewire 4.1.4, Pest 4.3.1, PostgreSQL via Sail. +- The product remains pre-production, so no legacy compatibility shim is required for old scoped no-record behavior. +- `ManagedEnvironment` is still the environment/tenant model used by current runtime code. +- Existing policies, capability resolvers, and domain services remain the server-side authorization owners. + +## Risks + +- The static guard may initially produce false positives for record-backed or safe URL-only actions. +- Retrofitting many action surfaces can conflict with active feature work if done as one broad PR. +- Missing-context copy could become noisy if visible for actions that should be hidden entirely. +- If implementation reveals broader execution authorization weakness, that must become a follow-up spec rather than expanding this package silently. + +## Open Questions + +- None blocking preparation. During implementation, exact action names and file names must be reverified against current repo truth before edits. + +## Success Criteria + +- Representative no-record scoped actions mount reliably on first click under workspace-scoped Livewire requests. +- Missing context is test-observable and distinct from permission denial. +- Modal open creates no run/job/mutation for retrofitted actions. +- Submit paths reauthorize and use explicit context. +- Static guard catches new risky scoped no-record actions without explicit context. +- No migrations, assets, panel provider changes, or global-search changes are introduced. + +## Follow-Up Spec Candidates + +Only create a follow-up if implementation discovers repo-verified broader weakness: + +- `OperationRun Start Authorization Contract Hardening`: required only if execution-level authorization is inconsistent beyond UI action context. diff --git a/specs/363-explicit-uiactioncontext-contract/tasks.md b/specs/363-explicit-uiactioncontext-contract/tasks.md new file mode 100644 index 00000000..1225e23f --- /dev/null +++ b/specs/363-explicit-uiactioncontext-contract/tasks.md @@ -0,0 +1,186 @@ +# Tasks: Spec 363 - Explicit UiActionContext Contract for Scoped No-Record Actions + +**Input**: `/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/363-explicit-uiactioncontext-contract/spec.md`, `plan.md`, and `checklists/requirements.md` +**Prerequisites**: `spec.md` and `plan.md` +**Tests**: REQUIRED (Pest). Use Unit + Feature/Filament-Livewire + Architecture/guard. Browser is optional only if visible copy/hierarchy changes materially. +**Operations**: Modal open must not create `OperationRun` records, dispatch provider/write jobs, or mutate records. Submit/execute must reauthorize with explicit context. +**RBAC**: Reuse existing policies/gates, `UiEnforcement`, `WorkspaceUiEnforcement`, capability resolvers, and deny-as-not-found semantics. No new capability strings. +**Filament / Panel Guardrails**: Filament remains v5 on Livewire v4. Provider registration stays in `apps/platform/bootstrap/providers.php`. No new panel, global-search change, or asset strategy is allowed. +**Organization**: Tasks are ordered by dependency. Tests and guardrails come before or alongside runtime edits. + +## Repo Baseline At Prep Time + +- **Branch before Spec Kit creation**: `platform-dev` +- **HEAD before Spec Kit creation**: `548a37c8 feat: implement sync capture backup operation semantics (#433)` +- **`git status --short --branch` before Spec Kit creation**: clean +- **Spec Kit branch created**: `363-explicit-uiactioncontext-contract` +- **Implementation PR branch target**: `feat/363-explicit-uiactioncontext-contract` from `dev`; reconcile branch shape before runtime edits +- **Candidate source**: direct user-provided Spec 363 draft in `/Users/ahmeddarrazi/.codex/attachments/36f3aea8-0303-4548-a83c-9f1cdd15f527/pasted-text.txt` +- **Completed-spec context only**: Specs 338, 340, 358, 359, 360, 361, and 362 are dependency/history context and must not be reopened during Spec 363 implementation +- **Scope guardrail**: no migrations, no panel/provider changes, no assets, no global-search changes, no OperationRun redesign, no broad record-backed action migration, and no product-feature expansion + +## Test Governance Checklist + +- [x] Lane assignment remains explicit and narrowest sufficient (Unit + Feature/Filament-Livewire + Architecture/guard; Browser optional only when visible UI changes require it). +- [x] Shared helpers keep workspace/environment/member/capability setup opt-in and do not create expensive defaults. +- [x] Tests prove business truth: context resolution, RBAC affordance, server reauthorization, no-run/no-job on modal open, and wrong-scope fail-closed behavior. +- [x] Static guard failures are actionable and do not rely on broad permanent legacy allowlists. +- [x] Final close-out records no-migration, no-asset, no-panel-provider, no-global-search, and no-compatibility-shim status. + +## Implementation Close-Out Notes + +- Runtime implementation ran on `feat/363-explicit-uiactioncontext-contract` from `dev`. +- Repo-truth names differ from the draft: `TenantReviewResource`, `TenantDiagnostics`, and `TenantDashboard` are the current environment review/diagnostics/dashboard surfaces. +- `apps/platform/tests/Support/Filament/ScopedActionAssertions.php` was not added because the final focused tests did not duplicate enough setup to justify a new helper. +- Browser smoke was not run because the implementation does not materially change visible hierarchy or add new visible page/modal copy beyond the existing disabled-context tooltip path. +- No migrations, assets, panel/provider registration changes, global-search changes, new capabilities, new operation types, or compatibility shim were introduced. + +## Phase 1: Setup and Repo Truth Inventory + +**Purpose**: confirm exact current branch, callsites, action names, and related completed-spec context before runtime edits. + +- [x] T001 Re-read `spec.md`, `plan.md`, `checklists/requirements.md`, `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `docs/architecture-guidelines.md`, `docs/security-guidelines.md`, `docs/testing-guidelines.md`, `docs/filament-guidelines.md`, `docs/research/filament-v5-notes.md`, and `specs/362-sync-capture-backup-operation-semantics/artifacts/action-context-root-cause-audit.md`. +- [x] T002 Confirm current branch, working tree, and baseline commit with `git status --short --branch` and `git log -1 --oneline`; before runtime edits, ensure implementation runs on `feat/363-explicit-uiactioncontext-contract` from `dev` or document the branch reconciliation in close-out. +- [x] T003 [P] Re-verify current `UiEnforcement` and `WorkspaceUiEnforcement` behavior in `apps/platform/app/Support/Rbac/UiEnforcement.php` and `apps/platform/app/Support/Rbac/WorkspaceUiEnforcement.php`. +- [x] T004 [P] Re-verify Livewire referer context behavior in `apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php`; the draft-named `tests/Unit/Filament/ResolvesPanelTenantContextLivewireRefererTest.php` is not present on this branch, so resolver behavior is covered through `ResolvesUiActionContextTest` and admin resolver guard tests. +- [x] T005 [P] Re-inventory scoped no-record action callsites in `apps/platform/app/Filament` and record the exact current action names for Inventory, Policy, Entra Groups, Evidence Snapshot, Review Pack, Environment Review, Environment Diagnostics, Restore Run, and Environment Dashboard. +- [x] T006 Confirm no application implementation from Specs 338/340/358/359/360/361/362 needs to be rewritten; use those packages as context only. + +--- + +## Phase 2: Contract Unit Tests + +**Purpose**: define the request-time action-context contract before changing action code. + +- [x] T007 [P] Add failing Unit tests in `apps/platform/tests/Unit/Support/Rbac/Actions/UiActionContextTest.php` for workspace context, environment context, record context, system context, missing context, `requireWorkspace()`, and `requireEnvironment()`. +- [x] T008 [P] Add failing Unit tests in `apps/platform/tests/Unit/Support/Rbac/Actions/ResolvesUiActionContextTest.php` or equivalent to prove page resolver, record resolver, workspace resolver, and missing-context behavior against actual repo relation names. +- [x] T009 [P] Add failing Unit tests in `apps/platform/tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php` proving scoped no-record actions require explicit context and missing context is distinct from non-membership/missing capability. +- [x] T010 [P] Add regression tests proving record-backed actions can still resolve scope from records without mandatory no-record context plumbing. + +**Checkpoint**: tests describe the contract and fail for the current implicit fallback behavior. + +--- + +## Phase 3: Add Narrow Action Context Contract + +**Purpose**: add the smallest support-layer API needed for scoped action context. + +- [x] T011 Add `apps/platform/app/Support/Rbac/Actions/UiActionScope.php` with workspace, environment, record, and system scope values. +- [x] T012 Add `apps/platform/app/Support/Rbac/Actions/UiActionContextSource.php` with explicit, page resolver, workspace context, record, Livewire referer, and missing source values where currently justified. +- [x] T013 Add `apps/platform/app/Support/Rbac/Actions/UiActionContext.php` as a readonly request-time value object with `forWorkspace()`, `forEnvironment()`, `forRecord()`, `forSystem()`, `missing()`, `isMissing()`, missing-reason accessors, `requireWorkspace()`, and `requireEnvironment()` behavior or equivalent constructors/accessors. +- [x] T014 Add `apps/platform/app/Support/Rbac/Actions/ResolvesUiActionContext.php` or an equivalent helper that wraps existing `ResolvesPanelTenantContext` and actual model relation names without inventing fake relations. +- [x] T015 Confirm no new persistence, migration, capability, operation type, panel/provider, route, asset, or global-search behavior was introduced. + +**Checkpoint**: the new contract is narrow, request-time only, and covered by Unit tests. + +--- + +## Phase 4: Harden UiEnforcement For Scoped No-Record Actions + +**Purpose**: make the shared RBAC UI path enforce explicit scoped context without breaking record-backed actions. + +- [x] T016 Add an explicit scoped-action entrypoint such as `UiEnforcement::forScopedAction(Action $action, UiActionContext|Closure $context)` or a narrow compatible signature change that cannot be confused with nullable no-record context. +- [x] T017 Update context resolution inside `UiEnforcement` so scoped no-record actions do not silently fall back to `Filament::getTenant()` as product scope truth. +- [x] T018 Add internal missing-context classification so tests can distinguish context-missing from non-member and missing-capability states. +- [x] T019 Preserve existing record/action/table/bulk behavior where product scope is derived from a record or selected records. +- [x] T020 Keep destructive/high-impact action confirmation behavior intact: `Action::make(...)->action(...)`, `->requiresConfirmation()` where applicable, server authorization, audit, and notification paths. +- [x] T021 Run the core Unit gate: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/Rbac/Actions tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php tests/Unit/Support/Rbac/UiEnforcementTest.php` + +**Checkpoint**: `UiEnforcement` supports explicit context, fails closed for missing context, and does not break existing record-backed tests. + +--- + +## Phase 5: Retrofitted Action Tests First + +**Purpose**: protect representative action lifecycle behavior before or during runtime retrofit. + +- [x] T022 [P] Extend inventory start-surface coverage in `apps/platform/tests/Feature/Inventory/InventorySyncStartSurfaceTest.php`; `apps/platform/tests/Feature/Filament/InventoryItemResourceTest.php` was also run as the existing resource file. +- [x] T023 [P] Extend `apps/platform/tests/Feature/PolicySyncStartSurfaceTest.php` to keep first-click modal mount, no `OperationRun`, and no queued job on modal open under Livewire referer context. +- [x] T024 [P] Extend `apps/platform/tests/Feature/RunStartAuthorizationTest.php` / directory group coverage for `sync_groups` no-record action: readonly and no run/job until submit; shared missing-context behavior is covered in Unit because the page itself aborts before mounting without environment context. +- [x] T025 [P] Extend `apps/platform/tests/Feature/Evidence/EvidenceSnapshotResourceTest.php` for `create_snapshot` first-click modal/no-run behavior; `create_first_snapshot` is covered by the static guard and existing empty-state coverage because it has no modal-open lifecycle. +- [x] T026 [P] Extend `apps/platform/tests/Feature/ReviewPack/ReviewPackResourceTest.php` for `generate_pack` first-click modal/no-run behavior; `generate_first` stays covered through the shared action factory/static guard and existing readonly/entitlement empty-state assertions. +- [x] T027 [P] Extend Tenant Review coverage for repo-current `TenantReviewResource::makeCreateReviewAction()` / `create_review` in existing tenant review UI tests and static guard. +- [x] T028 [P] Extend Environment Diagnostics coverage for repo-current `TenantDiagnostics` actions `bootstrapOwner` and `mergeDuplicateMemberships` through existing diagnostics tests plus static guard. +- [x] T029 [P] Extend restore UI/enforcement coverage for `RestoreRunResource::makeCreateAction()` and restore create/wizard through existing restore tests and static guard. +- [x] T030 [P] Extend Environment Dashboard support action coverage for repo-current `TenantDashboard` support request and support diagnostics tests; support diagnostics retains its intentional audit-on-open behavior. + +**Checkpoint**: tests capture representative action behavior and fail until actions use explicit context consistently. + +--- + +## Phase 6: Retrofit Representative Actions + +**Purpose**: move known latent-risk no-record scoped actions to explicit `UiActionContext`. + +- [x] T031 Update `apps/platform/app/Filament/Resources/InventoryItemResource/Pages/ListInventoryItems.php` so `run_inventory_sync` uses explicit action context and keeps handler reauthorization/no-run-on-modal-open behavior. +- [x] T032 Update `apps/platform/app/Filament/Resources/PolicyResource.php` and `apps/platform/app/Filament/Resources/PolicyResource/Pages/ListPolicies.php` so Policy Sync uses explicit action context and keeps existing queued OperationRun UX. +- [x] T033 Update `apps/platform/app/Filament/Resources/EntraGroupResource/Pages/ListEntraGroups.php` so `sync_groups` uses explicit environment action context and no longer depends on implicit `Filament::getTenant()` for scoped no-record state. +- [x] T034 Update `apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php` and `apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php` so `create_snapshot` and `create_first_snapshot` use explicit environment action context. +- [x] T035 Update `apps/platform/app/Filament/Resources/ReviewPackResource.php` so `generate_pack` and `generate_first` use explicit environment action context and entitlement/readonly checks use the same context. +- [x] T036 Update repo-current `apps/platform/app/Filament/Resources/TenantReviewResource.php` so `create_review` uses explicit environment action context and submit still validates capability/access before creating review/compose work. +- [x] T037 Update repo-current `apps/platform/app/Filament/Pages/TenantDiagnostics.php` so `bootstrapOwner` and `mergeDuplicateMemberships` use explicit environment action context and modal open remains non-mutating. +- [x] T038 Update `apps/platform/app/Filament/Resources/RestoreRunResource.php` so Restore create entry/wizard context is explicit and restore/write gates remain separate. +- [x] T039 Update repo-current `apps/platform/app/Filament/Pages/TenantDashboard.php` so support request and support diagnostics actions use explicit environment action context. +- [x] T040 For any listed action whose current repo name differs from the draft, document the actual action name in the active feature close-out rather than inventing aliases. + +**Checkpoint**: representative latent-risk actions use explicit context and tests prove first-click/modal/submit lifecycle behavior. + +--- + +## Phase 7: Test Helper and Static Guard + +**Purpose**: prevent recurrence without creating a broad framework. + +- [x] T041 Add reusable test helper `apps/platform/tests/Support/Filament/ScopedActionAssertions.php` only if it reduces duplication across at least two retrofitted action tests; evaluated and not added. +- [x] T042 Helper assertion requirements are satisfied inline in focused tests where needed; no helper was introduced. +- [x] T043 Add `apps/platform/tests/Feature/Architecture/ScopedUiActionContextContractTest.php` to scan risky scoped no-record action patterns under `apps/platform/app/Filament`. +- [x] T044 The guard flags guarded no-record action names, scoped-action wrapper markers, and regression to `UiEnforcement::forAction`. +- [x] T045 Tune the guard to avoid record-backed row/table/detail false positives without hiding known risky actions. +- [x] T046 Ensure guard failure output includes file, action or nearest action name, reason, and a fix hint such as using explicit `UiActionContext` / scoped action resolver. +- [x] T047 Do not add a permanent legacy allowlist for old no-record scoped action patterns. + +**Checkpoint**: future risky no-record scoped actions fail fast unless they declare explicit context. + +--- + +## Phase 8: Validation + +- [x] T048 Run the core context and enforcement Unit gate: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/Rbac/Actions tests/Unit/Support/Rbac/UiEnforcementScopedActionContextTest.php tests/Unit/Support/Rbac/UiEnforcementTest.php` +- [x] T049 Run the primary action lifecycle and guard gate: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Architecture/ScopedUiActionContextContractTest.php tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/PolicySyncStartSurfaceTest.php tests/Feature/RunStartAuthorizationTest.php` +- [x] T050 Run the representative contextual action tests: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/EntraGroupAdminScopeTest.php tests/Feature/Evidence/EvidenceSnapshotResourceTest.php tests/Feature/ReviewPack/ReviewPackResourceTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` +- [x] T051 Run additional focused tests for repo-current Tenant Review, Tenant Diagnostics, Restore create, and Tenant Dashboard support files after implementation names the exact existing or new test files, including the relevant existing SupportDiagnostics/SupportRequests action tests when those surfaces are touched. +- [x] T052 Browser smoke not run; implementation changed existing action context behavior but not visible hierarchy/copy materially enough to require a browser pass under this spec's rule. +- [x] T053 Run `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`. +- [x] T054 Run `git diff --check`. +- [x] T055 Record final close-out: changed files, new contract classes, retrofitted actions, intentionally untouched actions, static guard result, tests run, no legacy fallback retained for scoped no-record actions, and no migrations/assets/panel/global-search changes. + +## Dependencies & Execution Order + +- Phase 1 must complete first. +- Phase 2 and Phase 3 establish the contract and should precede broad action retrofit. +- Phase 4 blocks action retrofit because callsites need the final `UiEnforcement` API. +- Phase 5 tests should be written before or beside Phase 6 runtime changes. +- Phase 7 guard can be developed after the first retrofits clarify the marker pattern, but must pass before close-out. +- Phase 8 closes the package. + +## Parallel Opportunities + +- T003, T004, and T005 can run in parallel. +- T007, T008, T009, and T010 can run in parallel. +- T022 through T030 can be split by action family after the helper approach is decided. +- T031 through T039 can be split by action family after `UiEnforcement` API stabilizes. + +## Explicit Non-Goals For Implementers + +- Do not modify completed spec artifacts outside Spec 363. +- Do not add migrations, tables, persisted status, or action-context audit tables. +- Do not add new capabilities or operation types. +- Do not change Filament panel provider registration or panel paths. +- Do not enable or alter global search. +- Do not add assets or require `filament:assets` because of this spec. +- Do not rewrite record-backed actions unless the guard proves they are actually no-record scoped risk. +- Do not turn this into support desk, billing, promotion, governance inbox, restore redesign, or AI runtime implementation.