@@ -1637,6 +1637,54 @@ Verification (`2026-07-29`):
16371637 new-code window covers exactly this slice rather than reaching back past the
16381638 1.1.0 release.
16391639
1640+ Follow-up (` 2026-07-29 ` ): tag details popup redesign, same slice. The popup was
1641+ read-only with a single Dismiss button and rendered its metadata as inline
1642+ ` <b>…</b><br> ` markup inside the generic ` #dialog ` (`width: max-content;
1643+ max-width: min(440px, 90vw)`), which squeezed hashes and long messages into a
1644+ narrow, uneven column. Redesigned it with a dedicated ` #dialog.tagDetails `
1645+ variant: a structured ` dl.tagDetailsFields ` two-column grid (` max-content 1fr ` )
1646+ for label/value rows, a full-width ` white-space: pre-wrap ` message row, and a
1647+ predictable ` width: min(460px, 90vw) ` so the panel no longer shrink-to-fits.
1648+ Added three copy actions in a wrapping flex row — ** Copy Tag Name** , ** Copy
1649+ Object Hash** (` type: "Tag Hash" ` ), and ** Copy Tag Message** (`type:
1650+ "Tag Message"` ) — each reusing the existing ` copyToClipboard` path; the
1651+ message copy sends the joined subject+body. New l10n keys
1652+ ` action.copyTagHash ` , ` action.copyTagMessage ` , ` type.tagHash ` , ` type.tagMessage `
1653+ across ` en ` /` pl ` /` zh-cn ` /` zh-tw ` , and the copy-error ` typeLabel ` map gained
1654+ ` Tag Hash ` /` Tag Message ` for friendly failure labels. Dismiss remains the single
1655+ primary action; the copy buttons are bound after ` showDialog ` returns (same
1656+ pattern as ` #dialogAction ` /` #dialogDismiss ` ), and ` hideDialog() ` 's
1657+ ` dialog.className = "" ` already drops the ` tagDetails ` class. Added a webview
1658+ rendering test for the copy actions and a ` dialogStyles ` CSS regression test
1659+ for the grid layout.
1660+
1661+ Verification (` 2026-07-29 ` ):
1662+
1663+ - ` git fetch --all --prune ` ; ` AI-dev ` level with ` origin/AI-dev ` at ` ff8b744 `
1664+ - ` pnpm run typecheck `
1665+ - strict Biome over the five touched files (` src/webview/main.ts ` ,
1666+ ` src/extension/webviewL10n.ts ` , ` tests/webview/rendering.test.ts ` ,
1667+ ` tests/webview/dialogStyles.test.ts ` ; CSS is not counted), warnings as errors,
1668+ clean
1669+ - ` pnpm run lint ` (` 189 ` files; only the pre-existing Biome schema-version info)
1670+ - ` pnpm run format ` : only the same six pre-existing drifts in untouched files
1671+ - ` pnpm run test ` : backend ` 44 ` files / ` 315 ` tests, webview ` 34 ` files /
1672+ ` 292 ` tests
1673+ - ` pnpm run l10n:check ` : ` 100% ` package and bundle coverage for ` pl ` , ` zh-cn ` ,
1674+ ` zh-tw `
1675+ - ` pnpm run package `
1676+ - ` pnpm run test:coverage ` (` 78 ` files / ` 607 ` tests, ` coverage/lcov.info ` )
1677+ - ` graphify update . ` + ` graphify tree ` : rebuilt the map at ` 2,059 ` nodes /
1678+ ` 4,839 ` edges / ` 118 ` communities
1679+ - ` pnpm run sonar:scan ` with fresh coverage from the completed working tree.
1680+ Task ` 58015533-498b-45fa-8406-c8fa005054e9 ` , analysis
1681+ ` 25fdced8-1fa5-4897-90a9-72f6d35f5423 ` : ` ZAM ` quality gate ** ` OK ` ** on all
1682+ seven conditions — ` new_coverage ` ` 95.8 ` , ` new_duplicated_lines_density ` ` 0.0 ` ,
1683+ ` new_violations ` ` 0 ` , and project-wide maintainability issues/effort,
1684+ reliability issues, and security issues all ` 0 ` . Note the ` new_coverage >= 85 `
1685+ condition is back on the gate (it had been removed per the earlier
1686+ ` 2026-07-29 ` note); this slice cleared it at ` 95.8% ` .
1687+
16401688Test notes for future slices:
16411689
16421690- A signature-bearing tag object can be created ** without a GPG key** by writing
0 commit comments