# ASSESSOR – Umsetzungsplan ## Native Security export interaction and layout corrections (2026-10-13, Phase 7 Report Engine) User requests isolated popup/page scrolling, popup maximization, compact top facts, category click selection/disclosure and a centered two-thirds report with the Technical Report background. User explicitly retains the no-JavaScript export contract. Changes are confined to the Report Engine renderer and its tests; the Core snapshot adapter and source styles remain unchanged. Native checkbox controls maximize/restore each popup before the rightmost close X. Popup scroll containers contain overscroll, including nested source popups. Top-level popup fact lists use five columns, reducing to three/two on narrow windows. Graph links target a descendant inside each native category details element so the browser reveals the closed ancestor; the target category summary carries the existing amber selection role. The report preserves its logical source width while fitting two thirds of the desktop viewport; narrow windows use the available width. Body, report, Security panel and Findings table use the Technical Report surface-panel background. Renderer version 1.2.0; snapshot schema remains 1.1.0. Existing downloaded reports require a fresh export. Verified: 13 Report renderer/boundary/invariance and Light/Dark export interaction checks, all 507 mandatory import compatibility checks and both production builds. Concurrent initial import/export tests reached existing timeouts; unchanged sequential repeats pass, without changed timeouts or baselines. Synthetic browser checks exercise native category opening/selection, maximize/restore, compact nine-fact grid, long-popup scroll boundaries and a short nested native-table popup retaining its parent; Light/Dark are checked. Desktop report width measures two thirds of the viewport, the grid measures five columns and nine facts occupy about 120px at default popup width. Fresh Light export confirms identical body/panel/table backgrounds. No database, source values, scoring or import-baseline changes; no full-suite or phase-completion claim. Version reassessment: backward-compatible correction warrants product patch 2.25.1. Initially the product-version synchronization was pending renewed Platform/Core Tests consent because AGENTS.md explicitly expires the earlier release with the user's subsequent no-JavaScript answer. User renewed `Core-Freigabe: Platform, Core Tests` on 2026-10-13. Package/lock and UI/API version contracts are synchronized to 2.25.1; all 16 version/API/renderer checks pass. Running backend health reports 2.25.1, PostgreSQL and unchanged repository revision 592; app HTTP is 200. Final release gate passes all 507 import compatibility checks and both client/server production builds. Diff check passes; existing client chunk-size warning only. This version step is complete; no full-suite or phase-completion claim, commit, database change or historical-report rewrite. Design-language and diff checks pass. The local-only word-boundary guard initially flagged the new accessible label `Maximize window`; the label now reads `Maximize popup` and the unchanged guard passes. The permanent synthetic renderer tests additionally click the native maximization checkbox twice, verify both states and the rightmost close action, and protect the fragment target's exact category containment. Temporary preview server and browser tab are removed; synthetic files remain outside the repository. Change log 2026-10-13: preserve script-free export while adding native maximization, category revelation, scroll containment, compact facts and centered Technical Report surfaces. ## Complete HTML Security view export (2026-10-12, Phase 7 Presentation / Report Engine) Current release: Presentation, Core Tests, Platform. User requests the complete Security tab with its current width/scaling, ASSESSOR logo, client/assessment and version metadata like the Technical Export, and a dominant VERTRAULICH notice. The existing Security view is rendered through a disposable Core Presentation snapshot adapter at its measured width, using the same components, supplied counts/membership and CSS. A declared read-only SecurityViewReadPort publishes only the complete authorized view markup and metadata to the Report Engine's platform-neutral standalone HTML renderer. The existing Dashboard report extension point remains the sole Core consumer. No new classification, scoring, database access or report schema; the snapshot reads no additional Result DB material beyond what the Security view displays. This is a separate complete view download, not a replacement for the archived A/B report projections; their content, archive and historical files remain unchanged. It uses native HTML disclosures and no JavaScript, preserving the existing static/offline report contract. The direct-view export explicitly retains the Security tab's original English labels/source text, while the report heading and confidentiality/version notes are German. Finding descriptions/remediation and Results/scoring explanations are embedded even when their application disclosures are closed. Original scanner tables include all retained rows/sections, including modal/linked tables and their source limitation notices, without applying UI pagination. The file embeds the existing logo, local Inter and original view styles, freezes the measured logical CSS-pixel width and current theme/density, and blocks external resources/active content with CSP. No screenshot or invented summary replaces source content. Report-off or a scope change suppresses late output; revision checks reject mixed context or a repository change during export. The final release decision and acceptance are recorded below; no phase-completion claim. Same-batch user corrections with renewed release: the 2320px logical view must fit a smaller browser window without clipping or an oversized header; tables remain popups like the original; closed triangles point right and open triangles down. Logical graph/table proportions remain frozen, while CSS zoom fits the full view to available width and never enlarges it. The title/confidentiality block uses the shared h2 role instead of the oversized h1 role. Results and Scoring use native HTML popovers outside the scaled main view, with a rightmost close X, Escape/light dismissal, normal 16px reading text, scrolling and native resizing. Exact source cell links open further popovers, retaining the parent; a stable source-reference registry embeds each target and handles linked sections without a cutoff or executing vendor code. Viewport-dependent facts inset/row padding is frozen from the source view. The previously omitted functional-icons stylesheet is embedded verbatim; its right-pointing base transform and the down-pointing open transform are preserved. Security snapshot/renderer 1.1.0 records these corrections; existing downloaded files are not rewritten and require a new export. Capability release decision: product 2.25.0, synchronized package/lock and UI/API contracts. The Report renderer/assets load only after the export action through the existing pinned Dashboard extension, preserving the report-free client load path. Synthetic Light/Dark clicks verify complete exact counts/membership despite Work/Graph filters, original closed finding details, a full 1000-row native table and its exact linked popup, immutable inputs, revision rejection and Report-off late-output suppression. Renderer tests preserve all original style sources/local assets and reject active markup; existing Security/window/Original-table and Core/Context/Report boundary/invariance, version/API and Technical Report checks pass. Vitest suppresses CSS modules, so export tests explicitly load the unchanged style files; lazy imports are awaited to completion in the click tests. The initial gate hit a five-second timeout during concurrent tests; its unchanged repeat passed. A subsequent build identified an implicit test callback this type, corrected without changing any contract. The final mandatory gate passes all 507 checks and both production builds, including separate lazy report chunks. Browser acceptance uses synthetic files only: a 2320px view fits the 1910px viewport at approximately 0.81 zoom with scrollWidth equal to clientWidth; another observed viewport width also has no horizontal overflow. Light/Dark native Results/scoring popups retain 16px text and window bounds, all 1000 rows are present, a cell-linked detail opens above its parent and Escape closes only that detail, and category/finding triangles change from right to down. CSS hover keeps the supplied chain at 0.5 and dims unrelated paths to 0.08 and unrelated complete rows to 0.18 without script. Design-language, local-only and diff checks pass. No database/schema/import-baseline/scoring change, full-suite or phase-completion claim. ## Neutral Work Packages tab reading surface (2026-10-12, Phase 7 Presentation) Current release: Presentation, Core Tests, Platform. Explicit user correction: remove the blue table-row reading marker in the Client Info Work Packages tab. Its expanded detail row was picked up by the shared document click handler, covering all contained findings with the blue marking surface. A declarative data-table-row-marking="off" boundary on this panel opts its table and nested detail tables out before the shared handler assigns a marker. Other tables, including the original Work Packages floating window, retain their established marking. No CSS/theme, focus, table geometry, filtering, source data or disclosure change. This specific user correction supersedes the general blue reading-marker convention only inside this tab. Permanent Light/Dark Dashboard interactions install the real document marking handler, click a package, open the original finding explanation/remediation, click its detail surface and expand Unassigned, verifying no marked row, intact disclosures/source data and retained marking on another table. All 19 targeted tab/marking/boundary checks pass after correcting the new test's expected source text to the exact opened record (the first published package is not assumed to be an administrative package). Patch decision: 2.24.18 synchronized in package/lock and UI/API contracts. All 17 additional version/API/Context-boundary checks and all 507 mandatory import checks pass, along with both production builds, design-language, local-only and diff checks. Existing client chunk-size warning only; no database/import-baseline change, full-suite or phase-completion claim. ## Security and Work Packages filter independence (2026-10-12, Phase 7 Presentation) Current release: Presentation, Core Tests, Platform. User clarification: preserve both views' existing appearance and interactions; no Work or Graph filter may restrict Security or Work Packages. Security previously shared Overview's Source: Scan facet and active scanner sub-sheet. Its read-only analysis now uses the complete project Work sheet and that sheet's existing profile without Work facets. Category/domain membership, counts, score, Assessment facts and its explanation, scoring methodology and inferred inventory fallbacks all use this same complete assessment analysis. Overview retains its existing source selection and navigation. Work Packages already reads the published complete client/assessment/scan scope and exact project-sheet members; no package logic or visual change is needed. Client/assessment selection and each tab's own local disclosures/table filters retain their existing behavior. Permanent synthetic Light/Dark Dashboard interactions open both tabs and a package, change Work search/status/action-only, Source: Scan/severity/Context/business-impact/arbitrary facets, Graph finding selection and active source sheet/profile, then verify identical complete Security and Work Packages contents, retained disclosures, no additional package request and no Work navigation/filter mutation or source changes. All 99 targeted UI/derivation/boundary/version/API/report checks pass across the completed runs. Six older layout/fact assertions initially failed: five counted both mounted tabs as one six-fact view, and one pinned the former boolean scoring-dialog state. The tests now retain six facts independently in each tab and the same dialog action with explicit Overview/Security source scope; no visual contract or protected import baseline is weakened. Patch decision: 2.24.17, synchronized package/lock and UI/API version contracts. The mandatory compatibility gate passes all 507 checks and both production builds; design-language, local-only and diff checks pass. No persistence, import-contract, scoring algorithm or style changes, full-suite claim or phase-completion claim. ## Client Info Work Packages tab (2026-10-12, Phase 7 Presentation) Current user release: Presentation, Core Tests, Platform. Add Work Packages beside Overview and Security in Client Info, using the current client/assessment/scan scope and existing published Remediation API. Extract the existing floating-window table into WorkPackagesTable; the original window retains its wrapper, controls and behavior. Both presentations use identical totals, package/Unassigned rows, column filters, sorting, heatmap groups and selection actions. The new Core Presentation extension point is pinned for Remediation and Context read-only UI consumers. No new package computation, grouping, Core data mutation or persistence is introduced. Optional tab content mounts on first selection and retains table state through later tab switches. Client/assessment scope changes remount the panel and suppress stale rows while loading. Remediation-off removes the tab, falls back to Overview and suppresses late responses. Context-off consumes only already published package snapshots through the existing hook. The panel includes the existing client/assessment selector. The complete published scope is independent of Work search/status/table filters. User correction and renewed release: in this new Client Info tab, clicking a WP expands its exact member findings directly under that package row. Each finding opens its original explanation/remediation through the very same ClientSecurityFindingRow used by Security; repeat clicks collapse the package or individual finding. No Work navigation or Work-filter mutation occurs in this panel. Exact published scanner-occurrence/GPO-setting keys resolve against the loaded project Work sheet, independently of a selected scanner sheet; a missing loaded member is disclosed rather than replaced or guessed. Unassigned and same-change summaries also disclose their exact members locally; selecting the Unassigned summary clears only the table's local column filters so its row is visible. Optional renderer/disclosure props keep the original floating Work-Packages window's Work navigation and layout unchanged. This explicit correction supersedes the initially planned Client Info Work navigation, before release of this batch. Patch decision: 2.24.16, a backward-compatible additional placement of the existing table, synchronized in package/lock and UI/API contracts. Synthetic Light/Dark Dashboard interactions verify lazy tab opening by keyboard, identical published totals despite Work filters, table and disclosure state retention, exact package/Unassigned membership, original finding explanations/remediation, client/assessment switching, loading, Remediation-off and late-response suppression without Context requests or source mutation. Additional source-subset and same-change cases retain exact project-sheet membership and prevent Work navigation. Existing Client Info and floating-window interactions pass. The initial boundary checks found the Context hook also belongs to its registered engine path; both exact allowlists now pin the intended read-only Context hook for this panel. All 71 targeted tab/Security/window/boundary/version/API checks pass. The final mandatory gate passes all 507 import checks and both production builds; design-language, local-only and diff checks pass. Isolated browser acceptance with synthetic data and production components/styles confirms exact package findings directly under their row, original explanation/remediation, retained disclosures after tab switching, repeated-click collapse and local Unassigned expansion in Light/Dark, with no page-level horizontal overflow or Work navigation. The preview-only theme controls overlapped its tabs under shared header CSS; keyboard activation verified both themes without changing production layout. Temporary preview tab/server removed. No database, importer-baseline or scoring changes, full-suite claim or phase-completion claim. ## Context recognition vocabulary 1.2.0 (2026-10-12, Phase 13E Context Engine) Engine-only change (`src/assessment-context/`, `tests/assessment-context/`); no Core area touched. Analysis: several public scanner deviations stayed in `Other Deviations (not yet catalogued)` because no tier-2 term matched their titles and the stricter tiers 3 to 5 found no second term, close neighbour or category majority. Vocabulary 1.2.0 adds narrowly guarded terms: antivirus scan options and `malware` (excluding mail malware-filter readings) to malicious code execution; inactive DCs and, by explicit user decision 2026-10-12, AD trusts to `ad-recovery-gaps` (excluding delegation trust, Trust Center and zero trust); delegated permissions on AD OUs to privileged AD accounts (excluding Graph/app/consent readings); Defender for Identity honeytokens and VPN integration to detection. User decision 2026-10-12: no new clusters; Entra identity governance (access packages, entitlement management, pending approvals, dynamic group rules) maps to `cloud-privileged-access-exposure`, Managed Identity to `cloud-app-consent-exposure`, the Defender for Identity titles `unsecure account attributes` to `password-guessing-exposure` and `unsecure domain configurations` to `credential-relay-exposure`. A Maester rule family is no longer needed for these findings. Verified: all 75 Context Engine tests including the catalogue precision test (no contradictions) and invariance/boundary tests; a content-free check on the released Dummy client confirms the running backend reads Raw Data (`rawDataRead = true`); the first request returned a transient 500 and the repeat succeeded. Follow-up regression: newly recognized findings still showed `Unassigned` in Work Package because stored work-package snapshots are keyed by context engine and catalogue version, not by vocabulary. Context engine version 1.12.0 is published with vocabulary 1.2.0, and a permanent test requires a new engine version for every vocabulary release. Verified: 161 Context, Remediation, server API and architecture tests; on the Dummy client the rebuilt backend serves a fresh snapshot with context engine 1.12.0. No product-version change for this vocabulary-only step; no phase completion claimed. ## Native Maester category badges and fixed Severity order (2026-10-12, Phase 7 Presentation) Current user release: Presentation, Core Tests, Platform. The existing Maester Block field was displayed as Category in the reader body, while reader-heading and Work-tile badges only selected literal Category fields. A shared read-only Presentation selector retains an explicit nonempty Category first, otherwise exposes Maester's existing nonempty Block with a Category display label. Exact record source identity takes precedence over the workspace fallback, so mixed-tool Work views receive the same badge. Other tools do not interpret Block as Category; missing/blank values do not invent a badge. Original fields, reader-body hierarchy, Outcome/Severity, imports, Context classifications and stored data remain unchanged. No Core profile/parser or engine change. Patch decision: 2.24.15 synchronized in package/lock and UI/API contracts. Six permanent synthetic Light/Dark interactions open compact tiles by mouse and Enter in native and mixed workspaces, verify the category on the tile and reader heading/body, preserve source records, retain explicit categories, and exclude missing/non-Maester Block values. All 40 targeted badge/reader/tile tests and 24 version/API/architecture/Reader-action checks pass, along with design-language and local-only checks. The initial mandatory gate passes all 507 import checks and both production builds. An actual temporary Dummy browser tab became unresponsive during navigation, so isolated browser acceptance uses synthetic data with the same production TileCard/FindingReader/styles and disabled application/Context providers, without database access: Maester/Defender is visible on the compact tile and reader in Light/Dark, and Enter opens the reader with the badge intact. Temporary tabs, preview file and server removed. Backend health confirms 2.24.15, PostgreSQL and unchanged repository revision 592. Same-batch user correction, renewed release Presentation/Core Tests/Platform: the binding order is now Outcome → Severity → all other badges whenever Severity is available, superseding the historical Status/Category/Severity order documented below. Reader Severity precedes even derived CIS categories and preserves native Criticality/Priority aliases already used for severity geometry. Regular tiles move Severity ahead of Category; compact CIS tiles retain Severity in their second visible slot instead of Weight when available, while tiles without Severity keep their former compact fallback. No placeholder is added for unavailable Severity. Two prior ordering assertions are updated to the user's explicitly revised contract, with all values/category coverage retained. Sixteen additional permanent synthetic Light/Dark tile-opening interactions cover PingCastle, Purple Knight, Maester, CIS-CAT, GPO, native severity aliases, source-column order, compact display, numeric metadata and missing Severity; the six Maester interactions also check exact badge order after mouse/Enter activation. All 56 targeted final badge/reader/tile tests pass. Version 2.24.15 completes this related batch. Final isolated browser acceptance in Light/Dark confirms Outcome/Severity in slots one/two on Maester, PingCastle and CIS-CAT compact tiles and their readers, including Enter activation and retained category/Domain Risk Level/Points values. Light restored, temporary tab closed and in-memory preview server stopped. The final mandatory repeat passes all 507 import checks and both production builds; design-language/local-only checks and diff whitespace checks pass. Existing client chunk-size warning only. No database, import-baseline, Context assignment or phase-completion claim. ## Full Security hover chains and assessment explanation (2026-10-12, Phase 7 Presentation) Same-batch user refinement, renewed release Presentation/Core Tests/Platform: align the Assessment graphic with the existing Engine Dataflow reference. All eight nodes use the shared tile surface, inset, border/radius and typography, with one compact width and minimum height rather than stretched parent cards. A common ten-column grid places the two parent branches over their two/three children. Seven orthogonal connectors use the Dataflow filled triangular SVG marker (7×7, 10×10 viewBox); percentage line positions adapt to width without distorting arrowheads. Keep the existing Dataflow view unchanged. Browser acceptance in both themes at the normal Results-window width measures every node approximately 197×144, keeps 14px data/16px labels and all source counts, and confirms no horizontal overflow. Light restored and temporary tab closed. The preceding sticky-header build repeat passed all 507 mandatory import checks and both builds; the final repeat after this styling refinement passes all 507 mandatory import checks and both production builds. All ten final UI/explanation checks, design-language and local-only checks pass. Existing client chunk-size warning only. Version 2.24.14 completes this related presentation batch; no phase-completion claim. User release: Presentation, Core Tests, Platform. Extend transient focus to both Domain and Category rows. Hover/focus keeps exactly the seed's directly connected paths and opposite-end rows visible; every unrelated Domain/Category row, including its name, bar, number, marker and separator, uses 0.18 opacity, and unrelated paths retain 0.08. A Category focuses all its incoming Domain links, while a Domain focuses all its outgoing Category links. Shared categories are not assigned exclusively or reclassified; zero-count memberships do not create a connection. Hover takes precedence over keyboard focus, and leave/blur restores the prior focus or normal view. Existing click, keyboard navigation and bulk disclosure behavior is unchanged. Complete the preceding user request in Assessment facts: preserve the nine authoritative values, add an English explanation of scanner requirements/applicable GPO baselines, usable verdicts, Not configured (requirement exists, configuration absent in backup) and No baseline rule (configuration exists, applicable requirement absent). A neutral box-and-arrow graphic partitions existing eligible Work records into Assessed and Gaps, Assessed into Passed and Deviations, and the existing unassessed population into explicitly stored GPO states and Other gaps. A read-only Presentation helper uses the current source identity/profile verdict matching; missing baseline fields never invent a No baseline rule state. Gaps means no usable verdict under the existing Client Info aggregate, not an asserted security failure or universally missing source evidence. Not applicable remains excluded; conflict/duplicate flags overlap and never add records. Original verdicts, counts, scores, source records and effective-host-state boundary remain unchanged. Patch decision: 2.24.14 synchronized in package/lock and UI/API contracts. Permanent synthetic Light/Dark acceptance checks Domain/Category whole-row/path opacity, shared Category links, focus/blur restoration and unchanged source/navigation; the Results interaction checks diagram/table equality. Additional synthetic GPO checks reconcile all graphic partitions to authoritative Work counts, keep diagnostic overlap separate, distinguish non-GPO states, respect source scope, preserve records and handle an empty population. Corrected a duplicate declaration introduced while applying the new helper and a conflicting test-local diagram name; no production workaround or weakened baseline. All eight final Security interactions and 24 explanation/version/API/Core/Context-boundary checks pass; design-language and local-only checks pass. Browser acceptance in Light/Dark with Dummy confirms Category Credential Relay focuses exactly three incoming Domains/paths and one Category, while Domain Identity focuses one Domain and its 15 Categories/paths; every other row uses 0.18 opacity. Assessment graphic reconciles 1829 eligible = 759 assessed + 1070 gaps, 759 = 281 passed + 478 deviations, and 1070 = 879 Not configured + 19 No baseline rule + 172 other gaps, with 41% coverage. The eight-node box/arrow graphic retains readable text and has no horizontal overflow. Scope-row headers explicitly remain position:static while scrolling the longer explanation, preventing inherited sticky headers from overlapping; fresh reload confirms the rule and the final ten UI/explanation checks pass. An initial temporary Context request was unavailable; a fresh reload succeeded without preference or database changes. Light restored and temporary tab closed. The first mandatory gate and both builds passed; the repeat after the sticky-row correction also passes all 507 mandatory import checks and both builds. The final Dataflow styling refinement and acceptance are recorded above. Backend health confirms 2.24.14, PostgreSQL and unchanged repository revision 592. No database/import-baseline/scoring changes or phase-completion claim. ## Security Domain focus and category disclosures (2026-10-12, Phase 7 Presentation) User release: Presentation, Core Tests, Platform. Hovering a Domain row lowers unrelated flow opacity from 0.5 to 0.08; keyboard focus gives the same transient reading aid and leaving/blur restores it. Domain labels/bars/counts share a complete row hit target and accessible button semantics. Clicking or pressing Enter/Space opens all and only categories with a positive supplied count for that Domain, preserves already open unrelated categories, and focuses/scrolls to the first affected category. This reads the existing authoritative membership only; no new classifier, Work filter or stored finding change. A neutral double-chevron button immediately beside Category opens every category (including zero-count categories) when any are closed, and closes every category when all are open. Its accessible label/expanded state follows that action. Category disclosure state moves into the local panel so ordinary row toggles, exact diagram-category navigation, Domain selection and the shared control agree. Finding disclosures retain their existing independent behavior; the shared overview fold still preserves open categories. Patch decision: 2.24.13 synchronized in package/lock and UI/API contracts. Permanent Light/Dark synthetic interactions check exact Domain membership including a shared category and zero-count nonmember, unrelated opacity/restoration, mouse/Enter/Space activation, focus/blur, mixed/all disclosure states, source immutability and retained category navigation. Existing category hit-target and button selectors were narrowed to the category class because Domain rows now also expose those controls; their geometry/navigation assertions remain unchanged. All eight final Security interactions and 22 preceding version/API/Core/Context-boundary checks pass; design-language and local-only checks pass. Browser acceptance with Dummy in Light/Dark: Identity focus leaves its 15 paths at 0.5 and dims the other 30 to 0.08; clicking opens its exact 15 categories. System Hardening keyboard activation opens its nine connected categories. The shared button opens all 22 categories and closes all 22; focus departure restores paths. The double-chevron SVG is prevented from flex-shrinking under shared button padding and measures 16px inside the 27px control. Light restored and temporary tab closed. The final repeat after the SVG flex correction passes all 507 mandatory import checks and both production builds; all eight final Security interaction checks also pass, including preventing the icon from shrinking. Existing client chunk-size warning only. Backend health confirms 2.24.13, PostgreSQL and unchanged repository revision 592. No database/import-baseline/scoring changes or phase-completion claim. ## Security information offset and row spacing (2026-10-12, Phase 7 Presentation) User release: Presentation, Core Tests, Platform. Move the complete right-hand information content, including the six inventory facts, 32px farther right within its existing allocation by applying the shared space-8 leading inset and border-box sizing. Its outer right edge stays aligned to the Findings table and the graph's 2:1 allocation is unchanged. Add 2px padding above and below each detail row, retaining the 14px role and existing 1.2 line height. The user explicitly prefers using the remaining vertical space for readability; source values, groups, scores and navigation are unchanged. Patch decision: 2.24.12 synchronized in package/lock and UI/API contracts. All 18 targeted Security/version checks plus design-language and local-only checks pass. Permanent Light/Dark rendered acceptance covers the inset and row spacing alongside existing layout/content contracts. Follow-up within the same batch: at viewport widths up to 2000px, use a 16px information inset and 1px top/bottom row padding to reduce additional wrapping. Both desktop ranges retain increased separation. Browser acceptance in Light/Dark with Dummy confirms no horizontal overflow, 32px inset and 2px row padding at 2388px viewport width: facts use 621px inside the retained 664px overview, leaving 43px below. At 1910px, the 16px/1px rules keep every source value visible through normal document flow; wrapped facts use 695px and the common overview separator follows them, with no internal scrollbar or clipping. The graph geometry, shared outer boundary and typography remain unchanged. Light restored, viewport reset and temporary tab closed. The final repeat after the responsive CSS passes all 507 mandatory import checks and both production builds; the final six Security interactions also pass, alongside the 18 targeted checks above. Existing client chunk-size warning only. Backend health confirms 2.24.12, PostgreSQL and unchanged repository revision 592. No database/import-baseline changes or phase-completion claim. ## Align Security score values (2026-10-12, Phase 7 Presentation) User release: Presentation, Core Tests, Platform. Align the complete Overall Score value, including /100, to the right edge of its grid column like Remediation. The methodology button's wider second column previously left the score at that column's starting edge. A shared rule on the two metric values uses justify-self:end and text-align:right, preserving numbers, label/bar/control placement and scoring semantics. Patch decision: 2.24.11 synchronized in package/lock and UI/API contracts. All 18 targeted Security/version checks pass; permanent Light/Dark rendered acceptance checks both values' alignment. Design-language and local-only checks pass. All 507 mandatory import checks and both production builds pass; existing client chunk-size warning only. Backend health confirms 2.24.11, PostgreSQL and unchanged repository revision 592. No database/import-baseline changes or full-suite/phase-completion claim. ## Complete scanner table pagination and source limit notices (2026-10-12, Phase 7 Presentation) Current user release: Ingest, Presentation, Core Tests, Platform. The user explicitly requires all real source rows, including 800 or 1000 entries, to remain reachable and asks to verify the Rows per page selector. Existing HTML resource boundaries allow 250001 rows per table and 500001 total; there is no 100-row import ceiling. The selector slices only the current display page, resets to page one on change/search and computes page count from all matching data rows. Add 250, 500 and 1000 display sizes to both inline and linked-modal source tables while preserving 10/25/100 defaults and pagination above 1000. A read-only Ingest helper distinguishes only the exact retained scanner enumeration-limit notice, including repeated colspan cells and literal/entity quote variants. The existing Presentation projection consumes its indexed data rows and separate notices, keeping original row indexes for links. React does not parse scanner-specific text. The source notice remains visible outside the table/search/pagination as Source report limitation. Existing imports benefit immediately; stored table rows, values, findings, outcomes, scores, evidence/provenance and import contracts remain untouched. No importer format change, destructive migration, reimport or new engine is introduced. A source report that itself omits records cannot supply them; scanner-side enumeration limits remain explicitly visible. Patch decision: 2.24.10 synchronized in package/lock and UI/API version contracts. New permanent synthetic import and Light/Dark interaction acceptance covers 100, 800 and 1000 actual rows, traversing all pages of 100, selecting 1000 from a later page, last-row search, exact original notice retention, absence of a phantom 101st data row, original-index linked details and source immutability. A real account row with another populated column is not classified as a notice. Corrected the new synthetic assertion to the established literal " decoding and existing ungrouped pagination label; neither source decoding nor an established baseline was changed. All 44 final importer/UI checks and 17 preceding version/architecture/API checks pass, plus design-language and local-only checks. All 507 mandatory import checks and both production builds pass; existing client chunk-size warning only. Browser Dummy acceptance confirms 10/25/100/250/500/1000 choices and selecting 1000 preserves all available source rows; the 100/800/1000 row load and linked-modal behavior are verified synthetically. The temporary browser client encountered an unrelated incomplete activity status during load; the retained User Accounts results were available and the selector check passed. Temporary tab closed. Backend health confirms 2.24.10, PostgreSQL and unchanged repository revision 592. No database, importer fixture/snapshot or scoring changes; no full-suite/phase-completion claim. ## GPO Results source presentation (2026-10-12, Phase 7 Presentation) User release: Presentation, Core Tests, Platform. The user extends the removed generated observation table to GPOs in both Overview and Security. Original scanner tables, stored observations/provenance and the separately retained processed-backup inventory remain available and unchanged. The shared top-fact component suppresses only the Field/Original value/Source/Scan run table for GPOs, Computer Objects and User Accounts. GPO source section prose is displayed in short paragraphs, retaining existing paragraph boundaries and grouping whole sentences up to approximately 500 characters. The presentation has an 85ch maximum reading width, shared 16px prose role and token-based paragraph spacing. No scanner-specific semantic parsing, rewording, translated headings, data extraction or source mutation is introduced. Nested source sections retain the same presentation. A sentence longer than the limit stays whole. Patch decision: 2.24.9 synchronized in package/lock and UI/API version contracts. All 38 targeted Results/evidence/version checks plus design-language and local-only checks pass. Synthetic Light/Dark interactions exercise both GPO entry points, retained native table and backup inventory, absence of the generated observation table and exact text preservation including command/URL/filename punctuation. All 504 mandatory import checks and both production builds pass; existing client chunk-size warning only. Browser acceptance with Dummy in Light Overview and Dark Security confirms no generated observation header, seven retained scanner tables and ten readable paragraphs with shared 16px prose/16px spacing and approximately 751px reading width. Light restored and temporary tab closed. Backend health confirms 2.24.9, PostgreSQL and unchanged repository revision 592. No database/import-baseline changes or full-suite/phase-completion claim. ## Assessment facts table (2026-10-12, Phase 7 Presentation) User release for implementation: Presentation, Core Tests, Platform. Replace the nine-item three-column definition list inside Assessment facts with a compact semantic two-column Metric/Value table, retaining all original calculations, number formatting, unknown values and Results-window controls. Row headers and right-aligned values use shared typography, spacing and separators; the table is capped at 640px without stretching across the Results window. Permanent Light/Dark Security interaction acceptance checks all nine rows and the header/row semantics alongside the existing values and navigation. Patch decision: 2.24.8, synchronized in package/lock and UI/API version contracts. All 18 targeted Security/version tests, 504 mandatory import checks, both production builds, design-language and local-only checks pass. Existing client chunk-size warning only; no database/import-contract changes or full-suite/phase-completion claim. Follow-up user corrections, each with renewed Presentation/Core Tests/Platform consent, remove the generated Field/Original value/Source/Scan run observation table from Computer Objects and User Accounts through their shared fact component, covering both Overview and Security. Native scanner tables, original observations, provenance, overview counts and linked details remain unchanged. Permanent synthetic Light/Dark interactions cover both entry points and retained source evidence. The existing six-control test is scoped to both sets of six controls after the preceding Security composition change; no production workaround. All 44 targeted checks pass across the final runs. Browser Dummy acceptance confirms zero generated tables and two native computer tables/one native user table in both themes, plus nine Assessment facts rows within a 640px table. Light restored and temporary test tab closed. The final CSS keeps row labels in the 14px structured-data role rather than inheriting uppercase column-header styling. ## Final Security diagram composition and category bars (2026-10-12, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. The user supersedes the previous score placement with the supplied final composition: Overall Score and Remediation stack on the left above the compact Domain block; the middle has shorter flows and an aligned Category table with name, 80px deviation-share track and exact count; the right starts with the existing six icon-bearing inventory facts and retains the compact information tables. The graphic caps its own width at 1280px inside the retained 2:1 allocation, shortening the flows without shrinking 14px text. Category bars use the same authoritative deviation denominator as Domain bars; zero categories retain a zero bar and neutral category marker. Click, Enter and Space still open the exact category. The previous nine visible assessment totals move to the existing Results-window interaction under `Assessment facts` beneath the left scores. Their original calculations and complete values remain available and tested; no source count or scoring semantics are changed. Inventory reuses the current Client Info fact controls, glyphs, provenance/evidence and GPO backup drilldown. The shared default-open overview disclosure and common outer boundaries remain. Follow-up user correction in the same unfinished release batch: increase the separation below Remediation and the Assessment facts control by shifting the compact Domain block down 32px, without changing its 28px row spacing, map height, bars or findings. Final browser review uses a freshly reloaded development page to avoid accepting stale CSS. Further user correction in the same batch: an Inventory row's selected detail must appear above its parent Results window. Source table and source information dialogs now join the existing shared floating-window activation order, including pointer/focus activation, instead of relying on the fixed 2700 backdrop beneath floating windows starting above 3000. Permanent synthetic Light/Dark acceptance opens Inventory, activates it, clicks Schema Administrators, follows a nested member table and opens a prose/graph detail; every child stays above the parent and original source evidence is unchanged. The Security acceptance test waits for the existing Results-close focus-return frame before starting the next independent navigation interaction. Patch decision: 2.24.7 for this backward-compatible presentation refinement, synchronized in package/lock and UI/API version contracts. Synthetic Light/Dark acceptance checks category-track geometry, exact counts/shares, left score placement, six retained inventory values, assessment Results values and unchanged navigation/disclosure behavior. Verification complete for this batch: all 51 targeted Security/evidence/version/Core/Context checks, all 504 mandatory import checks, both production builds, design-language and local-only checks pass. The first import gate encountered existing importer/HTTP timeouts during concurrent browser work; the unchanged full gate passed on the final sequential retry. Existing client chunk-size warning only; no full-suite or phase-completion claim. Browser acceptance with Dummy in Light/Dark: selected Schema Administrators details render and receive focus above the activated Inventory window; the shared activation layer is higher than its parent. The final score/domain separation measures 59.6px, with unchanged 28px domain rows, 80px category tracks, 478 deviations and score 36. Compact facts use 554px within the 688px overview. Light restored, viewport reset and temporary tab closed. Backend health confirms 2.24.7, PostgreSQL and unchanged repository revision 592; no database or importer-baseline changes. Change log 2026-10-12: implement the final referenced composition, shorten horizontal flows, add aligned Category bars/counts, increase score/domain separation and keep selected Inventory details in front. ## Compact domains and shared Security overview disclosure (2026-10-12, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. The user supersedes domains spread across the full diagram height: six domain rows form one vertically centered block with 28px spacing, a heading, subtle row separators, compact label/bar/count alignment and unchanged authoritative counts/shares. The 2:1 graph/facts allocation and readable report-style facts remain. The shared overview and lower Findings table explicitly use the same border-box outer width and cannot widen through an intrinsic minimum; graph labels retain an inset from the outer edge. Additional explicit user correction: the `Security Domains → Categories` disclosure folds the whole overview, including graph, both scores and information. A single default-open native details owns that summary and all overview content; the diagram has no independent disclosure. The Findings table stays outside and visible, and its open finding/category state is preserved. Mouse and keyboard activation use native disclosure behavior. Patch decision: 2.24.6 for this backward-compatible refinement, synchronized in package/lock and UI/API version contracts. Permanent synthetic Light/Dark interactions cover compact row spacing, common outer-width rules, default-open shared disclosure and repeated collapse/reopen with the Findings table outside, alongside retained diagram navigation and source invariance. All 28 targeted UI/version/Core/Context-boundary checks, the final six Security checks, all 504 mandatory import checks, both production builds, design-language and local-only checks pass. Corrected the new computed-style assertion to the browser's `0px` serialization; no production workaround or weakened behavioral assertion. Existing chunk-size warning only; no full-suite or phase-completion claim. Browser acceptance with Dummy in Light/Dark: six domain rows are 28px apart and centered, with unchanged 112/54/20/245/7/40 counts. Panel and Findings-table left/right boundaries match exactly (zero difference), without horizontal overflow. Overview height remains 688px and readable facts use 633px. Mouse closes graph, scores and information together; Enter and Space reopen them. The lower Findings table remains visible, and an opened 42-finding Credential Relay category retains its state across folding. Light restored, viewport reset and temporary tab closed. Backend health confirms 2.24.6, canonical PostgreSQL and unchanged repository revision 592; no database or importer-baseline changes. Change log 2026-10-12: compact the domain block, align the overview/table outer boundaries and fold the whole overview with one disclosure. ## Security overview proportions and report sizing (2026-10-12, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. The user supersedes the fixed-width graph and scrolling facts area: the left two thirds belong to the diagram; the right third contains both score rows above a compact two-column information table, following the Technical Report Information section. The graph measures its allocated width and extends the flows while preserving 14px text, 80px domain tracks and complete category labels. Report-style flexible label/value rows use the existing 14px data role with 1.2 line height; no intrinsic 50/50 split forces short labels and long values into unnecessarily tall rows. The information area uses normal document flow, with no absolute-positioned scrolling container, clipping or hidden-scrollbar workaround. Facts, source values, removed groups/notices and exact category navigation retain the current decisions. Report Engine implementation is inspected as the sizing reference; its output is unchanged. Patch decision: 2.24.5 for this backward-compatible layout correction, synchronized in package/lock and UI/API version contracts. Synthetic Light/Dark interaction acceptance checks the 2:1 allocation, removal of internal scroll containers and graph resizing without changed counts/bar geometry or category-navigation behavior. All 28 targeted Security/version/Core/Context-boundary checks, all 504 mandatory import checks, both production builds, design-language and local-only checks pass. Existing chunk-size warning only; no full-suite or phase-completion claim. Browser acceptance in Light/Dark with Dummy: the graph/facts width ratio is 2:1, including measured 1389px/694px zones and two 337px fact columns at the narrower tested desktop width. The complete facts area is 633px high, within the 688px graph zone; wider review measures 614px facts height. There is no internal scroll container, horizontal overflow or text clipping; structured data stays at 14px with 16.8px row line height. Domain counts remain 112/54/20/245/7/40 and Enter on the graph category opens exactly 42 Credential Relay findings and focuses the category disclosure. Light restored, viewport reset and temporary tab closed. Backend health confirms 2.24.5, canonical PostgreSQL and unchanged repository revision 592. No database changes or importer baseline changes. Change log 2026-10-12: assign two thirds to the graph and one third to compact report-style information beneath both scores; remove inner scroll containers. ## Bound compact Security facts to the diagram (2026-10-12, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. The user explicitly supersedes the previous stacked/unbounded overview: Security information occupies only the area to the right of the diagram and ends at its bottom separator. The diagram-derived height bounds the entire overview; the fact content has no intrinsic influence on that height. The layout stays beside the graph at narrow widths, with contained scrolling when the available area cannot hold readable source values. The background is transparent; the previous semantic aside unintentionally inherited a sidebar surface and is replaced with a section. Compact label/value rows retain the agreed 14px structured-data role. Certificates & PKI and Source security metrics are removed from the Security overview only, as explicitly requested; the existing Client Info Overview and Results retain them. Six Security Domain bars reuse the exact Core deviation counts, with shares of the same authoritative deviation total and Context-off invariance. Score, remediation, other totals, environment facts and graph/list navigation keep their existing semantics. Patch decision: 2.24.4 for this backward-compatible layout correction, synchronized in package/lock and UI/API version contracts. Permanent synthetic Light/Dark interactions now verify transparent background, bounded-content layout, removal of the two requested groups, domain-bar totals/equality with Client Info and invariance after disabling Context. All six final Security interactions, 28 targeted UI/version/Core/Context-boundary checks, all 504 mandatory import checks, both final production builds, the design-language check and local-only check pass. The first parallel import-gate attempt timed out in one existing Node importer test; the complete unchanged gate passed on retry without parallel test load. Existing chunk-size warning only. Backend health confirms 2.24.4, PostgreSQL and unchanged repository revision 592. No database/schema changes, no importer baseline changes and no full-suite or phase-completion claim. Follow-up user correction 2026-10-12 (same unfinished 2.24.4 release batch): use the Technical Report's compact fact selection and independently stacked two-column groups, with the six inventory values preceding their labels in two rows. Resilience, Inventory and Password policy show the same four summary facts as the report, operating systems use the existing shared compact overview, and Results retains the complete facts/evidence. Score and Remediation use flat number/bar rows; Security Domains sits in the right information column with label, 80px track and exact count. This replaces the first compact attempt's shared grid rows and short 32px tracks. No report or data semantics change. Synthetic Light/Dark acceptance compares each displayed summary with the Technical Report fact projection and verifies every bar's exact deviation share. Final browser/build verification follows below. Final clarification 2026-10-12 supersedes the preceding bar placement: the six Domain labels inside the diagram itself show name, an 80px deviation-share bar and exact count before the category flows. The separate Security Domains information block on the right is removed. The SVG widens from 850 to 920px to keep the 14px labels, bars, counts and full category names separate; its height and the common lower separator are unchanged. Context-off removes the whole diagram while authoritative domain counts remain unchanged in the original Client Info Overview. Permanent Light/Dark interactions now assert the bars inside the SVG, their exact geometry/counts, absence of the redundant right block and preserved mouse/keyboard category navigation. Additional explicit user correction 2026-10-12: remove the `Restricted by the source tool` notice from this compact Security overview. Retained source restrictions and evidence remain unchanged; an actual environment-loading error still appears. The Security interaction test permanently checks the notice is absent. Final browser acceptance: Dummy retains 478 deviations, score 36 and domain counts 112/54/20/245/7/40. All six 80px tracks are inside the diagram, labels do not overlap the tracks, and neither the redundant domain block nor the removed restriction notice appears on the right. The full right overview fits its 688px height with scrollHeight equal to clientHeight in both Light and Dark. The compact summaries retain 14px structured-data typography. Final six UI checks pass, including a synthetic license-restricted section; corrected the new fixture's state to the existing `license-restricted` contract after the compiler caught the invalid shorthand. Light restored, viewport reset and temporary tab closed. Change log 2026-10-12: limited Security hardfacts to the right of the graph above its separator, removed the background/two specified groups, adopted the report's compact fact arrangement and added authoritative Security Domain bars. ## Security overview and category navigation (2026-10-12, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. The user supersedes the collapsed diagram default: the Security Domains → Categories diagram starts open, while category/finding disclosures retain their existing defaults. Clicking a diagram category or activating it with Enter/Space opens the exact list category, focuses its disclosure and scrolls to it; repeated activation works after manual collapse. This navigation does not modify Work filters or stored data. The SVG is an accessible group containing keyboard-operable category controls. Beside the diagram on wide panels, the Security tab reuses the existing authoritative Client Info score, assessed/deviation shares, coverage, gaps, conflict/duplicate totals, environment overview and native security facts. Narrow panels stack these zones and retain readable graph/data typography. Overall Score and Remediation use numbers and solid bars; Remediation states the existing deviation count, with no task workflow or new score. Environment facts include directory, inventory, password policy, resilience (including LAPS/WEF), certificates/PKI, operating systems, cloud facts and source security metrics. Existing Results evidence controls are retained; unknown/restricted values remain explicit. Valid risk acceptance counts use the existing risk-register state. Context-off suppresses the diagram/category counts and preserves the Core finding list and hardfacts. Score methodology uses one shared dialog across both tabs. Patch decision: 2.24.3 for this backward-compatible refinement of the Security workspace, synchronized in package/lock and UI/API version contracts. Verified: six synthetic Light/Dark Security interactions (including exact category navigation and equality with Client Info inventory), 28 targeted UI/version/Core/Context boundary checks, all 504 mandatory import compatibility checks, both production builds and the final updated Frontend build pass. Design-language and local-only checks pass; existing client chunk-size warning remains. No schema/database/source-import changes and no full-suite or phase-completion claim. Actual Dummy production browser acceptance passes in Light/Dark: 478 deviations, Overall Score 36, 759 assessed, 281 passed, 1,070 gaps, 41% coverage, 21 populated categories and four Critical categories agree with Client Info. Mouse and Enter activation open Credential Relay Exposure with its exact 42 findings. Final compact SVG measures 850 by 640 with 14px text; medium panels retain adjacent hardfacts, narrow panels stack without page overflow. Light restored, temporary viewport reset and test tab closed. Backend health is ok with 2.24.3, canonical PostgreSQL and unchanged repository revision 592. Change log 2026-10-12: default-open Security graph, exact category list navigation and source-backed Security hardfacts overview. ## Security finding reading hierarchy (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User correction: Security finding headings use the shared Bold 700 token; the scanner/rule subtitle is removed from these compact rows. The original Description appears immediately after Affected and before Impact, including when its text equals Result. Findings without an Affected field retain Description after Result, or first if Result is absent; no empty source fields are invented. Imported fields, tool identities, verdicts and counts remain unchanged. GPO baseline explanations retain their existing dedicated presentation. Permanent synthetic Light/Dark disclosure interaction verifies the exact order, heading weight, absent scanner subtitle and unchanged source data. All six Security UI checks, 17 UI/API version and Core-boundary checks, and design-language check pass. Patch decision: 2.24.2 for this backward-compatible correction, with shared package/lock and UI/API version contracts synchronized. All 504 mandatory import compatibility checks and both production builds pass (existing client chunk-size warning only); local-only check passes. Actual Dummy browser acceptance in Light/Dark confirms Bold 700 finding headings, no scanner subtitles, and Result → Affected → Description → Impact. Light restored and temporary test tab closed. No full-suite, phase-completion or backend-restart claim. Concurrent work preserved. Change log 2026-10-11: clarified the compact Security finding title and source explanation order. ## Restore compact rectangular Context heatmap (2026-10-11, Phase 7 Presentation) User explicitly supersedes square tiles: restore compact four-sided rectangles while preserving the current number, severity, full title and count hierarchy. Registered Context CSS removes the 1:1 aspect ratio and returns to automatic content height with the shared tile-height minimum; width, inset, radius, colours and exact Work clicks remain unchanged. Empty categories retain their neutral surface and sort after populated Critical/High/Medium categories. A High category with new evidence uses the High fill and moves into the populated High group. Permanent synthetic Light/Dark interaction now verifies that exact empty-to-populated transition and click identity. Current Core release: Platform, Core Tests. Patch decision: 2.24.1 for the verified backward-compatible contour correction; package/lock and UI/API version contracts synchronized. The Overview invariance check now compares the full original Overview surface and separately preserves the Security total; the concurrent Security workspace intentionally renders published Context categories, and its permanent interaction checks retain all 105 findings with Context on/off. Verified: all 19 heatmap/Context-boundary/Security interactions, 12 UI/API version checks, design-language check, all 504 mandatory import checks and both final production builds pass (existing client chunk-size warning only). Corrected the new test to use the existing TypeScript target rather than changing compiler settings. Actual Dummy Light/Dark acceptance confirms all 22 tiles are compact 260 by 172px rectangles without text overflow, retain 478 findings, and leave the empty High category neutral at position 21. The synthetic empty-to-populated transition proves it moves into High with its fill and exact Work click. Actual keyboard activation opens the exact 42 Credential Relay findings. Normal-width review has no tile/grid overflow. Light restored, viewport reset; backend health confirms 2.24.1, canonical PostgreSQL and unchanged repository revision 592. No Core presentation source change, database mutation or full-suite/phase-completion claim. Concurrent work preserved. Change log 2026-10-11: restored compact rectangular Context tiles with retained labels and verified empty/populated High ordering. ## Client Info Security findings workspace (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User requests a compact Defender-like findings view in the existing Security tab, without Work Packages or task workflow. Collapsed categories follow the exact published Context heatmap order and retain severity, counts and deviation shares. Category disclosure reuses the Technical Report situation/technical-approach texts and authoritative Security Domain classifier. A collapsible two-column domain/category diagram uses those same counts. Each finding opens the retained source explanation and remediation through the existing Reader helpers; structured GPO comparisons preserve individual baseline recommendations. Missing guidance is explicitly unavailable, never invented. DashboardPanel remains the existing pinned Core extension to Context/Report publications; the new presentation component has no engine imports or persistence. One Raw Data Work record counts once, never one Results evidence row. The source filter and client/timeslot scope match Client Info. Unmatched publication identities are explicitly visible as unassigned, not guessed. Context-off retains the Core findings list and suppresses the diagram/categories; Report-off suppresses report-only category wording. All groups/findings start collapsed and retain disclosure state on tab switches. No 100-row limit, data changes, filter writes or navigation on disclosure. Minor release decision: 2.24.0 for this backward-compatible capability, following concurrent 2.23.27; package/lock and version contracts synchronized. Synthetic Light/Dark acceptance covers all 105 deviations, exact heatmap order, domain flows, two-level disclosure, retained source text, tab-state preservation and Context-off Core invariance. Verified: 39 targeted UI/version/engine-boundary checks plus the final four Security interactions pass, all 504 mandatory import compatibility checks and both final production builds pass (existing client chunk-size warning only), design-language and local-only checks pass. Browser review with Dummy confirms all 478 deviations across 22 categories in exact heatmap order, 19 Cloud Privileged Access findings, 45 domain/category flows summing to 478, and mouse/Enter disclosure with retained explanation and remediation in Light/Dark. Browser review found two inherited icon-size issues in the diagram; the chart selector now excludes the disclosure triangle and explicitly restores intrinsic SVG height. The synthetic interaction test includes real global styles and checks those boundaries. Corrected the new GPO test fixture to supply the full ImportedDataset shape; no production workaround or importer baseline change. Final production browser review passes in Light/Dark: the diagram measures 1040 by 640, its disclosure triangle remains 12 by 12 and graph text remains 14px; the 45 links still sum to 478 and the panel has no horizontal overflow at normal width. Enter opens the category and individual native finding, and switching Overview/Security preserves the open explanation/remediation. Light restored and temporary browser tab closed. No backend restart or database mutation by this task; concurrent work preserved. No full-suite or phase-completion claim. Change log 2026-10-11: populated the Security tab with category/domain overview and compact expandable findings. ## Square Context heatmap tiles (2026-10-11, Phase 7 Presentation) User requests returning to four-sided tiles and trying squares, explicitly superseding the hexagon contour. Registered Context CSS restores the existing 260px environment tile width and shared tile inset/radius, with a 1:1 aspect ratio and no clipping. Full severity fills, numbers, complete titles, counts, published sequence and exact Work cluster clicks remain unchanged. No Context data or Core presentation source changes. Permanent Light/Dark UI acceptance replaces the superseded hexagon geometry with square aspect ratio, standard inset and absence of clip paths; existing interaction/invariance checks remain. Current Core release: Platform, Core Tests. Patch decision: 2.23.27 following the completed 2.23.26 batch; the concurrent capability release subsequently advanced the shared product version to 2.24.0, which is preserved. Verified: 13 Context UI/boundary checks, 12 current UI/API version checks, design-language check, all 504 mandatory import checks and both production builds pass (existing chunk-size warning only). Actual Dummy Light/Dark browser review confirms all 22 tiles are 260px squares with shared 4px corners, no clipping or text overflow, and clickable corners. Keyboard focus remains visible; Enter on Credential Relay Exposure opens exactly its 42 Work findings. Normal-width review also confirms squares and no horizontal grid overflow. Light restored, viewport override reset. Local backend runs the verified 2.24.0 build against the existing canonical PostgreSQL datastore, repository revision 592. No database mutation or full-suite/phase-completion claim; concurrent work preserved. Change log 2026-10-11: replaced the superseded hexagon contour with square Context heatmap tiles, retaining published contents and exact Work interactions. ## Data restored as a separate Client Info tile (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User correction explicitly supersedes the preceding two-tile summary decision: Data becomes its own tile again, containing the existing deviation donut, additional result states and six environment facts. Overall Score and Security Domains retain one common tile; Domain Information retains its existing tile. The summary wrapper becomes transparent and each tile uses the shared theme surface, border and rounded radius. Existing geometry, values and filter interactions are preserved. Patch decision: 2.23.26 for this verified layout correction; package, lock and UI/API version contracts synchronized. The 26 targeted layout, theme grammar, tab, dashboard and synthetic deviation/filter checks pass. Verified: all 504 mandatory import checks (including the API version contract), six UI version/Core-boundary checks, design-language and local-only checks, and both production builds pass (existing client chunk-size warning only). Actual Dummy browser review confirms three separate neutral tiles in Light/Dark: score/domains, Data and Domain Information. Data retains the shared 4px corners, all six environment facts and the original 478 deviations / 63% plus additional status counts. Light theme restored and temporary browser tab closed. No full-suite or phase-completion claim. Concurrent work is preserved; no backend restart or database changes are part of this task. Change log 2026-10-11: separated Data from the score/domain tile while keeping all Data content together. ## Hexagonal Context heatmap tiles (2026-10-11, Phase 7 Presentation) User requests hexagons, superseding the previous cut-corner outline for Context tiles only. The registered Context stylesheet uses a flat-top six-sided contour with shared small corner rounding, a regular hexagon aspect ratio and a central 50-percent text-safe region. The width adds two existing spacing units to the existing environment tile width to keep full names and severity readable without shrinking typography. Grid wrapping, full severity fills, numbers, counts, published order, cluster IDs and exact Work drilldowns are preserved; no honeycomb reordering or domain changes. The polygon fallback retains all six sides when CSS shape is unavailable. Current Core release: Platform, Core Tests. Retain concurrent 2.23.26 for the shared unfinished visual-refinement release batch; its package/lock and UI/API contracts are synchronized. All 25 Context UI/boundary and version/API checks passed. Permanent Light/Dark interactions also assert the six vertices, central padding and geometric ratio. Verified: design-language/local-only checks, all 504 mandatory import checks and both production builds (existing chunk-size warning only). Owned local backend restarted on the same canonical PostgreSQL; health confirms 2.23.26 and unchanged revision 592. Actual Dummy Light/Dark acceptance confirms 22 equal regular hexagons, rounded vertices, complete text inside the central region and no text overflow. Clipped corners are not hit-testable; the centre is clickable. Visible keyboard focus and Enter on Credential Relay Exposure open exactly its 42 Work findings. Normal browser width retains wrapping without grid or cell overflow. Light/Dark screenshots saved, temporary viewport reset, Light Client Info restored. No Core presentation source or stored finding data changed for this request; no phase-completion or full-suite claim. ## Rounded cut corner on Context tiles (2026-10-11, Phase 7 Presentation) User explicitly confirms cutting the bottom-right corner diagonally and rounding the other corners and transitions. This supersedes the rectangle-only contour for Context heatmap tiles. The change is confined to the registered Context Engine stylesheet: existing spacing/radius tokens define a 64 by 32 cut with rounded joins, preserving dimensions, colour, text positions and cluster ordering. The shape clips hit testing as well as paint; keyboard focus moves inside the tile so clipping cannot remove the focus indicator. Older shape-function implementations receive the diagonal polygon fallback. Version reassessment: retain the current concurrent 2.23.25 for this isolated contour refinement; no separate capability or product-contract batch and no Core/version files changed. Verified: 13 existing heatmap interaction and Context-boundary tests, design-language checks, all 504 mandatory import checks and both production builds (existing chunk-size warning only). Actual Dummy Light/Dark acceptance confirms the rounded shape on all 22 tiles, full visible titles, an unclipped inset keyboard focus, a non-clickable cut corner and a clickable tile centre. Enter on Credential Relay Exposure opens its exact 42 Work findings. The existing CSS shape implementation is used in the browser; no fallback was needed. No backend restart or database mutation by this task; concurrent work preserved. Change log 2026-10-11: rounded the Context tile outline and cut out its bottom-right corner without changing the content layout. ## Restore full Context severity fills (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User correction explicitly supersedes the neutral heatmap tile surfaces approved in the preceding batch. Restore full Critical/High/Medium severity fills while preserving the new layout: separate number, top-right severity, complete title and larger count. Keep rectangles and existing geometry. Empty/undetermined clusters remain neutral. All tile text uses the existing severity ink on coloured surfaces; neutral tiles retain theme ink. Hover keeps the full severity fill and adds the existing outline treatment. No numbering, counts, click targets, engine or data changes. User follow-up removes the Badges: Base Severity caption completely, including its unused style and description reference. Existing header and Light/Dark click tests now permanently assert its absence while retaining severity text on each tile. These follow-up files are registered Context Engine paths. Patch decision remains 2.23.24 for this same unfinished batch, following concurrent 2.23.23; version contracts synchronized. Verified: 44 heatmap/package/Context-boundary interactions, the updated eight heatmap tests, UI/API version contracts and design-language/local-only checks. Actual Dummy browser acceptance confirms full Critical/High/Medium fills, matching severity ink on numbers/titles/counts, neutral empty/undetermined surfaces and no text overflow in Light/Dark. The first gated build passed all 504 import checks and both production builds. Final gated build after caption removal passed all 504 import checks and both production builds (existing chunk-size warning only); the removed caption is absent from the production bundle. No backend restart or database mutation by this task; concurrent workspace work preserved. Change log 2026-10-11: restored full-tile severity colour while retaining the separated number/title/count hierarchy. ## Leading Client Info tab follows the panel corner (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. User correction changes only the first tab's top-left corner to the original 10px panel radius; all other tab corners, dimensions, positions and interactions stay unchanged. Shared --panel-radius expresses the existing panel geometry without altering it. Permanent Light/Dark tab interactions check the first corner uses that same value, the second tab remains unchanged, and scrolling/mouse/keyboard switching retain their contracts. Moving the existing literal into the token also tightens the design check's legacy-radius allowance from three to two. Retain 2.23.25 for the same unfinished two-tile release batch. Browser review exposed the generic aside sidebar surface behind Data; its layout wrapper is now a div, removing sidebar background/z-index semantics from dashboard content while preserving the named heading and controls. Verified: 30 final tab/layout/version checks, design-language and local-only checks; all 504 mandatory import checks and both final production builds passed. Actual Dummy browser acceptance in Light and Dark confirms the first tab top-left is 10px, its top-right and both second-tab top corners remain 3px; Data has a transparent div wrapper and shares the summary surface. Exactly two outer tiles remain. Final Light/Dark screenshots saved, temporary wide viewport reset, Light restored. No full-suite or phase-completion claim. ## Two top-level Client Info tiles in both themes (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. User correction: Overall Score, Security Domains / Business Impact and Data share one exterior tile; Domain Information is the second tile, in Light and Dark. A shared summary container owns the border, radius and surface; its internal sections no longer have exterior frames. Existing content, metrics, connectors, Results and Work drilldowns remain intact. Narrow layouts stack sections inside the same two tile boundaries. This supersedes the previous four individually bordered Light sections. Patch decision: 2.23.25 after preserving concurrent 2.23.24. Permanent synthetic Light/Dark Dashboard interactions assert exactly two top-level groups, all three summary areas, separate Domain Information, retained counts, Results evidence and Context drilldown. Updated old layout expectations to the explicit grouping decision and corrected stale parent assertions for the existing tabpanel wrapper. Verified: 50 distinct targeted layout, interaction, version and architecture checks, design-language and local-only checks, all 504 mandatory import checks and both production builds (existing chunk-size warning only). Local backend health confirms 2.23.25, canonical PostgreSQL and unchanged repository revision 592. Final browser acceptance passed in Light/Dark: the three summary sections and Data wrapper are transparent, their common tile owns the theme surface and single exterior border, and Domain Information is the separate second tile. Normal-width check retains two groups without horizontal content overflow. No phase-completion or full-suite claim. ## Compact Filters and WP presentation corrections (2026-10-11, Phase 7 Presentation) Current request released Presentation, Platform and Core Tests before implementation, including renewed consent for Results activation and tab alignment. Floating filters use content height capped by the user's resize height; closing groups removes the empty remainder and reopening retains the cap. All eight resize handles, selections, docking and the uppermost filter layer remain. The Work Packages toolbar button toggles its window on repeated clicks. Results and shared floating data windows now use one activation sequence: opening or clicking either brings it forward; keyboard focus also activates it. Existing Results activation callbacks, cluster geometry, minimization and the uppermost filter layer remain. Client Info moves its viewer up by the existing tab height and removes the extra tablist top inset, so the content panel starts at the original shared viewer top; the tablist remains outside scrolling content. Only cluster headings retain colour squares in the package table; the Reader and Filters keep their established cluster markers. Visible codes use WP instead of AP across engine output, Reader, both filter paths and package table. Legacy snapshots display WP through a read-only formatter; historical package IDs remain stable, requiring no database migration or reassignment. Counts and package membership are unchanged. User-described tile shadows were contrasting gutter surfaces: measured tile and grid box shadows were already none. The Client Info overview and environment grids now paint existing gutters with the shared tile surface, preserving widths, gaps, borders and typography. This is a specific user correction to those gutter surfaces; shared transparent-segment tokens remain unchanged. Browser review found the workspace clipping the elevated tabs despite correct measured alignment. Dashboard-only workspace/viewer overflow now permits the tab strip above the original content edge; scrolling stays inside the tabpanel, and other views keep their clipping contracts. Permanent Light/Dark acceptance includes both ancestor boundaries. Patch decision: 2.23.23 after preserving concurrent 2.23.22; package, lock and UI/API version contracts synchronized. Permanent Light/Dark interactions cover opening Results above Work Packages, repeatedly activating either window, Filters above both, toolbar close/reopen, compact filter height with retained resize limit, exact legacy snapshot selection IDs and heading-only colour squares. Tab interaction acceptance retains mouse/keyboard switching and scrolled state, verifies removal of the top inset and the dashboard-only viewer offset. Verified: 57 tab/filter/package/version checks, 50 final ancestor-clipping/interactions/architecture checks, additional engine/related/tile/Results layout checks and design/local-only checks. Corrected the new test's missing sheet prop and JSDOM ResizeObserver; no production workaround or scanner baseline changes. A gate run hit the existing 5-second import test timeout under parallel load; the unchanged gate passed all 504 checks when rerun alone, including the final clipping correction. Both final production builds passed (existing client chunk-size warning only). Restarted the owned local backend; health confirms 2.23.23, PostgreSQL and unchanged repository revision 592. Browser acceptance passed on Dummy: original content edge approximately 134px is retained in both themes, both tab centres are visibly hit-testable, switching to empty Security and back preserves that edge, and both dashboard ancestors allow the full tab height. Work confirms WP-01 labels, 20 coloured cluster headings and zero row squares, the second toolbar click closes the window, Results opens above the parked WP window, and Filters remains at its uppermost layer. Expanding packages reaches the retained 600px cap; closing the group shrinks the floating panel to approximately 158px with no blank remainder. Actual Light/Dark screenshots saved; Light Overview restored. No phase-completion or full-suite claim. Change log 2026-10-11: compacted closed floating filters, toggled Work Packages, renamed visible AP codes to WP with stable IDs, retained table squares only on cluster headings, and removed contrasting Client Info gutters. ## Neutral Context heatmap tiles (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User approved neutral tiles with an isolated cluster number at top left, a compact coloured Base Severity badge at top right, the full cluster name and a larger finding count. This explicitly supersedes full-tile severity fills and repeating Base Severity on every tile. One shared explanation beside the heading identifies the badge meaning. Empty and undetermined clusters retain neutral badges; counts, source semantics, exact cluster click targets and the heatmap's authoritative sequence are unchanged. Uses existing theme surfaces, severity colours, Inter roles, shared tile radius/inset and a wider existing tile size so labels wrap less. Grid tiles retain equal heights; all text remains visible and native buttons retain keyboard activation/focus. No new palette, shadows, decorative stripes or truncation. Existing Light/Dark interaction tests were adapted for the approved hierarchy and keep the exact cluster interaction, on/off invariance and full-publication numbering checks. Patch decision: 2.23.22 following concurrent 2.23.21 work; version contracts synchronized. Verified: 52 targeted heatmap/package/architecture/Context-boundary checks, two UI/API version contracts, design-language and local-only checks, all 504 mandatory import checks and both production builds. The first build caught a concurrently introduced missing test prop; after that parallel correction the complete gated build passed. Existing chunk-size warning remains. Actual Dummy browser acceptance at 2.23.22 passed in Light/Dark: all 22 tiles retain the complete names and equal heights without horizontal content overflow, 16px titles and 32px counts, neutral surfaces with coloured badges, and neutral empty/undetermined badges. Visible keyboard focus and Enter activation open exactly the 19 findings of cluster 01; the Work filter retains its matching number and count. Concurrent changes preserved; no backend restart or database mutation by this task. Change log 2026-10-11: moved Context severity colour into compact badges and separated cluster number, title and finding count. ## Heatmap positions govern cluster numbering and AP grouping (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. Explicit user correction supersedes the previous permanent display-number list and independent package ordering. The current client/timeslot's complete published Context heatmap sequence is authoritative: its first cluster is visibly 01, its second 02, including exact published ties and grey/empty cells. Removed the duplicate fixed catalog-number list and the separate severity sort. Technical cluster/package identities, source findings and package membership remain unchanged. Without a Context publication, labels remain unnumbered rather than claiming a heatmap position. The heatmap displays these positions; both sidebar filters, toolbar dropdowns, Work Packages and Reader AP links use the same complete publication order and labels. Work/search/table filters never renumber the remaining clusters. The package table shows one coloured cluster heading, then indented AP codes. Cluster groups always stay in heatmap order; column sorting operates within each group. Full cluster/AP names remain available in accessible labels and table filter options. The table's package filter now stores exact package IDs so a changed published display number cannot invalidate the selection. Patch decision: 2.23.20 from concurrent 2.23.19; package/lock/UI/API contracts synchronized. Permanent synthetic Light/Dark interaction acceptance renders the actual heatmap, both filter paths, package table and Reader together: Cloud Privileged Access Exposure is 01 and Credential Relay Exposure is 05; selecting/filtering the latter retains 05, and changing published tie order updates all views while retaining the same selected package ID. Other checks preserve grouping, numeric AP order, empty/missing publication handling, counts, exact filter targets, colours, sorting and window interactions. Superseded fixed-number expectations were replaced to match the explicit user correction; scanner/import baselines are unchanged. Verified: 51 targeted UI/version/architecture/Context-boundary tests, design-language and local-only checks. All 504 mandatory import checks and both production builds passed; the existing client chunk-size warning remains. Browser acceptance passed on Dummy at 2.23.20 in Light and Dark: all 20 package group headings match the corresponding full heatmap positions and sidebar headings, with Cloud Privileged Access Exposure at 01 and Credential Relay Exposure at 05. Selecting AP-01 displays the matching 01 Reader link and keeps all 20 groups in the open package window. No backend restart, database write, full-suite or phase-completion claim; concurrent workspace work preserved. Change log 2026-10-11: made published heatmap positions the common cluster numbering and grouped the package table by those positions. ## Radius-only refinement (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. User approval explicitly supersedes the earlier square-tile agreement only for corner radii: tiles and popup exteriors use 4px, ordinary buttons and inputs use 3px. Existing transparent segments, shell geometry, circular controls, joined finding rows, table cells, separators and Context colour squares retain their geometry. No content, navigation, layout, spacing, font, colour, border width, shadow, overflow, interaction or data changes are authorized by this request. Shared radius tokens and the existing container/control radius declarations implement the change; popup headers follow the exterior corners without clipping or new overflow rules. Data Hub reference modules also receive the same exterior radius. Each own CSS mutation is audited before/after: removing only radius declarations yields identical CSS. The full stylesheet comparison also preserves concurrent independent package-table changes in components.css. The existing tile grammar acceptance is updated to the explicitly approved shared tile radius, retaining all surface, geometry and shadow assertions; the legacy large-radius allowance decreases by one for the corrected common dialog. Patch decision: 2.23.19 from concurrent 2.23.18, then retained the concurrent 2.23.20 release and synchronized version contracts. A newly concurrent Remediation test fixture needed its existing dataset metadata spread to satisfy the production type check; its behavioral assertions remain unchanged. Verified: 42 final tile/package/version checks, the prior two actual Reader checks, design and local-only checks. Browser comparisons confirm identical tile dimensions, padding, fonts, backgrounds, text colours and border widths in Light/Dark, with only 0px to 4px radius; the common dialog likewise retains identical measured dimensions and style roles while changing 14px to 4px. All 504 mandatory import checks and both final production builds passed at 2.23.20. Final Light/Dark browser checks and screenshots passed; Data Hub reference-module dimensions and all non-radius style roles are identical before/after. Controls resolve to 3px; tiles, reference modules and common dialogs resolve to 4px. UI/backend 2.23.20 use the unchanged canonical PostgreSQL revision 592. No full-suite or phase-completion claim. Change log 2026-10-11: applied only the approved subtle corner radii to shared tiles, controls and popup exteriors. ## Work Packages minimized parking (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. Work Packages adds a minimize icon before Maximize and Close. Minimizing from normal or maximized mode parks a compact 320px title strip at the top right, 8px below the actual Source: Scan filter, with a toolbar fallback when the filter is absent and viewport clamping. Close stays rightmost. The shared floating window offers this optional capability only when an anchor selector is supplied; existing Client Info windows retain their controls and behavior. The minimized body stays mounted but hidden, keeping table filters, sort and data intact. Click the parked title or Restore icon to reopen at the normal right parked bounds; header double-click also restores it. While minimized, dragging/resizing and maximization controls are unavailable. Existing explicit Close/Escape and engine unavailability apply. No package assignment, source, scoring, export or stored data changes. Patch decision: 2.23.18 from concurrent 2.23.17; package/lock/UI/API contracts synchronized. Permanent Light/Dark actual-toolbar interactions cover Source: Scan anchoring, normal/maximized minimization, title/icon restore, retained filter/sort/table contents, hidden body, absence of resize handles and rightmost Close. Verified: 37 targeted package/shared-dialog/version/architecture tests, design-language and local-only checks. All 504 mandatory import checks and both production builds passed; the existing client chunk-size warning remains. No backend restart, database change, full-suite or phase-completion claim; concurrent workspace changes preserved. Change log 2026-10-11: added Work Packages minimization to a restorable title strip below Source: Scan. ## Reader AP Context colour square (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. The AP link beside Source Rule ID starts with the same 12px square as Filters and Work Packages, using the shared published Context severity. The Reader passes this read-only presentation value to Remediation; Remediation does not import the Context Engine. Its existing Core extension point now also pins the published Context reader. The shared Context index accepts an absent optional application scope without requesting data, preserving standalone Reader use; valid application scope, shared requests and last-ready values stay unchanged. Unknown/unavailable colour is neutral; package/task link semantics and right alignment remain unchanged. Patch decision: 2.23.17 from concurrent 2.23.16; package/lock and UI/API contracts synchronized. Permanent actual Reader interactions cover all four Context colours, source-ID present/absent, both themes, wrapping roles and the AP click. Verified: 54 Reader/package/Context/architecture checks, 12 additional Client Info regression checks, 12 UI/API version checks, design-language and local-only checks, all 504 mandatory import checks and both production builds. Local backend restarted at 2.23.17 against the unchanged canonical PostgreSQL repository revision 592. Actual browser acceptance verified the orange published Credential Relay AP-03 square before the right-aligned link in Light/Dark, with the existing six-task label and source ID intact; screenshots saved. No full-suite or phase-completion claim. Change log 2026-10-11: prefixed Finding Reader AP links with the shared published Context colour square. ## Work Packages right parking and persistent interaction (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User correction supersedes the former left parking and close-on-selection behavior: Work Packages opens 16px from the right viewport edge below the toolbar and returns there after leaving maximized mode, through either the header button or header double-click. Its 830px preferred width and 1080px preferred height remain viewport-clamped. The shared floating window accepts an optional right inset; other windows keep their existing defaults. Manual dragging/resizing remain available. Package selection, both Unassigned links and the Redundant findings summary retain the open window while applying their existing exact Work filter or evidence selection. Table sorting, filtering and totals stay available; explicit Close/Escape and engine unavailability still remove the window. No package membership, source values, scoring or stored data changes. Patch decision: 2.23.16 from 2.23.15; package/lock/UI/API contracts synchronized. Permanent Light/Dark actual interactions verify right opening/reopening, maximize/restore by button and double-click after viewport width changes, retained visibility after package, both Unassigned and redundant-evidence selections, unchanged source data and existing shared Client Info dialogs. Verified: 35 targeted interaction/version/architecture tests, design-language and local-only checks. All 504 mandatory import checks and both production builds passed; the existing client chunk-size warning remains. No backend restart, database change, full-suite or phase-completion claim; concurrent workspace changes preserved. Change log 2026-10-11: parked Work Packages on the right on opening/restoring and kept it visible through its Work selections. ## Work Packages toolbar position and outline (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Core Tests, Platform. User correction places the package overview button immediately before CSV, renames its visible label to Work Packages and keeps a yellow border through the shared button-accent token in both themes, including hover and the open state. Existing engine availability, overview interactions and export behavior remain unchanged. Patch decision: 2.23.15 from 2.23.14; package/lock/UI/API contracts synchronized. Permanent actual-toolbar Light/Dark interaction acceptance covers label, DOM order and the shared yellow border before opening, while open and after closing. JSDOM resolves only the shared accent token for its CSS cascade assertion. Verified: 24 targeted interaction/version tests, design-language checks and all 504 mandatory import checks. Local-only check and both production builds passed; the existing client chunk-size warning remains. No backend restart, database change, full-suite or phase-completion claim. Concurrent workspace changes preserved. Change log 2026-10-11: moved and renamed Work Packages and added its persistent yellow outline. ## Package colours, parked geometry and same-change overview (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. Every Package row starts with the shared 12px Context colour square, using the same published severity as Filters and its Context severity column. Unassigned keeps its existing separate presentation. Work packages supplies an optional initial geometry to the shared floating window: 830px width, up to 1080px height, 16px left inset and 16px below the toolbar, clamped to the available workspace. Other floating views retain their previous defaults. Every fresh opening restores this parked geometry; drag, resize and maximize remain available. The Redundant findings number opens the complete evidence population of all published redundant tasks in Work, including each task's counterpart findings. It uses the existing exact task identities and related-finding groups, clears an active single-group focus and incompatible Work filters, selects the project Work sheet and Reports view, and closes Packages. Latest user correction: the headline is Redundant findings and counts every member of the published redundant tasks, matching the population opened in Work (for example twelve rather than six additional findings). Records, reviews, package/source facts, outcomes and scores stay unchanged. Patch decision: 2.23.13 from 2.23.12; concurrent workspace work advances the shared version to 2.23.14, which is retained with synchronized package/lock and UI/API version contracts. Permanent Light/Dark package interactions check the initial bounds, colour parity and the actual summary-to-Work interaction with source data unchanged. Verified: 32 Package/related-finding/architecture checks, 14 UI/API version and Reader alignment checks, design-language/local-only checks, all 504 mandatory import checks and both production builds. App/backend run 2.23.13 against canonical PostgreSQL revision 592 unchanged. Actual browser acceptance pending. User correction supersedes the earlier additional-only headline: the engine view now shows the complete redundant-finding count under Redundant findings; 39 interaction/version checks, all 504 import checks and both production builds passed for the corrected count. Actual Light/Dark browser acceptance confirms twelve Redundant findings and a click opens exactly twelve Work records. Reopening Packages keeps all 49 packages despite the twelve-record Work drilldown. Default bounds in both themes are width 830px, left 16px, top 16px below the toolbar and available workspace height; square colours match the published high/critical values. Light restored; screenshot saved. App/backend run the shared 2.23.14 against canonical PostgreSQL revision 592 unchanged. No phase-completion claim. Change log 2026-10-11: added Context squares, a dedicated parked window default and a Work drilldown for all redundant evidence. ## Context severity order in both sidebar filters (2026-10-11, Phase 7 Presentation) Current user release: Presentation, Core Tests, Platform. User correction supersedes the earlier identifier-first sidebar order: Context Cluster and Work Package filters now sort by the Context heatmap's displayed severity, Critical / High / Medium / Undetermined. Stable two-digit cluster identifiers break equal-severity ties; packages remain grouped by exact published cluster ID and numerically ordered AP code. Missing/no-evidence Context publication stays neutral, and Unassigned remains last. Numbers are identifiers and are never renumbered by severity or filtering. No package assignment, source values, verdicts, scoring, counts or engine logic changes. Both filters share a Presentation comparator reading only the published Context cluster severity and evidence flag; source-finding severity is not substituted. Permanent actual-sidebar Light/Dark interaction acceptance covers Critical-before-01, numeric ties/APs, medium, a Critical catalog entry without evidence sorted neutral, missing publication, exact package-filter click, unchanged original records, Unassigned and docking. Patch decision: 2.23.14 from concurrent 2.23.13, synchronized package/lock/UI/API contracts. Verified: 61 distinct sidebar/filter/dock/remediation/version/architecture tests, all 504 mandatory import checks including API version, design-language and local-only checks. Dummy API identity audit succeeded after an initial transient Context HTTP 500: all-assessment scope contains 54 packages, 477 assigned findings, 465 tasks and one Unassigned. Every individual package finding matches its Context primary cluster ID and label, task evidence equals package evidence, package membership is exclusive and repository revision is unchanged. This audit scope differs from the screenshot's 274-finding selection; visible screenshot AP sums 16 / 23 / 36 / 37 / 7 / 6 reconcile to the corresponding heatmap cells. No wrong assignment was detected in the audited scope; the screenshots alone do not validate each member of their selected scope. Both production builds passed; the existing client chunk-size warning remains. No backend restart, Core data write, full-suite or phase-completion claim; unrelated workspace changes preserved. Change log 2026-10-11: aligned Context/AP sidebar ordering with published Context severity and audited exact Dummy package membership. ## Complete Packages scope and compact facts (2026-10-11, Phase 7 Presentation) Current Core release: Presentation, Platform, Core Tests. User correction supersedes the earlier Work-filter projection: Packages displays the complete published Remediation snapshot for the selected client/assessment scope, independent of Work search, status, facets and workspace filters. Only the table's own column filters reduce its rows; headline totals remain the full scope. The hook publishes this read-only overview alongside its existing index. Actual scope or dataset changes still refresh the published results. Removed the complete Highest finding severity and Critical/High columns. Kept shared published Context severity, numerical cluster/AP order, Unassigned selection and yellow open/header indicators. Replaced explanatory paragraphs with six facts in the shared Client Info fact-table style and one short package-size note. Findings = assigned + Unassigned; additional same-change findings = assigned findings minus tasks. Original finding/source/scoring semantics and stored data remain untouched. Patch decision: 2.23.12 from 2.23.11; package, lock and UI/API version contracts synchronized. Verified so far: 62 Remediation interaction/engine/catalog/architecture checks, 20 version/Finding integration checks, design-language and local-only checks, and all 504 mandatory import checks. Permanent Light/Dark interaction coverage checks identical full table content and six totals with a Work search selecting 16 findings, one same-change member, an empty Passed view, and the Unassigned facet after reopening. Both production builds passed. Actual Light/Dark browser acceptance confirms the compact fact table and nine remaining columns. All 49 package rows and their complete cell contents stay identical across a Print spooler search (four visible Work records), Passed status (265 Work records), and the Purple Knight source filter. The table-local Cloud/M365 filter reduces rows to 23 while the six full-scope totals remain unchanged; clearing it restores all 49. App/backend run 2.23.12 against canonical PostgreSQL revision 592 unchanged. Existing client chunk-size warning remains; no full-suite or phase-completion claim. Change log 2026-10-11: decoupled Packages content from Work filters, removed both unwanted columns and condensed the header facts. ## Packages active button and header marker (2026-10-10, Phase 7 Presentation) Current release: Presentation, Platform, Core Tests. The Packages toolbar button carries the shared yellow marked state while its window is rendered, including hover. Closing with X, Escape or selecting a package clears the visible active state. The Work packages header receives a left yellow marker using the shared marker-width (8px) and marking-color tokens. A default-off FloatingDataWindow header option applies it only to Work packages. Existing number order, filters and source facts remain unchanged. Patch decision: 2.23.11 from 2.23.10; version contracts synchronized. Existing Light/Dark package interaction acceptance now checks inactive/open/closed/reopened/selected states and the marked window header. Verified: 19 package interaction checks, five architecture checks, UI/API version contracts, all 504 mandatory import checks, both production builds, design-language and local-only checks passed. Actual Light/Dark browser acceptance confirms the open button and header marker share the yellow token, marker-width is the shared 8px token, X and Escape clear the active button and reopening restores it. The screenshot documents both markers together. App/backend run 2.23.11 with canonical PostgreSQL revision 592 unchanged. Existing chunk-size warning remains; no full-suite or phase-completion claim. Change log 2026-10-10: linked Packages active indication to its window and added the standard header marker. ## Package number order and fewer column filters (2026-10-10, Phase 7 Presentation) User correction explicitly supersedes the earlier default Context-severity ordering: packages open in ascending displayed cluster identifier order (01, 02, 03, ...), then AP identifier order within the cluster. Clicking Package uses this same numbered label, rather than alphabetical cluster names. Severity sorting remains an explicit column-header action only. Remove the Highest finding severity and Critical/High filter controls while retaining their displayed facts and sort buttons; Measure remains without a filter. Context severity, identifiers and engine/source calculations are unchanged. Implementation stays within the registered Remediation Engine view and interaction tests. Current Core release: Platform, Core Tests for patch/version contracts. Patch decision: 2.23.9 from 2.23.8; concurrent workspace work advances the shared release to 2.23.10, which is retained. Nineteen interaction tests passed, including permanent Light/Dark regressions for 01/AP-01, 01/AP-02, 02, 03, 12 order on open, filter/clear, manual severity sorting followed by Package sorting, and reopening. The two removed controls are absent while both columns remain. Verified: all 504 mandatory import checks, both production builds, UI/API version contracts, five architecture checks, design-language and local-only checks passed. A TypeScript fixture-shape error was repaired before the successful full build. Actual browser acceptance in Light and Dark confirms both unwanted filters absent with their columns retained; all 49 real package labels are numerically ascending, beginning 01/AP-01 through AP-04, then 02/AP-01 through AP-03, then 03. The app opens by Package ascending. Light restored. App/backend run 2.23.10 with canonical PostgreSQL revision 592 unchanged. Existing client chunk-size warning remains; no full-suite or phase-completion claim. Change log 2026-10-10: made cluster/AP number order the package default and removed two unwanted filters. ## Close X always at the right edge (2026-10-10, Phase 7 Presentation/Governance) Current user release: Presentation, Governance, Core Tests, Platform. Binding user design principle: close X is always the last/rightmost header action, including visual and DOM/keyboard order. Added this permanent agreement to AGENTS.md. Results now place the stable optional same-change-ring slot before the close button, correcting the preceding trailing-ring placement while preserving aligned actions, full title tooltips and ellipsis. No group identity, filtering, source value, export scope or engine behavior changes. Patch decision: 2.23.10 from concurrent 2.23.9, synchronized package/lock/UI/API contracts. Permanent actual Results acceptance verifies X-last and ring-before-X in minimized and expanded windows, with/without a group and both themes; existing minimize/restore and close callbacks remain covered. Isolated actual Chrome acceptance verifies the rightmost geometry and hit-testable controls in both themes at 440/760px window widths. Verified: 27 targeted Results/group/version/architecture tests, all 504 mandatory import checks including API version, both production builds, design-language and local-only checks. The first build encountered a concurrent incomplete Work Package test fixture; that separate fixture was corrected concurrently, and the complete gated build then passed. Existing client chunk-size warning remains. No backend/datastore restart, full-suite or phase-completion claim; unrelated changes preserved. Change log 2026-10-10: made close X the rightmost Results header action and established the rule in project governance. ## Package column selections and published Context severity (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. This corrects the preceding package-table implementation: column filters offer actual distinct column values through selects; Measure has no filter. Source selection matches each individual source in multi-source packages. Context severity now comes from the same published cluster and shared display rule as the Work Package filter; it is explicitly separate from original Highest finding severity and defaults to Critical-first ordering. Cluster identifiers, Work counts, Unassigned and source facts remain unchanged. This supersedes the prior free-text filter and default finding-severity sort decisions. The overlap was caused by the global sticky th rule applying to every body row heading. Only the table head now sticks; body headings explicitly remain static. A permanent rendered interaction test loads the real stylesheet and scrolls the package table. Real Sidebar/Packages interaction tests cover published severity updates, GPO packages without source severity, neutral no-evidence clusters, selectable values and no Measure filter in both themes. Patch batch: 2.23.8, shared with the concurrent Results-header refinement. Verified so far: 75 targeted remediation, presentation, architecture and UI/API-version tests across the focused run and corrected scroll-test rerun; all 504 import compatibility checks, design-language and local-only checks pass. Both production builds passed. Actual browser acceptance in Light and Dark confirms all 49 package Context severities match their 20 sidebar clusters, six GPO packages retain a displayed High Context severity despite absent original finding severity, Critical selection yields 11 packages, High selection 34 and GPO source selection six. Header remains at the viewport top after 5,912 pixels of Light and 3,860 pixels of Dark scrolling while body headings scroll away. No Measure filter exists. Light, empty column filters and default Context Critical-first ordering restored. App and backend report 2.23.8; canonical PostgreSQL repository revision remains 592. Existing chunk-size warning remains. No full-suite or phase-completion claim; no import contract, engine calculation, persistence or source severity changes. Change log 2026-10-10: corrected package selection filters, sticky row-heading overlap and Context severity consistency. ## Stable Results header actions with long titles (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Core Tests, Platform. User screenshot shows minimized Results rows whose long title displaces actions. The title heading now owns only the flexible remaining width, and the title uses a real text ellipsis with its complete text in the native tooltip. Actions retain their fixed non-wrapping area. An equal-width trailing slot holds the optional existing same-change ring, so rows with and without a proven group align identically; no group or ring is invented for unrelated findings. Existing ring click/focus semantics, controls, export behavior, minimize/restore and source data remain unchanged. Both expanded and minimized headers use the same layout. Patch decision: 2.23.8 from 2.23.7, synchronized package/lock/UI/API contracts. Verified so far: 43 targeted Results layout, actual bookmark/To Report/minimize/restore/close interactions, export and existing real group-focus checks. Isolated actual Chrome acceptance in both themes at 440/760px Results widths proves identical action positions, title truncation/full tooltip, contained and hit-testable enabled controls, and minimize/restore. The browser's marker is a synthetic geometry fixture; permanent actual group interactions remain separately covered. Existing viewport-under-620px global positioning override was observed to place stacked windows at the same top coordinate; it is separate from the reported normal Work header issue and remains outside this scoped correction. Final verification: 49 targeted Results/group/export/version/architecture checks, all 504 mandatory import checks including API version, both production builds, design-language and local-only checks passed. Existing client chunk-size warning remains. No backend/datastore restart, full-suite or phase-completion claim; concurrent workspace changes preserved. Change log 2026-10-10: constrained Results title width and reserved a stable trailing group-ring slot to keep header actions aligned. ## Results workbook tab names and headings on every sheet (2026-10-10, Phase 7 Disclosure) Current user release: Disclosure, Core Tests, Platform. User correction: the first Results workbook tab is Results; remove the separate Results text tab; every worksheet carries the finding heading. The first exported table now uses Results, with further exported tables named Results 02, Results 03, etc., including selected-table exports. Each table retains its original table heading inside the larger bold white-on-black finding title band. Text-only results also use Results. Complete non-table result prose is retained below the first table instead of a separate sheet; its original data filter ends before that text. Selected exports retain only their selected evidence tables and the existing finding context. All auxiliary worksheets now receive the same finding heading and two-row title/header structure: Source text, Finding context, Export info and Long text. Physical row splitting reserves title/header and prose footer rows, repeats the title/header for split sheets and never silently loses evidence. Long-value references now use the shifted physical row coordinates; Long text parts remain literal and complete. A title exceeding Excel's cell limit is preserved through the existing long-value mechanism; the Long text sheet points to that complete title instead of duplicating an over-limit cell. Original values, counts, Context/Problem information and export scopes remain unchanged. No Presentation files, profiles, source data, Result DB policy, backend lifecycle or datastore changes. Patch decision: 2.23.7 from concurrent 2.23.6, synchronized package/lock/UI/API contracts. Targeted export checks pass for full/selected/text-only paths, all original 1,001 rows, prose retention, original context, literal formula-looking values and complete Unicode long-text parts. Final OOXML acceptance checks every sheet's original finding title, bold white font and black fill, including Long text. Verified: 20 targeted export/context/version/architecture tests, actual full and selected Chrome downloads in both themes, all 504 mandatory import checks including the API-version contract, both production builds, design-language and local-only checks. Existing client chunk-size warning remains. No full-suite or phase-completion claim; unrelated workspace changes preserved. Change log 2026-10-10: named Results tabs consistently, integrated the separate result prose and added the finding heading to every worksheet. ## Persistent, filterable and numbered package table (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. The package overview uses the same permanent Context identifiers as the Work filter, supplied through the existing Core extension point; Remediation does not import Context internals or invent assignments. Highest severity now defaults to descending (Critical first), with stable cluster/package identifiers as tie-breaks. Every column has an independent accessible filter; filters combine, numeric comparisons are supported and a clear action restores the table. Column filters refine the table only, with a separate visible row count; the authoritative Work partition and task totals stay unchanged. Unassigned remains available from the summary and is subject to explicit table filters in the table. The table owns both scroll axes and its opaque header remains sticky within that viewport, including the filters. The suspected engine refresh defect was not reproduced: synthetic actual-view acceptance proves a new dataset prepares Context before requesting packages, refreshes an already open overview, suppresses the previous dataset's late response and hides all package output with Remediation disabled. Existing context-off snapshot and task/record invariance contracts remain unchanged. Missing numbers were a presentation omission, fixed by reusing the approved numbered label function. No database, assignment, scoring, engine eligibility or source-data changes. Verified: 32 focused actual-view, remediation and architecture checks, the UI version contract, all 504 mandatory import/API-version checks, both production builds, design-language and local-only checks. Patch decision: 2.23.6 from concurrent 2.23.5, version contracts synchronized. Actual browser acceptance confirms all six Critical packages precede High, stable numbered labels, severity filtering to six of 49 packages and cluster 13 filtering to two of 49, with unchanged Work totals of 274 = 258 + 16. In both themes the header stays at the table viewport top while vertically scrolling (measured zero offset, including over 4,400 pixels of scrolling in Dark); all ten filters remain in that sticky header and its background is opaque. Light Mode, default Critical-first order and empty column filters restored. The previously loaded browser used 2.23.3; the new client and restarted backend both report 2.23.6. Canonical PostgreSQL volume retained, repository revision unchanged at 592. Existing client chunk-size warning remains; no full-suite or phase-completion claim. Change log 2026-10-10: added sticky column filters, Critical-first sorting and shared Context identifiers to the work-package overview. ## Finding context in every Results Excel export (2026-10-10, Phase 7 Presentation/Disclosure) Current user release: Presentation, Disclosure, Core Tests, Platform. User request: include the finding Description and Problem information to explain the exported Results, for both entire and selected-table downloads. A Finding context sheet now accompanies both export paths when explanatory information exists. Actual Results tables remain first, or Results text for a text-only finding; context and other auxiliary sheets follow. The context has the finding title in the existing larger bold white-on-black title band and structured Section / Field / Value columns. Presentation reuses the Finding Reader's declared profile mappings and existing GPO problem-summary projection from the opening finding. Description and declared background fields, Result, Affected and Impact retain original native values (including complete impact reference text); Reader evidence statements without a dedicated native field use its existing presentation. GPO context retains Configured, Expected, Additional/Missing entries, Context and Flags from stored comparisons. Unknown profiles accept only explicitly named description/result-message/affected/impact fields; a bare Result without a separate status field is not reinterpreted. No export-row count substitutes for a native Affected value, and selective export retains the complete finding context while restricting evidence tables. Missing values are omitted, never invented. Existing long-value preservation covers context cells, including Unicode boundaries. Work, graph and Reader Results share the same export path. No importer, verdict, scoring, database, engine or Result DB-policy change. Patch decision: 2.23.5 from 2.23.4, synchronized package/lock/UI/API contracts. Verified: 19 distinct focused actual-download, export-format, long-text, GPO projection, version and architecture tests; all 504 mandatory import checks including API version; design-language and local-only checks; actual Chrome full/selected downloads in both themes retaining all 1,001 evidence rows and identical original finding context; both production builds passed. Synthetic acceptance proves native Affected 17 remains 17 when two or one evidence rows/tables are exported, missing context stays absent and original records remain unchanged. Existing client chunk-size warning remains. No full-suite or phase-completion claim; unrelated workspace changes preserved and no backend/datastore restart. Change log 2026-10-10: added original Description and Problem context to both Results XLSX export scopes. ## Grouped Work Package sidebar (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Core Tests, Platform. User-approved refinement supersedes the per-AP bottom colour stripe: show each Context cluster once as a neutral heading with its existing solid severity colour in a small square at the right, then compact AP rows with right-aligned finding counts. Sort permanent cluster identifiers numerically from 01 and package codes numerically from AP-01. Preserve stable identifiers when a cluster is absent; never renumber the filtered population. Unassigned remains selectable at the end. The Context Cluster facet follows the same identifier order. Presentation consumes exact published package cluster IDs, cluster labels and AP codes; no title parsing, new assignment, engine computation or source mutation. The generic dockable panel retains its original callbacks, selected values, disclosure state and keyboard controls; full cluster/package accessible names distinguish repeated AP codes. Published cluster colour stays independent of the amber selection marker, and missing cluster evidence stays neutral. Existing resize/dock behavior and all other filter groups remain intact. Patch decision: 2.23.4 from concurrent 2.23.3, synchronized package/lock/UI/API contracts. Verified: 25 focused filter/selection/docking/architecture/UI-version checks, all 504 mandatory import checks including API version, both production builds, design-language and local-only checks, and isolated actual Chrome geometry and keyboard acceptance in both themes. Synthetic actual-sidebar acceptance covers shuffled clusters/APs, first identifier 01, retained counts, one colour per heading, absent-evidence neutral, Unassigned, toggling off and dock/undock selection. Existing client chunk-size warning remains. No backend restart, datastore mutation, full-suite or phase-completion claim; unrelated workspace work preserved. Change log 2026-10-10: grouped Work Package filters by numbered Context cluster and replaced bottom stripes with right-hand colour squares. ## Complete and reconciled work package overview (2026-10-10, Phase 7 Presentation / Remediation display) Current user release: Presentation, Platform, Core Tests. User requests an explanation of the visible 274 / 258 / 252 discrepancy and inclusion of Unassigned. The existing overview omitted the published Unassigned bucket and displayed whole-scope package counts independently of active Work filters. It now consumes the exact displayed Work records through the existing read-only extension point, projects each existing package's visible findings and touched published task identities, and states a complete partition: assigned + published Unassigned + records outside the package snapshot = current Work view. Outside-snapshot records are explicitly retained, without guessing a new assignment or changing engine eligibility. Original packages, tasks, identity evidence, counts outside this view, verdicts and stored snapshots remain unchanged. Full-package measures, severity, sources and condition facts retain their original values and are labelled as such. Unassigned is always visible as a separate table row, with its finding count and no invented task/package count; the count at the top also selects the exact existing Work Package Unassigned facet. Both paths preserve other Work filters and close the overview. Package counts exclude Unassigned. Additional same-change findings are explained separately from unique tasks. Synthetic actual-view acceptance reproduces 49 packages, 274 records = 258 assigned + 16 Unassigned, and 252 tasks with six additional same-change findings, in both themes; it tests both Unassigned click paths, zero/only-Unassigned, search narrowing to one group member, immutable original records/snapshots and outside-snapshot reconciliation. Existing limits of eight tasks, fifteen for Windows host/GPO, and source-backed redundancy rules remain binding. Verified: 29 focused actual-view, remediation and architecture checks, the UI version contract, all 504 mandatory import/API-version checks, both production builds, design-language and local-only checks. Patch decision: 2.23.3 from 2.23.2; package/lock/UI/API version contracts synchronized. Read-only inspection of the existing OpenTAS snapshot at repository revision 592 confirms 49 packages, 258 findings, 252 tasks and 16 Unassigned. Browser acceptance confirms the complete 274 = 258 + 16 partition, both Unassigned click paths selecting exactly 16 Work findings, the narrowed overview showing 0 packages/0 tasks plus 16 Unassigned, and readable Light/Dark rendering; Light Mode and the full overview restored. No full-suite or phase-completion claim; unrelated workspace work preserved. Existing client chunk-size warning remains. The subsequently verified concurrent sidebar refinement at 2.23.4 is retained. The restarted local backend reports 2.23.4 with canonical PostgreSQL persistence and unchanged repository revision 592. Change log 2026-10-10: included Unassigned and explained complete current-view finding/task counts in the package overview. ## Results Excel headings and sheet order (2026-10-10, Phase 7 Presentation/Disclosure) Current user release: Disclosure, Core Tests, Platform. User decision: each exported Results table begins with a larger bold white heading on a solid black background, and actual Results start at worksheet one; auxiliary information follows all result tables. Both entire and selected Results XLSX exports follow this order. A text-only Result uses its Results text as the first worksheet with the same styled finding heading. Each table now starts with a merged title band containing the finding name and table heading, Inter 16pt bold, white text and solid black fill, wrapped with a taller first row. Column headers occupy row two; filtering starts there and excludes the title. Data begins at row three. The table split capacity reserves both title and column-header rows and repeats them per part. Long-value coordinates reflect their physical output cells. Table order, literal strings, exact source cells, empty evidence rows, complete long-text parts and selective-export scope stay preserved. Results text, original section text, export manifest and any long-text parts follow the actual tables. No source data, import contract, Result DB policy, presentation component, persistence or backend lifecycle changes. The existing SheetJS writer ignores font/fill cell styles, so the export applies the approved title font/fill/XF directly to its generated OOXML using SheetJS's existing CFB ZIP API. It changes only the generated styles part and the first-row style references; XML is UTF-8 encoded. No new dependency, imported-file rewriting or browser-specific API in Disclosure. Permanent acceptance inspects the final ZIP's exact font, fill and style references, merged heading geometry, larger row height, column-filter range, worksheet order and unchanged table values for both complete and selective exports. Existing 1,001-row real-view tests continue with the added title row. Verified: 15 targeted formatting/export/version/architecture checks, all 504 mandatory import checks including the API-version contract, both production builds, design-language and local-only checks, actual complete/selected browser downloads in both themes, and a read-only full Dummy round-trip retaining all 2,420 tables and 10,208 evidence rows. Long headings receive height according to their wrapped length, within Excel's physical row-height limit. Existing React list-key and client chunk-size warnings remain. No full-suite or phase-completion claim. Patch decision: 2.23.2 from current concurrent workspace 2.23.1; package/lock/UI/API contracts synchronized. Unrelated concurrent changes preserved; no phase-completion claim. Change log 2026-10-10: formatted Results XLSX title bands and moved actual Results tables ahead of auxiliary sheets. ## Cluster identifiers and freely resizable filters (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. Explicit user correction supersedes the previous package Severity distribution: each assigned AP now uses one solid colour from its published Context cluster severity, independent of the original findings' severities. Missing/unavailable cluster evidence stays neutral. All current clusters have permanent two-digit display identifiers, shared by the Context Cluster sidebar and their AP rows; filtering, sorting and package selection never renumber them. Numbers identify clusters, never priorities. Existing published read-only results, package boundaries, facet counts, original values and engine independence remain unchanged. Floating filters resize from all four edges and corners, with anchored opposite edges, viewport bounds and minimum usable dimensions. Keyboard arrows operate the same grips. Resize gestures never trigger docking; docking, disclosures and exact filter selections remain intact. The shared uppermost normal UI layer keeps filters above activated Results windows. Resize events use stored geometry and ignore temporary 1-by-1 browser capture viewports; permanent synthetic interaction acceptance covers both capture cases, every edge/corner in both directions, docking and repeated activation of real Results windows in both themes. Initial patch decision: 2.23.1 from concurrent 2.23.0; the subsequent concurrent Results Excel patch 2.23.2 is retained. Final verification at 2.23.2: 25 focused actual-sidebar, resize/dock/filter, Results stacking, architecture and UI-version checks; all 504 mandatory import/API-version checks; both production builds; design-language and local-only checks. Browser acceptance on synthetic Dummy confirms 54 assigned AP rows with one cluster colour each, matching stable Context numbers, all eight keyboard resize grips, reversible AP selection, hit-testing above newly activated Results and unchanged panel dimensions across screenshots, in both themes. Light Mode restored. Canonical PostgreSQL revision remains 592. Existing client chunk-size warning remains; unrelated concurrent work preserved; no full-suite or phase-completion claim. Change log 2026-10-10: replaced package distributions with numbered Context cluster colours and added eight-direction floating filter resizing above Results. ## Complete Results and Excel exports (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Ingest, Disclosure, Core Tests, Platform. User decision: Results exposes every available row; one always-active share icon exports the entire Results content to Excel, and a differently coloured second share icon exports exactly the selected tables. Each Results table has a checkbox; selective export is neutral and disabled until at least one current table is selected. The user explicitly approves distinct export icon colours as an exception to the general button colour role. Selection is local to each Results window; it never changes findings, filters, bookmarks, source values or Result DB disclosure. All linked and Markdown rows were already rendered without a 100-row cutoff. No such cutoff or native truncation warning was found in the current complete Dummy. Native HTML tables now also render all retained rows through the shared inert Results table component. No importer contract, source recognition, resource-safety limit, outcome, score or persistence behaviour is changed. An upstream report that omits source rows cannot be reconstructed by presentation/export; its original text is retained, not silently rewritten. The complete XLSX contains Results text, original section values and every rendered table; linked table cells come from their original retained source values. GPO variant evidence and collapsed technical details are included. Selective XLSX contains exactly the checked tables with an export manifest. Literal strings retain leading zeros and do not become formulas. Values beyond Excel's 32,767-character limit are preserved in ordered Long text parts without splitting UTF-16 surrogate pairs; tables exceeding Excel's physical row limit split with repeated headers. Export errors produce no partial download. Export reads only the current Results content, never broadens a Result DB query, and uses the existing local browser download adapter. Read-only full Dummy round-trip verification: 763 Results with content, 2,420 rendered tables and 10,208 evidence rows across CIS-CAT, Maester, Purple Knight, PingCastle and GPO. Every exported table/row/cell is retained and source objects remain unchanged; selective exports contain exactly one checked table. Largest current Dummy table: 78 rows. Permanent synthetic interaction and real browser download acceptance separately cover linked, Markdown and native HTML tables beyond 100 rows (1,001 rows each), entire prose/source text, explicit selection state, both themes, long Unicode cells and literal formulas. Verified: 90 distinct targeted Results/GPO/CIS-CAT/table/path/version/API/boundary tests, all 504 mandatory import checks, both production builds, design-language and local-only checks, final read-only full Dummy round-trip, and real browser downloads of linked/Markdown/native HTML tables in both themes. Existing React list-key and client chunk-size warnings remain. The specific reported 100-row notice remains unreproduced and needs the affected finding/report to locate its origin; no claim that an unidentified upstream limitation was removed. Minor capability release decision: 2.23.0 from concurrent workspace version 2.22.1; package/lock/UI/API contracts synchronized. Unrelated concurrent changes preserved; no phase-completion claim. Change log 2026-10-10: added complete and selected Results XLSX exports and native HTML Results tables without presentation row truncation. ## Compact Client Info controls, package severity colours and complete group markers (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. The three related UI refinements are batched as patch 2.22.1 from 2.22.0. Report buttons precede Source in a shared flexible control row, eliminating the full-width report-only row at suitable viewport widths. Narrow layouts wrap without hiding controls. Work Package sidebar rows show flat proportional segments in existing Severity colours, with readable tooltip/accessibility counts. They count each original Work record under the same filters as the self-excluding Work Package facet, retain unknown severities as unknown and leave package IDs, tasks, ordering, verdicts and selection semantics unchanged. Docked and floating lists share the same rendering. Severity distribution is a display of existing findings, not a new package priority or risk score. All members of an active same-change group use the active group's identical filled point, independently of the currently selected reading card. Cards now isolate their stacking context so the reading surface cannot cover their sibling ring. Actual-view synthetic acceptance checks selecting another member while all member points stay filled with the same colour and remain above the card, then restores the original view. Earlier group/Result DB disclosure contracts remain binding. Verified: 41 focused group, heatmap, Client Info control/source, filter-panel, architecture and UI-version checks; all 504 mandatory import/API-version checks; both production builds; design-language and local-only checks. Browser acceptance on synthetic Dummy in both themes verifies all three Print Spooler member points filled identically and hit-testable after changing the reading selection, return to hollow rings, 54 package heatmaps in original Severity colours, and Report buttons to the left of Source with vertically aligned centres (difference below 0.02px). Backend healthy at 2.22.1, canonical PostgreSQL and unchanged repository revision 592. Existing client chunk-size warning remains; no full-suite or phase-completion claim. Unrelated workspace changes remain preserved. Change log 2026-10-10: compacted the report/source controls, added package Severity proportions and hardened complete same-change group markers. ## Related-finding rings and reversible group focus (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests, Client Records. User decision: mark findings proven to target the same change with a small hollow ring at their upper-right edge, using the Results identity palette. Clicking a ring fills all rings of that exact group and shows the complete group; clicking any filled ring restores the preceding view. This groups redundant members of one published Remediation task, never every task in a package, a shared title or text similarity. Existing Same change as links retain their separate package-filter interaction. Implemented: a Core Presentation focus coordinator consumes published Remediation results through an explicitly pinned read-only extension point. Work records from the current client/timeslot aggregate resolve source-sheet aliases by their established identities. Group focus temporarily overrides search/status/facets/path/My Workspace for display without changing original values, verdicts, scores, reviews, bookmarks, risk decisions or Result DB rows. The original filters, sheet, sort, selection, view, navigation area, scroll positions and registered local view state are restored. Scope changes clear focus; engine-off restores the original display and suppresses rings. Rings cover shared list/tile cards, Finding Reader, Work grid, structured Raw Data and original-source navigation, Pathfinder nodes/details/matrix and finding-bound Results windows. Accepted Risks rings open the complete group in Work, retaining Client Info for the return; risk-register counts and decisions retain their authoritative semantics. During group focus the Reader receives the displayed aggregate records, allowing its existing Same change as links to select visible peers across sources; outside focus those links keep their existing filter restrictions. Result DB evidence projections retain their separate disclosure contract and are not original Finding cards. Verified minor capability release: 2.22.0 after the concurrent 2.21.9 Results-evidence correction, with synchronized package/lock/UI/API version contracts. Six permanent synthetic actual-view interactions cover both themes: list/tile/grid/raw, passed peers despite existing filters, source aliases and Reader peer links, exact prior filters/view/selection/scroll, engine-off, unchanged reviews/risk counts, Accepted Risks return, and Pathfinder selection/camera with zoom-independent rings. Related Reader, card, tile, risk, dashboard, tab, package, engine-boundary and version checks pass; all 504 mandatory import checks and both production builds pass. Design-language and local-only security checks pass. Browser verification on Dummy confirms hollow and filled rings in both themes, all three cross-scanner Print Spooler members, return to the previous Work list and 478 Pathfinder findings after group focus. Pathfinder rings retain a 28px click target and 16px glyph at overview zoom; the camera returns within 0.004px (synthetic camera restoration is exact). Backend healthy at 2.22.0 with canonical PostgreSQL and unchanged repository revision 592. Existing client chunk-size warning remains. The shared finite Results palette repeats after sixteen group colours; the click always selects the exact task identity. Existing workspace work remains preserved; no full-suite or phase-completion claim. Change log 2026-10-10: added same-change finding rings and reversible group focus across interactive original-finding views. ## Client Info tabs remain visible while scrolling (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. User decision: Client Info tabs must remain visible when scrolling. The shared tab container now occupies the available viewer height; its non-shrinking tablist stays outside the independently scrolling active panel. Existing tab heights, flush left alignment, inactive gap and shadow-free surfaces remain. Mounted panels retain their scroll position through mouse and keyboard tab switching. No metric, source-data or engine behavior changes. Patch decision: 2.21.8 from 2.21.7, synchronized package/lock/UI/API version contracts. Verified: nine focused Client Info/tab/UI-version tests, all 504 mandatory import checks including API-version contracts, both production builds, design-language and local-only checks. Permanent synthetic interaction acceptance covers panel scrolling and Security/Home switching in both themes. Browser verification on Dummy at the panel end confirms the tablist top remains 133.98px, the outer viewer stays at scrollTop zero and Overview retains scrollTop 2365.67px after switching to Security and back; both themes checked. Light/Overview restored. Backend healthy at 2.21.8 with PostgreSQL and unchanged repository revision 592. Existing client chunk-size warning remains; no full-suite or phase-completion claim. Change log 2026-10-10: kept Client Info tabs visible by moving scrolling into their associated panels. ## Results: proven affected evidence (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Ingest, Core Tests, Platform. User request: red Results backgrounds only where the native report proves affected evidence; use the whole Dummy. Existing GPO per-value comparison, CIS-CAT evaluated-row semantics and all protected scanner import contracts remain binding. Red denotes scanner-reported affected evidence, never a claim that every contextual cell is an incorrect configuration. Read-only full Dummy audit through the current workspace port: 885 scanner findings (411 CIS-CAT, 318 Maester, 119 Purple Knight, 37 PingCastle) plus 948 derived GPO Work records; 2,391 scanner linked-table deliveries and 292 Maester inline rows. Exact reviewed native rule/layout guards now mark only PingCastle's own import/rule-bound embedded Details (23 Dummy rules, 90 rows; additionally synthetic S-SMB-v1) and Purple Knight's exact indicator-bound source tables with Ignored=False (20 layouts, 46 rows). PingCastle's 394 linked inventory/context rows stay neutral. Unknown rules, new headers, missing/foreign scope, ignored objects and non-fail parent outcomes fail closed. No title similarity, arbitrary boolean or score inference. New scanner formats are not introduced; parser/recognition/canonical/scoring semantics and existing source data are unchanged. Existing securityScoring declarations remain authoritative: native PingCastle overall risk and existing Purple Knight/Maester policies retain priority/fallback through the shared engine. Maester's inline Markdown and HTML-wrapped Markdown result tables now receive the existing profile status colors through a generic RichTextValue callback: explicit status columns or source-written glyphs only, contradictory/missing markers neutral. Dummy: 230 fail rows red, 35 pass rows green, 27 neutral. Existing CIS-CAT colors retain 87 violations, 123 matches, 466 criterion and 327 highlighted rows; 8,382 contextual rows stay neutral. GPO values keep their existing per-value/variant proofs. Results retain their opening finding as read-only UI context so changing Work filters cannot lose the marking in an already open window. No data write, reimport, migration or backend restart. Permanent synthetic actual Work → Results interaction acceptance covers S-SMB-v1, neutral inventory, finding hidden by filters, retained originals and both themes. Additional actual Results and negative checks cover inline mixed Maester status, contradictory glyphs, names that look like statuses, exact Purple Knight identity/ignored/source guards and unknown/foreign PingCastle layouts. Verified: 116 distinct targeted Results/CIS-CAT/GPO/graph/path/version/boundary tests, all 504 mandatory import checks, both production builds, local-only checks and actual Results browser color acceptance in both themes. The latest global design-language check is blocked by an unrelated concurrent inline style in src/features/related-findings/RelatedFindings.tsx; that main-thread change remains untouched. Existing client chunk-size warning remains. Patch decision: 2.21.9 from current 2.21.8, package/lock/UI/API version contracts synchronized. Concurrent workspace changes preserved; no full-suite or phase completion claim. Change log 2026-10-10: added source-proven red affected-evidence rows and inline native status colors to Results. ## Finding Reader Work Package alignment (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. User decision: Work Package information always aligns to the Reader's right content edge, including wrapped package names, task details and redundant-finding links. The existing Source Rule ID stays on the left. The common source/package row now also hosts records without a Source Rule ID; ready, loading/unavailable and unassigned package states all use the same right alignment and safe text wrapping. The Remediation Engine and its selection/filter behavior are unchanged. Permanent synthetic actual-Reader acceptance covers both themes, with/without Source Rule ID, ready/loading/unassigned states, retained record values and package-link clicks. Patch decision: 2.21.7 from the concurrent workspace version 2.21.6, preserving the separate MITRE release. Verified: 34 targeted Reader/package/UI-version tests, all 504 mandatory import checks including API-version contracts, both production builds, design-language and local-only checks. Browser verification on synthetic Dummy in light and dark confirms the wrapped package/task block reaches exactly the source row's right content edge; Source Rule ID remains left. Light restored. Backend healthy at 2.21.7 with canonical PostgreSQL and unchanged repository revision 592. Existing client chunk-size warning remains; no full-suite or phase-completion claim. ## Finding Reader MITRE disclosure (2026-10-10, Phase 7 Presentation) Current release: Presentation, Core Tests, Platform. User decision: MITRE ATT&CK and D3FEND information starts collapsed; a small triangle only reveals/hides the existing badges, with no box, border, extra heading or panel. The keyed disclosure resets on finding changes, including returning to a previously opened finding. Search/review updates for the same finding preserve an explicitly opened disclosure. Findings with no MITRE badges show no toggle. Original badge values, other badges, Context and primary actions remain unchanged. Implemented using the shared TriangleIcon, a native accessible button and transparent token-based styles. Permanent synthetic actual-Reader interaction tests cover default collapse, opening/closing, retained source values, search highlighting, finding change/return and no-information state in both themes. Browser acceptance covers Enter/Space, transparent surfaces without borders/shadows, and retained action alignment at 1200/620/320px. Final verification: 25 focused Reader tests plus 17 UI-version/Context tests and the browser check pass; all 504 mandatory import tests (including API-version contracts), both production builds, design-language and local-only checks pass. Patch decision: 2.21.6 from current workspace 2.21.5, synchronized package/lock/UI/API version contracts. Existing client chunk-size warning remains. Concurrent Client Info changes preserved; no backend restart, full-suite or phase-completion claim. Change log 2026-10-10: made MITRE badges an initially collapsed, frameless triangle disclosure. ## Finding Reader action group (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Governance, Core Tests, Platform. Binding decision added to AGENTS.md: AI search, bookmark icon and Results always stay in one horizontal non-wrapping group in that order; Context badges may wrap outside that group. Bookmark actions carry no visible label, while accessible names/tooltips remain. View snapshot naming now says Snapshot. Existing search availability, Results enablement and review semantics remain unchanged. Implemented in the existing FindingReader and shared styles with a dedicated action group, icon-only accessible bookmark button and shared spacing. Permanent synthetic interaction acceptance covers both themes, resizing, toggle on/off and Results opening. The standalone synthetic browser geometry check verifies 1200/620/320px in both themes, same vertical alignment, ordered separation and viewport containment. Final verification: 58 targeted Reader/Context/Bookmark/UI/API tests pass, all 504 mandatory import compatibility/scoring/transport tests pass, both production builds and design-language/local-only checks pass. Version decision: patch 2.21.4 from current 2.21.3 for this backward-compatible correction; package/lock/UI/API contracts synchronized. Existing client chunk-size warning remains. No full-suite or phase-completion claim. Concurrent workspace changes preserved; no runtime restart requested in this side conversation. Change log 2026-10-10: permanently anchored the ordered Reader action group and removed visible Bookmark wording. ## Client Info tab spacing correction (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. The user explicitly supersedes the shadow/recess decisions below: Client Info tabs become taller, the first tab aligns with the panel's left edge, and every inactive tab leaves a visible gap below its lower edge instead of any shadow. Active tabs stay connected to their panel. Shared tokens define 36px active height and a 4px gap (32px inactive height), with aligned top edges, the existing neutral chrome and the unchanged 20px content inset. The common ClientInfoTabs presentation applies this to all future Client Info tabs. Removed the obsolete shadow and recess tokens in both themes. No new tab content or finding/data semantics. Patch decision: 2.21.5 from the concurrent workspace version 2.21.4; preserve the separate Reader release. Verified: all 504 mandatory import checks, eight targeted Client Info/tab/UI/API version tests, both production builds, design-language and local-only checks. Browser verification on synthetic Dummy in light/dark measures 36px active height, 32px inactive height and a 4px inactive gap; the first tab and panel have the same left coordinate, and both tabs have no shadow. Selecting Security transfers the gap to Overview while Security joins its empty panel; keyboard Home restores Overview. Light/Overview restored. Backend healthy at 2.21.5 with canonical PostgreSQL and unchanged repository revision 592. Existing client chunk-size warning remains; no full-suite or phase-completion claim. ## Client Info attached tabs (2026-10-10, Phase 7 Presentation) Current user release: Presentation, Platform, Core Tests. User-approved standard for existing and future Client Info tabs: attached tabs above their associated panel, Overview first and initially selected, Security initially an empty panel. The shared `ClientInfoTabs` component owns presentation, ARIA tab/panel associations and Arrow/Home/End navigation; Overview stays mounted and hidden when another panel is selected, preserving its local state and existing figures/drilldowns. New Client Info tabs use this same component. Explicit user design exception: inactive Client Info tabs alone receive subtle inset shading at their lower edge to appear behind the active panel. The active tab joins its panel without shading. This narrowly supersedes the general no-button-shadow rule for this edge only; shared theme surfaces, Inter, control geometry and panel inset remain binding. No separate panel, tile or donut shadow is authorized. Version decision: patch 2.21.2 from 2.21.1 for a backward-compatible Client Info navigation/presentation refinement, with package, lock entry and UI/API version contracts synchronized. Verified: 20 focused UI/layout/version tests, including actual DashboardPanel switching and retained figures in both themes; all 504 mandatory import compatibility/scoring/transport tests; both production builds; design-language and local-only checks. Initial concurrent checks hit existing import-test deadlines; the complete unchanged import gate passed when repeated alone. The final chrome-surface correction also passed the complete gate and both builds. Browser verification on synthetic Dummy in light and dark: attached tab geometry, inactive lower-edge shading, active tab without shadow, empty Security panel, mouse/keyboard switching and return to Overview (Overall Score 36, deviations 478 retained). Light-theme Overview restored. Backend restarted on the canonical PostgreSQL datastore, healthy at 2.21.2 with repository revision 592 unchanged. Existing client chunk-size warning remains. No full-suite or phase-completion claim. Follow-up user correction 2026-10-10 (renewed Presentation, Platform, Core Tests release): the initial edge shading was too subtle, especially in dark mode. Inactive tabs now have a two-pixel reduced height, aligned to the same panel baseline, and a broader, stronger inset lower-edge shadow. Theme-specific values of the same edge-shadow token keep it legible in both themes; active tabs keep the full shared control height and no shadow. This is the agreed refinement of the existing narrow shadow exception and remains the standard for future Client Info tabs. Patch version 2.21.3, package/lock/UI/API contracts synchronized. Verified: all 504 mandatory import tests, eight targeted tab/DashboardPanel/UI/API version tests, both production builds, design-language and local-only checks. Browser checks on synthetic Dummy in both themes measure active height 28px versus inactive 26px with the same bottom edge; switching tabs transfers the recess/shadow to the newly inactive tab and keyboard Home returns to Overview. Dark/light shadow values verified, Overview/light restored. Backend healthy at 2.21.3 on canonical PostgreSQL, repository revision 592 unchanged. Existing bundle warning remains; no full-suite or phase-completion claim. ## Protected scanner import contracts (2026-10-09, Phase 13A Ingest) User decision: working scanner imports are crown jewels; protect established behavior permanently and add new formats without replacing old ones. Current explicit Core release: Ingest, Core Tests, Platform, Governance. Use only Dummy/synthetic inputs. No additional engine, nested Core or Maester worker is introduced. Implemented: `tests/importers/import-contracts.json` registers 18 variants across all five current profiles, using all existing synthetic scanner fixtures and a new synthetic Maester multi-tenant fixture. Normalized fixture checksums prevent unnoticed replacement; the inventory test preserves initial contract IDs and requires coverage of every profile and synthetic fixture. Browser and Node imports must agree through recognition, preview, mapping approval and canonical creation. Readable committed snapshots protect identity, original values, field roles, outcomes/execution states, severity, evidence and its finding association, exact source positions, source tables, report sections, environment observations and scoring. Generated record links/import timestamps and processing versions are excluded where applicable, without recursively changing retained native objects. Existing targeted behavioral assertions remain required alongside snapshots. Release enforcement: `scripts/check-import-contracts.mjs` runs the importer/scoring and HTTP/worker suites plus GPO/GPP ingestion/parser checks in CI mode. Missing/changed snapshots fail; no update arguments are forwarded. `npm test` runs this gate before the full suite; `npm run build` invokes it through prebuild. AGENTS.md now makes compatibility and non-bypass binding, including helper/dependency/Platform changes. `docs/IMPORT_COMPATIBILITY.md` describes safe additive registration, deliberate change approval and coverage limits. Existing expectations may not be regenerated merely to pass a regression. Verification: the 18-format contract suite passes (20 checks). The complete mandatory import/GPO gate passes 504 tests in 68 files, both standalone through npm test and automatically before the production build. Both client and server production builds pass; the existing client chunk-size warning remains. Deliberately modifying a synthetic fixture, changing an expected canonical result, and removing snapshot contents all cause nonzero exits; CI mode does not generate a missing baseline. Every mutated file was restored byte-for-byte. A first integrated gate attempt caught the Maester HTTP cold-worker test exceeding its 5-second limit on this synchronized Windows drive; only that test gets a bounded 15-second window, retaining every semantic assertion. The full suite has 2032 passed, 15 skipped and one failed test: `tests/features/datahub-centered-layout.test.ts:89`, an existing literal JSX expectation incompatible with the previously modified Data Hub percentage controls. The test and Presentation behavior were not changed in this batch. Full release remains blocked by that unrelated failure; no clean full-suite or phase-completion claim. Local-only and design checks pass independently. Backend health is healthy on the canonical PostgreSQL datastore after its automatic build restart. Limits/risks: registered variants and behavioral suites protect known inputs, not unknown future vendor formats. An exploratory raw Maester JSON shape selected generic recognition; it was not silently made a supported Maester contract or repaired in this scope. There is no configured external CI provider; future CI must use the same required entry points. Repository writers can deliberately alter gates, so Governance consent/review remains necessary. No customer data, production import commit, datastore migration or parser runtime modification in this batch. Phase 13A remains open. Version decision: this batch started at 2.20.2 and makes no product version increment: it adds tests, test/release tooling and governance/documentation without changing application import semantics or the deployment contract. During final checks a concurrent workspace change advanced package and UI/API version contracts to 2.21.0; live health confirms 2.21.0. That change is preserved and is not attributed to this protection batch. Historical reports remain unchanged. Change log 2026-10-09: established additive scanner import contracts, immutable synthetic references, browser/backend result baselines and a mandatory failure-blocking import gate in test/build entry points. ## Maester HTML data binding correction (2026-10-09, Phase 13A Ingest) Current user release: Ingest, Core Tests, Platform. User constraint: use only Dummy/synthetic data; do not request or read customer reports. Public upstream evidence: [Maester report data loader](https://github.com/maester365/maester/blob/main/report/src/lib/reportData.ts) and [ReportTemplate.html](https://github.com/maester365/maester/blob/main/powershell/assets/ReportTemplate.html), checked 2026-10-09. The template embeds `const testResults=` inside `