From f74199985949be569f4fbf1fe3ef5036caae4ec9 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Sat, 19 Sep 2026 08:30:29 +0900 Subject: [PATCH] docs(map): record the 1.3.7 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The overlay fix shipped as 1.3.7 through the local updater publisher, so the map now carries the published version, the per-channel evidence, and the correction that 1.3.2-1.3.7 are live on the feed even though the CI signing gate still blocks tag-driven publication. πŸ’˜ Generated with Crush Assisted-by: Crush:deepseek-v4.1-flash --- docs/map/00-index.md | 4 ++-- docs/map/02-infrastructure.md | 2 +- docs/map/11-gap-backlog.md | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/map/00-index.md b/docs/map/00-index.md index 3cff6b7..d3413ac 100644 --- a/docs/map/00-index.md +++ b/docs/map/00-index.md @@ -2,8 +2,8 @@ > Status: ACTIVE > Last full audit: 2026-09-13 -> Last update: 2026-09-19 β€” GAP-INFRA-05 (desktop renderer popup bundle verification wired into CI) -> Scope: entire monorepo `D:/workspace/D3ROVoice` at product version `1.3.6` +> Last update: 2026-09-19 β€” GAP-INFRA-05 (desktop renderer popup bundle verification wired into CI); 1.3.7 published to the updater feed +> Scope: entire monorepo `D:/workspace/D3ROVoice` at product version `1.3.7` > Purpose: let any agent (or human) answer two questions in under a minute: > 1. **What infrastructure exists?** (build, CI, services, APIs, data, packages, deploy) > 2. **How far is each feature developed?** (per surface, with file anchors and status) diff --git a/docs/map/02-infrastructure.md b/docs/map/02-infrastructure.md index fabfa53..32507a0 100644 --- a/docs/map/02-infrastructure.md +++ b/docs/map/02-infrastructure.md @@ -192,7 +192,7 @@ Full detail: [`09-supabase-backend.md`](./09-supabase-backend.md). | File | Purpose | |---|---| -| `release/product-version.json` | version `1.3.6`, `androidVersionCode`/`iosBuildNumber` `1031006`, releaseDate, desktop license keyId | +| `release/product-version.json` | version `1.3.7`, `androidVersionCode`/`iosBuildNumber` `1031007`, releaseDate, desktop license keyId | | `release/android-release-identity.json` | package `com.d3ro.voice`, Play app ID, app-signing SHA-256, upload cert SHA-256, evidence keyId, AdMob unit IDs | | `release/desktop-license-public.pem` | Ed25519 public key for desktop offline licenses | | `release/mobile-release-evidence-public.pem` | Ed25519 public key for mobile release evidence | diff --git a/docs/map/11-gap-backlog.md b/docs/map/11-gap-backlog.md index 360e115..a539482 100644 --- a/docs/map/11-gap-backlog.md +++ b/docs/map/11-gap-backlog.md @@ -21,9 +21,9 @@ Legend: `[ ]` open Β· `[~]` in progress Β· `[!]` blocked externally Β· `[x]` res | ID | Area | Gap | Evidence | Suggested next step | |---|---|---|---|---| | GAP-QA-01 | Quality | Extreme Red Team: headful end-to-end bug hunting across real desktop Electron, Web Next.js, and CI pipelines. | `red_team_log.md`, `tests/e2e/red_team_cycle*.spec.ts`, `apps/web/e2e/red_team_cycle4_web.spec.ts` | `[x]` 2026-09-15: 18 scenarios executed, 14 defects caught and 100% resolved (infinite chunking loop DEF-008, IPC signature mismatch DEF-004, markdown editor typing rollback DEF-006, Web RSC Link serialization DEF-012, secret scanner lookahead DEF-013, etc.). All 18 scenarios GREEN with zero regressions. | -| GAP-REL-01 | Release | Official release publication to Forgejo and active public download center deployment. | `scripts/ci/publish-forgejo-release.mjs`, `apps/web/src/app/download/page.tsx`, `site/src/sections/Download.tsx`, `apps/web/e2e/red_team_cycle4_web.spec.ts` | `[~]` 2026-09-15: v1.1.0 release assets (`D3RO-Voice-Setup-1.1.0-x64.exe`, `.blockmap`, `latest.yml`, `update-policy.json`) published to canonical Forgejo registry and release hub. 2026-09-16: the published 1.1.0 installer carries no Authenticode signature, so it does not satisfy the release policy; product version moved to `1.2.0` and publication must come from CI with the signing gate GREEN. Download centers in `apps/web` (`/download`) and `site` (`#download`) link the canonical Forgejo feed. | -| GAP-REL-02 | Release | Windows stable publication needs an external public-trust Authenticode PFX, its password, the exact signer subject, and a Forgejo token, none of which live in the repository. | `.forgejo/workflows/release.yml`, `.gitlab-ci.yml`, `scripts/ci/set-forgejo-secrets.mjs`, `scripts/ci/verify-windows-release-artifact.ps1` | `[!]` 2026-09-18 measured: the Forgejo repo had **zero** Actions secrets; `FORGEJO_TOKEN` is registered now (2026-09-18) but `WIN_CSC_*` still have no values, so `v1.2.0` (run 49) and `v1.3.0` (run 51) both failed at the signing guard and **no updater-feed release has been published since `1.1.0`**. Inject the four secrets (`WIN_CSC_LINK`, `WIN_CSC_KEY_PASSWORD`, `WIN_CSC_EXPECTED_SIGNER_SUBJECT`, `FORGEJO_TOKEN`) with `npm run release:secrets` (check: `npm run release:secrets:check`), then re-run `release.yml` for the `v1.3.0` tag via `workflow_dispatch` (tags are immutable). | -| GAP-REL-06 | Release | μ„œλͺ… μΈμ¦μ„œκ°€ μ—†μ–΄ stable(`latest`) 채널에 **λ¬΄μ„œλͺ…** μ„€μΉ˜λ³Έμ„ κ²Œμ‹œν–ˆλ‹€. electron-updaterλŠ” `app-update.yml`에 `publisherName`이 μ—†μœΌλ©΄ μ„œλͺ… 검증을 κ±΄λ„ˆλ›°λ―€λ‘œ μ„€μΉ˜λŠ” λ™μž‘ν•˜μ§€λ§Œ, SmartScreen ν‰νŒμ€ λ²„μ „λ§ˆλ‹€ 0λΆ€ν„° μ‹œμž‘ν•œλ‹€. | `scripts/ci/publish-updater-release.mjs`, `release/update-policy.json`, `.forgejo/workflows/release.yml` | `[!]` 2026-09-18: `1.3.2`λ₯Ό `--ack-unsigned`(λͺ…μ‹œμ  승인 ν”Œλž˜κ·Έ)둜 κ²Œμ‹œ. μΈμ¦μ„œ 확보 μ‹œ 더 높은 λ²„μ „μœΌλ‘œ μ„œλͺ… κ²Œμ‹œν•˜μ—¬ λŒ€μ²΄ν•˜κ³ , 이 μ˜ˆμ™Έλ₯Ό μ œκ±°ν•œλ‹€. | +| GAP-REL-01 | Release | Official release publication to Forgejo and active public download center deployment. | `scripts/ci/publish-forgejo-release.mjs`, `apps/web/src/app/download/page.tsx`, `site/src/sections/Download.tsx`, `apps/web/e2e/red_team_cycle4_web.spec.ts` | `[~]` 2026-09-15: v1.1.0 release assets (`D3RO-Voice-Setup-1.1.0-x64.exe`, `.blockmap`, `latest.yml`, `update-policy.json`) published to canonical Forgejo registry and release hub. 2026-09-16: the published 1.1.0 installer carries no Authenticode signature, so it does not satisfy the release policy; product version moved to `1.2.0` and publication must come from CI with the signing gate GREEN. Download centers in `apps/web` (`/download`) and `site` (`#download`) link the canonical Forgejo feed. 2026-09-19: `1.3.7` (overlay fix) is published to the canonical updater feed (`latest.yml` = 1.3.7, 90.6MiB); the CI signing gate that blocks tag-driven publication is still unresolved, so this went out through the local updater path (GAP-REL-06). | +| GAP-REL-02 | Release | Windows stable publication needs an external public-trust Authenticode PFX, its password, the exact signer subject, and a Forgejo token, none of which live in the repository. | `.forgejo/workflows/release.yml`, `.gitlab-ci.yml`, `scripts/ci/set-forgejo-secrets.mjs`, `scripts/ci/verify-windows-release-artifact.ps1` | `[!]` 2026-09-18 measured: the Forgejo repo had **zero** Actions secrets; `FORGEJO_TOKEN` is registered now (2026-09-18) but `WIN_CSC_*` still have no values, so `v1.2.0` (run 49) and `v1.3.0` (run 51) both failed at the signing guard and **no updater-feed release has been published since `1.1.0`**. Inject the four secrets (`WIN_CSC_LINK`, `WIN_CSC_KEY_PASSWORD`, `WIN_CSC_EXPECTED_SIGNER_SUBJECT`, `FORGEJO_TOKEN`) with `npm run release:secrets` (check: `npm run release:secrets:check`), then re-run `release.yml` for the `v1.3.0` tag via `workflow_dispatch` (tags are immutable). **2026-09-19 μ •μ •**: CI μ„œλͺ… κ²Œμ΄νŠΈλŠ” μ—¬μ „νžˆ λ§‰ν˜€ μžˆμ§€λ§Œ, updater feedμ—λŠ” `1.3.2`~`1.3.7`이 둜컬 `release:updater` 경둜둜 κ²Œμ‹œλ˜μ–΄ μžˆλ‹€(GAP-REL-06). | +| GAP-REL-06 | Release | μ„œλͺ… μΈμ¦μ„œκ°€ μ—†μ–΄ stable(`latest`) 채널에 **λ¬΄μ„œλͺ…** μ„€μΉ˜λ³Έμ„ κ²Œμ‹œν–ˆλ‹€. electron-updaterλŠ” `app-update.yml`에 `publisherName`이 μ—†μœΌλ©΄ μ„œλͺ… 검증을 κ±΄λ„ˆλ›°λ―€λ‘œ μ„€μΉ˜λŠ” λ™μž‘ν•˜μ§€λ§Œ, SmartScreen ν‰νŒμ€ λ²„μ „λ§ˆλ‹€ 0λΆ€ν„° μ‹œμž‘ν•œλ‹€. | `scripts/ci/publish-updater-release.mjs`, `release/update-policy.json`, `.forgejo/workflows/release.yml` | `[!]` 2026-09-18: `1.3.2`λ₯Ό `--ack-unsigned`(λͺ…μ‹œμ  승인 ν”Œλž˜κ·Έ)둜 κ²Œμ‹œ. **2026-09-19: `1.3.7`도 같은 경둜둜 κ²Œμ‹œ**(`npm run release:updater -- --ack-unsigned`, μ„€μΉ˜λ³Έ 90.6MiB, `latest.yml`=1.3.7, μ„€μΉ˜λ³Έ sha512κ°€ ν”Όλ“œ 메타데이터와 일치). μΈμ¦μ„œ 확보 μ‹œ 더 높은 λ²„μ „μœΌλ‘œ μ„œλͺ… κ²Œμ‹œν•˜μ—¬ λŒ€μ²΄ν•˜κ³ , 이 μ˜ˆμ™Έλ₯Ό μ œκ±°ν•œλ‹€. | | GAP-REL-07 | Release | νŒ¨ν‚€μ§•λœ `better-sqlite3`κ°€ 호슀트 Node ABIμ—¬μ„œ `1.3.2` μ„€μΉ˜λ³Έμ΄ μ‹œμž‘ μ¦‰μ‹œ μ£½μ—ˆλ‹€(NODE_MODULE_VERSION 131 vs 130). 원인: 둜컬 `npm install`이 λ„€μ΄ν‹°λΈŒ λͺ¨λ“ˆμ„ Node용으둜 μž¬λΉŒλ“œν–ˆκ³  νŒ¨ν‚€μ§•μ΄ μž¬λΉŒλ“œλ₯Ό κ±΄λ„ˆμ—ˆλ‹€. | `scripts/ci/verify-native-abi.mjs`, `scripts/ci/fix-native-abi.mjs`, `.gitlab-ci.yml`/`.forgejo`/`.github` νŒ¨ν‚€μ§• 단계 | `[x]` 2026-09-18: νŒ¨ν‚€μ§• ν›„ Electron ABIλ₯Ό κ²€μ¦ν•˜κ³ , κ²€μ¦λœ νŠΈλ¦¬μ—μ„œλ§Œ μ„€μΉ˜λ³Έμ„ 생성(`--prepackaged`)ν•œλ‹€. `1.3.3`은 μ„€μΉ˜λ³Έμ—μ„œ μΆ”μΆœν•œ λ°”μ΄λ„ˆλ¦¬λ‘œ μž¬κ²€μ¦ GREEN. | | GAP-ADS-01 | Ads | 9 of 10 desktop ad adapters still extend `UnavailableAdAdapter` (`provider_not_integrated`). | `apps/desktop/src/main/services/ads/*` | `[~]` 2026-09-13: `DirectHouseSponsorAdapter` is now a real configurable REST adapter (bid/impression/click/reward via `endpointUrl`; fail-closed when unconfigured; 22 unit tests GREEN). Remaining 9 need official SDKs/authenticated endpoints. | | GAP-ADS-02 | Ads | Desktop mediation reward accounting is not wired to license quota (`claimReward` still returns no tokens). | `AdMediationEngine.ts`, `AppLayout.tsx` | Wire verified `reportRewardCompletion` to `LicenseService` quota after the direct sponsor endpoint exists. |