From 6c9b133985b19924314eb90fa74e960d8f104552 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 8 Sep 2026 14:21:38 +0900 Subject: [PATCH 01/89] docs(gap): restore visual acceptance evidence Move the inspected smoke findings into a dedicated gap-owner lane and link each observed defect to its proposed successor and remaining acceptance proof. Signed-off-by: Seongho Bae --- docs/product-technical-gap-baseline.md | 33 +++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 98bc17d2a..a6ddcd1bb 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,8 +1,35 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 1.2 -**Observed on:** 2026-08-26 (Asia/Seoul) -**Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@e5e99b4e3bb081b92c602358878856536030e2ca` +## 2026-09-08 visual evidence: smoke success is not product acceptance + +This observation supplements the historical inventory below. PR +[#1599](https://github.com/ContextualWisdomLab/naruon/pull/1599) built source +`877f0d5c1b96c3ac212ecc86630afb75532f5880` and ran the same implementation +through test descendant `af4df216b3533ebb82dab9d361b415ddb941fa24`. +The production build and mocked browser smoke exited zero across ten routes at +1440×1024 and 390×844, and all twenty PNGs were directly inspected. The +[inspection receipt](https://github.com/ContextualWisdomLab/naruon/pull/1599#issuecomment-5578964200) +records scope and observed defects. It does not prove live provider writes, +real backend contracts, every locale, deployment, or complete accessibility. + +| Observed customer gap | Canonical owner action | Acceptance evidence still required | +| --- | --- | --- | +| Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | +| Search displayed raw source/thread identifiers and `sender_context` | Product Search presentation must retain identifiers at request/state boundaries while rendering relationship labels | Contract-preserving UI tests and desktop/mobile detail inspection | +| Calendar, Data, and Security exposed intent/ETag, verifier commands/schema names, and event codes | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | +| Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | + +The screenshot-failure RED at `af4df216` returned a diagnostic text path as +successful screenshot evidence. PR #1599 successor `9bb0dc7e` now throws the +capture error, leaves no false PNG, closes the page, and retains late browser +error detection; its focused suite passed 16/16. PR #1600 separately owns +source-head-bound artifact retention. Both remain Proposed until current-head +hosted checks and independent review finish. Unknown `/api/**` mocks can still +default to HTTP 200 `{ok: true}` and remain a separate reality-gap repair. + +**Baseline version:** 1.3 +**Observed on:** 2026-09-08 (Asia/Seoul) +**Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) From 8e0ffaf4bb94c9e375db35d10dc39304f24cb4ed Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 8 Sep 2026 14:28:40 +0900 Subject: [PATCH 02/89] docs(gap): bind hosted visual acceptance evidence Signed-off-by: Seongho Bae --- AGENTS.md | 5 +++++ docs/product-technical-gap-baseline.md | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index 9104dd1f4..fce99d127 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -713,6 +713,11 @@ in this repo. - **Collaboration**: Respect other agents' concurrent work; do not overwrite or dismiss unfamiliar changes. - **Subagent Delegation**: Actively delegate tasks to Subagents. - **UI/Browser Testing**: Use a real browser for testing (do not rely on assumptions). +- **Visual acceptance**: A successful screenshot job proves that evidence was + captured, not that the product passed. Inspect every retained image at its + original resolution and record exact head/run evidence plus clipping, + occlusion, mixed-language copy, and internal-plumbing leakage as product + findings; do not infer acceptance from the process exit code. - **Strict Errors**: Treat `Timeout`, `Fatal`, `Warn`, and `Denied` outputs as hard failures. - **Goal**: Actively manage tasks to ensure open PR counts converge to 0. diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a6ddcd1bb..a7db4d10b 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -11,12 +11,18 @@ The production build and mocked browser smoke exited zero across ten routes at [inspection receipt](https://github.com/ContextualWisdomLab/naruon/pull/1599#issuecomment-5578964200) records scope and observed defects. It does not prove live provider writes, real backend contracts, every locale, deployment, or complete accessibility. +PR #1600 then retained the same ten-route desktop evidence from hosted +Application CI run `34189161122` for exact head `d30f0b7c`. Direct inspection +confirmed that artifact creation succeeded while the customer-facing defects +below remained visible; a green smoke job is therefore evidence availability, +not visual acceptance. | Observed customer gap | Canonical owner action | Acceptance evidence still required | | --- | --- | --- | | Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | | Search displayed raw source/thread identifiers and `sender_context` | Product Search presentation must retain identifiers at request/state boundaries while rendering relationship labels | Contract-preserving UI tests and desktop/mobile detail inspection | -| Calendar, Data, and Security exposed intent/ETag, verifier commands/schema names, and event codes | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | +| Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | +| Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | | Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | The screenshot-failure RED at `af4df216` returned a diagnostic text path as From 437697d2551df0e8621bf7330a9956ad6621abf3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 8 Sep 2026 14:43:57 +0900 Subject: [PATCH 03/89] docs(gap): keep AGENTS authority in governance lane --- AGENTS.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index fce99d127..9104dd1f4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -713,11 +713,6 @@ in this repo. - **Collaboration**: Respect other agents' concurrent work; do not overwrite or dismiss unfamiliar changes. - **Subagent Delegation**: Actively delegate tasks to Subagents. - **UI/Browser Testing**: Use a real browser for testing (do not rely on assumptions). -- **Visual acceptance**: A successful screenshot job proves that evidence was - captured, not that the product passed. Inspect every retained image at its - original resolution and record exact head/run evidence plus clipping, - occlusion, mixed-language copy, and internal-plumbing leakage as product - findings; do not infer acceptance from the process exit code. - **Strict Errors**: Treat `Timeout`, `Fatal`, `Warn`, and `Denied` outputs as hard failures. - **Goal**: Actively manage tasks to ensure open PR counts converge to 0. From 94baebd9322bf93dca85886d10494316531aa0f2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 8 Sep 2026 14:55:27 +0900 Subject: [PATCH 04/89] docs(gap): link Search presentation successor Signed-off-by: Seongho Bae --- docs/product-technical-gap-baseline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a7db4d10b..857baf71c 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -20,7 +20,7 @@ not visual acceptance. | Observed customer gap | Canonical owner action | Acceptance evidence still required | | --- | --- | --- | | Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | -| Search displayed raw source/thread identifiers and `sender_context` | Product Search presentation must retain identifiers at request/state boundaries while rendering relationship labels | Contract-preserving UI tests and desktop/mobile detail inspection | +| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | PR #1603 retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes | Focused UI tests and local desktop/mobile inspection are green; hosted exact-head checks, independent review, protected merge, and deployed inspection remain required | | Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | | Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | | Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | From dec3cecdd2b523a3fd44b5f8e4da193743e7cb39 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 8 Sep 2026 17:17:13 +0900 Subject: [PATCH 05/89] docs(gap): record fail-closed search copy evidence Signed-off-by: Seongho Bae --- docs/product-technical-gap-baseline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 857baf71c..7fde74d46 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -20,7 +20,7 @@ not visual acceptance. | Observed customer gap | Canonical owner action | Acceptance evidence still required | | --- | --- | --- | | Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | -| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | PR #1603 retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes | Focused UI tests and local desktop/mobile inspection are green; hosted exact-head checks, independent review, protected merge, and deployed inspection remain required | +| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | PR #1603 retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes; its current head `622dc08d` now projects relationship actions through a product-owned positive allowlist and neutral fallback | Focused UI tests (7 passed), production build, and local desktop/mobile Chromium inspection are green; hosted exact-head checks, independent review, protected merge, and deployed inspection remain required | | Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | | Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | | Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | From 0811b6e7b1a1b86e1883a71d5263390df5da4d4b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 9 Sep 2026 00:47:02 +0900 Subject: [PATCH 06/89] docs(gap): integrate canonical owner handoffs Signed-off-by: Seongho Bae --- docs/product-technical-gap-baseline.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 7fde74d46..b6cb5d79d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -33,8 +33,19 @@ source-head-bound artifact retention. Both remain Proposed until current-head hosted checks and independent review finish. Unknown `/api/**` mocks can still default to HTTP 200 `{ok: true}` and remain a separate reality-gap repair. -**Baseline version:** 1.3 -**Observed on:** 2026-09-08 (Asia/Seoul) +## 2026-09-09 owner succession and review-gateway evidence + +These rows integrate the incoming #1611 observations into this single-writer +baseline. They bind each gap to its actual bounded-context owner and do not +reuse predecessor approvals or checks. + +| Observed responsibility gap | Canonical owner action | Current status and required evidence | +| --- | --- | --- | +| [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | +| Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | + +**Baseline version:** 1.4 +**Observed on:** 2026-09-09 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) From 4450b97bc9e32a0150b7bd67888860d24f56f007 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 9 Sep 2026 01:12:15 +0900 Subject: [PATCH 07/89] docs(gap): refresh Search exact-head evidence --- docs/product-technical-gap-baseline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index b6cb5d79d..d77c2b752 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -20,7 +20,7 @@ not visual acceptance. | Observed customer gap | Canonical owner action | Acceptance evidence still required | | --- | --- | --- | | Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | -| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | PR #1603 retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes; its current head `622dc08d` now projects relationship actions through a product-owned positive allowlist and neutral fallback | Focused UI tests (7 passed), production build, and local desktop/mobile Chromium inspection are green; hosted exact-head checks, independent review, protected merge, and deployed inspection remain required | +| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | [PR #1603](https://github.com/ContextualWisdomLab/naruon/pull/1603) retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes; exact head `462b134acf858061019d3ffe37b7b3d60e6f7e74` normalizes production `Colleague` casing, translates all four production action codes, and fails closed to neutral customer copy for unknown values | Full Vitest passed 51 files / 447 tests; scoped ESLint, TypeScript, diff checks, Application CI, Bandit, Docker validation, Security, Semgrep, coverage evidence/source, Strix, and GitHub Advanced Security CodeQL are GREEN. Required compatibility CodeQL remains failed on the central terminal-verdict ordering defect tracked by `.github#1929`; OpenCode and Noema are failed, no qualifying current-head formal approval or durable responsive-browser inspection exists, and the UI Delivery Gate remains **FAIL** pending owner repair, protected merge, and deployed inspection | | Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | | Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | | Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | @@ -44,7 +44,7 @@ reuse predecessor approvals or checks. | [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | | Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | -**Baseline version:** 1.4 +**Baseline version:** 1.5 **Observed on:** 2026-09-09 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` From 183d66b0b2677df8cdc583931c3608c7d9619011 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 12 Sep 2026 17:53:33 +0900 Subject: [PATCH 08/89] docs(gap): record reply SLA conflict codes --- docs/product-technical-gap-baseline.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index d77c2b752..bc294abec 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,18 @@ # Naruon Product and Technical Gap Baseline +## 2026-09-12 Reply-SLA conflict-code evidence + +This observation records the current candidate from +[#1670](https://github.com/ContextualWisdomLab/naruon/pull/1670) without +transferring predecessor Checks or claiming protected integration. Exact head +`e17bbc27040ddeb4e1de6e12815f5aa74a5c9672` has tree +`820fc29c93f3ba23518d18c9619c9dc93776db10`, byte-matched to the locally +verified tree. + +| Observed product/technical gap | Canonical owner action | Current status and required evidence | +| --- | --- | --- | +| Reply-SLA contention reasons existed only in exception prose while the HTTP 409 boundary independently returned one generic code | #1670 now carries stable `ReplySlaTaskConflict.error_code` values for unresolved duplicate races, exhausted batch retry budgets, and source emails that leave the caller's scope; the API preserves the specific code while retaining customer-safe explanatory copy | RED commits `fc68fa5` and `df1ff2d` produced **5 failed / 18 passed** and a separate API failure; GREEN `346c293` plus complete-CHANGELOG restoration `e17bbc2` passes **23** transaction tests with warnings as errors and **47 passed / 1 skipped** across Tasks API and reply tracking. Scoped Ruff, compileall, diff checks and exact tree comparison pass. Exact-head hosted checks, real async PostgreSQL qualification and independent approval remain required. Inherited Trivy findings remain owned by [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623); no ignore or gate weakening is included. | + ## 2026-09-08 visual evidence: smoke success is not product acceptance This observation supplements the historical inventory below. PR @@ -44,8 +57,8 @@ reuse predecessor approvals or checks. | [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | | Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | -**Baseline version:** 1.5 -**Observed on:** 2026-09-09 (Asia/Seoul) +**Baseline version:** 1.6 +**Observed on:** 2026-09-12 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) From aef76075da993d820b34223898cfa0db51d7baea Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 12 Sep 2026 19:37:22 +0900 Subject: [PATCH 09/89] docs(gap): record dependency owner single-writer repair Advance the canonical ledger to 1.7 with the exact #1623 owner head/tree, test evidence, recreated checks, and remaining review gate. The dependency branch no longer writes this file. --- docs/product-technical-gap-baseline.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index bc294abec..f3833bc7c 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,23 @@ # Naruon Product and Technical Gap Baseline +## 2026-09-12 frontend security owner single-writer repair + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the +canonical frontend dependency-security owner. Concurrent commit `4e66036b` +wrote its maintenance evidence into this ledger from the dependency branch and +identified predecessor `5487141...` as its current head. That was both a +single-writer violation and stale exact-head evidence. + +Non-force repair `d8327d4904f38588b6b6883338aafb575256a19b` restores the +protected-`develop` ledger blob on #1623 while preserving every dependency and +regression-test commit in ancestry. Its resulting tree is +`5d80c6927cac1678a31e7fbab24e68a0d541fef0`; the PR comparison contains seven +intended owner paths and no longer includes this ledger. Focused frontend +security contracts pass **20 tests** with warnings as errors, and exact-head +Application CI, CodeQL, Security, Semgrep, Bandit and Docker runs were recreated +after the repair. They and a qualifying independent review remain pending, so +no merge or release is claimed. + ## 2026-09-12 Reply-SLA conflict-code evidence This observation records the current candidate from @@ -57,7 +75,7 @@ reuse predecessor approvals or checks. | [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | | Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | -**Baseline version:** 1.6 +**Baseline version:** 1.7 **Observed on:** 2026-09-12 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` From 4fd0a9ad08fd98d6638eba04f0da2c30780743c1 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 12 Sep 2026 22:14:21 +0900 Subject: [PATCH 10/89] docs(gap): record dependency and tool succession --- docs/product-technical-gap-baseline.md | 35 +++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index f3833bc7c..b9420321d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,38 @@ # Naruon Product and Technical Gap Baseline +## 2026-09-12 dependency and tool-contract succession + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the +canonical frontend dependency-security owner. RED +`8175f7f04a8624a681a509eb8b446c7a3ff7bd5d` raised the Nano ID 3.x security +floor to `3.3.19`; GREEN +`9d6d1e09e1ad52e57a1a3162c9984cceea4b2cb8` synchronizes the workspace +override, package and snapshot lock records, regression contract, and +CHANGELOG. Exact tree `d99f83fc482ba948271f45ae2f7251036dd190ad` +passed **21** focused security contracts, the full backend (**1,826 passed / 33 +skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, +TypeScript, and the 16-route production build. Hosted Application CI, Security, +Semgrep, and Bandit are GREEN; Docker is still running, CodeQL is queued, and +the moved head has no qualifying independent approval. The owner therefore +remains Draft and is not merge-authorized. + +[#1672](https://github.com/ContextualWisdomLab/naruon/pull/1672) is now stacked +on that exact owner rather than carrying a second dependency diff. Its exact +head `f826fde79b107794a7391788c30545875cc5083f` has tree +`9f655a2b21e8beca74f2ab7efa955129522c5e3c`; concurrent security commit +`5f480d641b49ed3dff585881806e75aa1f926046` remains a merge parent. Review +repair RED `7d883377` / `8c79903b` to GREEN `8660aff5` / `119f46cf` applies +descriptor defaults before validation, rejects non-standard JSON constants, +and strips only unmatched terminal URL closers with ordered delimiter pairing. +All three review threads are resolved. The final tree passed **94** focused +tool/security tests, the full backend (**1,835 passed / 33 skipped**), frontend +(**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route +build. Its hosted exact-head workflows are queued. URL extraction (#1496), +hash generation (#1538), and strict JSON formatting/validation (#1659) remain +overlapping Proposed owner lanes, so #1672 stays Draft until each unique delta +has verified owner adoption; review repair is not DDD ownership or merge +evidence. + ## 2026-09-12 frontend security owner single-writer repair [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the @@ -75,7 +108,7 @@ reuse predecessor approvals or checks. | [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | | Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | -**Baseline version:** 1.7 +**Baseline version:** 1.8 **Observed on:** 2026-09-12 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` From 0ab26df8bf26fd42d32a9c53c3f20ea5db78b498 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 12 Sep 2026 22:16:38 +0900 Subject: [PATCH 11/89] docs(gap): bind owner CodeQL dispatch RCA --- docs/product-technical-gap-baseline.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index b9420321d..a56d2200d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -12,9 +12,13 @@ CHANGELOG. Exact tree `d99f83fc482ba948271f45ae2f7251036dd190ad` passed **21** focused security contracts, the full backend (**1,826 passed / 33 skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route production build. Hosted Application CI, Security, -Semgrep, and Bandit are GREEN; Docker is still running, CodeQL is queued, and -the moved head has no qualifying independent approval. The owner therefore -remains Draft and is not merge-authorized. +Semgrep, and Bandit are GREEN; Docker is still running. CodeQL run +`34695440148` failed its first admission because every shard read the +authenticated exact-head verdict as pending; dispatch succeeded and explicitly +owns rerunning those exact failed jobs after terminal publication. This is +workflow orchestration state rather than a SARIF source finding. The moved head +has no qualifying independent approval, so the owner remains Draft and is not +merge-authorized. [#1672](https://github.com/ContextualWisdomLab/naruon/pull/1672) is now stacked on that exact owner rather than carrying a second dependency diff. Its exact From daabfe2ef832cb0250bf974701519afb5c683127 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 12 Sep 2026 22:36:34 +0900 Subject: [PATCH 12/89] docs(gap): refresh stacked delivery evidence --- docs/product-technical-gap-baseline.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a56d2200d..3c85e9d25 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -## 2026-09-12 dependency and tool-contract succession +## 2026-09-12 current owner and stacked-delivery evidence [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner. RED @@ -12,7 +12,7 @@ CHANGELOG. Exact tree `d99f83fc482ba948271f45ae2f7251036dd190ad` passed **21** focused security contracts, the full backend (**1,826 passed / 33 skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route production build. Hosted Application CI, Security, -Semgrep, and Bandit are GREEN; Docker is still running. CodeQL run +Semgrep, Bandit, and Docker are GREEN. CodeQL run `34695440148` failed its first admission because every shard read the authenticated exact-head verdict as pending; dispatch succeeded and explicitly owns rerunning those exact failed jobs after terminal publication. This is @@ -31,12 +31,30 @@ and strips only unmatched terminal URL closers with ordered delimiter pairing. All three review threads are resolved. The final tree passed **94** focused tool/security tests, the full backend (**1,835 passed / 33 skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route -build. Its hosted exact-head workflows are queued. URL extraction (#1496), +build. Its exact-head Application CI, Security, Semgrep, Bandit, and Docker +workflows are GREEN. CodeQL run `34695737370` is terminal RED and remains an +owner-orchestration gate rather than positive source evidence. URL extraction (#1496), hash generation (#1538), and strict JSON formatting/validation (#1659) remain overlapping Proposed owner lanes, so #1672 stays Draft until each unique delta has verified owner adoption; review repair is not DDD ownership or merge evidence. +The following live lanes refine the delivery gap without moving their product +truth into this ledger: + +| Live owner lane | Exact topology and validated delta | Current delivery boundary | +| --- | --- | --- | +| [#1662](https://github.com/ContextualWisdomLab/naruon/pull/1662) NetworkGraph | base `#1623@17a7618`, head `d82e722dbf1b8b485d533056409bd91689a03b5f`; three-file bounded-prefix traversal and regression scope | Draft and currently non-mergeable; no exact-head PR workflow run. The source-level CodeRabbit review is not a formal current-head approval. | +| [#1659](https://github.com/ContextualWisdomLab/naruon/pull/1659) strict JSON formatter | base `#1623@17a7618`, head `fbcbd5444241cd025b21d96faa8ca8130c983da9`; RED `0845687e` to causal output-budget fix `cea8b279` plus code-current doctoring | Draft; no exact-head PR workflow run or qualifying current-head approval. The stale parent must be ordinary-restacked before merge. | +| [#1667](https://github.com/ContextualWisdomLab/naruon/pull/1667) Sentinel guidance | base `#1623@17a7618`, head `695c242d241dd3a4c03046b44486ce93ef59af6f`; sink-backed filename-finding guidance, regression, and doctoring only | Draft and currently non-mergeable; no exact-head PR workflow run or qualifying approval. The stale parent must be ordinary-restacked before merge. | +| [#1587](https://github.com/ContextualWisdomLab/naruon/pull/1587) local stacked-PR CI | base `develop@042b0c7`, head `17c0a5c9198eeda95f6a7d86f6a35a8b05abe774`; stale release-governance assertions were repaired after a real hosted RED | Application CI, Bandit, Docker, and Semgrep are GREEN; Security and CodeQL remain terminal RED. Draft and not merge-authorized. | +| [#1600](https://github.com/ContextualWisdomLab/naruon/pull/1600) full-product evidence | base `#1587@17c0a5c`, head `d23a6899a62162a766a00b16a80441c9bcdc969a`; six-file child retains source-head-bound product evidence | Application CI, Bandit, and Docker materialized and are GREEN on the stacked base. Missing same-head Security/CodeQL/review evidence keeps the lane Draft. | + +These rows also expose a reusable failure mode: children based on predecessor +`#1623@17a7618` do not inherit the repaired dependency owner +`#1623@9d6d1e0`. Ordinary restacking and new exact-base/head evidence are +required; predecessor execution and approvals do not transfer. + ## 2026-09-12 frontend security owner single-writer repair [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the @@ -112,7 +130,7 @@ reuse predecessor approvals or checks. | [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | | Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | -**Baseline version:** 1.8 +**Baseline version:** 1.9 **Observed on:** 2026-09-12 (Asia/Seoul) **Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` **Observed product version:** `0.14.4` From 3acb6e2842899872c0ecf07c4be2283b19ee7f0e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 16:45:26 +0900 Subject: [PATCH 13/89] docs(gap): refresh current commercial authority baseline --- docs/product-technical-gap-baseline.md | 1188 ++--------------- .../2026-09-12-baseline-v1.9.md | 1146 ++++++++++++++++ 2 files changed, 1251 insertions(+), 1083 deletions(-) create mode 100644 docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 3c85e9d25..e372bb118 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,1146 +1,168 @@ # Naruon Product and Technical Gap Baseline -## 2026-09-12 current owner and stacked-delivery evidence - -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the -canonical frontend dependency-security owner. RED -`8175f7f04a8624a681a509eb8b446c7a3ff7bd5d` raised the Nano ID 3.x security -floor to `3.3.19`; GREEN -`9d6d1e09e1ad52e57a1a3162c9984cceea4b2cb8` synchronizes the workspace -override, package and snapshot lock records, regression contract, and -CHANGELOG. Exact tree `d99f83fc482ba948271f45ae2f7251036dd190ad` -passed **21** focused security contracts, the full backend (**1,826 passed / 33 -skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, -TypeScript, and the 16-route production build. Hosted Application CI, Security, -Semgrep, Bandit, and Docker are GREEN. CodeQL run -`34695440148` failed its first admission because every shard read the -authenticated exact-head verdict as pending; dispatch succeeded and explicitly -owns rerunning those exact failed jobs after terminal publication. This is -workflow orchestration state rather than a SARIF source finding. The moved head -has no qualifying independent approval, so the owner remains Draft and is not -merge-authorized. - -[#1672](https://github.com/ContextualWisdomLab/naruon/pull/1672) is now stacked -on that exact owner rather than carrying a second dependency diff. Its exact -head `f826fde79b107794a7391788c30545875cc5083f` has tree -`9f655a2b21e8beca74f2ab7efa955129522c5e3c`; concurrent security commit -`5f480d641b49ed3dff585881806e75aa1f926046` remains a merge parent. Review -repair RED `7d883377` / `8c79903b` to GREEN `8660aff5` / `119f46cf` applies -descriptor defaults before validation, rejects non-standard JSON constants, -and strips only unmatched terminal URL closers with ordered delimiter pairing. -All three review threads are resolved. The final tree passed **94** focused -tool/security tests, the full backend (**1,835 passed / 33 skipped**), frontend -(**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route -build. Its exact-head Application CI, Security, Semgrep, Bandit, and Docker -workflows are GREEN. CodeQL run `34695737370` is terminal RED and remains an -owner-orchestration gate rather than positive source evidence. URL extraction (#1496), -hash generation (#1538), and strict JSON formatting/validation (#1659) remain -overlapping Proposed owner lanes, so #1672 stays Draft until each unique delta -has verified owner adoption; review repair is not DDD ownership or merge -evidence. - -The following live lanes refine the delivery gap without moving their product -truth into this ledger: - -| Live owner lane | Exact topology and validated delta | Current delivery boundary | -| --- | --- | --- | -| [#1662](https://github.com/ContextualWisdomLab/naruon/pull/1662) NetworkGraph | base `#1623@17a7618`, head `d82e722dbf1b8b485d533056409bd91689a03b5f`; three-file bounded-prefix traversal and regression scope | Draft and currently non-mergeable; no exact-head PR workflow run. The source-level CodeRabbit review is not a formal current-head approval. | -| [#1659](https://github.com/ContextualWisdomLab/naruon/pull/1659) strict JSON formatter | base `#1623@17a7618`, head `fbcbd5444241cd025b21d96faa8ca8130c983da9`; RED `0845687e` to causal output-budget fix `cea8b279` plus code-current doctoring | Draft; no exact-head PR workflow run or qualifying current-head approval. The stale parent must be ordinary-restacked before merge. | -| [#1667](https://github.com/ContextualWisdomLab/naruon/pull/1667) Sentinel guidance | base `#1623@17a7618`, head `695c242d241dd3a4c03046b44486ce93ef59af6f`; sink-backed filename-finding guidance, regression, and doctoring only | Draft and currently non-mergeable; no exact-head PR workflow run or qualifying approval. The stale parent must be ordinary-restacked before merge. | -| [#1587](https://github.com/ContextualWisdomLab/naruon/pull/1587) local stacked-PR CI | base `develop@042b0c7`, head `17c0a5c9198eeda95f6a7d86f6a35a8b05abe774`; stale release-governance assertions were repaired after a real hosted RED | Application CI, Bandit, Docker, and Semgrep are GREEN; Security and CodeQL remain terminal RED. Draft and not merge-authorized. | -| [#1600](https://github.com/ContextualWisdomLab/naruon/pull/1600) full-product evidence | base `#1587@17c0a5c`, head `d23a6899a62162a766a00b16a80441c9bcdc969a`; six-file child retains source-head-bound product evidence | Application CI, Bandit, and Docker materialized and are GREEN on the stacked base. Missing same-head Security/CodeQL/review evidence keeps the lane Draft. | - -These rows also expose a reusable failure mode: children based on predecessor -`#1623@17a7618` do not inherit the repaired dependency owner -`#1623@9d6d1e0`. Ordinary restacking and new exact-base/head evidence are -required; predecessor execution and approvals do not transfer. - -## 2026-09-12 frontend security owner single-writer repair - -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the -canonical frontend dependency-security owner. Concurrent commit `4e66036b` -wrote its maintenance evidence into this ledger from the dependency branch and -identified predecessor `5487141...` as its current head. That was both a -single-writer violation and stale exact-head evidence. - -Non-force repair `d8327d4904f38588b6b6883338aafb575256a19b` restores the -protected-`develop` ledger blob on #1623 while preserving every dependency and -regression-test commit in ancestry. Its resulting tree is -`5d80c6927cac1678a31e7fbab24e68a0d541fef0`; the PR comparison contains seven -intended owner paths and no longer includes this ledger. Focused frontend -security contracts pass **20 tests** with warnings as errors, and exact-head -Application CI, CodeQL, Security, Semgrep, Bandit and Docker runs were recreated -after the repair. They and a qualifying independent review remain pending, so -no merge or release is claimed. - -## 2026-09-12 Reply-SLA conflict-code evidence - -This observation records the current candidate from -[#1670](https://github.com/ContextualWisdomLab/naruon/pull/1670) without -transferring predecessor Checks or claiming protected integration. Exact head -`e17bbc27040ddeb4e1de6e12815f5aa74a5c9672` has tree -`820fc29c93f3ba23518d18c9619c9dc93776db10`, byte-matched to the locally -verified tree. - -| Observed product/technical gap | Canonical owner action | Current status and required evidence | -| --- | --- | --- | -| Reply-SLA contention reasons existed only in exception prose while the HTTP 409 boundary independently returned one generic code | #1670 now carries stable `ReplySlaTaskConflict.error_code` values for unresolved duplicate races, exhausted batch retry budgets, and source emails that leave the caller's scope; the API preserves the specific code while retaining customer-safe explanatory copy | RED commits `fc68fa5` and `df1ff2d` produced **5 failed / 18 passed** and a separate API failure; GREEN `346c293` plus complete-CHANGELOG restoration `e17bbc2` passes **23** transaction tests with warnings as errors and **47 passed / 1 skipped** across Tasks API and reply tracking. Scoped Ruff, compileall, diff checks and exact tree comparison pass. Exact-head hosted checks, real async PostgreSQL qualification and independent approval remain required. Inherited Trivy findings remain owned by [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623); no ignore or gate weakening is included. | - -## 2026-09-08 visual evidence: smoke success is not product acceptance - -This observation supplements the historical inventory below. PR -[#1599](https://github.com/ContextualWisdomLab/naruon/pull/1599) built source -`877f0d5c1b96c3ac212ecc86630afb75532f5880` and ran the same implementation -through test descendant `af4df216b3533ebb82dab9d361b415ddb941fa24`. -The production build and mocked browser smoke exited zero across ten routes at -1440×1024 and 390×844, and all twenty PNGs were directly inspected. The -[inspection receipt](https://github.com/ContextualWisdomLab/naruon/pull/1599#issuecomment-5578964200) -records scope and observed defects. It does not prove live provider writes, -real backend contracts, every locale, deployment, or complete accessibility. -PR #1600 then retained the same ten-route desktop evidence from hosted -Application CI run `34189161122` for exact head `d30f0b7c`. Direct inspection -confirmed that artifact creation succeeded while the customer-facing defects -below remained visible; a green smoke job is therefore evidence availability, -not visual acceptance. - -| Observed customer gap | Canonical owner action | Acceptance evidence still required | -| --- | --- | --- | -| Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | -| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | [PR #1603](https://github.com/ContextualWisdomLab/naruon/pull/1603) retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes; exact head `462b134acf858061019d3ffe37b7b3d60e6f7e74` normalizes production `Colleague` casing, translates all four production action codes, and fails closed to neutral customer copy for unknown values | Full Vitest passed 51 files / 447 tests; scoped ESLint, TypeScript, diff checks, Application CI, Bandit, Docker validation, Security, Semgrep, coverage evidence/source, Strix, and GitHub Advanced Security CodeQL are GREEN. Required compatibility CodeQL remains failed on the central terminal-verdict ordering defect tracked by `.github#1929`; OpenCode and Noema are failed, no qualifying current-head formal approval or durable responsive-browser inspection exists, and the UI Delivery Gate remains **FAIL** pending owner repair, protected merge, and deployed inspection | -| Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | -| Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | -| Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | - -The screenshot-failure RED at `af4df216` returned a diagnostic text path as -successful screenshot evidence. PR #1599 successor `9bb0dc7e` now throws the -capture error, leaves no false PNG, closes the page, and retains late browser -error detection; its focused suite passed 16/16. PR #1600 separately owns -source-head-bound artifact retention. Both remain Proposed until current-head -hosted checks and independent review finish. Unknown `/api/**` mocks can still -default to HTTP 200 `{ok: true}` and remain a separate reality-gap repair. - -## 2026-09-09 owner succession and review-gateway evidence - -These rows integrate the incoming #1611 observations into this single-writer -baseline. They bind each gap to its actual bounded-context owner and do not -reuse predecessor approvals or checks. - -| Observed responsibility gap | Canonical owner action | Current status and required evidence | -| --- | --- | --- | -| [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | -| Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | - -**Baseline version:** 1.9 -**Observed on:** 2026-09-12 (Asia/Seoul) -**Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` +**Baseline version:** 2.0 +**Observed on:** 2026-09-19 (Asia/Seoul) +**Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` -**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) - -**Inventory observation:** the 106-PR open surface below is a fresh live -scan captured at `2026-08-25T15:52:01Z`, which returned 106 open PRs after -PR #1337 merged into protected `develop` at `2026-08-25T00:10:39Z` and -the later governance stack merge (#1448) and additional PR wave opened since -the previous observation. The -v0.2 baseline's 93-row snapshot from `2026-08-21T19:25:43Z` remains historical -context, as do the earlier 92-PR state after PR #1442 merged and the initial -83-PR observation in issue #1428; all counts are point-in-time evidence, not -current merge state. - -**Follow-up delta observation:** a seventh live scan at -`2026-08-25T15:39:22Z` found the active exact-head work relevant to this -baseline: #1465 (`70596e26…`, tenant-archive import sanitization and duplicate -identity rejection), #1466 (`a3e6762f…`, origin-integrity port validation), -#1467 (`6816bc7f…`, utility-tool JSON boundary and Strix-trigger restoration), -#1468 (`1da167de…`, PostgreSQL smoke fixture schema alignment), #1469 -(`de6d7128…`, bounded 20–64 MiB deferred attachment parse-source admission), -and #1455 (`d8757e65…`, attachment filename traversal hardening). The -governance root #1443 now has exact head `62a0d645…` after child #1448 merged -normally into its stack branch. #1448 merged at -`2026-08-25T15:31:39Z` with merge commit `62a0d645…`; its tree retains the -parent gate fix and the multiline, stale-head, and current-finding regression -cases. The merge-result Checks for that commit remain queued and are tracked -as post-merge canary evidence, not success. -The newly opened #1470 is now `aba77cf5…` (NetworkGraph edge-description -lookup cleanup); the predecessor `f8a70d37…` was discarded after a remote -commit reintroduced the dead argument and its callers. The current head also -removes the tracked 452-line `NetworkGraph.tsx.out` pre-refactor copy found by -Devin, with the 11-test focused suite, TypeScript, zero-warning ESLint, and -diff checks passing locally. Hosted Checks and independent approval remain -required. -These PRs remain open until their current-head required Checks and qualifying -independent approval satisfy the protected ruleset; this follow-up does not -reuse predecessor evidence or claim a merge. #1448 is historical after its -normal merge; #1443's current head is `62a0d645…` and must be reviewed and -checked again from that exact head. - -**Live exact-head queue refresh (2026-08-25T17:51Z):** the following -post-snapshot states supersede only the matching historical SHA references -above; the full inventory remains a point-in-time record and is not silently -rewritten. #1468 is `1da167de26b442be6961622f15bb36ae9374e6c4`; its source, -backend, and frontend evidence is successful, while the retried Strix run is -queued after the earlier NVIDIA NIM provider failure. #1469 is now -`575b0c24fd9cb98106989eb101de74c5ce383db3`, after a remote follow-up removed -the unreachable document-size branch; 109 attachment/import/NewsDOM tests -pass locally, and the PR remains stacked behind #1468 because the selected -full suite exposes the base fixture defect repaired by #1468. #1470 remains -`aba77cf5b6a47985b352e8d2c2d76413579ea88a`; backend, frontend, Strix, and -metadata checks are successful, and its exact-head CodeRabbit approval is -present, but the ruleset still requires the second qualifying approval and -the exact-head OpenCode dispatch is queued. #1455 remains -`b2b4701366bc6bb2de1347b19eac9b4ed64cc614` with backend/frontend evidence -successful and Strix still running. #1429 remains -`b93caf0e00d09de0f836d8e4b869054d792e674b`; its refreshed hosted checks are -queued or in progress. #1347 remains -`f9e1751e2d5069841b279ecd2414fbbcad2e5692`; its newest metadata result is -not merge evidence and the remaining hosted checks are queued. None of these -states satisfies the two-approval protected ruleset, and none is a force-merge -candidate. - -**Live exact-head queue refresh (2026-08-25T18:06Z):** a subsequent -re-fetch supersedes only the matching queue entries above. PR #1436 moved to -exact head `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221`; its frontend, backend, -and Strix checks were recreated and queued, with zero unresolved review -threads and no qualifying approval. PR #1470 remains -`aba77cf5b6a47985b352e8d2c2d76413579ea88a`; its metadata, OpenCode, -frontend, backend, Strix, and security checks are successful, but only the -exact-head CodeRabbit approval exists and the protected ruleset requires a -second qualifying approval. PR #1467 remains -`6816bc7f938fe361f2eb7a0ecee427f87170fbcb`; source/security checks are -successful, metadata is still in progress, and only CodeRabbit has approved. -PR #1466 remains `a3e6762f01666f5b4e9d202932012de23b942c59` with all -observed required checks successful but no current approval. PR #1468 remains -`1da167de26b442be6961622f15bb36ae9374e6c4`; its source checks are successful, -the retried Strix check is queued, and its metadata gate is not a merge -result. PR #1469 remains `575b0c24fd9cb98106989eb101de74c5ce383db3`; its -source checks pass while image validation and Strix are running and metadata -is failed pending current review evidence. PR #1455 remains -`b2b4701366bc6bb2de1347b19eac9b4ed64cc614` with image checks successful, -coverage and metadata pending, and Strix running. PR #1347 remains -`f9e1751e2d5069841b279ecd2414fbbcad2e5692`; its three informational review -threads are resolved, but metadata is failed and Strix/coverage are still -running. PR #1429 remains `39d796d14b93484e004c13d7e2db4cc2eee5cdb1` with -the refreshed hosted suite queued. No entry satisfies the two-approval -ruleset, and no entry is a force-merge candidate. - -**Current Checks inventory:** the same live scan found 106 open PRs. Completed -failures were limited to `metadata-only gate evaluation` and `strix`; the -metadata gate reports the underlying Strix failure and, on some heads, a -current-head CodeRabbit quota/provider warning. The Naruon hosted Strix logs -for the observed #1468 run show NVIDIA NIM HTTP 429 rate limiting followed by -an unavailable direct fallback. This describes that run's provider evidence, -not the central Strix default documented in `AGENTS.md`; it is failed -infrastructure evidence rather than a clean security result or a source defect. -These PRs remain blocked and are not -force-merged; the exact head must receive a successful hosted security result. -PR #1466 has successful required Checks but remains in GitHub's protected -auto-merge queue with `REVIEW_REQUIRED` and no qualifying independent -approval, so it is also not treated as manually merged. - -The latest exact-head follow-up also records: #1347 at -`e97fa1e4…` with its governance regression tests passing but hosted required -Checks queued and no qualifying approval; #1433 at `b84255e5…` with source -checks passing but Strix failed closed after NVIDIA NIM HTTP 429 retries and a -configured direct OpenAI HTTP 404 fallback; #1450 at `073408ce…` with all -other Checks successful while the metadata gate remains in progress; #1455 at -`d8757e65…` with all hosted Checks successful but no current-head approval; -and #1466 at `a3e6762f…` with all hosted Checks successful but no qualifying -independent approval. These are live queue observations, not merge evidence. -The provider failures are retained as infrastructure evidence and are not -converted into source changes or clean security claims. - -**Exact-head maintenance ledger (2026-08-26):** PR #1347 now has exact head -`f9e1751e2d5069841b279ecd2414fbbcad2e5692` on this protected base. Its -governance normalization wrapper now fails closed when the review-unavailable -`jq` parser fails or emits a non-numeric count, and its early-exit cleanup trap -removes the wrapper-created comments snapshot when no PR number is available. -The exact-head local contract suite is 14 passed and the shell self-test remains -green. Hosted required Checks -were recreated and remain queued, so this is not a hosted pass or merge claim. -PR #1364 now has exact head -`3a3baa6b8dc9ea224f46395cb78c91a45be2090c` on this protected base. Its scoped -S3 document lifecycle, encrypted provider registry, compensation/orphan cleanup, -migrations, API, and LocalStack/PostgreSQL integration contract passed 195 -focused local tests, Ruff, compileall, and diff checks. Hosted required Checks -and independent approval remain required; protected auto-merge is enabled but -no merge is claimed. The attachment and UI work continued on independent -branches while hosted runners were queued. PR #1419 -now has exact head `2924b5598d4f527d493e1fc88cebd8fe87e1a3c4` on this protected -base, with 263 focused attachment/inline-image/email tests plus Ruff passing; -its hosted required checks were recreated for that head and remain queued, so -the normal protected squash auto-merge is enabled but not claimed as complete. -PR #1436 now has exact head -`1573be3332725bfbd05053943988d652df22a846` on the same base, with 446 frontend -tests, lint, typecheck, Next production build, Storybook build, and desktop / -mobile Storybook screenshots for source-open, low-confidence, -blocked-execution, and shared-scale states passing locally. It intentionally -remains pending because it carries a UI overlay at this document path while -PR #1429 owns the canonical commercial baseline; merge #1429 first, then -reconcile #1436 against the canonical file before enabling auto-merge. These -observations are exact-head evidence, not a release or hosted security claim. -PR #1415 now has exact head `994c6d40bb8a5a1de82e2f137300ea620bcdf933`; the -OIDC `kid` selection and strict administrator-role boundary passed 98 focused -authentication tests. PR #1417 now has exact head -`46f4b92a717361e3e4e42fcebc1d8c090a64c59b`; its PostgreSQL smoke seed now -explicitly supplies `is_read` after a real existing-schema NOT NULL failure, -and 180 focused tests pass. PR #1455 now has exact head -`b2b4701366bc6bb2de1347b19eac9b4ed64cc614`; bounded filename decoding and -Windows-separator traversal protection passed 130 focused parser/import tests. -All three have recreated hosted Checks and remain normal protected-merge -candidates; no hosted pass or merge is claimed. - -The protected-branch SHA in this header identifies the baseline's observation -point. The inventory's `Base-SHA` column is captured independently for each PR -at its scan time, so an older `develop` SHA in a row is expected snapshot -metadata rather than a second claim about the current protected branch. - -**Live exact-head queue refresh (2026-08-25T18:38Z):** PR #1468 remains at -`1da167de26b442be6961622f15bb36ae9374e6c4` and its current hosted check rollup -has no failed or pending run; it still has zero qualifying approvals and zero -unresolved threads, so protected auto-merge has not occurred. PR #1469 remains -at `575b0c24fd9cb98106989eb101de74c5ce383db3`; its source checks are passing, -while the metadata gate remains failed on current review evidence and -OpenCode is queued. PR #1429 remains at -`f2143f9d997736040eb3152f59ce058dc22ea72b` with the refreshed hosted suite -queued or in progress. PR #1436 remains at -`034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221` with frontend image, coverage, and -Strix work still running. PR #1470 has a successful current check rollup and -one exact-head bot approval, but still lacks the second qualifying approval. -None of these observations authorizes a bypass merge. - -The owning upstream sidecar `Seongho-Bae/newsdom-api` PR #682 remains at -`585bb4e0fb719ab6a576cf46d1ef12b77872557b`. Its bounded 64 MiB source and -boundary tests are present, while its only failed hosted check is the -provider-infrastructure Strix run (NVIDIA NIM rate limiting followed by an -unavailable fallback); no source vulnerability report was produced and the -normal rerun workflow is unavailable. The provider PR therefore remains -`WAIT_AND_REMEDIATE`, not a clean security pass or a force-merge candidate. -NewsDOM issue [#707](https://github.com/Seongho-Bae/newsdom-api/issues/707) -owns the follow-up resumable-upload contract for documents above 64 MiB, so -the current synchronous fallback must not be mistaken for the target -commercial large-document UX. - -The central `ContextualWisdomLab/.github` control plane has two related -current-head repairs: PR #1331 (`a1408f52…`) separates the direct-OpenAI -fallback API base from the primary provider and has all observed checks passing -except queued coverage, while PR #1333 (`5454a196…`) adds bounded provider -retry/attempt-log handling with OpenCode still queued. Both have zero -qualifying approvals and remain normal protected-merge candidates; their -changes overlap in `.github/workflows/strix.yml`, so the first protected merge -must be re-fetched before the second is restacked. - -This document defines the evidence-backed boundary between what Naruon currently -ships on protected `develop`, what is present only in open pull requests, what is -still a product-plan aspiration, and what a buyer must be able to complete before -Naruon is described as a generally available commercial product. - -Counts, branch SHAs, checks, reviews, and pull-request state are point-in-time -evidence. They must be re-fetched before a merge or release decision. +**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) +**Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) ---- +This file is the current product/technical authority overlay. Historical point-in-time inventories and the previous v1.9 ledger are preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical evidence remains audit material, but current merge, release, owner, and buyer-readiness decisions must use the live authority below and fresh exact-head repository evidence. -## 1. Executive decision - -Naruon is no longer a small prototype. The protected branch already contains a -substantial, security-conscious **customer-owned communication and context -control plane**: - -```text -customer-owned mail / calendar / contact / file systems -→ Naruon ingest, thread, search, context, evidence, task, and action control -→ explicit human approval or correction -→ conflict-aware provider writeback through an outbound connector -``` - -Naruon must **not** become an SMTP server, IMAP mailbox host, public MX provider, -calendar source of truth, or file source of truth. Customer providers remain -authoritative. Naruon owns scoped context, policy, recommendation, intent, -connector command state, retry/reconciliation evidence, and the user-visible -decision/action experience. - -The accurate current product classification is: - -> **Production-oriented pre-GA communication control plane with substantial -> protected-branch capability, an unconverged ~100-open-PR integration surface (102 at the 2026-08-25 snapshot), and an -> incomplete buyer-visible release/operations contract.** - -The first sellable boundary is **GA-1: Customer-owned Mail, Calendar, Contact, -and File Control Plane**. The complete dense knowledge graph, no-ask -correct-by-exception reasoning, minimal-disclosure bridge, and third-party plugin -platform remain the north-star after GA-1 rather than prerequisites for the -first commercial release. - ---- - -## 2. Evidence hierarchy +## 1. Evidence hierarchy and release posture When sources disagree, use this order: -1. exact protected-branch code, migrations, tests, runtime contracts, and - security boundaries; +1. exact protected-branch code, migrations, tests, runtime contracts, and security boundaries; 2. exact protected-branch architecture and operations documents; -3. exact current pull-request code and current-head evidence; -4. open Issues and accepted ADRs; -5. older product plans, README limitations, and historical PR descriptions. - -A plan marked `[LIVE]` is not proof if the protected implementation contradicts -it. Conversely, an old README statement that calls a protected implementation -“future work” must be corrected rather than used to hide shipped behavior. - ---- - -## 3. Point-in-time repository snapshot - -| Item | Observation | -|---|---| -| Protected branch | `develop@e5e99b4e3bb081b92c602358878856536030e2ca` | -| Product/package version | `0.14.4` | -| Open pull requests | **102** (live scan at `2026-08-25T00:26:45Z`, post-#1337 merge) | -| Open issues | **61** (live count at the same 2026-08-25 snapshot; 59 were open before this baseline program) | -| New completion issue | #1428 | -| Required backend runtime | Python 3.14 exact-head lane | -| Core runtime | Next.js frontend, FastAPI backend, PostgreSQL + pgvector | -| Default data authority | customer-owned mail, CalDAV/CardDAV, and WebDAV providers | -| Default merge posture | strict exact-head checks plus qualifying independent review | - -The **102-open-PR** count is the live inventory snapshot captured on -2026-08-25 against the protected branch shown above, after PR #1337 merged. -The v0.2 baseline recorded **93 open PRs** on 2026-08-21 after PR #1448 -opened, an earlier same-day snapshot recorded **92 open PRs** after -PR #1442 merged, and the initial completion issue #1428 recorded **83 open -PRs** on 2026-08-20 against `develop@c9bfba2...`; these are historical -baselines, not contradictions. Later live counts can change as PRs open, -close, or merge, so every release decision must re-fetch the REST state. - -The protected branch requires exact-head backend, frontend, security, CodeQL, -dependency review, Scorecard, OSV, Trivy, Strix, source/evidence coverage, -backend/frontend/combined image validation, and OpenCode review contexts. Pending, -queued, stale, predecessor-head, skipped-required, neutral, author-only, -model-only, or local-only evidence is not passing evidence. - ---- - -## 4. Protected-branch product truth - -### 4.1 Shipped communication and workspace surface - -Protected `develop` exposes buyer-recognizable product surfaces for: - -- Today execution dashboard; -- Mail, thread history, search, reply, and pending-reply work; -- Calendar views, source-backed coordination, and writeback intent; -- Tasks and source-linked ticket work; -- Projects, project graph, and evidence-linked records; -- Context Search and hybrid retrieval; -- AI Hub and provider-neutral AI workflows; -- Data/document ingestion and controlled materialization; -- Security/policy/audit views; -- Settings, identity, provider, and deployment controls. - -The product already distinguishes simulated local send from real delivery, -preserves `In-Reply-To` and `References`, scopes email/provider records by owner -and organization, keeps opaque public identifiers separate from sequential -surrogates, and applies deny-first RBAC/ABAC policies. - -### 4.2 Source-of-truth and writeback sovereignty - -Protected `develop` already enforces important commercial boundaries: - -- customer mail, calendars, contacts, and files remain durable provider truth; -- browser input selects an opaque source reference but cannot assert ownership, - region, credential, or capability; -- writeback is intent-only unless the user explicitly requests provider - execution; -- provider execution re-reads server-authoritative source records; -- CalDAV and WebDAV updates preserve ETag/If-Match conflict semantics; -- private-network provider access uses an outbound-only connector rather than - inbound firewall holes or public mail hosting; -- provider credentials and command payloads are excluded from browser and - aggregate observability surfaces. - -### 4.3 Durable writeback retry is implemented - -The current protected source-of-truth document records behavior that the root -README still describes as future work: - -- scoped `provider_writeback_retry_items` rows; -- encrypted retry command payloads; -- retry dispatch with retry enqueue disabled for the nested attempt; -- exponential backoff; -- `succeeded`, rescheduled retry, and `failed_exhausted` outcomes; -- persisted connector signal events for dispatch, timeout, transport, and - adapter outcomes; -- organization-admin aggregate queue-depth reads without exposing payload, - credential, runner, source, or retry identities. - -This is a material product-truth correction. The remaining gap is not “create a -retry queue.” It is **finish connector packaging, identity/enrollment, complete -protocol coverage, dead-letter/reconciliation operations, and buyer-visible -support evidence**. - -### 4.4 AI and scientific boundary - -Naruon has grounded content segments, hybrid search, named/versioned KG -extractor seams, deterministic fallback, contextual-orchestrator routing, and -batch-embedding integration boundaries. It does **not** have a protected live -Structural Topic Model endpoint or fitted topic artifact. Deterministic keyword -metadata must not be marketed as STM or temporal event psychometrics. - -TEPP may be consumed only through a separately accepted, immutable, versioned -scientific artifact/API with preprocessing, vocabulary, covariates, posterior -uncertainty, diagnostics, provenance, and abstention. Naruon owns identity, -authorization, adapter envelopes, and disclosure policy; TEPP owns the -scientific payload. - ---- - -## 5. Product-truth and release-truth inconsistencies - -| Inconsistency | Current evidence | Buyer risk | Required correction | -|---|---|---|---| -| README says durable retry/audit remains future work | protected operations document describes encrypted retry rows, retry worker, backoff, exhaustion, and aggregate visibility | buyers and contributors cannot tell what is shipped | merge a customer/operator README based on protected truth; keep unsupported behavior explicitly limited | -| Release architecture says first candidate should be `v0.1.0` | `VERSION` and backend package are `0.14.4` | release procedure may publish or validate the wrong identity | replace historical hypothesis with current release-train policy and immutable release manifest | -| Product plan marks typed Person/Event/Commitment/Plugin concepts as new/planned | current code search does not prove authoritative `graph_persons`, `graph_events`, `graph_commitments`, or `plugin_registrations` stores | UI/marketing can imply dense-KG/product-platform completion that does not exist | keep north-star language, implement typed domains through bounded PRs, and gate claims on protected code | -| The live open-PR population (93 on 2026-08-21; 102 on 2026-08-25) contains many overlapping, stacked, micro, dependency, governance, and broad integration changes | current GitHub inventory | predecessor evidence, writer collision, stale branches, and integration starvation | establish a release train, classify every PR, close duplicates, merge parent-first, and use one writer per authority cluster | -| Required independent review exists but the current human reviewer path is unresolved | #1371 | green automation cannot produce a lawful protected merge | resolve reviewer governance without weakening rulesets or self-approval | -| Connector is described through a self-hosted-runner analogy | protected code has protocol adapters and retry behavior but no complete released connector lifecycle | operators may deploy test infrastructure as production relay | deliver signed installable connector artifacts, enrollment/rotation, source health, fleet SLO, and runbooks | - ---- - -## 6. Current pull-request surface - -The current open PR count is too large to treat as one releasable integration -unit. This baseline does not claim that every one of the 102 PRs has been -line-by-line approved. It records the product-significant active lanes observed -and defines the inventory that must be completed before GA. - -### 6.1 Product-significant active lanes - -| PR | Lane | Baseline judgment | -|---:|---|---| -| #1364 | scoped S3 document-object backend | high-leverage GA durability lane; Draft until real PostgreSQL + S3 lifecycle, backfill, cleanup, failure, and exact-head evidence are complete | -| #1417 | shared PostgreSQL-backed email-send throttle | necessary multi-replica safety; keep isolated and merge only with current-head concurrency/security evidence | -| #1416 | provider-backed CalDAV create writeback | relevant to GA scheduling execution; preserve create vs update precondition distinction and integrate into the broader #978 contract | -| #1353 | HWP/HWPX deterministic recognition boundary | useful Korean enterprise document admission; does not complete parsing/conversion/search semantics | -| #1397 | inline-media admission/tracking-pixel classification | valid evidence-protection slice; remain Draft until the #1350 stack and independent review are coherent | -| #1419 | common image metadata | bounded local evidence extraction; no OCR/VLM claim | -| #1418 | auditable URL/contact hygiene | deterministic tool/evidence lane; ensure contact redaction is not represented as complete anonymization | -| #1317 | broad macOS/local-AI/runtime/governance integration | valuable evidence but unusually broad; must be decomposed or reconciled carefully because many active PRs overlap its surfaces | -| #1392 | customer/operator README rewrite | directly addresses product-truth debt and has reported exact-head checks; still requires independent current-head approval | -| #1300 | fail closed on unsafe global tool mutations | correct safety posture until durable tenant-scoped plugin/tool registry exists; links directly to #976 | -| #1264 | EgressWeave integration | correctly dependency-blocked on an immutable released EgressWeave package and hash lock; mutable VCS dependency is forbidden | -| #1390 / #1391 | 56- and 78-package dependency groups | excessive blast radius, including major runtime and OpenAI client changes; split by compatibility/authority and rehearse migrations before merge | -| #1426 / #1414 | review-governance gate refresh | metadata-only governance repair; must not dismiss review, weaken rulesets, or turn stale aggregate state into false success | -| #1241, #1320, #1408, #1410, #1411, #1421, #1422 | accessibility micro-lanes | useful but numerous; consolidate non-overlapping UI fixes into bounded component-level trains to reduce 17-check amplification | -| #1424, #1412, #1401 | micro performance lanes | require real benchmark or stable complexity contract; do not let automated micro-PRs displace GA integration work | -| #1455 | path-traversal attachment parser hardening | high-value Sentinel security lane; prioritize within the new wave and merge only with exact-head Strix evidence once the provider outage clears | -| #1347 | rate-limited review status governance | current head constrains repository API-scope identifiers and merges the protected base; local tests pass, while hosted Checks and independent review are still required | -| #1433 | Message-ID whitespace hardening | source/security checks pass; the observed Strix failure is provider infrastructure (NVIDIA NIM 429 and direct OpenAI 404), so retry exact-head evidence without weakening the gate | -| #1450 | stray scratch/debug cleanup | all source and security Checks passed; wait for the in-progress metadata gate and current-head independent review | -| #1465 | scoped tenant archive import hardening | portability slice now rejects duplicate identities before writes and sanitizes archive-controlled display fields; retain the bounded slice-1 query cost and require current-head hosted evidence | -| #1466 | origin-integrity URL validation | current head rejects explicit zero/out-of-range ports; keep the signed-session and SSRF contract tied to exact-head regression evidence | -| #1467 | utility-tool JSON and governance repair | deterministic URL/HTML/JSON utility surface; current head rejects non-standard JSON numbers and preserves the central Strix workflow trigger, while full smoke evidence still depends on #1468's schema fixture repair | -| #1468 | PostgreSQL smoke fixture schema alignment | small root-cause test/data-contract repair for the current `email_records.is_read` requirement; merge before dependent smoke-test PRs after exact-head hosted evidence; the observed Naruon Strix run failed at the provider boundary (NVIDIA NIM 429/OpenAI 404), not in this source change | -| #1443 | CodeRabbit approval-notice governance root | current source/test lane narrows approval-notice parsing to the exact current head and ignores pending-review prose while retaining explicit findings; the predecessor Strix provider failure is historical, while the current head requires fresh queued Checks and a qualifying independent approval | -| #1448 | stacked governance regression coverage | merged normally into #1443's stack branch at `62a0d645…`; parent gate logic plus multiline JSON, stale-head unrelated prose, mixed blocker, and explicit current-head finding fixtures passed locally; merge-result hosted Checks remain queued and are post-merge canary evidence | -| #1469 | deferred attachment parse-source admission | aligns the hidden 20 MiB parser bound with the authenticated 64 MiB import contract while keeping unsupported binaries metadata-only; current changelog states the supported 20–64 MiB range and the ADR-0006 contract remains required | -| #1470 | NetworkGraph lookup optimization | bounded frontend performance slice; current head `aba77cf5…` preserves first-instance duplicate-ID selection, removes the dead `describeEdge` input, and deletes the tracked pre-refactor `NetworkGraph.tsx.out` copy; local 11-test, TypeScript, zero-warning ESLint, and diff checks passed, while hosted Checks and independent approval remain required | -| #1456 | email-detail UX density | buyer-visible mail surface polish; hold to the responsive/accessibility evidence contract in the UI quality section before protected integration | -| #1462 | utility tool trio (URL codec, hash generator) | bounded deterministic tooling consistent with #1418/#1361; must not be represented as AI judgment or topic evidence | -| #1457–#1461 | refreshed dependency-group bumps | successor waves to the v0.2-flagged groups; the 64- and 86-package backend/CI bumps remain excessive blast radius and still require splitting and migration rehearsal | - -### 6.2 Required complete inventory - -Before a release candidate is cut, create a machine-readable and human-reviewed -inventory for **all** current open PRs with: - -```text -pr_number -head_sha -base_ref_and_sha -draft_state -mergeability -changed_authority_cluster -stack_parent -stack_children -current_review_state -unresolved_threads -required_check_summary -product_lane -disposition -next_action -``` - -Allowed dispositions: - -- direct GA-1 slice; -- ordered stacked child; -- dependency-blocked; -- governance-blocked; -- duplicate/superseded; -- experimental/north-star; -- unsafe or unrelated and to be closed. - -The inventory must be regenerated after every parent merge or branch movement. -It must not embed provider credentials, customer data, review-body secrets, or -large copied PR bodies. - -### 6.3 Merge-loop progress since v0.2 - -Point-in-time progress observed between the v0.2 snapshot (2026-08-21) and -this v0.3 observation (2026-08-25). None of this is merge evidence; every -claim requires a live exact-head re-fetch before any decision: - -- **Merge-gate progression:** #1337 completed its gate progression (CodeRabbit exact-head approval obtained, branch updated onto the base) and merged into protected `develop` at `2026-08-25T00:10:39Z`; #1438 obtained CodeRabbit exact-head approval and branch updates and remains open pending terminal required-check states. -- **Stale-snapshot repair:** #1241, #1368, #1412, and #1320 received systemic develop-baseline restores that preserved each PR's intended delta while removing predecessor-base drift from the diff surface. -- **Thread remediation waves:** unresolved review threads progressed through repeated remediation cycles on #1264, #1332, #1347, #1349, #1361, #1380, #1339, #1376, #1412, #1452, #1454, #1449, #1457, #1436, and #1441. -- **External blocker:** Naruon hosted Strix runs have observed NVIDIA NIM provider rate-limit failures (HTTP 429) since approximately 2026-08-24, emitting zero model-reported vulnerabilities before infrastructure failure. This is an observation of the affected hosted runs, not a change to the central GitHub Models default in `AGENTS.md`; per repository policy it is failed evidence, not clean-scan evidence, and Strix-dependent gates cannot pass until the provider path recovers. - -### 6.4 UI/UX quality contract and Storybook event inventory - -The UI is a buyer-facing control surface, not a decorative shell. The current -design-system implementation is carried by PR #1436 and ADR-0013; it uses the -production stylesheet as the Storybook token source and records Figma file ID -`68b5XB58w8nwT2LYOOnikK`. Until that PR is protected-branch code, its stories -are current-PR evidence rather than shipped capability. - -The UI/UX Pro Max checklist and Anti-Slop UI heuristics are adopted as review -inputs, not as normative standards or automatic approval. They help select one -coherent design direction, expose generic UI defaults, and force explicit -review of accessibility, touch targets, hierarchy, and state behavior. WCAG -2.2 and the repository's security/accessibility gates remain authoritative. - -The latest local fixed-origin capture for #1470 used `/` at desktop (1440×900), -tablet (834×1112), and mobile (390×844). Tablet and mobile presented the -responsive shell and an explicit mail-loading state. Desktop presented the -navigation shell but no data surface while the backend was intentionally not -running; the Next development server also reported a hydration mismatch for -the search-input caret style. This is local diagnostic evidence, not hosted -release evidence, and is tracked as a separate UX/runtime gap rather than -mixed into the bounded NetworkGraph change. - -| Quality axis | Required definition and applied evidence | Audit gate before GA-1 | -|---|---|---| -| Accessibility | WCAG 2.2 AA; keyboard order/focus-visible; accessible names; labels; live/status announcements; color is never the only signal; Storybook a11y test is `error` for applicable stories | axe/Vitest Storybook results, keyboard journey, screen-reader name assertions, and zero unresolved accessibility findings | -| Touch & interaction | primary pointer and keyboard paths; at least 44×44 CSS-pixel target or documented exception; 8px separation; loading/disabled/pressed feedback; no hover-only action | Storybook `play` events queried by role/label plus touch viewport browser test | -| Performance | reserved media dimensions, no avoidable layout shift, route/component splitting, virtualized long lists, and responsive feedback for async work | production build budget, responsive capture at 375/768/1024/1440, and measured CLS/input-latency evidence | -| Style selection | one documented design direction, consistent icon language, semantic tokens, deliberate radius/elevation, and no generic gradient/card/emoji defaults | ADR/Figma decision, token source review, and Anti-Slop heuristic checklist with human disposition | -| Layout & responsive | mobile-first hierarchy, no horizontal scroll, readable line length, safe-area/fixed-bar offsets, and synchronized desktop/tablet/mobile navigation | Storybook viewport stories and Playwright route/drawer assertions at each supported viewport | -| Typography & color | semantic foreground/surface/status tokens; body text and line-height contract; contrast ≥4.5:1 for normal text; wrapping/overflow for IDs and user content | token lint, contrast scan, long-content story, dark-mode story, and i18n expansion test | -| Animation | shared duration/easing tokens, causal motion, transform/opacity preference, interruptibility, and `prefers-reduced-motion` behavior | reduced-motion Storybook story and browser assertion that action remains usable during transitions | -| Forms & feedback | visible labels, field-local errors, helper text, async progress, retry/undo or next action, and server error preservation | valid/invalid/loading/success/timeout/permission stories with submit and recovery events | -| Navigation patterns | predictable back/deep links, stable route identity, focus restoration, drawer parity, and one primary action per surface | route matrix, keyboard navigation journey, refresh/deep-link test, and mobile drawer test | -| Charts & data | legends/tooltips or accessible table, empty/loading/error/partial states, textual values, and color-independent meaning | chart stories for every state, keyboard/tooltip test, screen-reader text, and deterministic snapshot/visual evidence | - -Each reusable component must have a Storybook story for its meaningful states. -Each interactive story must use a `play` function and user-like queries such as -role or accessible label; `data-testid` is a last resort. Storybook render, -interaction, accessibility, and visual tests are complementary: a passing -render story does not prove keyboard, async, responsive, or data correctness. - -The minimum scene/event matrix is: - -| Scene | Required event or assertion | Failure prevented | -|---|---|---| -| initial/ready | render, accessible name, primary action | dead or unnamed control | -| loading/pending | click or submit, disabled state, progress/status update | duplicate request and silent wait | -| empty/no-result | filter/search/reset, next-action copy | inert workspace | -| success/recognized | inspect, open, confirm, source/provenance text | unsupported product claim | -| validation/error/timeout | invalid input, server error, retry/recovery | error only in console or lost user work | -| unauthorized/forbidden | attempted action, denial explanation, no sensitive data | privilege disclosure | -| offline/connector unavailable | degraded read path, retry/backoff affordance | false provider success | -| long content/large dataset | wrap, scroll/virtualize, pagination or summary disclosure | layout collapse and browser lock-up | -| keyboard/touch/reduced motion | tab/enter/escape, pointer/touch, reduced-motion media query | inaccessible or motion-sensitive flow | - -The inventory must record component, story name, state, event, expected -customer-visible outcome, accessibility rule, token source, viewport, and test -command. A story that only renders a static screenshot is incomplete for a -button, form, navigation, chart, or asynchronous data surface. - -### 6.5 Queue convergence rules - -1. One active writer owns each overlapping file/authority cluster. -2. A stacked child is not promoted before its parent reaches protected - `develop` and the child is revalidated on the new exact base. -3. Predecessor-head checks and reviews never transfer. -4. Dependency changes that cross runtime majors are separated from unrelated - feature work. -5. Historical one-shot, repair, finalizer, and self-modifying workflow identities - are handled through #1324; do not add another write-capable cleanup workflow. -6. Independent approval remains mandatory; #1371 is resolved by establishing a - legitimate reviewer path, not by weakening protection. -7. A micro-optimization requires measured evidence or a stable tested complexity - invariant, not only an assertion that `Map` is faster than array lookup. -8. A PR that claims to close an umbrella issue must prove the full umbrella - acceptance journey, not one narrow slice. - ---- - -## 7. Buyer-visible Gap matrix - -### P0 — Release and integration control - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Release-train convergence | no buyer can assess a product with ~100 unconverged open PRs (102 at the 2026-08-25 snapshot) | strict gates exist but queue topology is fragmented | #1428, #1371, #1324 | all PRs classified; duplicates closed; parent-first integration; one immutable RC SHA | -| Product/release truth | documentation conflicts with protected behavior/version | retry is shipped; release doc says `v0.1.0`; version is `0.14.4` | #1392, this PR | README, architecture, version, changelog, release manifest, and operator guide agree | -| Independent review path | automation cannot lawfully self-approve | effective rulesets require independent post-last-push approval | #1371 | verified reviewer route and normal protected merge without bypass | - -### P0 — Connector and provider action - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Installable connector | adapters in source are not an operable product | outbound-only architecture and several adapters exist | #998 | signed packages/OCI, enrollment, rotation, upgrade/rollback, supported matrix | -| Source lifecycle | configuration does not equal observed provider capability | source IDs, eligibility, consent, and revisions exist in slices | #998, #978 | create/rotate/disable/delete, capability discovery, health, stale-capability invalidation | -| Durable reconciliation | retry exhaustion alone does not tell the buyer what happened remotely | retry/backoff/exhaustion and signal events exist | #998 | idempotent command, late-success reconciliation, dead-letter action, buyer receipt | -| Shared send safety | process-local throttles fail with multiple replicas | PR proposes PostgreSQL-backed atomic bucket | #1379, #1417 | concurrency/expiry/isolation/DB-unavailable tests and protected integration | - -### P0 — Data durability, portability, and customer exit - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Binary object lifecycle | large/deferred document bytes cannot remain an inline database strategy | S3-compatible implementation is Draft | #1076, #1364 | upload/read/recognize/retain/delete/backfill/orphan round trip with real integration | -| Disaster recovery | a release is not enterprise-ready without restore evidence | HA evaluation exists; production WAL/PITR policy remains incomplete | #1428 | WAL archive/PITR, failover fencing, backup and clean restore rehearsal | -| Tenant export/reimport | customers need exit and migration without losing provenance | no single demonstrated full tenant round trip | #1428 | export → clean instance import preserving source, opaque IDs, history, evidence, policy | -| Retention/legal hold/disposition | deletion and evidence preservation conflict unless modeled | partial security/key/retention work exists across repository history | #1428, #1364 | purpose-scoped retention, legal hold, verified disposition, object/DB reconciliation | -| Attachment parser admission and unsupported formats | a file above 20 MiB can pass import transport but fail later at a hidden parser limit, while unsupported binaries are not searchable | Naruon import transport and generic deferred parser admission are bounded at 64 MiB; the NewsDOM `/parse` provider contract remains 20 MiB, so PDF bytes from 20–64 MiB are admitted and retained fail-closed but are not sent to NewsDOM; unsupported types remain metadata-only | #1427, #1469, #1353, #1419, NewsDOM #682/#707 | one documented bounded admission contract, provider-side PDF limit alignment or an explicit large-PDF fallback, parser/status evidence, deferred recognition, and object-backed retention before increasing the bound again | - -### P0 — Evidence-based AI and document intelligence - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Canonical evidence identity | OCR/media/attachment/model slices can disagree about the same source | source segments and several deterministic admission slices exist | #1350, #1353, #1397, #1419 | one source identity/provenance chain across email, thread, document, attachment, media, model result | -| Judgment explanation | model output without evidence/calibration is not defensible | grounded extractor seam exists; wider evidence pipeline incomplete | #1350 | evidence IDs, claim support, abstention, correction, verifier result, prompt/model/version receipt | -| Provider-neutral route | raw provider coupling spreads credentials and failure behavior | contextual-orchestrator boundary exists; EgressWeave integration is blocked on release | #1262, #1264 | released hash-locked adapter, route/fallback evidence, no raw secret in products | -| Scientific claim discipline | keyword labels can be mistaken for topic/event measurement | architecture explicitly says no live STM | TEPP dependency path | accepted immutable TEPP artifact/API or explicit feature absence; no lexical-as-STM claim | - -### P1 — Typed context and scheduling differentiation - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Responsive shell hydration and unavailable state | a buyer can see a polished navigation shell but no actionable content when a data request is unavailable, and hydration drift can produce inconsistent controls | local fixed-origin capture showed tablet/mobile loading feedback, desktop blank content without the backend, and a development-server caret-style hydration mismatch; this is not a hosted release result | follow-up required; keep separate from #1470's bounded lookup optimization | deterministic server/client markup, explicit desktop unavailable/error state, backend-backed responsive Playwright evidence, and no hydration warnings | -| Stacked PR current-head review dispatch | a dependent PR can show only metadata while the central OpenCode/required checks are still being materialized on a non-default base branch | #1448 exact head `068aefdf…` received a targeted scheduler/ OpenCode dispatch and then merged normally; its merge-result checks on `62a0d645…` remain queued | #1443, #1448, ContextualWisdomLab/.github scheduler | every supported stack base receives a bounded exact-head OpenCode/Noema/required-check run, with queued/provider states observable and no false merge readiness | -| Typed Person/Event/Commitment graph | generic string graph cannot safely drive high-stakes action | planning spec marks types as new/planned | #977, #978, #1000 | normalized temporal/multi-membership identities, evidence/confidence/correction on every inferred edge | -| Status-weighted scheduling | calendar CRUD does not prevent harmful double booking | CalDAV source/writeback/retry foundation exists | #978, #988, #989, #990, #1416 | confirmed/tentative/desired + organizer/attendee + recurrence/free-busy/resource end-to-end | -| Minimal-disclosure bridge | personal context can influence work availability without exposing private reason | policy substrate exists; product bridge is planned | #979, #991 | consented consequence-only propagation, revocation, audit, regression tests | -| Correct-by-exception inference | asking users to reconstruct context defeats the product mission | extractor/search foundations exist; dense-KG resolution remains incomplete | #977, #992, #1001 | one recommendation, evidence/calibration, hold/override, correction learning, no silent irreversible action | - -### P1 — Platform and ecosystem - -| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | -|---|---|---|---|---| -| Plugin lifecycle | internal extension seams do not create an enterprise platform | extractor/parser seams exist; durable custom tool mutation fails closed | #976, #1300 | signed manifest/release, tenant grant, sandbox, compatibility, upgrade/rollback/uninstall | -| Stable cross-repository contracts | copying sibling code creates a distributed monolith | several adapters are planned or dependency-blocked | #976, #1262, #1350 | released SDK/API/event/OCI contracts pinned by version/digest; no direct sibling SQL | -| Buyer administration | operators need source, connector, policy, health, retention, and support controls | settings/security surfaces exist but not one completed admin lifecycle | #998, #1428 | role-specific admin console with next-action explanations and audited high-risk changes | - ---- - -## 8. GA-1 product definition - -GA-1 is complete only when a buyer can perform the following journey on one -released, immutable product version: - -```text -install or access Naruon -→ authenticate through the supported enterprise identity boundary -→ install and enroll a signed outbound connector -→ register customer-owned mail/calendar/contact/file sources -→ verify observed source capabilities and health -→ synchronize source records with provenance -→ receive a source-cited judgment or action recommendation -→ inspect evidence, confidence, authorization, privacy, and provider impact -→ approve, hold, or correct the recommendation -→ execute an idempotent provider action with current revision protection -→ observe success, retry, conflict, exhaustion, or reconciliation evidence -→ restore, export, or migrate the tenant without losing provenance -``` - -Naruon is not GA if the demonstration substitutes mocked provider success, -process-local state, local-only credentials, predecessor-head checks, synthetic -review approval, hidden manual database edits, or an unreleased sibling branch. - ---- - -## 9. Delivery sequence - -### Wave 0 — Product truth and queue convergence - -1. Merge this baseline after exact-head documentation checks and independent - review. -2. Keep #1428 as the single completion gate. -3. Maintain the complete open-PR inventory (section 13) and classify every PR as it arrives. -4. Resolve #1371 without weakening protection. -5. Merge/close governance and stale-workflow lanes through normal protected - integration. -6. Correct README/release/version contradictions. - -### Wave 1 — GA-1 runtime and operations - -1. Finish #998 connector artifact, enrollment, capability, fleet, retry, and - reconciliation lifecycle. -2. Integrate shared send throttling (#1379/#1417). -3. Finish binary object lifecycle (#1076/#1364). -4. Complete PostgreSQL WAL/PITR/failover/restore evidence. -5. Complete OIDC/SCIM/tenant administration and privacy-safe OpenTelemetry/SLO. -6. Publish independent backend, frontend, connector, and compatibility artifacts. - -### Wave 2 — Buyer differentiation - -1. Implement typed temporal/multi-membership Person/Event/Commitment graph. -2. Complete status-weighted scheduling (#978/#988/#989/#990). -3. Complete evidence-based mail/document/media resolution (#1350). -4. Add tenant export/reimport and customer-exit evidence. -5. Run the full buyer journey and failure/restore variants. - -### Wave 3 — North-star platform - -1. Minimal-disclosure privacy bridge (#979/#991). -2. Dense-KG correct-by-exception resolution (#977/#992/#1001). -3. Signed plugin platform (#976) with one real independently released CWL - plugin. -4. Optional TEPP and other ecosystem adapters through accepted immutable - contracts. - ---- - -## 10. Release and quality gate - -### Product correctness - -- real IMAP/SMTP and DAV interoperability fixtures; -- duplicate/replay, late response, partial failure, provider conflict, connector - restart, network partition, and source-capability-change tests; -- recurrence, timezone, DST, organizer/attendee, free/busy, and resource - scheduling tests; -- full tenant export/reimport and backup/restore rehearsals; -- buyer-visible provenance completeness and unsupported-claim rate gates; -- no silent confirmed-commitment break; -- no private reason crossing a context boundary without explicit authorized - disclosure. - -### Code and documentation - -- production statement coverage 100% for owned production code; -- production branch coverage 100%; -- public API/module/class/function docstrings 100%; -- frontend component, interaction, action-edge, design-token, accessibility, and - i18n tests; -- no documentation that represents planned behavior as shipped or shipped - behavior as future work; -- ADR, PRD, TRD, architecture, data model, runbook, and standard traceability - updated with each release-relevant decision. +3. exact current pull-request source and current-head evidence; +4. open Issues and Proposed/Accepted ADRs, with Accepted status requiring landed evidence; +5. archived baseline observations, older plans, README statements, and historical PR descriptions. -### Database +Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where the change affects product behavior. -- normalized ownership and provider mappings; -- descriptive two-or-more-word `snake_case` object names; -- no direct cross-service SQL; -- bitemporal/effective-dated facts where provider state, membership, consent, - policy, or source mapping changes over time; -- tenant enforcement and hot-partition/load evidence; -- clean install, N-1 upgrade, expand/backfill/contract, rollback, and restore. +Current repository shape is **279 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical release evidence, not the target commercial immutable publication contract. -### Security and supply chain +## 2. Current commercial classification -- OAuth/OIDC threat controls aligned with the current OAuth 2.0 Security BCP; -- signed connector and release artifacts; -- digest-pinned OCI images; -- SPDX 3.0.1 SBOM; -- SLSA 1.2 provenance; -- dependency/license/vulnerability evidence; -- secret, prompt, message, event, contact, and file-content exclusion from - ordinary telemetry; -- no mutable VCS dependency in production; -- no self-modifying or broad-token workflow used to compensate for product code. +Naruon remains a production-oriented pre-GA communication and context control plane. Customer-owned mail, calendar, contact, and file systems remain source-of-truth systems. Naruon owns scoped context, policy, recommendation and intent state, provider-command/retry/reconciliation evidence, authorization boundaries, and the buyer-visible decision/action experience. -### Operations +GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Naruon is not GA merely because individual PRs have green local tests, hosted checks, high coverage, or generated release artifacts. GA requires one protected, immutable product identity that proves the full buyer journey, provider interoperability, recovery/customer-exit behavior, current security evidence, and an operable support contract. -- liveness, startup, readiness, and drain semantics per independently deployable - component; -- OpenTelemetry trace, metric, and log acceptance; -- low-cardinality label contract; -- SLO, error budget, burn-rate alert, dashboard, on-call, incident, and support - bundle; -- connector offline/backpressure and safe rolling upgrade; -- backup/PITR/failover/restore and customer-exit runbooks; -- versioned support, deprecation, compatibility, and security-fix policy. +The north-star dense knowledge graph, correct-by-exception inference, minimal-disclosure bridge, optional scientific adapters, and third-party plugin ecosystem remain later product differentiation unless a bounded GA-1 workflow directly depends on them. -### Protected integration +## 3. Current owner graph and integration gates -- one exact current head and one exact protected base; -- all live required contexts terminal-success; -- zero actionable unresolved review threads; -- qualifying independent non-author post-last-push approval; -- no bypass, self-approval, force push, dummy commit, empty requeue, or stale - predecessor evidence; -- immutable release source SHA and artifact digests recorded in release evidence. +### 3.1 Central CI/security control plane ---- +Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. -## 11. Issues established or strengthened by this baseline +- `.github#2040@12c3fa6f3623aa5f2979d3d5ee4ed987002a6c0d` is the shared CodeQL/current-head scheduler owner. It is open, Draft and non-mergeable. Exact branch and protected main diverge from merge base `fb17ef556f94f673234aa557254ae52779e9a7b0`, and both changed the shared scheduler. The next branch-moving action is ordinary/non-force **path-wise protected-main reconciliation**, not whole-file adoption or an isolated stale-side regex patch. The resolved scheduler must preserve the v2 CodeQL producer, no-restamp behavior, private-consumer read grants, repository-scoped credential routing, selected-token/workflow-token proof, exact-head stale-run revalidation, current-main queue/coalescing/capacity behavior, and the stronger repository-identity admission invariant. +- `.github#2279@25f83aaee9eb97e423f6ef2467e722035bc2e362` owns authenticated GitHub API initial-authority validation, redirect refusal, and the corrected `_GITHUB_API_OPENER.open` transport test seam. Its current Python Security, CodeQL, Runtime Quality, Semgrep, and Security runs are queued; source repair is not acceptance evidence. +- `.github#2272@4967d66f303bde675080466e359e75c260a91e06` separately owns reusable Pages caller-input shell-boundary regression and its executable CI. It is not a complete successor for the authenticated HTTP boundary unless the #2279/#2269 delta is losslessly inherited. +- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. +- `.github#2276` separately owns the observed target-repository `403 Resource not accessible by integration` boundary. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing. A GREEN selector alone does not satisfy this permission boundary. -| Issue | Purpose | -|---:|---| -| [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) | new umbrella: GA scope, release train, and buyer-visible acceptance | -| [#976](https://github.com/ContextualWisdomLab/naruon/issues/976) | strengthened: signed plugin SDK, registry, permissions, compatibility, sandbox, lifecycle | -| [#978](https://github.com/ContextualWisdomLab/naruon/issues/978) | strengthened: typed Event/Commitment model, iTIP/CalDAV scheduling, free/busy/resource, conflict and privacy contract | -| [#998](https://github.com/ContextualWisdomLab/naruon/issues/998) | strengthened: installable connector, enrollment/identity, protocol capability, reconciliation, OpenTelemetry/SLO | +No Naruon PR may copy these central workflow implementations. Consumers wait fail-closed for released/protected owner evidence and then ordinary-restack onto that contract. -Existing linked implementation and blocker issues remain authoritative for their -bounded scopes, including #1022, #1076, #1229, #1262, #1324, #1350, #1371, and -#1379. +### 3.2 Frontend dependency-security owner ---- +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) is the canonical frontend dependency-security owner at exact head `509be4c1d9b6c7ba239a108656e2382681a85341`. That generation has six repository-local workflows GREEN and exact-head CodeRabbit approval with no unresolved review thread. Later #1718 Trivy evidence used a newer vulnerability database and found protected-base `next`/`sharp` debt that #1623's source already repairs. Therefore the old Security receipt is valid historical evidence for its generation but not proof against the later database generation. After central reconciliation and protected-base movement, reacquire the invalidated current-base/current-database evidence before integration. -## 12. Standards and research traceability +### 3.3 Workspace and migration lineage -The following standards are not decorative references. They define protocol, -security, accessibility, observability, or supply-chain acceptance tests in the -issues above. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry / historical document-migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Its authoritative migration line is: -For the DiskSage boundary specifically, PROV-O supplies the provenance -relations, DCAT supplies catalog/dataset/service discovery terms, OpenLineage -supplies run and facet vocabulary, and NIST SP 800-209 supplies storage -protection and recovery controls. The implementation must keep these as -metadata relationships and receipts; a provider upload or local path alone is -not an eviction or lineage claim. +`0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` -### APA 7th references +The source repairs the known ownership RED, but final PostgreSQL fresh/historical execution and CI/security/review evidence remain blocked on the normal prerequisite line. No downstream feature may create a parallel Alembic head from protected `develop`; descendants must adopt the then-current canonical protected migration head. -Crispin, M. (2003). *Internet Message Access Protocol—Version 4rev1* (RFC -3501). RFC Editor. https://doi.org/10.17487/RFC3501 +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) is correctly stacked on #1503 for opaque-ID backfill entropy and remains Draft. The repair changes only missing UID generation to PostgreSQL `gen_random_uuid()` while preserving public identifier shape. It does not rotate existing identifiers or treat opacity as authorization. -Daboo, C. (2010). *iCalendar transport-independent interoperability protocol -(iTIP)* (RFC 5546). RFC Editor. https://doi.org/10.17487/RFC5546 +### 3.4 Generated provenance lanes -Daboo, C. (2011). *vCard extensions to WebDAV (CardDAV)* (RFC 6352). RFC -Editor. https://doi.org/10.17487/RFC6352 +Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. They are zero-effective-delta or canonical-tree descendants after ordinary/non-force reconciliation. Their checks and reviews do not transfer to the actual owner. -Daboo, C., Desruisseaux, B., & Dusseault, L. M. (2007). *Calendaring extensions -to WebDAV (CalDAV)* (RFC 4791). RFC Editor. https://doi.org/10.17487/RFC4791 +The recurrence itself is a control-plane Gap: once a generated branch is reconciled to provenance, its writer should become terminal/read-only or new generated work should perform semantic owner-overlap detection and route to the canonical owner before product source is rewritten. Source-neutral `trigger CI` commits are not acceptance evidence. -Daboo, C., & Desruisseaux, B. (2012). *Scheduling extensions to CalDAV* (RFC -6638). RFC Editor. https://doi.org/10.17487/RFC6638 +## 4. UI, localization, and OIDC interaction state -Daboo, C., & Quillaud, A. (2012). *Collection synchronization for Web -Distributed Authoring and Versioning (WebDAV)* (RFC 6578). RFC Editor. -https://doi.org/10.17487/RFC6578 +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) is the bounded OIDC pending-feedback owner at exact head `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. An intervening generated rewrite removed the rendered regression and doctoring; ordinary child `85e312...` restored the reviewed tree without force-push. The effective delta is exactly `SettingsLayout.tsx`, the rendered pending-feedback test, and its doctoring record. -Gellens, R., & Klensin, J. (2011). *Message submission for mail* (RFC 6409). -RFC Editor. https://doi.org/10.17487/RFC6409 +The rendered jsdom contract proves per-action pending state, native duplicate-click prevention, `aria-busy`, spinner/visible pending copy, success cleanup, rejected-logout cleanup, and error surfacing. Exact-current Application CI, Bandit, Docker, Security, Semgrep, and CodeQL runs are still queued. Real-browser keyboard/focus/touch/assistive-technology, responsive screenshots, and qualifying independent current-head review are absent. -Jenkins, N., & Newman, C. (2019). *The JSON Meta Application Protocol (JMAP) -for Mail* (RFC 8621). RFC Editor. https://doi.org/10.17487/RFC8621 +Canonical localization Gap is [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731). It owns a product-local **UI Localization Catalog** for KO/EN/JA/ZH/VI/ES/DE/FR with these invariants: -Lodderstedt, T., Bradley, J., Labunets, A., & Fett, D. (2025). *Best current -practice for OAuth 2.0 security* (BCP 240; RFC 9700). RFC Editor. -https://doi.org/10.17487/RFC9700 +- stable `(screen_key, message_key)` product identity; display text is not identity; +- normalized PostgreSQL message definitions, immutable translation revisions, immutable published resource versions, and version bindings; +- publication fails if any active message lacks one of the eight required locales or violates placeholder schema; +- screen-scoped read/cache API with resource version and ETag; no whole-product browser catalog and no heavy browser i18n runtime as a prerequisite; +- UI translation authority remains separate from ontology/concept-label authority; +- browser/runtime credentials are read-only; publication is a short operator/content-governance transaction after drafting/review work; +- locale-specific Storybook and real-browser acceptance covers CJK line breaking/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, responsive layouts, keyboard/focus/touch/a11y, and no hydration locale flash. -Melnikov, A., & Leiba, B. (2021). *Internet Message Access Protocol (IMAP) -version 4rev2* (RFC 9051). RFC Editor. https://doi.org/10.17487/RFC9051 +#1731 must not create a parallel migration line. Its implementation owner is created only after #1503's canonical migration ancestry is protected or completely succeeded, then it adopts the current migration head. #1729 consumes the released screen resource only after that owner exists. -OpenSSF. (2025). *Supply-chain Levels for Software Artifacts specification, -version 1.2*. https://slsa.dev/spec/v1.2/ +**Current UI Delivery Gate for #1729: FAIL.** Intent is PASS; functional completeness and resilience are PARTIAL; multilingual content and buyer-visible exact-head evidence are FAIL. No completion claim is permitted yet. -OpenTelemetry Authors. (2026). *OpenTelemetry specification, version 1.60.0*. -https://opentelemetry.io/docs/specs/otel/ +## 5. LLM and cross-repository contract boundary -Elkady, H. (2026). *Anti-Slop UI: A Deterministic State-Machine Architecture -for Eliminating Design Hallucinations in LLM-Generated Interfaces*. Local Over. -https://local-over.github.io/Anti-Slop-UI/research_paper.pdf +All Naruon model-backed production work consumes the released `contextual-orchestrator` API/client/schema through an Agent boundary. Actions request `orchestrator/free` through the gateway token only; they do not hard-code provider/model/group or paid fallback. -NextLevelBuilder. (2026). *UI/UX Pro Max skill* (Version 2.5.0) [Computer -software]. GitHub. https://github.com/nextlevelbuilder/ui-ux-pro-max-skill +Current `contextual-orchestrator` protected main is `afad3e90caac73d5b94eb68f70953b5589a01008`, but its GitHub Releases inventory is empty. Therefore protected `main` is not a released consumer identity. Naruon must keep any production path that requires an immutable CO API/client/schema release fail-closed until the owner publishes one and the consumer pins that released identity. No source copy or mutable-head dependency is accepted. -Storybook. (n.d.). *Accessibility testing*. Retrieved August 21, 2026, from -https://storybook.js.org/docs/writing-tests/accessibility-testing +## 6. Buyer-visible P0/P1 Gap baseline -Storybook. (n.d.). *Interaction tests*. Retrieved August 21, 2026, from -https://storybook.js.org/docs/writing-tests/interaction-testing +| Priority | Gap | Current boundary | Completion evidence | +| --- | --- | --- | --- | +| P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Central CI/security acceptance | central scheduler and authenticated HTTP/GHAS permission lanes remain Draft/queued | reconciled protected-main exact head, terminal central checks, independent review, real cross-repository canary | +| P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate canonical fixed source against then-current base and vulnerability database after central integration | +| P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | +| P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | +| P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | +| P0 | Connector/provider operability | protocol/writeback/retry foundations exist; full released connector lifecycle remains incomplete | signed installable artifact, enrollment/rotation, capability health, idempotent reconciliation, support evidence | +| P0 | Recovery/customer exit | historical baseline records partial backup/object/portability work, not one buyer round trip | restore/PITR and tenant export→clean-import rehearsal preserving provenance/authorization | +| P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish contract + locale Storybook/browser/a11y acceptance | +| P1 | OIDC pending UX | #1729 rendered jsdom repair exists but hosted/browser/multilingual evidence is incomplete | exact-head terminal checks/review + browser/AT/responsive evidence + released locale resource consumption | +| P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | +| P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | -SPDX Workgroup. (2024). *SPDX specification, version 3.0.1*. -https://spdx.github.io/spdx-spec/ +Rows from the archived v1.9 baseline remain useful historical evidence for connector lifecycle, object storage, recovery, provider scheduling, evidence identity, plugin lifecycle, accessibility, and release-train history. They are not silently converted into present-tense claims. Any still-open gap is tracked through its live Issue/PR owner and must be re-fetched before action. -World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines -(WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ +## 7. Performance, data, and DDD acceptance -National Institute of Standards and Technology. (2020). *Security guidelines -for storage infrastructure* (NIST Special Publication 800-209). -https://doi.org/10.6028/NIST.SP.800-209 +- DDD Subdomain/Bounded Context/Context Map and Aggregate/Entity/Value Object/Domain Service/Repository/Event/Invariant naming must match ADR, code, API, DB, and tests. +- Aggregates keep transactions minimal. No LLM/network/long computation occurs inside an explicit database transaction. Cross-service SQL is forbidden. +- New persistence uses normalized schemas, descriptive multi-word `snake_case`, explicit ownership/tenant keys, idempotent item-level UPSERT where appropriate, and read/write separation or partitioning only from measured contention. +- Applicable buyer web/API paths target realistic p95 ≤20 ms. Evidence must use real query/I/O/render/runtime conditions; no sample shrink, measurement exclusion, or unrealistic cache warm-up. +- Performance/security/data-science hot paths are Rust-first where justified by profiling and contract constraints; Python remains a documented boundary when no practical Rust replacement exists. +- Deprecation and warning output is a defect to root-cause, fix, or explicitly track; warnings are not normal release noise. -OpenLineage. (n.d.). *OpenLineage documentation: Object model, run cycle, and -facets*. Retrieved August 25, 2026, from https://openlineage.io/docs/ +## 8. UI quality contract -World Wide Web Consortium. (2013). *PROV-O: The PROV ontology*. -https://www.w3.org/TR/prov-o/ +Material UI is not complete without normal/loading/empty/error/permission states, responsive composition, keyboard/focus/touch/a11y evidence, and exact-head screenshots/E2E where the surface is buyer-visible. Storybook source-component provenance and Storybook rendered behavior are separate evidence. -World Wide Web Consortium. (2024). *Data Catalog Vocabulary (DCAT) — Version -3*. https://www.w3.org/TR/vocab-dcat-3/ +Delivery Gate: ---- +- **Intent:** every visual/copy decision maps to a buyer task or product state. +- **Functional completeness:** displayed interactions work and preserve error/recovery semantics. +- **Content:** no template filler, unsupported statistics, fake customer/security/performance claims, or generic CTA copy. +- **Resilience:** mobile/intermediate widths, keyboard focus, loading/empty/error/permission states, and long/localized text do not break the task. +- **Evidence:** assertions are tied to current source/resource identity and reproducible browser/test receipts. +- **Distinctiveness:** product information architecture and interaction model remain recognizable without relying on generic AI gradients/cards/glass effects. -## 13. Live open-PR identity inventory +If one required axis fails, the material UI is not complete. -This table was generated from a live GitHub pull-request collection whose -response was captured at `2026-08-25T00:26:45Z`. It records every currently open Naruon -PR's immutable head, -base, draft state, authority cluster, stack parent reference, and provisional -disposition. Review decisions, unresolved threads, mergeability, and Checks are -volatile and must be fetched again for the exact head immediately before any -merge; GraphQL rate-limit failures are not treated as approval or success. +## 9. Release gate and next causal order -The 102-row inventory is a fresh refresh later than baseline v0.2's 93-row -snapshot captured at `2026-08-21T19:25:43Z`: PR #1337 merged into protected -`develop` at `2026-08-25T00:10:39Z` and PRs #1449–#1463 opened since that -observation. The v0.2 93-row snapshot, the earlier 92-row snapshot taken -after PR #1442 merged, and their exact-head observations remain historical -and are retained in baseline v0.2 and in git history for audit -traceability. The self-row reflects the head observed at scan time and may -trail this document's own commit; all review decisions, Checks, and -mergeability still require a live exact-head fetch before merge. -Base-SHA columns record the protected-branch tip each row was scanned -against (`develop@81c10564...` for rows captured before PR #1337 -merged; `develop@e5e99b4e...` for rows captured after). A few older rows -retain `develop@dd8d1519...` from an earlier scan window; that value is also -historical scan provenance, not a second claim about the current protected -branch. These values are therefore not one shared base declaration. +Current **Merge/Release Gate: FAIL**. -| PR | Title | Exact head SHA | Base ref and SHA | Draft | Authority cluster | Stack parent ref | Disposition | Next action | -|---:|---|---|---|:---:|---|---|---|---| -| 1463 | 🎨 Palette: 비동기 작업 버튼의 로딩 상태 시각적 피드백 개선 | d0f51274dc86271e365aa1384e1362daf93f1d7d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1462 | feat: 신규 유틸리티 도구 3종 추가 (URL 인코더, URL 디코더, 해시 생성기) | dba144b01be8a7e332c9fc7b390e1d9b105536c4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1461 | chore(deps): bump the ci-python group across 1 directory with 86 updates | f012853e6123017c290a7782cc7cf8e4801e4bb7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1460 | chore(deps): bump the backend-python group across 1 directory with 64 updates | dec4329986b261607204c0711d62f3bcd782d181 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1459 | chore(deps): bump the frontend-npm group across 1 directory with 14 updates | 3edb8320b0288f2bba54ce7e28083164e0d51966 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1458 | chore(deps): bump the github-actions group across 1 directory with 3 updates | f7099f951574a01f1333cb72a5e48ac91e7f4ea5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1457 | chore(deps): bump the docker-base-images group across 1 directory with 2 updates | 245c8f1d2177e451e9812525ef6bbd7db9be3e6e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1456 | 🎨 Palette: 이메일 상세 화면 UX 밀도 개선 | 20b1c7f4798343d6949ab57ee9ab015d928b04bf | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1455 | 🛡️ Sentinel: [HIGH] 첨부 파일 파서의 경로 탐색 취약점 수정 | 40c5b7087a92a23eba787682fe32604861a9474b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1454 | ⚡ Bolt: Optimize NetworkGraph edge description lookups to strictly O(1) | 9cb7883cd0a41b9634f4f74e77f3595d754ab7e7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1453 | 🎨 Palette: SettingsLayout 비활성화 버튼 접근성 툴팁 개선 | eef7e8d2eb25199afeb13c6b8a24f0f73bbd0fe5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1452 | 🎨 Palette: 비활성화 버튼 접근성(Tooltip) 개선 추가 | ad32c8d35c11a76f52e189d7a5e83fb74fb603df | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1451 | feat: 텍스트 유틸리티 도구 추가 및 테스트 보완 | a2a20e3eb14bb65fab8ee2f2f9199dd76dd71bce | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1450 | chore: remove stray scratch/debug files committed to develop | 7d1f57a83a34312bea265ae3095bc67ff4e0493e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1449 | 🎨 Palette: 데이터 저장소 버튼 액션 로딩 UX 및 접근성 개선 | 90248b26fff37f395c6918525c4eef041d683e09 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1448 | test(governance): exercise multiline CodeRabbit pending notice | 874c098548e6794217393e0338074ba2f292d080 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1443 | fix: ignore CodeRabbit approval pending notices | 41e48413cffefa8a5393d6af1d5ad16be3c5de7c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1441 | 🎨 Palette: [UX 개선] 메일 상세 고밀도 컴포넌트 추가 | ce6ff8f26e4cfdc76be7d667c7b159c57f8e0ac5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1439 | ⚡ Bolt: 프론트엔드 O(N) Array.find() 룩업을 O(1) Map 룩업으로 성능 개선 | 68106d13175d7ff67978de66e31d385237ca53b1 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1438 | fix(governance): supersede stale review decisions safely | 5cc9ca3348575931b5d2ec35d1277436d1eece63 | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1436 | feat(frontend): add Storybook UI inventory | becc4e9e56bb30e511e812e8c66b19d094b28de0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1434 | fix: accept DiskSage cloud-readiness schema 7 | 85e3eb43f9a7c3e87848df1307549d4efd3d29de | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1433 | fix(security): reject ambiguous Message-ID whitespace | 0d71272d6ec5420afefa98cd5ae57b91efc31007 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1432 | fix(compose): harden optional pg-llm-batch database | e3dbed9a0d4e08348f94d26de09a2fabbdcfa96b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1431 | test(core): cover operator env path resolution | e058f8c6e50256194d19be617f8df54f60bd1c27 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1430 | 🎨 Palette: 키보드 내비게이션을 위한 focus-visible 스타일 추가 | 49fc3eabd8e94a95dee2af3c1254c4d46a294399 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1429 | docs: establish Naruon product completion gap baseline | 5a72475506e8ec76692abfa233f3205c645568eb | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1427 | fix(data): align PDF DOM upload budget with sidecar | 29be15e4ec5e29dc1f62ac636928c9307a6f520f | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1426 | fix(governance): wait on stale aggregate review state | 5cc148e1f2f84d1afcd2d3cf3dabaade616c01d0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1424 | ⚡ Bolt: [성능 개선] 네트워크 그래프에서 O(N) 노드 라벨 조회를 O(1) Map 조회로 대체 | 32c7edc11fd6faf8ae6918dae8b00de7c5c0b773 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1421 | 🎨 [UX] 설정 화면 장식용 아이콘에 aria-hidden 추가 | 719c1b347aae52e77ae7e40b0eb60769fd7178cb | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1420 | feat: URL 코덱 및 엄격한 JSON 포매터 추가 | bf7b741ea0b73a146ce9bcd323ca621c1562cb4e | develop@dd8d15191338b841f9e6f3a06507c6a5643b95d0 | yes | other | — | experimental/draft | validate parent and promote only after scope proof | -| 1419 | feat(attachments): index common image metadata | a0f5e03107e6ec3e85eea029bb11c8c8e784b907 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1418 | feat(tools): add auditable URL and contact hygiene | 19adb3e74c66837c5fb2d0a11a7ac030bbbfe3c4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1417 | fix(email): enforce shared send throttling | 69fb72d30c71ab7a9c2c6e09413292a05278148d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1416 | fix(calendar): allow provider-backed create writeback | d8b3df7d19def826a5b92abbcaec043377ceb3a4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1415 | fix(auth): select OIDC signing key by kid | e0a1f166221790e7ba4f0df37b328ac3cb896092 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1414 | fix(governance): refresh gate after OpenCode review | df1642c473011e935ab7501f4012fb58b8d06e21 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1412 | ⚡ Bolt: [성능 개선] tools 배열 탐색을 Map 기반 O(1)로 변경 | b5032d7fb428189da86c10221d58d093d3abcc6e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1411 | 🎨 Palette: 검색어 지우기 ARIA 라벨 통일 | 6369e91f2f10ed9b6b436a41a08d89b7aedf9008 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1410 | 🎨 [OIDC 로그인/로그아웃 버튼 로딩 상태 및 접근성 개선] | fac7a5377bd7c5bc7bde89a6f0f05b3fd2c47632 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1408 | fix(a11y): expose keyboard focus on AI Hub tabs | cda57c26e75788eaa350d0faeb898349818da074 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1407 | feat(mail): fail-closed Inkspan edit handoff for recognized HWPX | 22e4909dd13623190f61eae47baf74d70fa2b83a | cursor/mail-hwpx-attachment-preview-7b5e@b83a0da03b46a447f9710b5f91d245f5b1783dfa | yes | ingest/storage | cursor/mail-hwpx-attachment-preview-7b5e | experimental/draft | validate parent and promote only after scope proof | -| 1406 | feat(mail): open recognized HWPX text from email attachments | b83a0da03b46a447f9710b5f91d245f5b1783dfa | cursor/hwpx-recognized-text-preview-b246@f21811379c1cc2435eadb41bb2746b4887947d53 | yes | ingest/storage | cursor/hwpx-recognized-text-preview-b246 | experimental/draft | validate parent and promote only after scope proof | -| 1404 | feat(data): show recognized HWPX paragraph text in attachment preview | f21811379c1cc2435eadb41bb2746b4887947d53 | feat/hwpx-section-text-recognition@0fcf4d85dd70d4f2ee9dd0296fc454f764ae5326 | yes | security/governance | feat/hwpx-section-text-recognition | experimental/draft | validate parent and promote only after scope proof | -| 1403 | fix(oidc): fail closed on malformed token-endpoint escapes | 7a0b0e443ae31a941c5a2139a2093b1af876458c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1402 | feat(email-writing): add independent criterion Judge | 3d6b3341c5dd15512d5d60cd5f8d95a1bbc6d846 | feat/llm-email-writing-candidate-task6@fa844bd035ab1f188a28c58e0ed2dc45fa31d0f3 | yes | mail/calendar | feat/llm-email-writing-candidate-task6 | experimental/draft | validate parent and promote only after scope proof | -| 1401 | ⚡ Bolt: ProjectsLayout 인라인 배열 맵핑 렌더링 최적화 | 1221fc848a086db721ef1dde0a26eb6af77fe035 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1400 | feat(email): Slice 3 buyer-visible withheld-media next actions | db7ca961de800a514cf9bee34d324f1c5cf233bb | cursor/email-media-quarantine-persist-0ad6@ff1dc18cd9de5e06649ac516b163af2db4bbde83 | yes | ingest/storage | cursor/email-media-quarantine-persist-0ad6 | experimental/draft | validate parent and promote only after scope proof | -| 1399 | feat(email): Slice 3 persist quarantined inline media | ff1dc18cd9de5e06649ac516b163af2db4bbde83 | cursor/email-media-admission-wiring-cd1a@1af546dbb01964e9a620ed341ae0dd3dab9439fd | yes | ingest/storage | cursor/email-media-admission-wiring-cd1a | experimental/draft | validate parent and promote only after scope proof | -| 1398 | feat(email): Slice 3 wire admission so only document_image continues | 1af546dbb01964e9a620ed341ae0dd3dab9439fd | cursor/email-media-admission-slice3-c9de@5a80583bcabc22609e8677864ae86f867d85fd45 | yes | ingest/storage | cursor/email-media-admission-slice3-c9de | experimental/draft | validate parent and promote only after scope proof | -| 1397 | feat(email): Slice 3 inline-media admission and tracking-pixel classification | 5a80583bcabc22609e8677864ae86f867d85fd45 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1392 | docs: make README customer and operator focused | c0ac8c01d58473680b89a225107366fec4fae986 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1387 | fix(a11y): keep unavailable calendar actions discoverable | 37917799e8d27c07e29eeed87a52d5be41528330 | develop@dd8d15191338b841f9e6f3a06507c6a5643b95d0 | yes | frontend/a11y | — | experimental/draft | validate parent and promote only after scope proof | -| 1384 | feat(noema): route LLM through contextual-orchestrator | 0fd330137cdd19068fa8903dc70e1dc88f42cdc9 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1380 | fix(dav): land capability honesty with tomllib CI import | 658f69accc627b99e379835593c2b9e49b514d00 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1376 | fix(email): expose header-derived media pixel dimensions | aae34d0a9e7d607070bc98e7b0d03e17f607dd6c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1375 | feat(email-writing): parse contextual review candidates | fa844bd035ab1f188a28c58e0ed2dc45fa31d0f3 | feat/llm-email-writing-orchestrator-task5@9cd9b953a2dd236aebe1fcdc25e59ba3e9388505 | yes | security/governance | feat/llm-email-writing-orchestrator-task5 | experimental/draft | validate parent and promote only after scope proof | -| 1373 | feat(hwpx): recognize ordered section text with provenance | 32099709bafcee19fb32c385bbe89e0df15fe102 | feat/hwp-hwpx-attachment-recognition@70683266b93233dae62faec6cbd4df118be41383 | yes | ingest/storage | feat/hwp-hwpx-attachment-recognition | experimental/draft | validate parent and promote only after scope proof | -| 1370 | feat(supply-chain): verify locked hashes against PyPI releases | 1a6ac604e159d98631b3996eb3f74d036e4a760b | feat/dependency-lock-provenance-receipt@f6eeb69f561e94cd50ae38fb1f43faa6cd2c52d7 | no | security/governance | feat/dependency-lock-provenance-receipt | stacked-child | re-fetch exact review/check state, then fix or protected-merge | -| 1369 | feat(supply-chain): attest Python lock provenance before install | f6eeb69f561e94cd50ae38fb1f43faa6cd2c52d7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1368 | ⚡ Bolt: [성능 개선] EmailDetail 개별 메시지 컴포넌트 메모이제이션 | 5c2f048c0e9fc97545e1d6f09d1379b3ae8f8b68 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1366 | fix(threading): honor RFC 5256 References ancestry | be0237714e373052b57d73e1168087da3adfda34 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1365 | fix(containers): publish explicit split runtime targets | 43666bed6214ce724d4dc50810d9f65f3d77d3f3 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1364 | feat(storage): add scoped S3 document object backend | 3a3baa6b8dc9ea224f46395cb78c91a45be2090c | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1363 | fix(governance): audit orphaned Actions workflow identities | 48593a1cab22cca86e2dbfb7e6d5cb89cf298f3c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1361 | feat(tools): add bounded content checksum generator | 5859a8f3f5e9dddf20a43313b53d7aa6453f8cd7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1356 | feat(email-writing): add hardened contextual-orchestrator boundary | 9cd9b953a2dd236aebe1fcdc25e59ba3e9388505 | feat/llm-email-writing-context-task4@4570747ccebd57ccaab30ffc68239f0c9d2f1ca0 | yes | mail/calendar | feat/llm-email-writing-context-task4 | experimental/draft | validate parent and promote only after scope proof | -| 1355 | fix(email): preserve deterministic descending thread order | fddc883ca2911c138bd9fcc3a9bd8257e1036124 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1354 | feat(ui): add Storybook design-token contract | 84edbbf152d257cd05777bf0b007fcfec2ac1d18 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1353 | feat(attachments): recognize HWP and HWPX parser boundaries | dd501dae0fc03d813f4a65aa21318cc89d1a193c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1352 | fix(a11y): expose async button busy states | 8b7731da7063c39651aa9e3debfaa2052c476c35 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1349 | docs(product): define evidence-based workspace task contract | 559d091a9a75d8e79ab9608c04931c5a1e82e173 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1347 | fix(governance): reject rate-limited review status as semantic evidence | cd973fc364efb8d150786f4c2bceec54187eb806 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1345 | fix(dav): reject ambiguous nested authorization encodings | 07954b2e4d402fa2fd1e9775c52ec6b9483de52d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1339 | fix(host-policy): normalize dotted bracketed IPv6 safely | 44b65cac131ab5c4be25cfdebc026c4a1cf3bc35 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1333 | feat: persist DiskSage file lineage ontology | 017cdef392385571acfc5abc177882724d6026b9 | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1332 | feat(email): surface calendar writeback If-Match conflicts | d53598dc7e45b470907fd97dffb9d64e954f2731 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1329 | feat(email-writing): build authorized thread context | 4570747ccebd57ccaab30ffc68239f0c9d2f1ca0 | feat/llm-email-writing-review-evidence-task3@51fb5e8543247b1e5c790f3fdf98424c8fbed669 | yes | security/governance | feat/llm-email-writing-review-evidence-task3 | experimental/draft | validate parent and promote only after scope proof | -| 1328 | feat(email-writing): persist privacy-minimized review evidence | 51fb5e8543247b1e5c790f3fdf98424c8fbed669 | feat/llm-email-writing-contracts-task2@fb7c406ee1328a6ac42dbaf54bb6852c199d8b0a | yes | security/governance | feat/llm-email-writing-contracts-task2 | experimental/draft | validate parent and promote only after scope proof | -| 1327 | feat(email-writing): define strict review contracts | fb7c406ee1328a6ac42dbaf54bb6852c199d8b0a | feat/inkspan-email-writing-guide@bfc2df112136bb9fe358778d701e78bf9e78b685 | yes | security/governance | feat/inkspan-email-writing-guide | experimental/draft | validate parent and promote only after scope proof | -| 1322 | docs(adr): design Inkspan-based LLM email writing guidance | d943203afc0afae0c9a6190681675f4d30dcf257 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1321 | fix(auth): require issued-at in Keyverse OIDC sessions | d06eff3875543b1afa28570f9269571a63a81983 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1320 | fix(calendar): expose proposal context to screen readers | 1a9afa0cf845a49db4c2eb2372f9f36eaf4c8c4e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1317 | feat: harden live macOS runtime and governance | 25d80197ee0eb8cb2aafc7d205ac7b98ccccba0c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1302 | fix(tools): remove canned source-derived tools | 2ee0c65097c78a99849fc749a3a848440c50271c | fix/remove-unsafe-phishing-detector@646a2401de35529425163fdefa7ad5e6355c349f | yes | other | fix/remove-unsafe-phishing-detector | experimental/draft | validate parent and promote only after scope proof | -| 1301 | fix(tools): remove unsafe phishing detector | 646a2401de35529425163fdefa7ad5e6355c349f | fix/fail-closed-tool-mutations@67dbfddb01bacb604a0533ce486a550115ff0d64 | yes | other | fix/fail-closed-tool-mutations | experimental/draft | validate parent and promote only after scope proof | -| 1300 | fix(tools): fail closed on unsafe global tool mutations | 7ea4bad69cf36acb9c8fbca48d32333907cce55f | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1288 | test(email): consolidate thread identity and folder visibility coverage | b7db9a316162a70bf8e594faf4f2e73766d9dc6c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1287 | 🧪 테스트: runtime_secrets.py의 build_encryption_keyring 누락된 테스트 추가 | 4de4f5d5850baf1abc05203f204c489650ba9624 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1284 | test(pdf): cover pending document decode success | 68da2a53084751361f6332ca4f3fe82c34443964 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1280 | test(search): cover configured fusion settings | 89742939fe8b9a9a33a9018d6863050f5c7a7fc7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1279 | test(tools): consolidate webhook validation and execution coverage | c6a50e97b7742a7172d80de01159516796d4d1a0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1277 | test(core): cover connector scope statement | aa04c9392c86c29fd39cae80149fbbd02681cff8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1267 | perf(mail): memoize email list element mapping | 8fccadb727ac54a81422642022ccc2b31723bab9 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1264 | integration: route LLM egress through EgressWeave | 5a46a85f75dfae94dd8c1f8df0b88150b40ab3c8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1257 | chore(deps): update connector websockets to 17.0.1 | 4613ff5a1a85e4882af1a3a4abd0e56b3b574187 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1245 | fix(email-detail): make responsive evidence actions functional | 796b34c5a1322f09c6f00b8cf24591ae04b89b6b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | yes | frontend/a11y | — | experimental/draft | validate parent and promote only after scope proof | -| 1244 | chore(deps): update hash-locked aiohttp to 3.14.3 | c1d4c7fd2b98e464d3ff7e92f26d92a6c0f1e6e8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1241 | fix(a11y): show keyboard focus on OIDC actions | fb7e63dee1d72365db595edb1bc49e097202e707 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1206 | fix(security,api): opaque prompt IDs and CardDAV single-decode | d7ae4768b7c30be7bac19fb9425d40a66e8fda05 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | -| 1195 | feat(email): deterministic dedupe provenance — gate strong fingerprints on genuine Date (naruon#1086) | c7aedc6a6a09bc91156e9c62e44f18cf8b4d3846 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +The current causal order is: -The inventory is intentionally identity-first: +1. converge the central authenticated-HTTP / Pages / GHAS capability and permission lanes without losing valid owner deltas; +2. perform #2040 ordinary/non-force protected-main path-wise reconciliation and acquire fresh exact-head central GREEN + qualifying independent review; +3. prove the unchanged external authenticated dispatch/GHAS canary; +4. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; +5. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; +6. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +7. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; +8. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. -It represents the 2026-08-25 102-row refresh described above, which supersedes -the v0.2 post-#1442 93-row snapshot as current evidence while that snapshot -remains historical context: no review body, credential, -customer data, or copied provider payload is stored in this document. A parent -merge or head movement invalidates the affected row and requires regeneration. +No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. -### Exact-head check observations +## 10. Standards and traceability additions -The following failures were also read from the live Checks API during this -snapshot and are retained as RCA pointers, not as reusable merge evidence: +Current localization and accessibility work maps at minimum to: -| PR | Exact head | Check/run evidence | Observed cause or disposition | -|---:|---|---|---| -| #1347 | `3f6932026fbef281a373d792518058e4aaf5178f` | Strix run `32440010004`, job `96648648553` | provider/model infrastructure returned NVIDIA NIM 404 and no complete Strix report; rerun after the central fail-closed workflow repair, without weakening the gate | -| #1442 | `94e10a6188a1b96ac162fa659ae4025bc00895bd` | metadata gate `96719432050`; merged `2026-08-21T09:18:28Z` | historical pre-merge observation only; the post-merge 93-row inventory excludes this PR | -| #1443 | `62a0d645b619bcd2eac8f0db87460c5c1990d128` | new parent-head Checks queued; predecessor Strix job `97705801302` | child #1448 merged normally into this stack branch, invalidating all predecessor-head evidence. The prior provider failure was NVIDIA NIM HTTP 429 with unavailable fallback/direct OpenAI 404; current head requires fresh Checks and qualifying approval | -| #1448 | `068aefdfa48122bc73cb85a1dc23614bb09ebc04` → merge `62a0d645b619bcd2eac8f0db87460c5c1990d128` | merge-result Checks queued; Devin passed on PR head | normal stack merge at `2026-08-25T15:31:39Z`; local governance and parent synchronization tests passed. Delayed merge-result Checks are being tracked and are not represented as successful hosted evidence | +Phillips, A., & Davis, M. (2009). *Tags for identifying languages* (BCP 47; RFC 5646). RFC Editor. https://doi.org/10.17487/RFC5646 -Queued or pending Checks are not treated as source failures, and completed -predecessor-head evidence is never reused. +Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC 9110). RFC Editor. https://doi.org/10.17487/RFC9110 ---- +World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ -## 14. Claim boundary +The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. A new implementation must still bind the cited standard to exact code/API/test evidence rather than cite it decoratively. -This baseline is a product and technical decision record, not a certification, -security attestation, market valuation, or claim that Naruon is already GA. +## 11. Claim boundary -The existence of 100% coverage gates, many PRs, or detailed documentation does -not itself demonstrate commercial completeness. GA is demonstrated only by the -end-to-end buyer journey, current exact-head protected integration, released -artifacts, provider interoperability, recovery/customer-exit evidence, and -operational support contract defined here. +This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. \ No newline at end of file diff --git a/docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md b/docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md new file mode 100644 index 000000000..3c85e9d25 --- /dev/null +++ b/docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md @@ -0,0 +1,1146 @@ +# Naruon Product and Technical Gap Baseline + +## 2026-09-12 current owner and stacked-delivery evidence + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the +canonical frontend dependency-security owner. RED +`8175f7f04a8624a681a509eb8b446c7a3ff7bd5d` raised the Nano ID 3.x security +floor to `3.3.19`; GREEN +`9d6d1e09e1ad52e57a1a3162c9984cceea4b2cb8` synchronizes the workspace +override, package and snapshot lock records, regression contract, and +CHANGELOG. Exact tree `d99f83fc482ba948271f45ae2f7251036dd190ad` +passed **21** focused security contracts, the full backend (**1,826 passed / 33 +skipped**), frontend (**51 files / 437 tests**), frozen install, ESLint, +TypeScript, and the 16-route production build. Hosted Application CI, Security, +Semgrep, Bandit, and Docker are GREEN. CodeQL run +`34695440148` failed its first admission because every shard read the +authenticated exact-head verdict as pending; dispatch succeeded and explicitly +owns rerunning those exact failed jobs after terminal publication. This is +workflow orchestration state rather than a SARIF source finding. The moved head +has no qualifying independent approval, so the owner remains Draft and is not +merge-authorized. + +[#1672](https://github.com/ContextualWisdomLab/naruon/pull/1672) is now stacked +on that exact owner rather than carrying a second dependency diff. Its exact +head `f826fde79b107794a7391788c30545875cc5083f` has tree +`9f655a2b21e8beca74f2ab7efa955129522c5e3c`; concurrent security commit +`5f480d641b49ed3dff585881806e75aa1f926046` remains a merge parent. Review +repair RED `7d883377` / `8c79903b` to GREEN `8660aff5` / `119f46cf` applies +descriptor defaults before validation, rejects non-standard JSON constants, +and strips only unmatched terminal URL closers with ordered delimiter pairing. +All three review threads are resolved. The final tree passed **94** focused +tool/security tests, the full backend (**1,835 passed / 33 skipped**), frontend +(**51 files / 437 tests**), frozen install, ESLint, TypeScript, and the 16-route +build. Its exact-head Application CI, Security, Semgrep, Bandit, and Docker +workflows are GREEN. CodeQL run `34695737370` is terminal RED and remains an +owner-orchestration gate rather than positive source evidence. URL extraction (#1496), +hash generation (#1538), and strict JSON formatting/validation (#1659) remain +overlapping Proposed owner lanes, so #1672 stays Draft until each unique delta +has verified owner adoption; review repair is not DDD ownership or merge +evidence. + +The following live lanes refine the delivery gap without moving their product +truth into this ledger: + +| Live owner lane | Exact topology and validated delta | Current delivery boundary | +| --- | --- | --- | +| [#1662](https://github.com/ContextualWisdomLab/naruon/pull/1662) NetworkGraph | base `#1623@17a7618`, head `d82e722dbf1b8b485d533056409bd91689a03b5f`; three-file bounded-prefix traversal and regression scope | Draft and currently non-mergeable; no exact-head PR workflow run. The source-level CodeRabbit review is not a formal current-head approval. | +| [#1659](https://github.com/ContextualWisdomLab/naruon/pull/1659) strict JSON formatter | base `#1623@17a7618`, head `fbcbd5444241cd025b21d96faa8ca8130c983da9`; RED `0845687e` to causal output-budget fix `cea8b279` plus code-current doctoring | Draft; no exact-head PR workflow run or qualifying current-head approval. The stale parent must be ordinary-restacked before merge. | +| [#1667](https://github.com/ContextualWisdomLab/naruon/pull/1667) Sentinel guidance | base `#1623@17a7618`, head `695c242d241dd3a4c03046b44486ce93ef59af6f`; sink-backed filename-finding guidance, regression, and doctoring only | Draft and currently non-mergeable; no exact-head PR workflow run or qualifying approval. The stale parent must be ordinary-restacked before merge. | +| [#1587](https://github.com/ContextualWisdomLab/naruon/pull/1587) local stacked-PR CI | base `develop@042b0c7`, head `17c0a5c9198eeda95f6a7d86f6a35a8b05abe774`; stale release-governance assertions were repaired after a real hosted RED | Application CI, Bandit, Docker, and Semgrep are GREEN; Security and CodeQL remain terminal RED. Draft and not merge-authorized. | +| [#1600](https://github.com/ContextualWisdomLab/naruon/pull/1600) full-product evidence | base `#1587@17c0a5c`, head `d23a6899a62162a766a00b16a80441c9bcdc969a`; six-file child retains source-head-bound product evidence | Application CI, Bandit, and Docker materialized and are GREEN on the stacked base. Missing same-head Security/CodeQL/review evidence keeps the lane Draft. | + +These rows also expose a reusable failure mode: children based on predecessor +`#1623@17a7618` do not inherit the repaired dependency owner +`#1623@9d6d1e0`. Ordinary restacking and new exact-base/head evidence are +required; predecessor execution and approvals do not transfer. + +## 2026-09-12 frontend security owner single-writer repair + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the +canonical frontend dependency-security owner. Concurrent commit `4e66036b` +wrote its maintenance evidence into this ledger from the dependency branch and +identified predecessor `5487141...` as its current head. That was both a +single-writer violation and stale exact-head evidence. + +Non-force repair `d8327d4904f38588b6b6883338aafb575256a19b` restores the +protected-`develop` ledger blob on #1623 while preserving every dependency and +regression-test commit in ancestry. Its resulting tree is +`5d80c6927cac1678a31e7fbab24e68a0d541fef0`; the PR comparison contains seven +intended owner paths and no longer includes this ledger. Focused frontend +security contracts pass **20 tests** with warnings as errors, and exact-head +Application CI, CodeQL, Security, Semgrep, Bandit and Docker runs were recreated +after the repair. They and a qualifying independent review remain pending, so +no merge or release is claimed. + +## 2026-09-12 Reply-SLA conflict-code evidence + +This observation records the current candidate from +[#1670](https://github.com/ContextualWisdomLab/naruon/pull/1670) without +transferring predecessor Checks or claiming protected integration. Exact head +`e17bbc27040ddeb4e1de6e12815f5aa74a5c9672` has tree +`820fc29c93f3ba23518d18c9619c9dc93776db10`, byte-matched to the locally +verified tree. + +| Observed product/technical gap | Canonical owner action | Current status and required evidence | +| --- | --- | --- | +| Reply-SLA contention reasons existed only in exception prose while the HTTP 409 boundary independently returned one generic code | #1670 now carries stable `ReplySlaTaskConflict.error_code` values for unresolved duplicate races, exhausted batch retry budgets, and source emails that leave the caller's scope; the API preserves the specific code while retaining customer-safe explanatory copy | RED commits `fc68fa5` and `df1ff2d` produced **5 failed / 18 passed** and a separate API failure; GREEN `346c293` plus complete-CHANGELOG restoration `e17bbc2` passes **23** transaction tests with warnings as errors and **47 passed / 1 skipped** across Tasks API and reply tracking. Scoped Ruff, compileall, diff checks and exact tree comparison pass. Exact-head hosted checks, real async PostgreSQL qualification and independent approval remain required. Inherited Trivy findings remain owned by [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623); no ignore or gate weakening is included. | + +## 2026-09-08 visual evidence: smoke success is not product acceptance + +This observation supplements the historical inventory below. PR +[#1599](https://github.com/ContextualWisdomLab/naruon/pull/1599) built source +`877f0d5c1b96c3ac212ecc86630afb75532f5880` and ran the same implementation +through test descendant `af4df216b3533ebb82dab9d361b415ddb941fa24`. +The production build and mocked browser smoke exited zero across ten routes at +1440×1024 and 390×844, and all twenty PNGs were directly inspected. The +[inspection receipt](https://github.com/ContextualWisdomLab/naruon/pull/1599#issuecomment-5578964200) +records scope and observed defects. It does not prove live provider writes, +real backend contracts, every locale, deployment, or complete accessibility. +PR #1600 then retained the same ten-route desktop evidence from hosted +Application CI run `34189161122` for exact head `d30f0b7c`. Direct inspection +confirmed that artifact creation succeeded while the customer-facing defects +below remained visible; a green smoke job is therefore evidence availability, +not visual acceptance. + +| Observed customer gap | Canonical owner action | Acceptance evidence still required | +| --- | --- | --- | +| Home exposed English skip-link and `source-linked` | #1578 owns customer status copy; #1601 owns keyboard navigation copy | Merge both successors normally, then repeat keyboard-focused desktop/mobile inspection on the deployed product | +| Search displayed raw source/thread identifiers, `sender_context`, `reply_count`, API/Ontology labels, and machine action codes | [PR #1603](https://github.com/ContextualWisdomLab/naruon/pull/1603) retains scoped identifiers in requests/state while replacing visible plumbing with relationship, action, and mail-flow outcomes; exact head `462b134acf858061019d3ffe37b7b3d60e6f7e74` normalizes production `Colleague` casing, translates all four production action codes, and fails closed to neutral customer copy for unknown values | Full Vitest passed 51 files / 447 tests; scoped ESLint, TypeScript, diff checks, Application CI, Bandit, Docker validation, Security, Semgrep, coverage evidence/source, Strix, and GitHub Advanced Security CodeQL are GREEN. Required compatibility CodeQL remains failed on the central terminal-verdict ordering defect tracked by `.github#1929`; OpenCode and Noema are failed, no qualifying current-head formal approval or durable responsive-browser inspection exists, and the UI Delivery Gate remains **FAIL** pending owner repair, protected merge, and deployed inspection | +| Calendar, Data, Security, and Settings exposed intent/ETag, verifier commands/schema names, event codes, `signed-session`, RBAC/ABAC, and OIDC/provider plumbing | Each product surface must replace implementation vocabulary with outcomes and next actions while retaining evidence in authorized diagnostics | Rendered-copy tests, authorization tests, and responsive screenshots | +| Mail toast and several route captures obscured or clipped primary navigation | Shared workspace layout must preserve navigation visibility while transient feedback is present | Desktop/mobile screenshots with active toast, sticky header, scroll, and keyboard focus | +| Mobile Search, Projects, and Settings placed content behind sticky headers | Reproduce scrolling and keyboard focus before selecting a layout repair | Focused controls and relevant text remain visible and reachable at 390×844 | + +The screenshot-failure RED at `af4df216` returned a diagnostic text path as +successful screenshot evidence. PR #1599 successor `9bb0dc7e` now throws the +capture error, leaves no false PNG, closes the page, and retains late browser +error detection; its focused suite passed 16/16. PR #1600 separately owns +source-head-bound artifact retention. Both remain Proposed until current-head +hosted checks and independent review finish. Unknown `/api/**` mocks can still +default to HTTP 200 `{ok: true}` and remain a separate reality-gap repair. + +## 2026-09-09 owner succession and review-gateway evidence + +These rows integrate the incoming #1611 observations into this single-writer +baseline. They bind each gap to its actual bounded-context owner and do not +reuse predecessor approvals or checks. + +| Observed responsibility gap | Canonical owner action | Current status and required evidence | +| --- | --- | --- | +| [#1590](https://github.com/ContextualWisdomLab/naruon/pull/1590) repeatedly acquired provider/model fixture changes outside its URL-extraction responsibility | [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains the canonical Naruon URL/contact-hygiene owner and already carries the valid hostname and scheme delta | #1590 preserved all intervening ancestry and restored verified tree `24480909a7e8b8e5c707b52c976d820018389a77` at exact head `9d545440f556a3aa24213d690ab62bd45bfc6bdf`; #1418 is open/Draft and mergeable at `a4a4da69ff9df89bac9d0a00e7473f35685be567`. Completion requires fresh exact-head checks, independent approval, ordinary protected integration of #1418, and succession verification before retiring #1590. | +| Required Noema review lacked a terminal verdict after consumer-owned preflight selected the free gateway route | [contextual-orchestrator#1106](https://github.com/ContextualWisdomLab/contextual-orchestrator/issues/1106) owns free-pool admission/routing; [.github#2042](https://github.com/ContextualWisdomLab/.github/issues/2042) owns removal of the temporary leaf routing bridge after an immutable owner release; [.github#2035](https://github.com/ContextualWisdomLab/.github/pull/2035) remains only the review-publication repair | The freshest #2035 exact-head evidence is run `34183702988`, job `102003278065`: HTTP 429 after 322.5 seconds with `orchestrator/free`, caller attempts=1, served model `deepseek-ai/deepseek-v4-flash-0731`. Keep the review fail closed with no paid, local, or direct-provider bypass; completion requires immutable owner release, consumer version bump and bridge deletion, then exact-head contract/security/review GREEN. | + +**Baseline version:** 1.9 +**Observed on:** 2026-09-12 (Asia/Seoul) +**Observed protected branch (current scan; row Base-SHA values remain historical):** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` +**Observed product version:** `0.14.4` +**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) + +**Inventory observation:** the 106-PR open surface below is a fresh live +scan captured at `2026-08-25T15:52:01Z`, which returned 106 open PRs after +PR #1337 merged into protected `develop` at `2026-08-25T00:10:39Z` and +the later governance stack merge (#1448) and additional PR wave opened since +the previous observation. The +v0.2 baseline's 93-row snapshot from `2026-08-21T19:25:43Z` remains historical +context, as do the earlier 92-PR state after PR #1442 merged and the initial +83-PR observation in issue #1428; all counts are point-in-time evidence, not +current merge state. + +**Follow-up delta observation:** a seventh live scan at +`2026-08-25T15:39:22Z` found the active exact-head work relevant to this +baseline: #1465 (`70596e26…`, tenant-archive import sanitization and duplicate +identity rejection), #1466 (`a3e6762f…`, origin-integrity port validation), +#1467 (`6816bc7f…`, utility-tool JSON boundary and Strix-trigger restoration), +#1468 (`1da167de…`, PostgreSQL smoke fixture schema alignment), #1469 +(`de6d7128…`, bounded 20–64 MiB deferred attachment parse-source admission), +and #1455 (`d8757e65…`, attachment filename traversal hardening). The +governance root #1443 now has exact head `62a0d645…` after child #1448 merged +normally into its stack branch. #1448 merged at +`2026-08-25T15:31:39Z` with merge commit `62a0d645…`; its tree retains the +parent gate fix and the multiline, stale-head, and current-finding regression +cases. The merge-result Checks for that commit remain queued and are tracked +as post-merge canary evidence, not success. +The newly opened #1470 is now `aba77cf5…` (NetworkGraph edge-description +lookup cleanup); the predecessor `f8a70d37…` was discarded after a remote +commit reintroduced the dead argument and its callers. The current head also +removes the tracked 452-line `NetworkGraph.tsx.out` pre-refactor copy found by +Devin, with the 11-test focused suite, TypeScript, zero-warning ESLint, and +diff checks passing locally. Hosted Checks and independent approval remain +required. +These PRs remain open until their current-head required Checks and qualifying +independent approval satisfy the protected ruleset; this follow-up does not +reuse predecessor evidence or claim a merge. #1448 is historical after its +normal merge; #1443's current head is `62a0d645…` and must be reviewed and +checked again from that exact head. + +**Live exact-head queue refresh (2026-08-25T17:51Z):** the following +post-snapshot states supersede only the matching historical SHA references +above; the full inventory remains a point-in-time record and is not silently +rewritten. #1468 is `1da167de26b442be6961622f15bb36ae9374e6c4`; its source, +backend, and frontend evidence is successful, while the retried Strix run is +queued after the earlier NVIDIA NIM provider failure. #1469 is now +`575b0c24fd9cb98106989eb101de74c5ce383db3`, after a remote follow-up removed +the unreachable document-size branch; 109 attachment/import/NewsDOM tests +pass locally, and the PR remains stacked behind #1468 because the selected +full suite exposes the base fixture defect repaired by #1468. #1470 remains +`aba77cf5b6a47985b352e8d2c2d76413579ea88a`; backend, frontend, Strix, and +metadata checks are successful, and its exact-head CodeRabbit approval is +present, but the ruleset still requires the second qualifying approval and +the exact-head OpenCode dispatch is queued. #1455 remains +`b2b4701366bc6bb2de1347b19eac9b4ed64cc614` with backend/frontend evidence +successful and Strix still running. #1429 remains +`b93caf0e00d09de0f836d8e4b869054d792e674b`; its refreshed hosted checks are +queued or in progress. #1347 remains +`f9e1751e2d5069841b279ecd2414fbbcad2e5692`; its newest metadata result is +not merge evidence and the remaining hosted checks are queued. None of these +states satisfies the two-approval protected ruleset, and none is a force-merge +candidate. + +**Live exact-head queue refresh (2026-08-25T18:06Z):** a subsequent +re-fetch supersedes only the matching queue entries above. PR #1436 moved to +exact head `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221`; its frontend, backend, +and Strix checks were recreated and queued, with zero unresolved review +threads and no qualifying approval. PR #1470 remains +`aba77cf5b6a47985b352e8d2c2d76413579ea88a`; its metadata, OpenCode, +frontend, backend, Strix, and security checks are successful, but only the +exact-head CodeRabbit approval exists and the protected ruleset requires a +second qualifying approval. PR #1467 remains +`6816bc7f938fe361f2eb7a0ecee427f87170fbcb`; source/security checks are +successful, metadata is still in progress, and only CodeRabbit has approved. +PR #1466 remains `a3e6762f01666f5b4e9d202932012de23b942c59` with all +observed required checks successful but no current approval. PR #1468 remains +`1da167de26b442be6961622f15bb36ae9374e6c4`; its source checks are successful, +the retried Strix check is queued, and its metadata gate is not a merge +result. PR #1469 remains `575b0c24fd9cb98106989eb101de74c5ce383db3`; its +source checks pass while image validation and Strix are running and metadata +is failed pending current review evidence. PR #1455 remains +`b2b4701366bc6bb2de1347b19eac9b4ed64cc614` with image checks successful, +coverage and metadata pending, and Strix running. PR #1347 remains +`f9e1751e2d5069841b279ecd2414fbbcad2e5692`; its three informational review +threads are resolved, but metadata is failed and Strix/coverage are still +running. PR #1429 remains `39d796d14b93484e004c13d7e2db4cc2eee5cdb1` with +the refreshed hosted suite queued. No entry satisfies the two-approval +ruleset, and no entry is a force-merge candidate. + +**Current Checks inventory:** the same live scan found 106 open PRs. Completed +failures were limited to `metadata-only gate evaluation` and `strix`; the +metadata gate reports the underlying Strix failure and, on some heads, a +current-head CodeRabbit quota/provider warning. The Naruon hosted Strix logs +for the observed #1468 run show NVIDIA NIM HTTP 429 rate limiting followed by +an unavailable direct fallback. This describes that run's provider evidence, +not the central Strix default documented in `AGENTS.md`; it is failed +infrastructure evidence rather than a clean security result or a source defect. +These PRs remain blocked and are not +force-merged; the exact head must receive a successful hosted security result. +PR #1466 has successful required Checks but remains in GitHub's protected +auto-merge queue with `REVIEW_REQUIRED` and no qualifying independent +approval, so it is also not treated as manually merged. + +The latest exact-head follow-up also records: #1347 at +`e97fa1e4…` with its governance regression tests passing but hosted required +Checks queued and no qualifying approval; #1433 at `b84255e5…` with source +checks passing but Strix failed closed after NVIDIA NIM HTTP 429 retries and a +configured direct OpenAI HTTP 404 fallback; #1450 at `073408ce…` with all +other Checks successful while the metadata gate remains in progress; #1455 at +`d8757e65…` with all hosted Checks successful but no current-head approval; +and #1466 at `a3e6762f…` with all hosted Checks successful but no qualifying +independent approval. These are live queue observations, not merge evidence. +The provider failures are retained as infrastructure evidence and are not +converted into source changes or clean security claims. + +**Exact-head maintenance ledger (2026-08-26):** PR #1347 now has exact head +`f9e1751e2d5069841b279ecd2414fbbcad2e5692` on this protected base. Its +governance normalization wrapper now fails closed when the review-unavailable +`jq` parser fails or emits a non-numeric count, and its early-exit cleanup trap +removes the wrapper-created comments snapshot when no PR number is available. +The exact-head local contract suite is 14 passed and the shell self-test remains +green. Hosted required Checks +were recreated and remain queued, so this is not a hosted pass or merge claim. +PR #1364 now has exact head +`3a3baa6b8dc9ea224f46395cb78c91a45be2090c` on this protected base. Its scoped +S3 document lifecycle, encrypted provider registry, compensation/orphan cleanup, +migrations, API, and LocalStack/PostgreSQL integration contract passed 195 +focused local tests, Ruff, compileall, and diff checks. Hosted required Checks +and independent approval remain required; protected auto-merge is enabled but +no merge is claimed. The attachment and UI work continued on independent +branches while hosted runners were queued. PR #1419 +now has exact head `2924b5598d4f527d493e1fc88cebd8fe87e1a3c4` on this protected +base, with 263 focused attachment/inline-image/email tests plus Ruff passing; +its hosted required checks were recreated for that head and remain queued, so +the normal protected squash auto-merge is enabled but not claimed as complete. +PR #1436 now has exact head +`1573be3332725bfbd05053943988d652df22a846` on the same base, with 446 frontend +tests, lint, typecheck, Next production build, Storybook build, and desktop / +mobile Storybook screenshots for source-open, low-confidence, +blocked-execution, and shared-scale states passing locally. It intentionally +remains pending because it carries a UI overlay at this document path while +PR #1429 owns the canonical commercial baseline; merge #1429 first, then +reconcile #1436 against the canonical file before enabling auto-merge. These +observations are exact-head evidence, not a release or hosted security claim. +PR #1415 now has exact head `994c6d40bb8a5a1de82e2f137300ea620bcdf933`; the +OIDC `kid` selection and strict administrator-role boundary passed 98 focused +authentication tests. PR #1417 now has exact head +`46f4b92a717361e3e4e42fcebc1d8c090a64c59b`; its PostgreSQL smoke seed now +explicitly supplies `is_read` after a real existing-schema NOT NULL failure, +and 180 focused tests pass. PR #1455 now has exact head +`b2b4701366bc6bb2de1347b19eac9b4ed64cc614`; bounded filename decoding and +Windows-separator traversal protection passed 130 focused parser/import tests. +All three have recreated hosted Checks and remain normal protected-merge +candidates; no hosted pass or merge is claimed. + +The protected-branch SHA in this header identifies the baseline's observation +point. The inventory's `Base-SHA` column is captured independently for each PR +at its scan time, so an older `develop` SHA in a row is expected snapshot +metadata rather than a second claim about the current protected branch. + +**Live exact-head queue refresh (2026-08-25T18:38Z):** PR #1468 remains at +`1da167de26b442be6961622f15bb36ae9374e6c4` and its current hosted check rollup +has no failed or pending run; it still has zero qualifying approvals and zero +unresolved threads, so protected auto-merge has not occurred. PR #1469 remains +at `575b0c24fd9cb98106989eb101de74c5ce383db3`; its source checks are passing, +while the metadata gate remains failed on current review evidence and +OpenCode is queued. PR #1429 remains at +`f2143f9d997736040eb3152f59ce058dc22ea72b` with the refreshed hosted suite +queued or in progress. PR #1436 remains at +`034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221` with frontend image, coverage, and +Strix work still running. PR #1470 has a successful current check rollup and +one exact-head bot approval, but still lacks the second qualifying approval. +None of these observations authorizes a bypass merge. + +The owning upstream sidecar `Seongho-Bae/newsdom-api` PR #682 remains at +`585bb4e0fb719ab6a576cf46d1ef12b77872557b`. Its bounded 64 MiB source and +boundary tests are present, while its only failed hosted check is the +provider-infrastructure Strix run (NVIDIA NIM rate limiting followed by an +unavailable fallback); no source vulnerability report was produced and the +normal rerun workflow is unavailable. The provider PR therefore remains +`WAIT_AND_REMEDIATE`, not a clean security pass or a force-merge candidate. +NewsDOM issue [#707](https://github.com/Seongho-Bae/newsdom-api/issues/707) +owns the follow-up resumable-upload contract for documents above 64 MiB, so +the current synchronous fallback must not be mistaken for the target +commercial large-document UX. + +The central `ContextualWisdomLab/.github` control plane has two related +current-head repairs: PR #1331 (`a1408f52…`) separates the direct-OpenAI +fallback API base from the primary provider and has all observed checks passing +except queued coverage, while PR #1333 (`5454a196…`) adds bounded provider +retry/attempt-log handling with OpenCode still queued. Both have zero +qualifying approvals and remain normal protected-merge candidates; their +changes overlap in `.github/workflows/strix.yml`, so the first protected merge +must be re-fetched before the second is restacked. + +This document defines the evidence-backed boundary between what Naruon currently +ships on protected `develop`, what is present only in open pull requests, what is +still a product-plan aspiration, and what a buyer must be able to complete before +Naruon is described as a generally available commercial product. + +Counts, branch SHAs, checks, reviews, and pull-request state are point-in-time +evidence. They must be re-fetched before a merge or release decision. + +--- + +## 1. Executive decision + +Naruon is no longer a small prototype. The protected branch already contains a +substantial, security-conscious **customer-owned communication and context +control plane**: + +```text +customer-owned mail / calendar / contact / file systems +→ Naruon ingest, thread, search, context, evidence, task, and action control +→ explicit human approval or correction +→ conflict-aware provider writeback through an outbound connector +``` + +Naruon must **not** become an SMTP server, IMAP mailbox host, public MX provider, +calendar source of truth, or file source of truth. Customer providers remain +authoritative. Naruon owns scoped context, policy, recommendation, intent, +connector command state, retry/reconciliation evidence, and the user-visible +decision/action experience. + +The accurate current product classification is: + +> **Production-oriented pre-GA communication control plane with substantial +> protected-branch capability, an unconverged ~100-open-PR integration surface (102 at the 2026-08-25 snapshot), and an +> incomplete buyer-visible release/operations contract.** + +The first sellable boundary is **GA-1: Customer-owned Mail, Calendar, Contact, +and File Control Plane**. The complete dense knowledge graph, no-ask +correct-by-exception reasoning, minimal-disclosure bridge, and third-party plugin +platform remain the north-star after GA-1 rather than prerequisites for the +first commercial release. + +--- + +## 2. Evidence hierarchy + +When sources disagree, use this order: + +1. exact protected-branch code, migrations, tests, runtime contracts, and + security boundaries; +2. exact protected-branch architecture and operations documents; +3. exact current pull-request code and current-head evidence; +4. open Issues and accepted ADRs; +5. older product plans, README limitations, and historical PR descriptions. + +A plan marked `[LIVE]` is not proof if the protected implementation contradicts +it. Conversely, an old README statement that calls a protected implementation +“future work” must be corrected rather than used to hide shipped behavior. + +--- + +## 3. Point-in-time repository snapshot + +| Item | Observation | +|---|---| +| Protected branch | `develop@e5e99b4e3bb081b92c602358878856536030e2ca` | +| Product/package version | `0.14.4` | +| Open pull requests | **102** (live scan at `2026-08-25T00:26:45Z`, post-#1337 merge) | +| Open issues | **61** (live count at the same 2026-08-25 snapshot; 59 were open before this baseline program) | +| New completion issue | #1428 | +| Required backend runtime | Python 3.14 exact-head lane | +| Core runtime | Next.js frontend, FastAPI backend, PostgreSQL + pgvector | +| Default data authority | customer-owned mail, CalDAV/CardDAV, and WebDAV providers | +| Default merge posture | strict exact-head checks plus qualifying independent review | + +The **102-open-PR** count is the live inventory snapshot captured on +2026-08-25 against the protected branch shown above, after PR #1337 merged. +The v0.2 baseline recorded **93 open PRs** on 2026-08-21 after PR #1448 +opened, an earlier same-day snapshot recorded **92 open PRs** after +PR #1442 merged, and the initial completion issue #1428 recorded **83 open +PRs** on 2026-08-20 against `develop@c9bfba2...`; these are historical +baselines, not contradictions. Later live counts can change as PRs open, +close, or merge, so every release decision must re-fetch the REST state. + +The protected branch requires exact-head backend, frontend, security, CodeQL, +dependency review, Scorecard, OSV, Trivy, Strix, source/evidence coverage, +backend/frontend/combined image validation, and OpenCode review contexts. Pending, +queued, stale, predecessor-head, skipped-required, neutral, author-only, +model-only, or local-only evidence is not passing evidence. + +--- + +## 4. Protected-branch product truth + +### 4.1 Shipped communication and workspace surface + +Protected `develop` exposes buyer-recognizable product surfaces for: + +- Today execution dashboard; +- Mail, thread history, search, reply, and pending-reply work; +- Calendar views, source-backed coordination, and writeback intent; +- Tasks and source-linked ticket work; +- Projects, project graph, and evidence-linked records; +- Context Search and hybrid retrieval; +- AI Hub and provider-neutral AI workflows; +- Data/document ingestion and controlled materialization; +- Security/policy/audit views; +- Settings, identity, provider, and deployment controls. + +The product already distinguishes simulated local send from real delivery, +preserves `In-Reply-To` and `References`, scopes email/provider records by owner +and organization, keeps opaque public identifiers separate from sequential +surrogates, and applies deny-first RBAC/ABAC policies. + +### 4.2 Source-of-truth and writeback sovereignty + +Protected `develop` already enforces important commercial boundaries: + +- customer mail, calendars, contacts, and files remain durable provider truth; +- browser input selects an opaque source reference but cannot assert ownership, + region, credential, or capability; +- writeback is intent-only unless the user explicitly requests provider + execution; +- provider execution re-reads server-authoritative source records; +- CalDAV and WebDAV updates preserve ETag/If-Match conflict semantics; +- private-network provider access uses an outbound-only connector rather than + inbound firewall holes or public mail hosting; +- provider credentials and command payloads are excluded from browser and + aggregate observability surfaces. + +### 4.3 Durable writeback retry is implemented + +The current protected source-of-truth document records behavior that the root +README still describes as future work: + +- scoped `provider_writeback_retry_items` rows; +- encrypted retry command payloads; +- retry dispatch with retry enqueue disabled for the nested attempt; +- exponential backoff; +- `succeeded`, rescheduled retry, and `failed_exhausted` outcomes; +- persisted connector signal events for dispatch, timeout, transport, and + adapter outcomes; +- organization-admin aggregate queue-depth reads without exposing payload, + credential, runner, source, or retry identities. + +This is a material product-truth correction. The remaining gap is not “create a +retry queue.” It is **finish connector packaging, identity/enrollment, complete +protocol coverage, dead-letter/reconciliation operations, and buyer-visible +support evidence**. + +### 4.4 AI and scientific boundary + +Naruon has grounded content segments, hybrid search, named/versioned KG +extractor seams, deterministic fallback, contextual-orchestrator routing, and +batch-embedding integration boundaries. It does **not** have a protected live +Structural Topic Model endpoint or fitted topic artifact. Deterministic keyword +metadata must not be marketed as STM or temporal event psychometrics. + +TEPP may be consumed only through a separately accepted, immutable, versioned +scientific artifact/API with preprocessing, vocabulary, covariates, posterior +uncertainty, diagnostics, provenance, and abstention. Naruon owns identity, +authorization, adapter envelopes, and disclosure policy; TEPP owns the +scientific payload. + +--- + +## 5. Product-truth and release-truth inconsistencies + +| Inconsistency | Current evidence | Buyer risk | Required correction | +|---|---|---|---| +| README says durable retry/audit remains future work | protected operations document describes encrypted retry rows, retry worker, backoff, exhaustion, and aggregate visibility | buyers and contributors cannot tell what is shipped | merge a customer/operator README based on protected truth; keep unsupported behavior explicitly limited | +| Release architecture says first candidate should be `v0.1.0` | `VERSION` and backend package are `0.14.4` | release procedure may publish or validate the wrong identity | replace historical hypothesis with current release-train policy and immutable release manifest | +| Product plan marks typed Person/Event/Commitment/Plugin concepts as new/planned | current code search does not prove authoritative `graph_persons`, `graph_events`, `graph_commitments`, or `plugin_registrations` stores | UI/marketing can imply dense-KG/product-platform completion that does not exist | keep north-star language, implement typed domains through bounded PRs, and gate claims on protected code | +| The live open-PR population (93 on 2026-08-21; 102 on 2026-08-25) contains many overlapping, stacked, micro, dependency, governance, and broad integration changes | current GitHub inventory | predecessor evidence, writer collision, stale branches, and integration starvation | establish a release train, classify every PR, close duplicates, merge parent-first, and use one writer per authority cluster | +| Required independent review exists but the current human reviewer path is unresolved | #1371 | green automation cannot produce a lawful protected merge | resolve reviewer governance without weakening rulesets or self-approval | +| Connector is described through a self-hosted-runner analogy | protected code has protocol adapters and retry behavior but no complete released connector lifecycle | operators may deploy test infrastructure as production relay | deliver signed installable connector artifacts, enrollment/rotation, source health, fleet SLO, and runbooks | + +--- + +## 6. Current pull-request surface + +The current open PR count is too large to treat as one releasable integration +unit. This baseline does not claim that every one of the 102 PRs has been +line-by-line approved. It records the product-significant active lanes observed +and defines the inventory that must be completed before GA. + +### 6.1 Product-significant active lanes + +| PR | Lane | Baseline judgment | +|---:|---|---| +| #1364 | scoped S3 document-object backend | high-leverage GA durability lane; Draft until real PostgreSQL + S3 lifecycle, backfill, cleanup, failure, and exact-head evidence are complete | +| #1417 | shared PostgreSQL-backed email-send throttle | necessary multi-replica safety; keep isolated and merge only with current-head concurrency/security evidence | +| #1416 | provider-backed CalDAV create writeback | relevant to GA scheduling execution; preserve create vs update precondition distinction and integrate into the broader #978 contract | +| #1353 | HWP/HWPX deterministic recognition boundary | useful Korean enterprise document admission; does not complete parsing/conversion/search semantics | +| #1397 | inline-media admission/tracking-pixel classification | valid evidence-protection slice; remain Draft until the #1350 stack and independent review are coherent | +| #1419 | common image metadata | bounded local evidence extraction; no OCR/VLM claim | +| #1418 | auditable URL/contact hygiene | deterministic tool/evidence lane; ensure contact redaction is not represented as complete anonymization | +| #1317 | broad macOS/local-AI/runtime/governance integration | valuable evidence but unusually broad; must be decomposed or reconciled carefully because many active PRs overlap its surfaces | +| #1392 | customer/operator README rewrite | directly addresses product-truth debt and has reported exact-head checks; still requires independent current-head approval | +| #1300 | fail closed on unsafe global tool mutations | correct safety posture until durable tenant-scoped plugin/tool registry exists; links directly to #976 | +| #1264 | EgressWeave integration | correctly dependency-blocked on an immutable released EgressWeave package and hash lock; mutable VCS dependency is forbidden | +| #1390 / #1391 | 56- and 78-package dependency groups | excessive blast radius, including major runtime and OpenAI client changes; split by compatibility/authority and rehearse migrations before merge | +| #1426 / #1414 | review-governance gate refresh | metadata-only governance repair; must not dismiss review, weaken rulesets, or turn stale aggregate state into false success | +| #1241, #1320, #1408, #1410, #1411, #1421, #1422 | accessibility micro-lanes | useful but numerous; consolidate non-overlapping UI fixes into bounded component-level trains to reduce 17-check amplification | +| #1424, #1412, #1401 | micro performance lanes | require real benchmark or stable complexity contract; do not let automated micro-PRs displace GA integration work | +| #1455 | path-traversal attachment parser hardening | high-value Sentinel security lane; prioritize within the new wave and merge only with exact-head Strix evidence once the provider outage clears | +| #1347 | rate-limited review status governance | current head constrains repository API-scope identifiers and merges the protected base; local tests pass, while hosted Checks and independent review are still required | +| #1433 | Message-ID whitespace hardening | source/security checks pass; the observed Strix failure is provider infrastructure (NVIDIA NIM 429 and direct OpenAI 404), so retry exact-head evidence without weakening the gate | +| #1450 | stray scratch/debug cleanup | all source and security Checks passed; wait for the in-progress metadata gate and current-head independent review | +| #1465 | scoped tenant archive import hardening | portability slice now rejects duplicate identities before writes and sanitizes archive-controlled display fields; retain the bounded slice-1 query cost and require current-head hosted evidence | +| #1466 | origin-integrity URL validation | current head rejects explicit zero/out-of-range ports; keep the signed-session and SSRF contract tied to exact-head regression evidence | +| #1467 | utility-tool JSON and governance repair | deterministic URL/HTML/JSON utility surface; current head rejects non-standard JSON numbers and preserves the central Strix workflow trigger, while full smoke evidence still depends on #1468's schema fixture repair | +| #1468 | PostgreSQL smoke fixture schema alignment | small root-cause test/data-contract repair for the current `email_records.is_read` requirement; merge before dependent smoke-test PRs after exact-head hosted evidence; the observed Naruon Strix run failed at the provider boundary (NVIDIA NIM 429/OpenAI 404), not in this source change | +| #1443 | CodeRabbit approval-notice governance root | current source/test lane narrows approval-notice parsing to the exact current head and ignores pending-review prose while retaining explicit findings; the predecessor Strix provider failure is historical, while the current head requires fresh queued Checks and a qualifying independent approval | +| #1448 | stacked governance regression coverage | merged normally into #1443's stack branch at `62a0d645…`; parent gate logic plus multiline JSON, stale-head unrelated prose, mixed blocker, and explicit current-head finding fixtures passed locally; merge-result hosted Checks remain queued and are post-merge canary evidence | +| #1469 | deferred attachment parse-source admission | aligns the hidden 20 MiB parser bound with the authenticated 64 MiB import contract while keeping unsupported binaries metadata-only; current changelog states the supported 20–64 MiB range and the ADR-0006 contract remains required | +| #1470 | NetworkGraph lookup optimization | bounded frontend performance slice; current head `aba77cf5…` preserves first-instance duplicate-ID selection, removes the dead `describeEdge` input, and deletes the tracked pre-refactor `NetworkGraph.tsx.out` copy; local 11-test, TypeScript, zero-warning ESLint, and diff checks passed, while hosted Checks and independent approval remain required | +| #1456 | email-detail UX density | buyer-visible mail surface polish; hold to the responsive/accessibility evidence contract in the UI quality section before protected integration | +| #1462 | utility tool trio (URL codec, hash generator) | bounded deterministic tooling consistent with #1418/#1361; must not be represented as AI judgment or topic evidence | +| #1457–#1461 | refreshed dependency-group bumps | successor waves to the v0.2-flagged groups; the 64- and 86-package backend/CI bumps remain excessive blast radius and still require splitting and migration rehearsal | + +### 6.2 Required complete inventory + +Before a release candidate is cut, create a machine-readable and human-reviewed +inventory for **all** current open PRs with: + +```text +pr_number +head_sha +base_ref_and_sha +draft_state +mergeability +changed_authority_cluster +stack_parent +stack_children +current_review_state +unresolved_threads +required_check_summary +product_lane +disposition +next_action +``` + +Allowed dispositions: + +- direct GA-1 slice; +- ordered stacked child; +- dependency-blocked; +- governance-blocked; +- duplicate/superseded; +- experimental/north-star; +- unsafe or unrelated and to be closed. + +The inventory must be regenerated after every parent merge or branch movement. +It must not embed provider credentials, customer data, review-body secrets, or +large copied PR bodies. + +### 6.3 Merge-loop progress since v0.2 + +Point-in-time progress observed between the v0.2 snapshot (2026-08-21) and +this v0.3 observation (2026-08-25). None of this is merge evidence; every +claim requires a live exact-head re-fetch before any decision: + +- **Merge-gate progression:** #1337 completed its gate progression (CodeRabbit exact-head approval obtained, branch updated onto the base) and merged into protected `develop` at `2026-08-25T00:10:39Z`; #1438 obtained CodeRabbit exact-head approval and branch updates and remains open pending terminal required-check states. +- **Stale-snapshot repair:** #1241, #1368, #1412, and #1320 received systemic develop-baseline restores that preserved each PR's intended delta while removing predecessor-base drift from the diff surface. +- **Thread remediation waves:** unresolved review threads progressed through repeated remediation cycles on #1264, #1332, #1347, #1349, #1361, #1380, #1339, #1376, #1412, #1452, #1454, #1449, #1457, #1436, and #1441. +- **External blocker:** Naruon hosted Strix runs have observed NVIDIA NIM provider rate-limit failures (HTTP 429) since approximately 2026-08-24, emitting zero model-reported vulnerabilities before infrastructure failure. This is an observation of the affected hosted runs, not a change to the central GitHub Models default in `AGENTS.md`; per repository policy it is failed evidence, not clean-scan evidence, and Strix-dependent gates cannot pass until the provider path recovers. + +### 6.4 UI/UX quality contract and Storybook event inventory + +The UI is a buyer-facing control surface, not a decorative shell. The current +design-system implementation is carried by PR #1436 and ADR-0013; it uses the +production stylesheet as the Storybook token source and records Figma file ID +`68b5XB58w8nwT2LYOOnikK`. Until that PR is protected-branch code, its stories +are current-PR evidence rather than shipped capability. + +The UI/UX Pro Max checklist and Anti-Slop UI heuristics are adopted as review +inputs, not as normative standards or automatic approval. They help select one +coherent design direction, expose generic UI defaults, and force explicit +review of accessibility, touch targets, hierarchy, and state behavior. WCAG +2.2 and the repository's security/accessibility gates remain authoritative. + +The latest local fixed-origin capture for #1470 used `/` at desktop (1440×900), +tablet (834×1112), and mobile (390×844). Tablet and mobile presented the +responsive shell and an explicit mail-loading state. Desktop presented the +navigation shell but no data surface while the backend was intentionally not +running; the Next development server also reported a hydration mismatch for +the search-input caret style. This is local diagnostic evidence, not hosted +release evidence, and is tracked as a separate UX/runtime gap rather than +mixed into the bounded NetworkGraph change. + +| Quality axis | Required definition and applied evidence | Audit gate before GA-1 | +|---|---|---| +| Accessibility | WCAG 2.2 AA; keyboard order/focus-visible; accessible names; labels; live/status announcements; color is never the only signal; Storybook a11y test is `error` for applicable stories | axe/Vitest Storybook results, keyboard journey, screen-reader name assertions, and zero unresolved accessibility findings | +| Touch & interaction | primary pointer and keyboard paths; at least 44×44 CSS-pixel target or documented exception; 8px separation; loading/disabled/pressed feedback; no hover-only action | Storybook `play` events queried by role/label plus touch viewport browser test | +| Performance | reserved media dimensions, no avoidable layout shift, route/component splitting, virtualized long lists, and responsive feedback for async work | production build budget, responsive capture at 375/768/1024/1440, and measured CLS/input-latency evidence | +| Style selection | one documented design direction, consistent icon language, semantic tokens, deliberate radius/elevation, and no generic gradient/card/emoji defaults | ADR/Figma decision, token source review, and Anti-Slop heuristic checklist with human disposition | +| Layout & responsive | mobile-first hierarchy, no horizontal scroll, readable line length, safe-area/fixed-bar offsets, and synchronized desktop/tablet/mobile navigation | Storybook viewport stories and Playwright route/drawer assertions at each supported viewport | +| Typography & color | semantic foreground/surface/status tokens; body text and line-height contract; contrast ≥4.5:1 for normal text; wrapping/overflow for IDs and user content | token lint, contrast scan, long-content story, dark-mode story, and i18n expansion test | +| Animation | shared duration/easing tokens, causal motion, transform/opacity preference, interruptibility, and `prefers-reduced-motion` behavior | reduced-motion Storybook story and browser assertion that action remains usable during transitions | +| Forms & feedback | visible labels, field-local errors, helper text, async progress, retry/undo or next action, and server error preservation | valid/invalid/loading/success/timeout/permission stories with submit and recovery events | +| Navigation patterns | predictable back/deep links, stable route identity, focus restoration, drawer parity, and one primary action per surface | route matrix, keyboard navigation journey, refresh/deep-link test, and mobile drawer test | +| Charts & data | legends/tooltips or accessible table, empty/loading/error/partial states, textual values, and color-independent meaning | chart stories for every state, keyboard/tooltip test, screen-reader text, and deterministic snapshot/visual evidence | + +Each reusable component must have a Storybook story for its meaningful states. +Each interactive story must use a `play` function and user-like queries such as +role or accessible label; `data-testid` is a last resort. Storybook render, +interaction, accessibility, and visual tests are complementary: a passing +render story does not prove keyboard, async, responsive, or data correctness. + +The minimum scene/event matrix is: + +| Scene | Required event or assertion | Failure prevented | +|---|---|---| +| initial/ready | render, accessible name, primary action | dead or unnamed control | +| loading/pending | click or submit, disabled state, progress/status update | duplicate request and silent wait | +| empty/no-result | filter/search/reset, next-action copy | inert workspace | +| success/recognized | inspect, open, confirm, source/provenance text | unsupported product claim | +| validation/error/timeout | invalid input, server error, retry/recovery | error only in console or lost user work | +| unauthorized/forbidden | attempted action, denial explanation, no sensitive data | privilege disclosure | +| offline/connector unavailable | degraded read path, retry/backoff affordance | false provider success | +| long content/large dataset | wrap, scroll/virtualize, pagination or summary disclosure | layout collapse and browser lock-up | +| keyboard/touch/reduced motion | tab/enter/escape, pointer/touch, reduced-motion media query | inaccessible or motion-sensitive flow | + +The inventory must record component, story name, state, event, expected +customer-visible outcome, accessibility rule, token source, viewport, and test +command. A story that only renders a static screenshot is incomplete for a +button, form, navigation, chart, or asynchronous data surface. + +### 6.5 Queue convergence rules + +1. One active writer owns each overlapping file/authority cluster. +2. A stacked child is not promoted before its parent reaches protected + `develop` and the child is revalidated on the new exact base. +3. Predecessor-head checks and reviews never transfer. +4. Dependency changes that cross runtime majors are separated from unrelated + feature work. +5. Historical one-shot, repair, finalizer, and self-modifying workflow identities + are handled through #1324; do not add another write-capable cleanup workflow. +6. Independent approval remains mandatory; #1371 is resolved by establishing a + legitimate reviewer path, not by weakening protection. +7. A micro-optimization requires measured evidence or a stable tested complexity + invariant, not only an assertion that `Map` is faster than array lookup. +8. A PR that claims to close an umbrella issue must prove the full umbrella + acceptance journey, not one narrow slice. + +--- + +## 7. Buyer-visible Gap matrix + +### P0 — Release and integration control + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Release-train convergence | no buyer can assess a product with ~100 unconverged open PRs (102 at the 2026-08-25 snapshot) | strict gates exist but queue topology is fragmented | #1428, #1371, #1324 | all PRs classified; duplicates closed; parent-first integration; one immutable RC SHA | +| Product/release truth | documentation conflicts with protected behavior/version | retry is shipped; release doc says `v0.1.0`; version is `0.14.4` | #1392, this PR | README, architecture, version, changelog, release manifest, and operator guide agree | +| Independent review path | automation cannot lawfully self-approve | effective rulesets require independent post-last-push approval | #1371 | verified reviewer route and normal protected merge without bypass | + +### P0 — Connector and provider action + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Installable connector | adapters in source are not an operable product | outbound-only architecture and several adapters exist | #998 | signed packages/OCI, enrollment, rotation, upgrade/rollback, supported matrix | +| Source lifecycle | configuration does not equal observed provider capability | source IDs, eligibility, consent, and revisions exist in slices | #998, #978 | create/rotate/disable/delete, capability discovery, health, stale-capability invalidation | +| Durable reconciliation | retry exhaustion alone does not tell the buyer what happened remotely | retry/backoff/exhaustion and signal events exist | #998 | idempotent command, late-success reconciliation, dead-letter action, buyer receipt | +| Shared send safety | process-local throttles fail with multiple replicas | PR proposes PostgreSQL-backed atomic bucket | #1379, #1417 | concurrency/expiry/isolation/DB-unavailable tests and protected integration | + +### P0 — Data durability, portability, and customer exit + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Binary object lifecycle | large/deferred document bytes cannot remain an inline database strategy | S3-compatible implementation is Draft | #1076, #1364 | upload/read/recognize/retain/delete/backfill/orphan round trip with real integration | +| Disaster recovery | a release is not enterprise-ready without restore evidence | HA evaluation exists; production WAL/PITR policy remains incomplete | #1428 | WAL archive/PITR, failover fencing, backup and clean restore rehearsal | +| Tenant export/reimport | customers need exit and migration without losing provenance | no single demonstrated full tenant round trip | #1428 | export → clean instance import preserving source, opaque IDs, history, evidence, policy | +| Retention/legal hold/disposition | deletion and evidence preservation conflict unless modeled | partial security/key/retention work exists across repository history | #1428, #1364 | purpose-scoped retention, legal hold, verified disposition, object/DB reconciliation | +| Attachment parser admission and unsupported formats | a file above 20 MiB can pass import transport but fail later at a hidden parser limit, while unsupported binaries are not searchable | Naruon import transport and generic deferred parser admission are bounded at 64 MiB; the NewsDOM `/parse` provider contract remains 20 MiB, so PDF bytes from 20–64 MiB are admitted and retained fail-closed but are not sent to NewsDOM; unsupported types remain metadata-only | #1427, #1469, #1353, #1419, NewsDOM #682/#707 | one documented bounded admission contract, provider-side PDF limit alignment or an explicit large-PDF fallback, parser/status evidence, deferred recognition, and object-backed retention before increasing the bound again | + +### P0 — Evidence-based AI and document intelligence + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Canonical evidence identity | OCR/media/attachment/model slices can disagree about the same source | source segments and several deterministic admission slices exist | #1350, #1353, #1397, #1419 | one source identity/provenance chain across email, thread, document, attachment, media, model result | +| Judgment explanation | model output without evidence/calibration is not defensible | grounded extractor seam exists; wider evidence pipeline incomplete | #1350 | evidence IDs, claim support, abstention, correction, verifier result, prompt/model/version receipt | +| Provider-neutral route | raw provider coupling spreads credentials and failure behavior | contextual-orchestrator boundary exists; EgressWeave integration is blocked on release | #1262, #1264 | released hash-locked adapter, route/fallback evidence, no raw secret in products | +| Scientific claim discipline | keyword labels can be mistaken for topic/event measurement | architecture explicitly says no live STM | TEPP dependency path | accepted immutable TEPP artifact/API or explicit feature absence; no lexical-as-STM claim | + +### P1 — Typed context and scheduling differentiation + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Responsive shell hydration and unavailable state | a buyer can see a polished navigation shell but no actionable content when a data request is unavailable, and hydration drift can produce inconsistent controls | local fixed-origin capture showed tablet/mobile loading feedback, desktop blank content without the backend, and a development-server caret-style hydration mismatch; this is not a hosted release result | follow-up required; keep separate from #1470's bounded lookup optimization | deterministic server/client markup, explicit desktop unavailable/error state, backend-backed responsive Playwright evidence, and no hydration warnings | +| Stacked PR current-head review dispatch | a dependent PR can show only metadata while the central OpenCode/required checks are still being materialized on a non-default base branch | #1448 exact head `068aefdf…` received a targeted scheduler/ OpenCode dispatch and then merged normally; its merge-result checks on `62a0d645…` remain queued | #1443, #1448, ContextualWisdomLab/.github scheduler | every supported stack base receives a bounded exact-head OpenCode/Noema/required-check run, with queued/provider states observable and no false merge readiness | +| Typed Person/Event/Commitment graph | generic string graph cannot safely drive high-stakes action | planning spec marks types as new/planned | #977, #978, #1000 | normalized temporal/multi-membership identities, evidence/confidence/correction on every inferred edge | +| Status-weighted scheduling | calendar CRUD does not prevent harmful double booking | CalDAV source/writeback/retry foundation exists | #978, #988, #989, #990, #1416 | confirmed/tentative/desired + organizer/attendee + recurrence/free-busy/resource end-to-end | +| Minimal-disclosure bridge | personal context can influence work availability without exposing private reason | policy substrate exists; product bridge is planned | #979, #991 | consented consequence-only propagation, revocation, audit, regression tests | +| Correct-by-exception inference | asking users to reconstruct context defeats the product mission | extractor/search foundations exist; dense-KG resolution remains incomplete | #977, #992, #1001 | one recommendation, evidence/calibration, hold/override, correction learning, no silent irreversible action | + +### P1 — Platform and ecosystem + +| Gap | Buyer problem | Protected/current evidence | Existing work | Completion evidence | +|---|---|---|---|---| +| Plugin lifecycle | internal extension seams do not create an enterprise platform | extractor/parser seams exist; durable custom tool mutation fails closed | #976, #1300 | signed manifest/release, tenant grant, sandbox, compatibility, upgrade/rollback/uninstall | +| Stable cross-repository contracts | copying sibling code creates a distributed monolith | several adapters are planned or dependency-blocked | #976, #1262, #1350 | released SDK/API/event/OCI contracts pinned by version/digest; no direct sibling SQL | +| Buyer administration | operators need source, connector, policy, health, retention, and support controls | settings/security surfaces exist but not one completed admin lifecycle | #998, #1428 | role-specific admin console with next-action explanations and audited high-risk changes | + +--- + +## 8. GA-1 product definition + +GA-1 is complete only when a buyer can perform the following journey on one +released, immutable product version: + +```text +install or access Naruon +→ authenticate through the supported enterprise identity boundary +→ install and enroll a signed outbound connector +→ register customer-owned mail/calendar/contact/file sources +→ verify observed source capabilities and health +→ synchronize source records with provenance +→ receive a source-cited judgment or action recommendation +→ inspect evidence, confidence, authorization, privacy, and provider impact +→ approve, hold, or correct the recommendation +→ execute an idempotent provider action with current revision protection +→ observe success, retry, conflict, exhaustion, or reconciliation evidence +→ restore, export, or migrate the tenant without losing provenance +``` + +Naruon is not GA if the demonstration substitutes mocked provider success, +process-local state, local-only credentials, predecessor-head checks, synthetic +review approval, hidden manual database edits, or an unreleased sibling branch. + +--- + +## 9. Delivery sequence + +### Wave 0 — Product truth and queue convergence + +1. Merge this baseline after exact-head documentation checks and independent + review. +2. Keep #1428 as the single completion gate. +3. Maintain the complete open-PR inventory (section 13) and classify every PR as it arrives. +4. Resolve #1371 without weakening protection. +5. Merge/close governance and stale-workflow lanes through normal protected + integration. +6. Correct README/release/version contradictions. + +### Wave 1 — GA-1 runtime and operations + +1. Finish #998 connector artifact, enrollment, capability, fleet, retry, and + reconciliation lifecycle. +2. Integrate shared send throttling (#1379/#1417). +3. Finish binary object lifecycle (#1076/#1364). +4. Complete PostgreSQL WAL/PITR/failover/restore evidence. +5. Complete OIDC/SCIM/tenant administration and privacy-safe OpenTelemetry/SLO. +6. Publish independent backend, frontend, connector, and compatibility artifacts. + +### Wave 2 — Buyer differentiation + +1. Implement typed temporal/multi-membership Person/Event/Commitment graph. +2. Complete status-weighted scheduling (#978/#988/#989/#990). +3. Complete evidence-based mail/document/media resolution (#1350). +4. Add tenant export/reimport and customer-exit evidence. +5. Run the full buyer journey and failure/restore variants. + +### Wave 3 — North-star platform + +1. Minimal-disclosure privacy bridge (#979/#991). +2. Dense-KG correct-by-exception resolution (#977/#992/#1001). +3. Signed plugin platform (#976) with one real independently released CWL + plugin. +4. Optional TEPP and other ecosystem adapters through accepted immutable + contracts. + +--- + +## 10. Release and quality gate + +### Product correctness + +- real IMAP/SMTP and DAV interoperability fixtures; +- duplicate/replay, late response, partial failure, provider conflict, connector + restart, network partition, and source-capability-change tests; +- recurrence, timezone, DST, organizer/attendee, free/busy, and resource + scheduling tests; +- full tenant export/reimport and backup/restore rehearsals; +- buyer-visible provenance completeness and unsupported-claim rate gates; +- no silent confirmed-commitment break; +- no private reason crossing a context boundary without explicit authorized + disclosure. + +### Code and documentation + +- production statement coverage 100% for owned production code; +- production branch coverage 100%; +- public API/module/class/function docstrings 100%; +- frontend component, interaction, action-edge, design-token, accessibility, and + i18n tests; +- no documentation that represents planned behavior as shipped or shipped + behavior as future work; +- ADR, PRD, TRD, architecture, data model, runbook, and standard traceability + updated with each release-relevant decision. + +### Database + +- normalized ownership and provider mappings; +- descriptive two-or-more-word `snake_case` object names; +- no direct cross-service SQL; +- bitemporal/effective-dated facts where provider state, membership, consent, + policy, or source mapping changes over time; +- tenant enforcement and hot-partition/load evidence; +- clean install, N-1 upgrade, expand/backfill/contract, rollback, and restore. + +### Security and supply chain + +- OAuth/OIDC threat controls aligned with the current OAuth 2.0 Security BCP; +- signed connector and release artifacts; +- digest-pinned OCI images; +- SPDX 3.0.1 SBOM; +- SLSA 1.2 provenance; +- dependency/license/vulnerability evidence; +- secret, prompt, message, event, contact, and file-content exclusion from + ordinary telemetry; +- no mutable VCS dependency in production; +- no self-modifying or broad-token workflow used to compensate for product code. + +### Operations + +- liveness, startup, readiness, and drain semantics per independently deployable + component; +- OpenTelemetry trace, metric, and log acceptance; +- low-cardinality label contract; +- SLO, error budget, burn-rate alert, dashboard, on-call, incident, and support + bundle; +- connector offline/backpressure and safe rolling upgrade; +- backup/PITR/failover/restore and customer-exit runbooks; +- versioned support, deprecation, compatibility, and security-fix policy. + +### Protected integration + +- one exact current head and one exact protected base; +- all live required contexts terminal-success; +- zero actionable unresolved review threads; +- qualifying independent non-author post-last-push approval; +- no bypass, self-approval, force push, dummy commit, empty requeue, or stale + predecessor evidence; +- immutable release source SHA and artifact digests recorded in release evidence. + +--- + +## 11. Issues established or strengthened by this baseline + +| Issue | Purpose | +|---:|---| +| [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) | new umbrella: GA scope, release train, and buyer-visible acceptance | +| [#976](https://github.com/ContextualWisdomLab/naruon/issues/976) | strengthened: signed plugin SDK, registry, permissions, compatibility, sandbox, lifecycle | +| [#978](https://github.com/ContextualWisdomLab/naruon/issues/978) | strengthened: typed Event/Commitment model, iTIP/CalDAV scheduling, free/busy/resource, conflict and privacy contract | +| [#998](https://github.com/ContextualWisdomLab/naruon/issues/998) | strengthened: installable connector, enrollment/identity, protocol capability, reconciliation, OpenTelemetry/SLO | + +Existing linked implementation and blocker issues remain authoritative for their +bounded scopes, including #1022, #1076, #1229, #1262, #1324, #1350, #1371, and +#1379. + +--- + +## 12. Standards and research traceability + +The following standards are not decorative references. They define protocol, +security, accessibility, observability, or supply-chain acceptance tests in the +issues above. + +For the DiskSage boundary specifically, PROV-O supplies the provenance +relations, DCAT supplies catalog/dataset/service discovery terms, OpenLineage +supplies run and facet vocabulary, and NIST SP 800-209 supplies storage +protection and recovery controls. The implementation must keep these as +metadata relationships and receipts; a provider upload or local path alone is +not an eviction or lineage claim. + +### APA 7th references + +Crispin, M. (2003). *Internet Message Access Protocol—Version 4rev1* (RFC +3501). RFC Editor. https://doi.org/10.17487/RFC3501 + +Daboo, C. (2010). *iCalendar transport-independent interoperability protocol +(iTIP)* (RFC 5546). RFC Editor. https://doi.org/10.17487/RFC5546 + +Daboo, C. (2011). *vCard extensions to WebDAV (CardDAV)* (RFC 6352). RFC +Editor. https://doi.org/10.17487/RFC6352 + +Daboo, C., Desruisseaux, B., & Dusseault, L. M. (2007). *Calendaring extensions +to WebDAV (CalDAV)* (RFC 4791). RFC Editor. https://doi.org/10.17487/RFC4791 + +Daboo, C., & Desruisseaux, B. (2012). *Scheduling extensions to CalDAV* (RFC +6638). RFC Editor. https://doi.org/10.17487/RFC6638 + +Daboo, C., & Quillaud, A. (2012). *Collection synchronization for Web +Distributed Authoring and Versioning (WebDAV)* (RFC 6578). RFC Editor. +https://doi.org/10.17487/RFC6578 + +Gellens, R., & Klensin, J. (2011). *Message submission for mail* (RFC 6409). +RFC Editor. https://doi.org/10.17487/RFC6409 + +Jenkins, N., & Newman, C. (2019). *The JSON Meta Application Protocol (JMAP) +for Mail* (RFC 8621). RFC Editor. https://doi.org/10.17487/RFC8621 + +Lodderstedt, T., Bradley, J., Labunets, A., & Fett, D. (2025). *Best current +practice for OAuth 2.0 security* (BCP 240; RFC 9700). RFC Editor. +https://doi.org/10.17487/RFC9700 + +Melnikov, A., & Leiba, B. (2021). *Internet Message Access Protocol (IMAP) +version 4rev2* (RFC 9051). RFC Editor. https://doi.org/10.17487/RFC9051 + +OpenSSF. (2025). *Supply-chain Levels for Software Artifacts specification, +version 1.2*. https://slsa.dev/spec/v1.2/ + +OpenTelemetry Authors. (2026). *OpenTelemetry specification, version 1.60.0*. +https://opentelemetry.io/docs/specs/otel/ + +Elkady, H. (2026). *Anti-Slop UI: A Deterministic State-Machine Architecture +for Eliminating Design Hallucinations in LLM-Generated Interfaces*. Local Over. +https://local-over.github.io/Anti-Slop-UI/research_paper.pdf + +NextLevelBuilder. (2026). *UI/UX Pro Max skill* (Version 2.5.0) [Computer +software]. GitHub. https://github.com/nextlevelbuilder/ui-ux-pro-max-skill + +Storybook. (n.d.). *Accessibility testing*. Retrieved August 21, 2026, from +https://storybook.js.org/docs/writing-tests/accessibility-testing + +Storybook. (n.d.). *Interaction tests*. Retrieved August 21, 2026, from +https://storybook.js.org/docs/writing-tests/interaction-testing + +SPDX Workgroup. (2024). *SPDX specification, version 3.0.1*. +https://spdx.github.io/spdx-spec/ + +World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines +(WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ + +National Institute of Standards and Technology. (2020). *Security guidelines +for storage infrastructure* (NIST Special Publication 800-209). +https://doi.org/10.6028/NIST.SP.800-209 + +OpenLineage. (n.d.). *OpenLineage documentation: Object model, run cycle, and +facets*. Retrieved August 25, 2026, from https://openlineage.io/docs/ + +World Wide Web Consortium. (2013). *PROV-O: The PROV ontology*. +https://www.w3.org/TR/prov-o/ + +World Wide Web Consortium. (2024). *Data Catalog Vocabulary (DCAT) — Version +3*. https://www.w3.org/TR/vocab-dcat-3/ + +--- + +## 13. Live open-PR identity inventory + +This table was generated from a live GitHub pull-request collection whose +response was captured at `2026-08-25T00:26:45Z`. It records every currently open Naruon +PR's immutable head, +base, draft state, authority cluster, stack parent reference, and provisional +disposition. Review decisions, unresolved threads, mergeability, and Checks are +volatile and must be fetched again for the exact head immediately before any +merge; GraphQL rate-limit failures are not treated as approval or success. + +The 102-row inventory is a fresh refresh later than baseline v0.2's 93-row +snapshot captured at `2026-08-21T19:25:43Z`: PR #1337 merged into protected +`develop` at `2026-08-25T00:10:39Z` and PRs #1449–#1463 opened since that +observation. The v0.2 93-row snapshot, the earlier 92-row snapshot taken +after PR #1442 merged, and their exact-head observations remain historical +and are retained in baseline v0.2 and in git history for audit +traceability. The self-row reflects the head observed at scan time and may +trail this document's own commit; all review decisions, Checks, and +mergeability still require a live exact-head fetch before merge. +Base-SHA columns record the protected-branch tip each row was scanned +against (`develop@81c10564...` for rows captured before PR #1337 +merged; `develop@e5e99b4e...` for rows captured after). A few older rows +retain `develop@dd8d1519...` from an earlier scan window; that value is also +historical scan provenance, not a second claim about the current protected +branch. These values are therefore not one shared base declaration. + +| PR | Title | Exact head SHA | Base ref and SHA | Draft | Authority cluster | Stack parent ref | Disposition | Next action | +|---:|---|---|---|:---:|---|---|---|---| +| 1463 | 🎨 Palette: 비동기 작업 버튼의 로딩 상태 시각적 피드백 개선 | d0f51274dc86271e365aa1384e1362daf93f1d7d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1462 | feat: 신규 유틸리티 도구 3종 추가 (URL 인코더, URL 디코더, 해시 생성기) | dba144b01be8a7e332c9fc7b390e1d9b105536c4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1461 | chore(deps): bump the ci-python group across 1 directory with 86 updates | f012853e6123017c290a7782cc7cf8e4801e4bb7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1460 | chore(deps): bump the backend-python group across 1 directory with 64 updates | dec4329986b261607204c0711d62f3bcd782d181 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1459 | chore(deps): bump the frontend-npm group across 1 directory with 14 updates | 3edb8320b0288f2bba54ce7e28083164e0d51966 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1458 | chore(deps): bump the github-actions group across 1 directory with 3 updates | f7099f951574a01f1333cb72a5e48ac91e7f4ea5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1457 | chore(deps): bump the docker-base-images group across 1 directory with 2 updates | 245c8f1d2177e451e9812525ef6bbd7db9be3e6e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1456 | 🎨 Palette: 이메일 상세 화면 UX 밀도 개선 | 20b1c7f4798343d6949ab57ee9ab015d928b04bf | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1455 | 🛡️ Sentinel: [HIGH] 첨부 파일 파서의 경로 탐색 취약점 수정 | 40c5b7087a92a23eba787682fe32604861a9474b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1454 | ⚡ Bolt: Optimize NetworkGraph edge description lookups to strictly O(1) | 9cb7883cd0a41b9634f4f74e77f3595d754ab7e7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1453 | 🎨 Palette: SettingsLayout 비활성화 버튼 접근성 툴팁 개선 | eef7e8d2eb25199afeb13c6b8a24f0f73bbd0fe5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1452 | 🎨 Palette: 비활성화 버튼 접근성(Tooltip) 개선 추가 | ad32c8d35c11a76f52e189d7a5e83fb74fb603df | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1451 | feat: 텍스트 유틸리티 도구 추가 및 테스트 보완 | a2a20e3eb14bb65fab8ee2f2f9199dd76dd71bce | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1450 | chore: remove stray scratch/debug files committed to develop | 7d1f57a83a34312bea265ae3095bc67ff4e0493e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1449 | 🎨 Palette: 데이터 저장소 버튼 액션 로딩 UX 및 접근성 개선 | 90248b26fff37f395c6918525c4eef041d683e09 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1448 | test(governance): exercise multiline CodeRabbit pending notice | 874c098548e6794217393e0338074ba2f292d080 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1443 | fix: ignore CodeRabbit approval pending notices | 41e48413cffefa8a5393d6af1d5ad16be3c5de7c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1441 | 🎨 Palette: [UX 개선] 메일 상세 고밀도 컴포넌트 추가 | ce6ff8f26e4cfdc76be7d667c7b159c57f8e0ac5 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1439 | ⚡ Bolt: 프론트엔드 O(N) Array.find() 룩업을 O(1) Map 룩업으로 성능 개선 | 68106d13175d7ff67978de66e31d385237ca53b1 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1438 | fix(governance): supersede stale review decisions safely | 5cc9ca3348575931b5d2ec35d1277436d1eece63 | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1436 | feat(frontend): add Storybook UI inventory | becc4e9e56bb30e511e812e8c66b19d094b28de0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1434 | fix: accept DiskSage cloud-readiness schema 7 | 85e3eb43f9a7c3e87848df1307549d4efd3d29de | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1433 | fix(security): reject ambiguous Message-ID whitespace | 0d71272d6ec5420afefa98cd5ae57b91efc31007 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1432 | fix(compose): harden optional pg-llm-batch database | e3dbed9a0d4e08348f94d26de09a2fabbdcfa96b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1431 | test(core): cover operator env path resolution | e058f8c6e50256194d19be617f8df54f60bd1c27 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1430 | 🎨 Palette: 키보드 내비게이션을 위한 focus-visible 스타일 추가 | 49fc3eabd8e94a95dee2af3c1254c4d46a294399 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1429 | docs: establish Naruon product completion gap baseline | 5a72475506e8ec76692abfa233f3205c645568eb | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1427 | fix(data): align PDF DOM upload budget with sidecar | 29be15e4ec5e29dc1f62ac636928c9307a6f520f | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1426 | fix(governance): wait on stale aggregate review state | 5cc148e1f2f84d1afcd2d3cf3dabaade616c01d0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1424 | ⚡ Bolt: [성능 개선] 네트워크 그래프에서 O(N) 노드 라벨 조회를 O(1) Map 조회로 대체 | 32c7edc11fd6faf8ae6918dae8b00de7c5c0b773 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1421 | 🎨 [UX] 설정 화면 장식용 아이콘에 aria-hidden 추가 | 719c1b347aae52e77ae7e40b0eb60769fd7178cb | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1420 | feat: URL 코덱 및 엄격한 JSON 포매터 추가 | bf7b741ea0b73a146ce9bcd323ca621c1562cb4e | develop@dd8d15191338b841f9e6f3a06507c6a5643b95d0 | yes | other | — | experimental/draft | validate parent and promote only after scope proof | +| 1419 | feat(attachments): index common image metadata | a0f5e03107e6ec3e85eea029bb11c8c8e784b907 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1418 | feat(tools): add auditable URL and contact hygiene | 19adb3e74c66837c5fb2d0a11a7ac030bbbfe3c4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1417 | fix(email): enforce shared send throttling | 69fb72d30c71ab7a9c2c6e09413292a05278148d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1416 | fix(calendar): allow provider-backed create writeback | d8b3df7d19def826a5b92abbcaec043377ceb3a4 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1415 | fix(auth): select OIDC signing key by kid | e0a1f166221790e7ba4f0df37b328ac3cb896092 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1414 | fix(governance): refresh gate after OpenCode review | df1642c473011e935ab7501f4012fb58b8d06e21 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1412 | ⚡ Bolt: [성능 개선] tools 배열 탐색을 Map 기반 O(1)로 변경 | b5032d7fb428189da86c10221d58d093d3abcc6e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1411 | 🎨 Palette: 검색어 지우기 ARIA 라벨 통일 | 6369e91f2f10ed9b6b436a41a08d89b7aedf9008 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1410 | 🎨 [OIDC 로그인/로그아웃 버튼 로딩 상태 및 접근성 개선] | fac7a5377bd7c5bc7bde89a6f0f05b3fd2c47632 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1408 | fix(a11y): expose keyboard focus on AI Hub tabs | cda57c26e75788eaa350d0faeb898349818da074 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1407 | feat(mail): fail-closed Inkspan edit handoff for recognized HWPX | 22e4909dd13623190f61eae47baf74d70fa2b83a | cursor/mail-hwpx-attachment-preview-7b5e@b83a0da03b46a447f9710b5f91d245f5b1783dfa | yes | ingest/storage | cursor/mail-hwpx-attachment-preview-7b5e | experimental/draft | validate parent and promote only after scope proof | +| 1406 | feat(mail): open recognized HWPX text from email attachments | b83a0da03b46a447f9710b5f91d245f5b1783dfa | cursor/hwpx-recognized-text-preview-b246@f21811379c1cc2435eadb41bb2746b4887947d53 | yes | ingest/storage | cursor/hwpx-recognized-text-preview-b246 | experimental/draft | validate parent and promote only after scope proof | +| 1404 | feat(data): show recognized HWPX paragraph text in attachment preview | f21811379c1cc2435eadb41bb2746b4887947d53 | feat/hwpx-section-text-recognition@0fcf4d85dd70d4f2ee9dd0296fc454f764ae5326 | yes | security/governance | feat/hwpx-section-text-recognition | experimental/draft | validate parent and promote only after scope proof | +| 1403 | fix(oidc): fail closed on malformed token-endpoint escapes | 7a0b0e443ae31a941c5a2139a2093b1af876458c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1402 | feat(email-writing): add independent criterion Judge | 3d6b3341c5dd15512d5d60cd5f8d95a1bbc6d846 | feat/llm-email-writing-candidate-task6@fa844bd035ab1f188a28c58e0ed2dc45fa31d0f3 | yes | mail/calendar | feat/llm-email-writing-candidate-task6 | experimental/draft | validate parent and promote only after scope proof | +| 1401 | ⚡ Bolt: ProjectsLayout 인라인 배열 맵핑 렌더링 최적화 | 1221fc848a086db721ef1dde0a26eb6af77fe035 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | performance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1400 | feat(email): Slice 3 buyer-visible withheld-media next actions | db7ca961de800a514cf9bee34d324f1c5cf233bb | cursor/email-media-quarantine-persist-0ad6@ff1dc18cd9de5e06649ac516b163af2db4bbde83 | yes | ingest/storage | cursor/email-media-quarantine-persist-0ad6 | experimental/draft | validate parent and promote only after scope proof | +| 1399 | feat(email): Slice 3 persist quarantined inline media | ff1dc18cd9de5e06649ac516b163af2db4bbde83 | cursor/email-media-admission-wiring-cd1a@1af546dbb01964e9a620ed341ae0dd3dab9439fd | yes | ingest/storage | cursor/email-media-admission-wiring-cd1a | experimental/draft | validate parent and promote only after scope proof | +| 1398 | feat(email): Slice 3 wire admission so only document_image continues | 1af546dbb01964e9a620ed341ae0dd3dab9439fd | cursor/email-media-admission-slice3-c9de@5a80583bcabc22609e8677864ae86f867d85fd45 | yes | ingest/storage | cursor/email-media-admission-slice3-c9de | experimental/draft | validate parent and promote only after scope proof | +| 1397 | feat(email): Slice 3 inline-media admission and tracking-pixel classification | 5a80583bcabc22609e8677864ae86f867d85fd45 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1392 | docs: make README customer and operator focused | c0ac8c01d58473680b89a225107366fec4fae986 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1387 | fix(a11y): keep unavailable calendar actions discoverable | 37917799e8d27c07e29eeed87a52d5be41528330 | develop@dd8d15191338b841f9e6f3a06507c6a5643b95d0 | yes | frontend/a11y | — | experimental/draft | validate parent and promote only after scope proof | +| 1384 | feat(noema): route LLM through contextual-orchestrator | 0fd330137cdd19068fa8903dc70e1dc88f42cdc9 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1380 | fix(dav): land capability honesty with tomllib CI import | 658f69accc627b99e379835593c2b9e49b514d00 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1376 | fix(email): expose header-derived media pixel dimensions | aae34d0a9e7d607070bc98e7b0d03e17f607dd6c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1375 | feat(email-writing): parse contextual review candidates | fa844bd035ab1f188a28c58e0ed2dc45fa31d0f3 | feat/llm-email-writing-orchestrator-task5@9cd9b953a2dd236aebe1fcdc25e59ba3e9388505 | yes | security/governance | feat/llm-email-writing-orchestrator-task5 | experimental/draft | validate parent and promote only after scope proof | +| 1373 | feat(hwpx): recognize ordered section text with provenance | 32099709bafcee19fb32c385bbe89e0df15fe102 | feat/hwp-hwpx-attachment-recognition@70683266b93233dae62faec6cbd4df118be41383 | yes | ingest/storage | feat/hwp-hwpx-attachment-recognition | experimental/draft | validate parent and promote only after scope proof | +| 1370 | feat(supply-chain): verify locked hashes against PyPI releases | 1a6ac604e159d98631b3996eb3f74d036e4a760b | feat/dependency-lock-provenance-receipt@f6eeb69f561e94cd50ae38fb1f43faa6cd2c52d7 | no | security/governance | feat/dependency-lock-provenance-receipt | stacked-child | re-fetch exact review/check state, then fix or protected-merge | +| 1369 | feat(supply-chain): attest Python lock provenance before install | f6eeb69f561e94cd50ae38fb1f43faa6cd2c52d7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1368 | ⚡ Bolt: [성능 개선] EmailDetail 개별 메시지 컴포넌트 메모이제이션 | 5c2f048c0e9fc97545e1d6f09d1379b3ae8f8b68 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1366 | fix(threading): honor RFC 5256 References ancestry | be0237714e373052b57d73e1168087da3adfda34 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1365 | fix(containers): publish explicit split runtime targets | 43666bed6214ce724d4dc50810d9f65f3d77d3f3 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1364 | feat(storage): add scoped S3 document object backend | 3a3baa6b8dc9ea224f46395cb78c91a45be2090c | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1363 | fix(governance): audit orphaned Actions workflow identities | 48593a1cab22cca86e2dbfb7e6d5cb89cf298f3c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1361 | feat(tools): add bounded content checksum generator | 5859a8f3f5e9dddf20a43313b53d7aa6453f8cd7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1356 | feat(email-writing): add hardened contextual-orchestrator boundary | 9cd9b953a2dd236aebe1fcdc25e59ba3e9388505 | feat/llm-email-writing-context-task4@4570747ccebd57ccaab30ffc68239f0c9d2f1ca0 | yes | mail/calendar | feat/llm-email-writing-context-task4 | experimental/draft | validate parent and promote only after scope proof | +| 1355 | fix(email): preserve deterministic descending thread order | fddc883ca2911c138bd9fcc3a9bd8257e1036124 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1354 | feat(ui): add Storybook design-token contract | 84edbbf152d257cd05777bf0b007fcfec2ac1d18 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1353 | feat(attachments): recognize HWP and HWPX parser boundaries | dd501dae0fc03d813f4a65aa21318cc89d1a193c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1352 | fix(a11y): expose async button busy states | 8b7731da7063c39651aa9e3debfaa2052c476c35 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1349 | docs(product): define evidence-based workspace task contract | 559d091a9a75d8e79ab9608c04931c5a1e82e173 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | docs/product | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1347 | fix(governance): reject rate-limited review status as semantic evidence | cd973fc364efb8d150786f4c2bceec54187eb806 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1345 | fix(dav): reject ambiguous nested authorization encodings | 07954b2e4d402fa2fd1e9775c52ec6b9483de52d | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1339 | fix(host-policy): normalize dotted bracketed IPv6 safely | 44b65cac131ab5c4be25cfdebc026c4a1cf3bc35 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1333 | feat: persist DiskSage file lineage ontology | 017cdef392385571acfc5abc177882724d6026b9 | develop@e5e99b4e3bb081b92c602358878856536030e2ca | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1332 | feat(email): surface calendar writeback If-Match conflicts | d53598dc7e45b470907fd97dffb9d64e954f2731 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1329 | feat(email-writing): build authorized thread context | 4570747ccebd57ccaab30ffc68239f0c9d2f1ca0 | feat/llm-email-writing-review-evidence-task3@51fb5e8543247b1e5c790f3fdf98424c8fbed669 | yes | security/governance | feat/llm-email-writing-review-evidence-task3 | experimental/draft | validate parent and promote only after scope proof | +| 1328 | feat(email-writing): persist privacy-minimized review evidence | 51fb5e8543247b1e5c790f3fdf98424c8fbed669 | feat/llm-email-writing-contracts-task2@fb7c406ee1328a6ac42dbaf54bb6852c199d8b0a | yes | security/governance | feat/llm-email-writing-contracts-task2 | experimental/draft | validate parent and promote only after scope proof | +| 1327 | feat(email-writing): define strict review contracts | fb7c406ee1328a6ac42dbaf54bb6852c199d8b0a | feat/inkspan-email-writing-guide@bfc2df112136bb9fe358778d701e78bf9e78b685 | yes | security/governance | feat/inkspan-email-writing-guide | experimental/draft | validate parent and promote only after scope proof | +| 1322 | docs(adr): design Inkspan-based LLM email writing guidance | d943203afc0afae0c9a6190681675f4d30dcf257 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1321 | fix(auth): require issued-at in Keyverse OIDC sessions | d06eff3875543b1afa28570f9269571a63a81983 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1320 | fix(calendar): expose proposal context to screen readers | 1a9afa0cf845a49db4c2eb2372f9f36eaf4c8c4e | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1317 | feat: harden live macOS runtime and governance | 25d80197ee0eb8cb2aafc7d205ac7b98ccccba0c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1302 | fix(tools): remove canned source-derived tools | 2ee0c65097c78a99849fc749a3a848440c50271c | fix/remove-unsafe-phishing-detector@646a2401de35529425163fdefa7ad5e6355c349f | yes | other | fix/remove-unsafe-phishing-detector | experimental/draft | validate parent and promote only after scope proof | +| 1301 | fix(tools): remove unsafe phishing detector | 646a2401de35529425163fdefa7ad5e6355c349f | fix/fail-closed-tool-mutations@67dbfddb01bacb604a0533ce486a550115ff0d64 | yes | other | fix/fail-closed-tool-mutations | experimental/draft | validate parent and promote only after scope proof | +| 1300 | fix(tools): fail closed on unsafe global tool mutations | 7ea4bad69cf36acb9c8fbca48d32333907cce55f | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1288 | test(email): consolidate thread identity and folder visibility coverage | b7db9a316162a70bf8e594faf4f2e73766d9dc6c | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1287 | 🧪 테스트: runtime_secrets.py의 build_encryption_keyring 누락된 테스트 추가 | 4de4f5d5850baf1abc05203f204c489650ba9624 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1284 | test(pdf): cover pending document decode success | 68da2a53084751361f6332ca4f3fe82c34443964 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | ingest/storage | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1280 | test(search): cover configured fusion settings | 89742939fe8b9a9a33a9018d6863050f5c7a7fc7 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1279 | test(tools): consolidate webhook validation and execution coverage | c6a50e97b7742a7172d80de01159516796d4d1a0 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1277 | test(core): cover connector scope statement | aa04c9392c86c29fd39cae80149fbbd02681cff8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | other | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1267 | perf(mail): memoize email list element mapping | 8fccadb727ac54a81422642022ccc2b31723bab9 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | mail/calendar | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1264 | integration: route LLM egress through EgressWeave | 5a46a85f75dfae94dd8c1f8df0b88150b40ab3c8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | llm/orchestration | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1257 | chore(deps): update connector websockets to 17.0.1 | 4613ff5a1a85e4882af1a3a4abd0e56b3b574187 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | dependency | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1245 | fix(email-detail): make responsive evidence actions functional | 796b34c5a1322f09c6f00b8cf24591ae04b89b6b | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | yes | frontend/a11y | — | experimental/draft | validate parent and promote only after scope proof | +| 1244 | chore(deps): update hash-locked aiohttp to 3.14.3 | c1d4c7fd2b98e464d3ff7e92f26d92a6c0f1e6e8 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1241 | fix(a11y): show keyboard focus on OIDC actions | fb7e63dee1d72365db595edb1bc49e097202e707 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1206 | fix(security,api): opaque prompt IDs and CardDAV single-decode | d7ae4768b7c30be7bac19fb9425d40a66e8fda05 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | security/governance | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | +| 1195 | feat(email): deterministic dedupe provenance — gate strong fingerprints on genuine Date (naruon#1086) | c7aedc6a6a09bc91156e9c62e44f18cf8b4d3846 | develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b | no | frontend/a11y | — | normal-or-stacked-root | re-fetch exact review/check state, then fix or protected-merge | + +The inventory is intentionally identity-first: + +It represents the 2026-08-25 102-row refresh described above, which supersedes +the v0.2 post-#1442 93-row snapshot as current evidence while that snapshot +remains historical context: no review body, credential, +customer data, or copied provider payload is stored in this document. A parent +merge or head movement invalidates the affected row and requires regeneration. + +### Exact-head check observations + +The following failures were also read from the live Checks API during this +snapshot and are retained as RCA pointers, not as reusable merge evidence: + +| PR | Exact head | Check/run evidence | Observed cause or disposition | +|---:|---|---|---| +| #1347 | `3f6932026fbef281a373d792518058e4aaf5178f` | Strix run `32440010004`, job `96648648553` | provider/model infrastructure returned NVIDIA NIM 404 and no complete Strix report; rerun after the central fail-closed workflow repair, without weakening the gate | +| #1442 | `94e10a6188a1b96ac162fa659ae4025bc00895bd` | metadata gate `96719432050`; merged `2026-08-21T09:18:28Z` | historical pre-merge observation only; the post-merge 93-row inventory excludes this PR | +| #1443 | `62a0d645b619bcd2eac8f0db87460c5c1990d128` | new parent-head Checks queued; predecessor Strix job `97705801302` | child #1448 merged normally into this stack branch, invalidating all predecessor-head evidence. The prior provider failure was NVIDIA NIM HTTP 429 with unavailable fallback/direct OpenAI 404; current head requires fresh Checks and qualifying approval | +| #1448 | `068aefdfa48122bc73cb85a1dc23614bb09ebc04` → merge `62a0d645b619bcd2eac8f0db87460c5c1990d128` | merge-result Checks queued; Devin passed on PR head | normal stack merge at `2026-08-25T15:31:39Z`; local governance and parent synchronization tests passed. Delayed merge-result Checks are being tracked and are not represented as successful hosted evidence | + +Queued or pending Checks are not treated as source failures, and completed +predecessor-head evidence is never reused. + +--- + +## 14. Claim boundary + +This baseline is a product and technical decision record, not a certification, +security attestation, market valuation, or claim that Naruon is already GA. + +The existence of 100% coverage gates, many PRs, or detailed documentation does +not itself demonstrate commercial completeness. GA is demonstrated only by the +end-to-end buyer journey, current exact-head protected integration, released +artifacts, provider interoperability, recovery/customer-exit evidence, and +operational support contract defined here. From 55bd928c05d6304d3e84fa9284c833cdf9554974 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 17:55:31 +0900 Subject: [PATCH 14/89] docs: record URL evidence owner repair --- docs/product-technical-gap-baseline.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e372bb118..dedd16329 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.0 +**Baseline version:** 2.1 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -65,6 +65,12 @@ Generated branches that rediscover an owned delta are provenance, not new owners The recurrence itself is a control-plane Gap: once a generated branch is reconciled to provenance, its writer should become terminal/read-only or new generated work should perform semantic owner-overlap detection and route to the canonical owner before product source is rewritten. Source-neutral `trigger CI` commits are not acceptance evidence. +### 3.5 Auditable data-hygiene owner + +[#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact data-hygiene owner at exact head `87a94a4c2b78f12a61ec699dee9ce081ea3d8578` and tree `f17cc6848752749ca965af1a7ca9d3f422c4b4d7`. On predecessor `a4a4da69...`, a RED regression proved that adjacent Markdown links were merged into one malformed URL candidate and that a typographic closing quote remained inside the candidate. The exact-head repair separates those delimiters while preserving IPv6 and balanced punctuation contracts; the focused URL suite is 11 passed and the full backend is 1,830 passed / 33 skipped with warnings as errors. Ruff, compileall and diff checks also pass. + +This remains Draft source evidence, not integrated product acceptance. ADR-0008 is correctly Proposed while unlanded. Exact-head Application CI `35433208478`, Bandit `35433208495`, Docker `35433208617`, Security `35433208474`, Semgrep `35433208453` and CodeQL `35433208463` were queued at the latest poll; zero unresolved review threads and local GREEN do not substitute for terminal hosted checks or a qualifying post-last-push independent approval. #1590 remains open until protected-tree succession proves its valid URL delta is fully inherited. + ## 4. UI, localization, and OIDC interaction state [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) is the bounded OIDC pending-feedback owner at exact head `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. An intervening generated rewrite removed the rendered regression and doctoring; ordinary child `85e312...` restored the reviewed tree without force-push. The effective delta is exactly `SettingsLayout.tsx`, the rendered pending-feedback test, and its doctoring record. @@ -103,6 +109,7 @@ Current `contextual-orchestrator` protected main is `afad3e90caac73d5b94eb68f709 | P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | | P0 | Connector/provider operability | protocol/writeback/retry foundations exist; full released connector lifecycle remains incomplete | signed installable artifact, enrollment/rotation, capability health, idempotent reconciliation, support evidence | | P0 | Recovery/customer exit | historical baseline records partial backup/object/portability work, not one buyer round trip | restore/PITR and tenant export→clean-import rehearsal preserving provenance/authorization | +| P1 | Auditable data hygiene | #1418 delimiter repair is exact-tree GREEN locally; hosted checks and current-head approval are pending | terminal exact-head checks/review, normal protected integration, then verified #1590 succession | | P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish contract + locale Storybook/browser/a11y acceptance | | P1 | OIDC pending UX | #1729 rendered jsdom repair exists but hosted/browser/multilingual evidence is incomplete | exact-head terminal checks/review + browser/AT/responsive evidence + released locale resource consumption | | P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | From b0071bad5cb2d6ad4afe0f3c4980a69ca022a231 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 18:42:26 +0900 Subject: [PATCH 15/89] docs(gap): record Actions queue starvation owner --- docs/product-technical-gap-baseline.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index dedd16329..930c8c9e6 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.1 +**Baseline version:** 2.2 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -37,6 +37,7 @@ The north-star dense knowledge graph, correct-by-exception inference, minimal-di Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. +- `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **481 queued** and **11 in-progress** runs in the central `.github` repository; #1418 and #1602 exact-head repository workflows were also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. - `.github#2040@12c3fa6f3623aa5f2979d3d5ee4ed987002a6c0d` is the shared CodeQL/current-head scheduler owner. It is open, Draft and non-mergeable. Exact branch and protected main diverge from merge base `fb17ef556f94f673234aa557254ae52779e9a7b0`, and both changed the shared scheduler. The next branch-moving action is ordinary/non-force **path-wise protected-main reconciliation**, not whole-file adoption or an isolated stale-side regex patch. The resolved scheduler must preserve the v2 CodeQL producer, no-restamp behavior, private-consumer read grants, repository-scoped credential routing, selected-token/workflow-token proof, exact-head stale-run revalidation, current-main queue/coalescing/capacity behavior, and the stronger repository-identity admission invariant. - `.github#2279@25f83aaee9eb97e423f6ef2467e722035bc2e362` owns authenticated GitHub API initial-authority validation, redirect refusal, and the corrected `_GITHUB_API_OPENER.open` transport test seam. Its current Python Security, CodeQL, Runtime Quality, Semgrep, and Security runs are queued; source repair is not acceptance evidence. - `.github#2272@4967d66f303bde675080466e359e75c260a91e06` separately owns reusable Pages caller-input shell-boundary regression and its executable CI. It is not a complete successor for the authenticated HTTP boundary unless the #2279/#2269 delta is losslessly inherited. @@ -102,6 +103,7 @@ Current `contextual-orchestrator` protected main is `afad3e90caac73d5b94eb68f709 | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot has 481 queued / 11 in-progress runs and current #1418/#1602 evidence lanes are queued | owner health report distinguishes current vs obsolete runs, obsolete pressure is removed without cancelling the sole current-head evidence, and required current-head lanes receive runner assignment and settle terminally | | P0 | Central CI/security acceptance | central scheduler and authenticated HTTP/GHAS permission lanes remain Draft/queued | reconciled protected-main exact head, terminal central checks, independent review, real cross-repository canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate canonical fixed source against then-current base and vulnerability database after central integration | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | @@ -147,14 +149,15 @@ Current **Merge/Release Gate: FAIL**. The current causal order is: -1. converge the central authenticated-HTTP / Pages / GHAS capability and permission lanes without losing valid owner deltas; -2. perform #2040 ordinary/non-force protected-main path-wise reconciliation and acquire fresh exact-head central GREEN + qualifying independent review; -3. prove the unchanged external authenticated dispatch/GHAS canary; -4. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; -5. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; -6. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -7. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; -8. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +1. recover current-head Actions execution capacity through `.github#712`, cancelling only obsolete/superseded pressure and preserving fail-closed current-head required evidence; do not blind-rerun or create source-neutral wake commits; +2. converge the central authenticated-HTTP / Pages / GHAS capability and permission lanes without losing valid owner deltas; +3. perform #2040 ordinary/non-force protected-main path-wise reconciliation and acquire fresh exact-head central GREEN + qualifying independent review; +4. prove the unchanged external authenticated dispatch/GHAS canary; +5. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; +6. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; +7. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +8. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; +9. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. From b35deea16daedd905230586786f54dea24440dd3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 18:44:34 +0900 Subject: [PATCH 16/89] docs(gap): refresh contextual-orchestrator protected authority --- docs/product-technical-gap-baseline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 930c8c9e6..ed216b5c4 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.2 +**Baseline version:** 2.3 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -96,7 +96,7 @@ Canonical localization Gap is [#1731](https://github.com/ContextualWisdomLab/nar All Naruon model-backed production work consumes the released `contextual-orchestrator` API/client/schema through an Agent boundary. Actions request `orchestrator/free` through the gateway token only; they do not hard-code provider/model/group or paid fallback. -Current `contextual-orchestrator` protected main is `afad3e90caac73d5b94eb68f70953b5589a01008`, but its GitHub Releases inventory is empty. Therefore protected `main` is not a released consumer identity. Naruon must keep any production path that requires an immutable CO API/client/schema release fail-closed until the owner publishes one and the consumer pins that released identity. No source copy or mutable-head dependency is accepted. +Current `contextual-orchestrator` protected main is `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. Therefore protected `main` is not a released consumer identity. Naruon must keep any production path that requires an immutable CO API/client/schema release fail-closed until the owner publishes one and the consumer pins that released identity. No source copy or mutable-head dependency is accepted. ## 6. Buyer-visible P0/P1 Gap baseline From 560adef4d9994e36264b26934c2489c5701bc993 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 18:46:08 +0900 Subject: [PATCH 17/89] docs(gap): refresh central security owner heads --- docs/product-technical-gap-baseline.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index ed216b5c4..f7a1d9295 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.3 +**Baseline version:** 2.4 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -39,16 +39,16 @@ Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c - `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **481 queued** and **11 in-progress** runs in the central `.github` repository; #1418 and #1602 exact-head repository workflows were also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. - `.github#2040@12c3fa6f3623aa5f2979d3d5ee4ed987002a6c0d` is the shared CodeQL/current-head scheduler owner. It is open, Draft and non-mergeable. Exact branch and protected main diverge from merge base `fb17ef556f94f673234aa557254ae52779e9a7b0`, and both changed the shared scheduler. The next branch-moving action is ordinary/non-force **path-wise protected-main reconciliation**, not whole-file adoption or an isolated stale-side regex patch. The resolved scheduler must preserve the v2 CodeQL producer, no-restamp behavior, private-consumer read grants, repository-scoped credential routing, selected-token/workflow-token proof, exact-head stale-run revalidation, current-main queue/coalescing/capacity behavior, and the stronger repository-identity admission invariant. -- `.github#2279@25f83aaee9eb97e423f6ef2467e722035bc2e362` owns authenticated GitHub API initial-authority validation, redirect refusal, and the corrected `_GITHUB_API_OPENER.open` transport test seam. Its current Python Security, CodeQL, Runtime Quality, Semgrep, and Security runs are queued; source repair is not acceptance evidence. -- `.github#2272@4967d66f303bde675080466e359e75c260a91e06` separately owns reusable Pages caller-input shell-boundary regression and its executable CI. It is not a complete successor for the authenticated HTTP boundary unless the #2279/#2269 delta is losslessly inherited. -- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. +- `.github#2279@9c19c6e00eafc028068719ab482282c1256f8893` owns authenticated GitHub API initial-authority validation, redirect refusal, corrected transport seams, and executable synthetic-302 checks through both actual production openers. Its focused production-opener matrix is locally GREEN, but current Python Security, CodeQL, Runtime Quality, Semgrep, and Security runs are queued; source/mechanism repair is not hosted acceptance evidence. +- `.github#2272@e0b6e70f8c8ea87648af2fc2d34dd43ffa625beb` separately owns reusable Pages caller-input shell-boundary regression and its executable CI, plus origin-pinned GitHub opener evidence. It is not a complete successor for authenticated redirect containment unless the #2279/#2269 valid delta is inherited losslessly. +- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. Its PR description still names an older #2279 generation, so consumers use the live #2279 authority above rather than that stale prerequisite snapshot. - `.github#2276` separately owns the observed target-repository `403 Resource not accessible by integration` boundary. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing. A GREEN selector alone does not satisfy this permission boundary. No Naruon PR may copy these central workflow implementations. Consumers wait fail-closed for released/protected owner evidence and then ordinary-restack onto that contract. ### 3.2 Frontend dependency-security owner -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) is the canonical frontend dependency-security owner at exact head `509be4c1d9b6c7ba239a108656e2382681a85341`. That generation has six repository-local workflows GREEN and exact-head CodeRabbit approval with no unresolved review thread. Later #1718 Trivy evidence used a newer vulnerability database and found protected-base `next`/`sharp` debt that #1623's source already repairs. Therefore the old Security receipt is valid historical evidence for its generation but not proof against the later database generation. After central reconciliation and protected-base movement, reacquire the invalidated current-base/current-database evidence before integration. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) is the canonical frontend dependency-security owner at exact head `509be4c1d9b6c7ba239a108656e2382681a85341`. That generation has six repository-local workflows GREEN and exact-head CodeRabbit approval with no unresolved review thread. Later #1718 Trivy evidence used a newer vulnerability database and found protected-base `next`/`sharp` debt that #1623's source already repairs. Therefore the old Security receipt is valid historical evidence for its generation but not proof against the later database generation. After central reconciliation and execution-capacity recovery, reacquire the invalidated current-base/current-database evidence before integration. ### 3.3 Workspace and migration lineage From 74c2f6c82a81f57e25317cb7cf9574dcdb55bc3b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 19:44:11 +0900 Subject: [PATCH 18/89] docs(gap): adopt current central convergence state --- docs/product-technical-gap-baseline.md | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index f7a1d9295..e7929f4b7 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.4 +**Baseline version:** 2.5 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -37,11 +37,12 @@ The north-star dense knowledge graph, correct-by-exception inference, minimal-di Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. -- `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **481 queued** and **11 in-progress** runs in the central `.github` repository; #1418 and #1602 exact-head repository workflows were also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. -- `.github#2040@12c3fa6f3623aa5f2979d3d5ee4ed987002a6c0d` is the shared CodeQL/current-head scheduler owner. It is open, Draft and non-mergeable. Exact branch and protected main diverge from merge base `fb17ef556f94f673234aa557254ae52779e9a7b0`, and both changed the shared scheduler. The next branch-moving action is ordinary/non-force **path-wise protected-main reconciliation**, not whole-file adoption or an isolated stale-side regex patch. The resolved scheduler must preserve the v2 CodeQL producer, no-restamp behavior, private-consumer read grants, repository-scoped credential routing, selected-token/workflow-token proof, exact-head stale-run revalidation, current-main queue/coalescing/capacity behavior, and the stronger repository-identity admission invariant. -- `.github#2279@9c19c6e00eafc028068719ab482282c1256f8893` owns authenticated GitHub API initial-authority validation, redirect refusal, corrected transport seams, and executable synthetic-302 checks through both actual production openers. Its focused production-opener matrix is locally GREEN, but current Python Security, CodeQL, Runtime Quality, Semgrep, and Security runs are queued; source/mechanism repair is not hosted acceptance evidence. -- `.github#2272@e0b6e70f8c8ea87648af2fc2d34dd43ffa625beb` separately owns reusable Pages caller-input shell-boundary regression and its executable CI, plus origin-pinned GitHub opener evidence. It is not a complete successor for authenticated redirect containment unless the #2279/#2269 valid delta is inherited losslessly. -- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. Its PR description still names an older #2279 generation, so consumers use the live #2279 authority above rather than that stale prerequisite snapshot. +- `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **512 queued** and **11 in-progress** runs in the central `.github` repository; #1602 exact-head repository workflows are also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. +- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has now completed the previously required ordinary/non-force protected-main path-wise reconciliation. Its reconciliation commit preserves the branch-owned scheduler/credential/exact-evidence contracts together with protected-main queue/GHAS/compatibility/retry deltas, repairs the stronger repository-identity boundary, removes the superseded unversioned CodeQL fallback, and keeps the v2 rerun payload within GitHub's top-level property ceiling. Focused verification is locally GREEN (**496 passed**; full **3,404 passed / 28 skipped / 40 subtests passed**), but the current hosted CodeQL, Security, Runtime Quality, Trusted uv, Python Security and Semgrep runs remain queued and qualifying independent current-head approval is still absent. Reconciliation is source-complete evidence, not merge authority. +- `.github#2279@b338d1e246fcd13ed4b61ae63e6d36d4a4129beb` is the current authenticated GitHub API authority owner. Beyond initial-authority validation, fail-closed redirect refusal, corrected transport seams and production-opener synthetic-302 tests, it now owns an executable evidence-lineage invariant: every full G-17 evidence SHA must resolve as a commit and be an ancestor of the exact checked-out head; an unreachable commit-shaped mutation fails closed. Focused static/mechanism review is GREEN, but current Python Security, Runtime Quality, CodeQL, Security and Semgrep runs remain queued. +- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` has ordinary-forwarded beyond its earlier Pages-only generation and is now an exact descendant of current #2279 `b338d1e...`. Its effective successor tree therefore carries the current authenticated GitHub API authority lineage plus reusable Pages caller-input shell-boundary CI/origin-hardening deltas. The PR body still describes predecessor `e0b6e70f...`, so consumers use the exact Git graph and current head rather than that stale prose snapshot. Fresh exact-head hosted evidence is queued; source convergence does not make this lane accepted. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains a divergent historical redirect-containment/test-seam owner. Do not close it merely because #2272 now descends from #2279: a fresh complete-succession audit must prove every valid #2269 source/test/doctoring contract is inherited or deliberately superseded before retirement. +- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. Its current authority now points at #2279 `b338d1e...` as the foundation prerequisite. After the consolidated central security lineage is accepted, this selector must be ordinary-forward/non-force reconciled and reacquire exact-head evidence. - `.github#2276` separately owns the observed target-repository `403 Resource not accessible by integration` boundary. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing. A GREEN selector alone does not satisfy this permission boundary. No Naruon PR may copy these central workflow implementations. Consumers wait fail-closed for released/protected owner evidence and then ordinary-restack onto that contract. @@ -103,8 +104,8 @@ Current `contextual-orchestrator` protected main is `5665b0ad1e07ffb5e9f8c59e44b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot has 481 queued / 11 in-progress runs and current #1418/#1602 evidence lanes are queued | owner health report distinguishes current vs obsolete runs, obsolete pressure is removed without cancelling the sole current-head evidence, and required current-head lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | central scheduler and authenticated HTTP/GHAS permission lanes remain Draft/queued | reconciled protected-main exact head, terminal central checks, independent review, real cross-repository canary | +| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot has 512 queued / 11 in-progress runs and current #1602 evidence lanes are queued | owner health report distinguishes current vs obsolete runs, obsolete pressure is removed without cancelling the sole current-head evidence, and required current-head lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | #2040 source reconciliation is complete; #2272 now descends from current #2279, but consolidated exact-head hosted evidence, #2269 succession audit, GHAS selector/permission and independent review remain incomplete | terminal consolidated central checks, verified complete succession, qualifying independent review, real cross-repository GHAS canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate canonical fixed source against then-current base and vulnerability database after central integration | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | @@ -150,14 +151,13 @@ Current **Merge/Release Gate: FAIL**. The current causal order is: 1. recover current-head Actions execution capacity through `.github#712`, cancelling only obsolete/superseded pressure and preserving fail-closed current-head required evidence; do not blind-rerun or create source-neutral wake commits; -2. converge the central authenticated-HTTP / Pages / GHAS capability and permission lanes without losing valid owner deltas; -3. perform #2040 ordinary/non-force protected-main path-wise reconciliation and acquire fresh exact-head central GREEN + qualifying independent review; -4. prove the unchanged external authenticated dispatch/GHAS canary; -5. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; -6. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; -7. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -8. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; -9. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +2. terminalize and independently review the reconciled #2040 exact head and the current #2279→#2272 consolidated security/Pages lineage; audit #2269 for verified complete succession before any retirement; +3. reconcile and validate #2275 on the accepted foundation, then prove #2276's unchanged external authenticated dispatch/GHAS canary with real target analysis-read permission; +4. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; +5. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; +6. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +7. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; +8. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. From 55f9a06860fda228f67b76c11175f8505ded710c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 19:45:28 +0900 Subject: [PATCH 19/89] docs(gap): sync consolidated owner authority --- docs/product-technical-gap-baseline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e7929f4b7..a6f78b0e8 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -40,7 +40,7 @@ Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c - `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **512 queued** and **11 in-progress** runs in the central `.github` repository; #1602 exact-head repository workflows are also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. - `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has now completed the previously required ordinary/non-force protected-main path-wise reconciliation. Its reconciliation commit preserves the branch-owned scheduler/credential/exact-evidence contracts together with protected-main queue/GHAS/compatibility/retry deltas, repairs the stronger repository-identity boundary, removes the superseded unversioned CodeQL fallback, and keeps the v2 rerun payload within GitHub's top-level property ceiling. Focused verification is locally GREEN (**496 passed**; full **3,404 passed / 28 skipped / 40 subtests passed**), but the current hosted CodeQL, Security, Runtime Quality, Trusted uv, Python Security and Semgrep runs remain queued and qualifying independent current-head approval is still absent. Reconciliation is source-complete evidence, not merge authority. - `.github#2279@b338d1e246fcd13ed4b61ae63e6d36d4a4129beb` is the current authenticated GitHub API authority owner. Beyond initial-authority validation, fail-closed redirect refusal, corrected transport seams and production-opener synthetic-302 tests, it now owns an executable evidence-lineage invariant: every full G-17 evidence SHA must resolve as a commit and be an ancestor of the exact checked-out head; an unreachable commit-shaped mutation fails closed. Focused static/mechanism review is GREEN, but current Python Security, Runtime Quality, CodeQL, Security and Semgrep runs remain queued. -- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` has ordinary-forwarded beyond its earlier Pages-only generation and is now an exact descendant of current #2279 `b338d1e...`. Its effective successor tree therefore carries the current authenticated GitHub API authority lineage plus reusable Pages caller-input shell-boundary CI/origin-hardening deltas. The PR body still describes predecessor `e0b6e70f...`, so consumers use the exact Git graph and current head rather than that stale prose snapshot. Fresh exact-head hosted evidence is queued; source convergence does not make this lane accepted. +- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` is now the ordinary two-parent successor of current #2279 `b338d1e...` and preserves the reusable Pages caller-input shell-boundary/origin-hardening delta. Its current authority records that exact lineage, 93 focused tests in both normal and `GITHUB_ACTIONS=true` modes, a full **3,372 passed / 28 skipped / 40 subtests** warnings-as-errors run, zero unresolved review threads, and fresh exact-head hosted runs that are still queued. This is source/test convergence, not hosted acceptance or merge authority. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains a divergent historical redirect-containment/test-seam owner. Do not close it merely because #2272 now descends from #2279: a fresh complete-succession audit must prove every valid #2269 source/test/doctoring contract is inherited or deliberately superseded before retirement. - `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. Its current authority now points at #2279 `b338d1e...` as the foundation prerequisite. After the consolidated central security lineage is accepted, this selector must be ordinary-forward/non-force reconciled and reacquire exact-head evidence. - `.github#2276` separately owns the observed target-repository `403 Resource not accessible by integration` boundary. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing. A GREEN selector alone does not satisfy this permission boundary. @@ -105,7 +105,7 @@ Current `contextual-orchestrator` protected main is `5665b0ad1e07ffb5e9f8c59e44b | --- | --- | --- | --- | | P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | | P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot has 512 queued / 11 in-progress runs and current #1602 evidence lanes are queued | owner health report distinguishes current vs obsolete runs, obsolete pressure is removed without cancelling the sole current-head evidence, and required current-head lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | #2040 source reconciliation is complete; #2272 now descends from current #2279, but consolidated exact-head hosted evidence, #2269 succession audit, GHAS selector/permission and independent review remain incomplete | terminal consolidated central checks, verified complete succession, qualifying independent review, real cross-repository GHAS canary | +| P0 | Central CI/security acceptance | #2040 source reconciliation is complete; #2272 now succeeds current #2279 at source/test level, but consolidated exact-head hosted evidence, #2269 succession audit, GHAS selector/permission and independent review remain incomplete | terminal consolidated central checks, verified complete succession, qualifying independent review, real cross-repository GHAS canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate canonical fixed source against then-current base and vulnerability database after central integration | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | From e8c853d8c7bb3cdd26d76cbe06ee62b950c72dc2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 20:47:04 +0900 Subject: [PATCH 20/89] docs(gap): refresh central owner graph and LLM governance --- docs/product-technical-gap-baseline.md | 130 ++++++++++++------------- 1 file changed, 60 insertions(+), 70 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a6f78b0e8..cd0216565 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.5 +**Baseline version:** 2.6 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Historical point-in-time inventories and the previous v1.9 ledger are preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical evidence remains audit material, but current merge, release, owner, and buyer-readiness decisions must use the live authority below and fresh exact-head repository evidence. +This file is the current product/technical authority overlay. Historical point-in-time inventories and the previous v1.9 ledger remain preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`; intervening v2.x generations remain reconstructable from Git history. Historical evidence is audit material, not current merge or release authority. ## 1. Evidence hierarchy and release posture @@ -19,119 +19,110 @@ When sources disagree, use this order: 4. open Issues and Proposed/Accepted ADRs, with Accepted status requiring landed evidence; 5. archived baseline observations, older plans, README statements, and historical PR descriptions. -Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where the change affects product behavior. +Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where behavior changes. -Current repository shape is **279 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical release evidence, not the target commercial immutable publication contract. +Current repository shape is **279 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. ## 2. Current commercial classification -Naruon remains a production-oriented pre-GA communication and context control plane. Customer-owned mail, calendar, contact, and file systems remain source-of-truth systems. Naruon owns scoped context, policy, recommendation and intent state, provider-command/retry/reconciliation evidence, authorization boundaries, and the buyer-visible decision/action experience. +Naruon remains a production-oriented pre-GA communication and context control plane. Customer-owned mail, calendar, contact, and file systems remain systems of record. Naruon owns scoped context, policy, recommendation and intent state, provider-command/retry/reconciliation evidence, authorization boundaries, and the buyer-visible decision/action experience. -GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Naruon is not GA merely because individual PRs have green local tests, hosted checks, high coverage, or generated release artifacts. GA requires one protected, immutable product identity that proves the full buyer journey, provider interoperability, recovery/customer-exit behavior, current security evidence, and an operable support contract. - -The north-star dense knowledge graph, correct-by-exception inference, minimal-disclosure bridge, optional scientific adapters, and third-party plugin ecosystem remain later product differentiation unless a bounded GA-1 workflow directly depends on them. +GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Individual PR GREEN, high coverage, generated artifacts, or local test volume do not constitute GA. GA requires one protected immutable identity proving the buyer journey, provider interoperability, recovery/customer exit, current security evidence, and an operable support contract. ## 3. Current owner graph and integration gates ### 3.1 Central CI/security control plane -Protected central truth is `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. +Protected central truth remains `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. -- `.github#712` is the canonical operations owner for organization GitHub Actions queue starvation. Fresh observation on 2026-09-19 found **512 queued** and **11 in-progress** runs in the central `.github` repository; #1602 exact-head repository workflows are also entirely queued. This is a fail-closed execution-capacity prerequisite, not product GREEN or a reason to rerun unchanged heads. Diagnose and cancel only obsolete generations through the owner path, preserve the sole current-head required evidence, and recover runner assignment before treating hosted acceptance as available. -- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has now completed the previously required ordinary/non-force protected-main path-wise reconciliation. Its reconciliation commit preserves the branch-owned scheduler/credential/exact-evidence contracts together with protected-main queue/GHAS/compatibility/retry deltas, repairs the stronger repository-identity boundary, removes the superseded unversioned CodeQL fallback, and keeps the v2 rerun payload within GitHub's top-level property ceiling. Focused verification is locally GREEN (**496 passed**; full **3,404 passed / 28 skipped / 40 subtests passed**), but the current hosted CodeQL, Security, Runtime Quality, Trusted uv, Python Security and Semgrep runs remain queued and qualifying independent current-head approval is still absent. Reconciliation is source-complete evidence, not merge authority. -- `.github#2279@b338d1e246fcd13ed4b61ae63e6d36d4a4129beb` is the current authenticated GitHub API authority owner. Beyond initial-authority validation, fail-closed redirect refusal, corrected transport seams and production-opener synthetic-302 tests, it now owns an executable evidence-lineage invariant: every full G-17 evidence SHA must resolve as a commit and be an ancestor of the exact checked-out head; an unreachable commit-shaped mutation fails closed. Focused static/mechanism review is GREEN, but current Python Security, Runtime Quality, CodeQL, Security and Semgrep runs remain queued. -- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` is now the ordinary two-parent successor of current #2279 `b338d1e...` and preserves the reusable Pages caller-input shell-boundary/origin-hardening delta. Its current authority records that exact lineage, 93 focused tests in both normal and `GITHUB_ACTIONS=true` modes, a full **3,372 passed / 28 skipped / 40 subtests** warnings-as-errors run, zero unresolved review threads, and fresh exact-head hosted runs that are still queued. This is source/test convergence, not hosted acceptance or merge authority. -- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains a divergent historical redirect-containment/test-seam owner. Do not close it merely because #2272 now descends from #2279: a fresh complete-succession audit must prove every valid #2269 source/test/doctoring contract is inherited or deliberately superseded before retirement. -- `.github#2275@fc9c5537d9910f0536dab2aaf52888078c8ead64` owns capability-based selection of a credential that can actually read `code-scanning/analyses`; it does not manufacture repository permission. Its current authority now points at #2279 `b338d1e...` as the foundation prerequisite. After the consolidated central security lineage is accepted, this selector must be ordinary-forward/non-force reconciled and reacquire exact-head evidence. -- `.github#2276` separately owns the observed target-repository `403 Resource not accessible by integration` boundary. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing. A GREEN selector alone does not satisfy this permission boundary. +- `.github#712` remains the canonical organization Actions queue-starvation owner. Fresh observation now shows **531 queued / 4 in-progress** runs in the central `.github` repository. This is worse queue pressure than v2.5's 512/11 snapshot and remains a fail-closed execution-capacity prerequisite. Preserve the sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has completed ordinary/non-force path-wise protected-main reconciliation. Its reconciled source repairs repository identity, removes the superseded unversioned CodeQL fallback, preserves the v2 producer/credential/no-restamp contracts and current-main queue/GHAS behavior, and verified locally at **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. Hosted exact-head checks and qualifying independent current-head approval remain prerequisites; source reconciliation is not merge authority. +- `.github#2279@d1e4380c15e948aaf104d46aa134fa614058782a` is now the current authenticated GitHub API authority. It ordinary-forwarded beyond the v2.5 `b338d1e...` generation, retaining initial-authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and now owner-qualifying the foreign Semgrep evidence reference. It is Ready for review, not merge-authoritative; its current Python Security/CodeQL/Security/Semgrep/Runtime Quality generation is still pending/queued and independent current-head review remains required. +- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the current CodeQL dispatch repository-identity descendant of #2279 `d1e4380...`. Its ordinary two-parent reconciliation preserves the latest #2279 authority and the dispatch admission/stderr contract. Focused reconciliation is locally GREEN, but hosted current-head evidence and independent approval must be reacquired. +- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` is now the current GHAS analysis-read capability-selector descendant of #2271/#2279. It hardens the executable selector test so success requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. It remains Draft/Proposed until its foundation is accepted, hosted evidence is terminal, independent approval is current, and #2276 proves real target permission. +- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` still preserves the Pages caller-input shell boundary and the earlier #2279 `b338d1e...` security lineage, with 93 focused tests in both normal and `GITHUB_ACTIONS=true` modes and a full 3,372-passed local run. It is **no longer the current #2279 successor** because #2279 advanced to `d1e4380...`. Keep it Draft and ordinary/non-force adopt the current foundation before any acceptance claim; its predecessor receipts do not transfer. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains a divergent historical redirect/test-seam lane. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is inherited or intentionally superseded. +- `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. -No Naruon PR may copy these central workflow implementations. Consumers wait fail-closed for released/protected owner evidence and then ordinary-restack onto that contract. +No Naruon PR copies central workflow source. Naruon records owner identities, waits fail-closed for accepted/released contracts, then ordinary-restacks its own consumers. ### 3.2 Frontend dependency-security owner -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) is the canonical frontend dependency-security owner at exact head `509be4c1d9b6c7ba239a108656e2382681a85341`. That generation has six repository-local workflows GREEN and exact-head CodeRabbit approval with no unresolved review thread. Later #1718 Trivy evidence used a newer vulnerability database and found protected-base `next`/`sharp` debt that #1623's source already repairs. Therefore the old Security receipt is valid historical evidence for its generation but not proof against the later database generation. After central reconciliation and execution-capacity recovery, reacquire the invalidated current-base/current-database evidence before integration. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains canonical at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Its six-workflow GREEN generation and exact-head approval are historical evidence for that generation only. Later vulnerability-database evidence observed protected-base `next`/`sharp` debt already repaired by #1623 source, so Security must be reacquired against the then-current base/database after central execution capacity and workflow authority settle. ### 3.3 Workspace and migration lineage -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry / historical document-migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Its authoritative migration line is: +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry/historical migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, with one authoritative line: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` -The source repairs the known ownership RED, but final PostgreSQL fresh/historical execution and CI/security/review evidence remain blocked on the normal prerequisite line. No downstream feature may create a parallel Alembic head from protected `develop`; descendants must adopt the then-current canonical protected migration head. - -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) is correctly stacked on #1503 for opaque-ID backfill entropy and remains Draft. The repair changes only missing UID generation to PostgreSQL `gen_random_uuid()` while preserving public identifier shape. It does not rotate existing identifiers or treat opacity as authorization. +No downstream feature may create a parallel Alembic head from protected `develop`; descendants adopt the then-current canonical migration head. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly stacked on #1503 for opaque-ID backfill entropy and stays Draft. ### 3.4 Generated provenance lanes -Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. They are zero-effective-delta or canonical-tree descendants after ordinary/non-force reconciliation. Their checks and reviews do not transfer to the actual owner. +Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. -The recurrence itself is a control-plane Gap: once a generated branch is reconciled to provenance, its writer should become terminal/read-only or new generated work should perform semantic owner-overlap detection and route to the canonical owner before product source is rewritten. Source-neutral `trigger CI` commits are not acceptance evidence. +Repeated source re-entry after zero-delta reconciliation remains a control-plane Gap. Generated writers should perform semantic owner-overlap detection before source mutation and become terminal/read-only after provenance reconciliation. Source-neutral `trigger CI` commits are not acceptance evidence. ### 3.5 Auditable data-hygiene owner -[#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact data-hygiene owner at exact head `87a94a4c2b78f12a61ec699dee9ce081ea3d8578` and tree `f17cc6848752749ca965af1a7ca9d3f422c4b4d7`. On predecessor `a4a4da69...`, a RED regression proved that adjacent Markdown links were merged into one malformed URL candidate and that a typographic closing quote remained inside the candidate. The exact-head repair separates those delimiters while preserving IPv6 and balanced punctuation contracts; the focused URL suite is 11 passed and the full backend is 1,830 passed / 33 skipped with warnings as errors. Ruff, compileall and diff checks also pass. - -This remains Draft source evidence, not integrated product acceptance. ADR-0008 is correctly Proposed while unlanded. Exact-head Application CI `35433208478`, Bandit `35433208495`, Docker `35433208617`, Security `35433208474`, Semgrep `35433208453` and CodeQL `35433208463` were queued at the latest poll; zero unresolved review threads and local GREEN do not substitute for terminal hosted checks or a qualifying post-last-push independent approval. #1590 remains open until protected-tree succession proves its valid URL delta is fully inherited. +[#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains canonical at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. Its delimiter repair is locally RED→GREEN, including 11 focused URL tests and 1,830 backend tests / 33 skipped with warnings-as-errors, but current hosted checks and qualifying post-last-push approval remain absent. ADR-0008 remains Proposed and #1590 remains open until protected-tree succession proves complete inheritance. ## 4. UI, localization, and OIDC interaction state -[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) is the bounded OIDC pending-feedback owner at exact head `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. An intervening generated rewrite removed the rendered regression and doctoring; ordinary child `85e312...` restored the reviewed tree without force-push. The effective delta is exactly `SettingsLayout.tsx`, the rendered pending-feedback test, and its doctoring record. +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-feedback owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Its effective delta is `SettingsLayout.tsx`, the rendered pending-feedback regression, and doctoring. jsdom proves per-action pending state, duplicate-click prevention, `aria-busy`, visible pending copy, success cleanup, rejected-logout cleanup and error surfacing. Real-browser keyboard/focus/touch/AT, responsive screenshots, multilingual resource consumption, terminal exact-head hosted evidence and qualifying independent review remain absent. -The rendered jsdom contract proves per-action pending state, native duplicate-click prevention, `aria-busy`, spinner/visible pending copy, success cleanup, rejected-logout cleanup, and error surfacing. Exact-current Application CI, Bandit, Docker, Security, Semgrep, and CodeQL runs are still queued. Real-browser keyboard/focus/touch/assistive-technology, responsive screenshots, and qualifying independent current-head review are absent. +Canonical localization Gap [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) owns the product-local **UI Localization Catalog** for KO/EN/JA/ZH/VI/ES/DE/FR: stable `(screen_key, message_key)` identity, normalized DB revisions, immutable published resource versions, placeholder validation, screen-scoped ETag/version reads, UI-copy/ontology-label separation, read-only runtime credentials, and locale-specific Storybook/browser/a11y acceptance. It must begin from the then-current canonical #1503 migration ancestry rather than create a parallel DB head. -Canonical localization Gap is [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731). It owns a product-local **UI Localization Catalog** for KO/EN/JA/ZH/VI/ES/DE/FR with these invariants: +**UI Delivery Gate for #1729: FAIL.** Intent is PASS; functional completeness/resilience are PARTIAL; multilingual delivery and buyer-visible exact-head evidence are FAIL. -- stable `(screen_key, message_key)` product identity; display text is not identity; -- normalized PostgreSQL message definitions, immutable translation revisions, immutable published resource versions, and version bindings; -- publication fails if any active message lacks one of the eight required locales or violates placeholder schema; -- screen-scoped read/cache API with resource version and ETag; no whole-product browser catalog and no heavy browser i18n runtime as a prerequisite; -- UI translation authority remains separate from ontology/concept-label authority; -- browser/runtime credentials are read-only; publication is a short operator/content-governance transaction after drafting/review work; -- locale-specific Storybook and real-browser acceptance covers CJK line breaking/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, responsive layouts, keyboard/focus/touch/a11y, and no hydration locale flash. +## 5. LLM and cross-repository contract boundary -#1731 must not create a parallel migration line. Its implementation owner is created only after #1503's canonical migration ancestry is protected or completely succeeded, then it adopts the current migration head. #1729 consumes the released screen resource only after that owner exists. +Protected `develop` still carries a live governance contradiction: `AGENTS.md` describes central Strix as directly selecting GitHub Models, named fallbacks, Vertex and direct OpenAI modes, while the canonical CWL contract requires all model-backed Actions to request only logical `orchestrator/free` through the gateway and assigns provider/model/group discovery/fallback to contextual-orchestrator. -**Current UI Delivery Gate for #1729: FAIL.** Intent is PASS; functional completeness and resilience are PARTIAL; multilingual content and buyer-visible exact-head evidence are FAIL. No completion claim is permitted yet. +This defect already has one canonical Naruon owner. Issue [#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) and PR [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) own the governance repair; #1549 remains Draft at exact `9e47f25e256f52f13df267e0383bc3b036ac6f9e` with an effective six-file docs/test/config delta. Do not open a second AGENTS/CLAUDE/ARCHITECTURE LLM-governance writer. -## 5. LLM and cross-repository contract boundary +The intended released-owner boundary is unchanged: -All Naruon model-backed production work consumes the released `contextual-orchestrator` API/client/schema through an Agent boundary. Actions request `orchestrator/free` through the gateway token only; they do not hard-code provider/model/group or paid fallback. +- Naruon product/domain truth, authorization, tools and context stay local; +- model-backed Actions request `orchestrator/free` only and do not select provider/model/group or paid fallback; +- contextual-orchestrator owns provider discovery, capability/price/latency/availability/accuracy routing and fallback; +- production consumption requires an immutable released CO API/client/schema identity and otherwise fails closed. -Current `contextual-orchestrator` protected main is `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. Therefore protected `main` is not a released consumer identity. Naruon must keep any production path that requires an immutable CO API/client/schema release fail-closed until the owner publishes one and the consumer pins that released identity. No source copy or mutable-head dependency is accepted. +Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but GitHub Releases remains exactly `[]`. Therefore neither that moving protected SHA nor another unpublished owner commit is a production consumer identity. #1549 must refresh its owner-head narrative but must not bind product behavior to mutable main. ## 6. Buyer-visible P0/P1 Gap baseline | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot has 512 queued / 11 in-progress runs and current #1602 evidence lanes are queued | owner health report distinguishes current vs obsolete runs, obsolete pressure is removed without cancelling the sole current-head evidence, and required current-head lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | #2040 source reconciliation is complete; #2272 now succeeds current #2279 at source/test level, but consolidated exact-head hosted evidence, #2269 succession audit, GHAS selector/permission and independent review remain incomplete | terminal consolidated central checks, verified complete succession, qualifying independent review, real cross-repository GHAS canary | -| P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate canonical fixed source against then-current base and vulnerability database after central integration | +| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot is 531 queued / 4 in-progress and current #1602 evidence lanes are queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | #2040 reconciled; current security/GHAS stack is #2279 `d1e4380...` → #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 still trails the previous #2279 generation; #2269 succession and #2276 permission remain incomplete | terminal hosted checks, current-head independent review, Pages foundation reconciliation, verified succession, real unchanged-target GHAS canary | +| P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate fixed source against then-current base and vulnerability database | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | +| P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | | P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | | P0 | Connector/provider operability | protocol/writeback/retry foundations exist; full released connector lifecycle remains incomplete | signed installable artifact, enrollment/rotation, capability health, idempotent reconciliation, support evidence | | P0 | Recovery/customer exit | historical baseline records partial backup/object/portability work, not one buyer round trip | restore/PITR and tenant export→clean-import rehearsal preserving provenance/authorization | -| P1 | Auditable data hygiene | #1418 delimiter repair is exact-tree GREEN locally; hosted checks and current-head approval are pending | terminal exact-head checks/review, normal protected integration, then verified #1590 succession | -| P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish contract + locale Storybook/browser/a11y acceptance | -| P1 | OIDC pending UX | #1729 rendered jsdom repair exists but hosted/browser/multilingual evidence is incomplete | exact-head terminal checks/review + browser/AT/responsive evidence + released locale resource consumption | +| P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | +| P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | +| P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | | P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | | P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | -Rows from the archived v1.9 baseline remain useful historical evidence for connector lifecycle, object storage, recovery, provider scheduling, evidence identity, plugin lifecycle, accessibility, and release-train history. They are not silently converted into present-tense claims. Any still-open gap is tracked through its live Issue/PR owner and must be re-fetched before action. - ## 7. Performance, data, and DDD acceptance -- DDD Subdomain/Bounded Context/Context Map and Aggregate/Entity/Value Object/Domain Service/Repository/Event/Invariant naming must match ADR, code, API, DB, and tests. +- DDD Subdomain/Bounded Context/Context Map and Aggregate/Entity/Value Object/Domain Service/Repository/Event/Invariant naming must match ADR, code, API, DB and tests. - Aggregates keep transactions minimal. No LLM/network/long computation occurs inside an explicit database transaction. Cross-service SQL is forbidden. -- New persistence uses normalized schemas, descriptive multi-word `snake_case`, explicit ownership/tenant keys, idempotent item-level UPSERT where appropriate, and read/write separation or partitioning only from measured contention. -- Applicable buyer web/API paths target realistic p95 ≤20 ms. Evidence must use real query/I/O/render/runtime conditions; no sample shrink, measurement exclusion, or unrealistic cache warm-up. -- Performance/security/data-science hot paths are Rust-first where justified by profiling and contract constraints; Python remains a documented boundary when no practical Rust replacement exists. -- Deprecation and warning output is a defect to root-cause, fix, or explicitly track; warnings are not normal release noise. +- New persistence uses normalized schemas, descriptive multi-word `snake_case`, explicit ownership/tenant keys, and idempotent item-level UPSERT where appropriate. +- Applicable buyer web/API paths target realistic p95 ≤20 ms. Evidence uses real query/I/O/render/runtime conditions; no sample shrink, measurement exclusion, or unrealistic cache warm-up. +- Performance/security/data-science hot paths are Rust-first where profiling and contract constraints justify it; Python remains a documented boundary only when no practical Rust replacement exists. +- Deprecation and warning output is a defect to root-cause, fix, or explicitly track. ## 8. UI quality contract -Material UI is not complete without normal/loading/empty/error/permission states, responsive composition, keyboard/focus/touch/a11y evidence, and exact-head screenshots/E2E where the surface is buyer-visible. Storybook source-component provenance and Storybook rendered behavior are separate evidence. +Material UI is incomplete without normal/loading/empty/error/permission states, responsive composition, keyboard/focus/touch/a11y evidence, and exact-head screenshot/E2E where buyer-visible. Storybook source-component provenance and rendered Storybook behavior are separate evidence. Delivery Gate: @@ -139,39 +130,38 @@ Delivery Gate: - **Functional completeness:** displayed interactions work and preserve error/recovery semantics. - **Content:** no template filler, unsupported statistics, fake customer/security/performance claims, or generic CTA copy. - **Resilience:** mobile/intermediate widths, keyboard focus, loading/empty/error/permission states, and long/localized text do not break the task. -- **Evidence:** assertions are tied to current source/resource identity and reproducible browser/test receipts. -- **Distinctiveness:** product information architecture and interaction model remain recognizable without relying on generic AI gradients/cards/glass effects. +- **Evidence:** assertions bind to current source/resource identity and reproducible browser/test receipts. +- **Distinctiveness:** information architecture and interaction model remain recognizable without generic AI visual defaults. -If one required axis fails, the material UI is not complete. +If one required axis fails, material UI is not complete. ## 9. Release gate and next causal order Current **Merge/Release Gate: FAIL**. -The current causal order is: +Current causal order: -1. recover current-head Actions execution capacity through `.github#712`, cancelling only obsolete/superseded pressure and preserving fail-closed current-head required evidence; do not blind-rerun or create source-neutral wake commits; -2. terminalize and independently review the reconciled #2040 exact head and the current #2279→#2272 consolidated security/Pages lineage; audit #2269 for verified complete succession before any retirement; -3. reconcile and validate #2275 on the accepted foundation, then prove #2276's unchanged external authenticated dispatch/GHAS canary with real target analysis-read permission; -4. revalidate and normally integrate #1623 against the then-current protected base and vulnerability database; -5. integrate the Alembic/CI prerequisite line (#1694 → #1691 and direct code prerequisite) and then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; +1. recover current-head Actions execution capacity through `.github#712`, removing only obsolete/superseded pressure and preserving current-head required evidence; +2. terminalize and independently review #2040 and current #2279; then validate descendants #2271 → #2275 while separately ordinary-forwarding Pages #2272 onto the accepted current foundation; +3. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; +4. revalidate and normally integrate #1623 against then-current protected ancestry and vulnerability database; +5. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; 6. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -7. create one #1731 localization implementation owner from the then-current canonical migration head, publish/test the 8-locale screen-resource contract, then ordinary-adapt #1729; -8. only after an exact integrated protected candidate exists, update version/CHANGELOG and produce immutable release/package/OCI publication with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +7. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; +8. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; +9. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. ## 10. Standards and traceability additions -Current localization and accessibility work maps at minimum to: - Phillips, A., & Davis, M. (2009). *Tags for identifying languages* (BCP 47; RFC 5646). RFC Editor. https://doi.org/10.17487/RFC5646 Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC 9110). RFC Editor. https://doi.org/10.17487/RFC9110 World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ -The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. A new implementation must still bind the cited standard to exact code/API/test evidence rather than cite it decoratively. +The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. ## 11. Claim boundary From 72351c35b953f83e1c877fdbbd9c46bdf71f24cc Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 21:46:21 +0900 Subject: [PATCH 21/89] docs(gap): refresh queue and governance authority --- docs/product-technical-gap-baseline.md | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index cd0216565..83a84c1aa 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.6 +**Baseline version:** 2.7 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -21,7 +21,7 @@ When sources disagree, use this order: Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where behavior changes. -Current repository shape is **279 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. +Current repository shape is **280 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. ## 2. Current commercial classification @@ -35,7 +35,7 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Protected central truth remains `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. -- `.github#712` remains the canonical organization Actions queue-starvation owner. Fresh observation now shows **531 queued / 4 in-progress** runs in the central `.github` repository. This is worse queue pressure than v2.5's 512/11 snapshot and remains a fail-closed execution-capacity prerequisite. Preserve the sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#712` remains the canonical organization Actions queue-starvation owner. Fresh observation now shows **156 queued / 1 in-progress** runs in the central `.github` repository, a material contraction from v2.6's 531/4 snapshot but not evidence that runner acquisition is healthy. The latest owner specimen shows a current head where some lanes execute while other required jobs remain runnerless and later terminate cancelled. Keep this a fail-closed execution-capacity prerequisite until current-head required evidence reliably acquires runners and settles terminally. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. - `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has completed ordinary/non-force path-wise protected-main reconciliation. Its reconciled source repairs repository identity, removes the superseded unversioned CodeQL fallback, preserves the v2 producer/credential/no-restamp contracts and current-main queue/GHAS behavior, and verified locally at **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. Hosted exact-head checks and qualifying independent current-head approval remain prerequisites; source reconciliation is not merge authority. - `.github#2279@d1e4380c15e948aaf104d46aa134fa614058782a` is now the current authenticated GitHub API authority. It ordinary-forwarded beyond the v2.5 `b338d1e...` generation, retaining initial-authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and now owner-qualifying the foreign Semgrep evidence reference. It is Ready for review, not merge-authoritative; its current Python Security/CodeQL/Security/Semgrep/Runtime Quality generation is still pending/queued and independent current-head review remains required. - `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the current CodeQL dispatch repository-identity descendant of #2279 `d1e4380...`. Its ordinary two-parent reconciliation preserves the latest #2279 authority and the dispatch admission/stderr contract. Focused reconciliation is locally GREEN, but hosted current-head evidence and independent approval must be reacquired. @@ -68,6 +68,14 @@ Repeated source re-entry after zero-delta reconciliation remains a control-plane [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains canonical at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. Its delimiter repair is locally RED→GREEN, including 11 focused URL tests and 1,830 backend tests / 33 skipped with warnings-as-errors, but current hosted checks and qualifying post-last-push approval remain absent. ADR-0008 remains Proposed and #1590 remains open until protected-tree succession proves complete inheritance. +### 3.6 OpenSSF governance evidence owner + +Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) now own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft after a current review found the licensing boundary had been framed too softly. + +OpenSSF Best Practices Passing is for FLOSS projects and requires every MUST/MUST NOT criterion, including `floss_license`, to be satisfied. Naruon's current proprietary license is therefore a **legal/business eligibility blocker** to Passing unless an authorized copyright-holder/legal/business licensing decision changes that boundary. Engineering must not fabricate a project id, badge, waiver, or remediation date. This lane is governance evidence, not a reason to weaken product gates or a mandatory release dependency unless the business explicitly chooses OpenSSF Passing as a release criterion. + +The current effective change-control contract must also be represented accurately: ruleset `17214772` requires one approving review, stale-review dismissal, last-push approval and resolved threads; inherited `18156473` requires one approving review, stale-review dismissal and resolved threads but currently has `require_last_push_approval=false`. The integrated contract still requires last-push approval because `17214772` is active. + ## 4. UI, localization, and OIDC interaction state [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-feedback owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Its effective delta is `SettingsLayout.tsx`, the rendered pending-feedback regression, and doctoring. jsdom proves per-action pending state, duplicate-click prevention, `aria-busy`, visible pending copy, success cleanup, rejected-logout cleanup and error surfacing. Real-browser keyboard/focus/touch/AT, responsive screenshots, multilingual resource consumption, terminal exact-head hosted evidence and qualifying independent review remain absent. @@ -95,8 +103,8 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 279 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot is 531 queued / 4 in-progress and current #1602 evidence lanes are queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Release-train convergence | 280 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot contracted to 156 queued / 1 in-progress, but current-head runnerless/cancelled specimens remain and current #1602 evidence lanes are still queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | | P0 | Central CI/security acceptance | #2040 reconciled; current security/GHAS stack is #2279 `d1e4380...` → #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 still trails the previous #2279 generation; #2269 succession and #2276 permission remain incomplete | terminal hosted checks, current-head independent review, Pages foundation reconciliation, verified succession, real unchanged-target GHAS canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate fixed source against then-current base and vulnerability database | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | @@ -141,7 +149,7 @@ Current **Merge/Release Gate: FAIL**. Current causal order: -1. recover current-head Actions execution capacity through `.github#712`, removing only obsolete/superseded pressure and preserving current-head required evidence; +1. recover current-head Actions execution capacity through `.github#712`, removing only obsolete/superseded pressure and preserving current-head required evidence; the reduced queue count is encouraging but does not substitute for stable runner acquisition; 2. terminalize and independently review #2040 and current #2279; then validate descendants #2271 → #2275 while separately ordinary-forwarding Pages #2272 onto the accepted current foundation; 3. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; 4. revalidate and normally integrate #1623 against then-current protected ancestry and vulnerability database; @@ -151,6 +159,8 @@ Current causal order: 8. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; 9. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. + No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. ## 10. Standards and traceability additions @@ -161,8 +171,10 @@ Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC 9110). World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ +Open Source Security Foundation. (n.d.). *OpenSSF Best Practices Badge criteria: Passing*. https://www.bestpractices.dev/en/criteria?details=true&rationale=true + The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. ## 11. Claim boundary -This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. \ No newline at end of file +This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. From 56180ea18072644ab335b763037e13064468e484 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 21:48:41 +0900 Subject: [PATCH 22/89] docs(gap): record volatile queue recovery window --- docs/product-technical-gap-baseline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 83a84c1aa..ea771fb1a 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -35,7 +35,7 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Protected central truth remains `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. -- `.github#712` remains the canonical organization Actions queue-starvation owner. Fresh observation now shows **156 queued / 1 in-progress** runs in the central `.github` repository, a material contraction from v2.6's 531/4 snapshot but not evidence that runner acquisition is healthy. The latest owner specimen shows a current head where some lanes execute while other required jobs remain runnerless and later terminate cancelled. Keep this a fail-closed execution-capacity prerequisite until current-head required evidence reliably acquires runners and settles terminally. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the central queue contracted as low as **156 queued / 1 in-progress**; the two fresh sweeps immediately before this source update both observed **184 queued / 1 in-progress**. That is materially below v2.6's 531/4 snapshot but still volatile and is not evidence that runner acquisition is healthy. The latest owner specimen shows a current head where some lanes execute while other required jobs remain runnerless and later terminate cancelled. Keep this a fail-closed execution-capacity prerequisite until current-head required evidence reliably acquires runners and settles terminally. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. - `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has completed ordinary/non-force path-wise protected-main reconciliation. Its reconciled source repairs repository identity, removes the superseded unversioned CodeQL fallback, preserves the v2 producer/credential/no-restamp contracts and current-main queue/GHAS behavior, and verified locally at **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. Hosted exact-head checks and qualifying independent current-head approval remain prerequisites; source reconciliation is not merge authority. - `.github#2279@d1e4380c15e948aaf104d46aa134fa614058782a` is now the current authenticated GitHub API authority. It ordinary-forwarded beyond the v2.5 `b338d1e...` generation, retaining initial-authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and now owner-qualifying the foreign Semgrep evidence reference. It is Ready for review, not merge-authoritative; its current Python Security/CodeQL/Security/Semgrep/Runtime Quality generation is still pending/queued and independent current-head review remains required. - `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the current CodeQL dispatch repository-identity descendant of #2279 `d1e4380...`. Its ordinary two-parent reconciliation preserves the latest #2279 authority and the dispatch admission/stderr contract. Focused reconciliation is locally GREEN, but hosted current-head evidence and independent approval must be reacquired. @@ -104,7 +104,7 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 280 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; fresh central snapshot contracted to 156 queued / 1 in-progress, but current-head runnerless/cancelled specimens remain and current #1602 evidence lanes are still queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Actions execution capacity | `.github#712` remains open; observation window moved from 156 to 184 queued / 1 in-progress, materially below v2.6 but still volatile; current-head runnerless/cancelled specimens remain and current #1602 evidence lanes are queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | | P0 | Central CI/security acceptance | #2040 reconciled; current security/GHAS stack is #2279 `d1e4380...` → #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 still trails the previous #2279 generation; #2269 succession and #2276 permission remain incomplete | terminal hosted checks, current-head independent review, Pages foundation reconciliation, verified succession, real unchanged-target GHAS canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate fixed source against then-current base and vulnerability database | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | From 8ad9efc56679a804ee3a9e0bb9113c035fd503fb Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 22:48:32 +0900 Subject: [PATCH 23/89] docs(gap): adopt merged central URL authority and UID repair --- docs/product-technical-gap-baseline.md | 59 ++++++++++++++------------ 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index ea771fb1a..a092f3549 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.7 +**Baseline version:** 2.8 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -33,15 +33,15 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. ### 3.1 Central CI/security control plane -Protected central truth remains `.github/main@64aa08d7fa487deacd41c761c36277ca68cab6c9`. +Protected central truth advanced to `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. -- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the central queue contracted as low as **156 queued / 1 in-progress**; the two fresh sweeps immediately before this source update both observed **184 queued / 1 in-progress**. That is materially below v2.6's 531/4 snapshot but still volatile and is not evidence that runner acquisition is healthy. The latest owner specimen shows a current head where some lanes execute while other required jobs remain runnerless and later terminate cancelled. Keep this a fail-closed execution-capacity prerequisite until current-head required evidence reliably acquires runners and settles terminally. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. -- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` has completed ordinary/non-force path-wise protected-main reconciliation. Its reconciled source repairs repository identity, removes the superseded unversioned CodeQL fallback, preserves the v2 producer/credential/no-restamp contracts and current-main queue/GHAS behavior, and verified locally at **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. Hosted exact-head checks and qualifying independent current-head approval remain prerequisites; source reconciliation is not merge authority. -- `.github#2279@d1e4380c15e948aaf104d46aa134fa614058782a` is now the current authenticated GitHub API authority. It ordinary-forwarded beyond the v2.5 `b338d1e...` generation, retaining initial-authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and now owner-qualifying the foreign Semgrep evidence reference. It is Ready for review, not merge-authoritative; its current Python Security/CodeQL/Security/Semgrep/Runtime Quality generation is still pending/queued and independent current-head review remains required. -- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the current CodeQL dispatch repository-identity descendant of #2279 `d1e4380...`. Its ordinary two-parent reconciliation preserves the latest #2279 authority and the dispatch admission/stderr contract. Focused reconciliation is locally GREEN, but hosted current-head evidence and independent approval must be reacquired. -- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` is now the current GHAS analysis-read capability-selector descendant of #2271/#2279. It hardens the executable selector test so success requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. It remains Draft/Proposed until its foundation is accepted, hosted evidence is terminal, independent approval is current, and #2276 proves real target permission. -- `.github#2272@5c71e889a5ec7e4ad0e0d010c222ec521050bb9a` still preserves the Pages caller-input shell boundary and the earlier #2279 `b338d1e...` security lineage, with 93 focused tests in both normal and `GITHUB_ACTIONS=true` modes and a full 3,372-passed local run. It is **no longer the current #2279 successor** because #2279 advanced to `d1e4380...`. Keep it Draft and ordinary/non-force adopt the current foundation before any acceptance claim; its predecessor receipts do not transfer. -- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains a divergent historical redirect/test-seam lane. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is inherited or intentionally superseded. +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **268 queued / 1 in-progress**. This is still materially below v2.6's 531/4 snapshot but is volatile and not evidence of stable runner acquisition. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. +- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Fresh compare against `main@e6334e...` is now **diverged, 169 ahead / 33 behind, merge base `64aa08d7...`**. #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance; its previous reconciliation evidence remains source history, not acceptance for the new base. +- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the CodeQL dispatch repository-identity descendant. Its PR base now points to protected `main@e6334e...`, so #2279 is no longer an unlanded stack prerequisite. The head already carries the #2279 owner commit through prior ordinary two-parent ancestry and preserves the dispatch admission/stderr repair. Keep Draft until current-base hosted evidence and qualifying independent approval are current. +- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` remains the GHAS analysis-read capability-selector descendant of #2271. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. Its narrative that #2279 is still an acceptance prerequisite is now stale; the remaining prerequisites are current-base #2271/hosted acceptance and #2276 real target permission. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Its base is now protected `main@e6334e...`; keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is present in protected `main@e6334e...` or an accepted successor. - `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. No Naruon PR copies central workflow source. Naruon records owner identities, waits fail-closed for accepted/released contracts, then ordinary-restacks its own consumers. @@ -56,13 +56,15 @@ No Naruon PR copies central workflow source. Naruon records owner identities, wa `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` -No downstream feature may create a parallel Alembic head from protected `develop`; descendants adopt the then-current canonical migration head. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly stacked on #1503 for opaque-ID backfill entropy and stays Draft. +No downstream feature may create a parallel Alembic head from protected `develop`; descendants adopt the then-current canonical migration head. + +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly retargeted to #1503 for opaque-ID backfill entropy. An intervening Sentinel commit `103a52c9fad2081cf6ff6d10d8e9c73bea7395e4` retained a valid prompt-template assertion but deleted the dedicated 42-line entropy regression and 33-line doctoring/TRACEABILITY record. Ordinary children `f501b09af6086de4e9a79ac77488622eb67fcd63` and exact current `2ac48fb7e591827804ba8e7e911f211b0c134ddf` restore those artifacts byte-for-byte while retaining the intervening commit in ancestry. The effective delta remains five files: the historical migration, bootstrap generation, bootstrap expectations, focused regression, and doctoring. #1727 stays Draft; it is mechanically mergeable but **ahead 6 / behind 37** relative to #1503's shared protected merge base, and exact `2ac48fb...` currently has no workflow runs or formal reviews/threads. No predecessor receipt transfers. ### 3.4 Generated provenance lanes Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. -Repeated source re-entry after zero-delta reconciliation remains a control-plane Gap. Generated writers should perform semantic owner-overlap detection before source mutation and become terminal/read-only after provenance reconciliation. Source-neutral `trigger CI` commits are not acceptance evidence. +Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is a current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. Generated writers should perform semantic owner-overlap detection before source mutation and become terminal/read-only after provenance reconciliation. Source-neutral `trigger CI` commits are not acceptance evidence. ### 3.5 Auditable data-hygiene owner @@ -70,7 +72,7 @@ Repeated source re-entry after zero-delta reconciliation remains a control-plane ### 3.6 OpenSSF governance evidence owner -Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) now own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft after a current review found the licensing boundary had been framed too softly. +Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft. OpenSSF Best Practices Passing is for FLOSS projects and requires every MUST/MUST NOT criterion, including `floss_license`, to be satisfied. Naruon's current proprietary license is therefore a **legal/business eligibility blocker** to Passing unless an authorized copyright-holder/legal/business licensing decision changes that boundary. Engineering must not fabricate a project id, badge, waiver, or remediation date. This lane is governance evidence, not a reason to weaken product gates or a mandatory release dependency unless the business explicitly chooses OpenSSF Passing as a release criterion. @@ -104,10 +106,10 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 280 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; observation window moved from 156 to 184 queued / 1 in-progress, materially below v2.6 but still volatile; current-head runnerless/cancelled specimens remain and current #1602 evidence lanes are queued | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | #2040 reconciled; current security/GHAS stack is #2279 `d1e4380...` → #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 still trails the previous #2279 generation; #2269 succession and #2276 permission remain incomplete | terminal hosted checks, current-head independent review, Pages foundation reconciliation, verified succession, real unchanged-target GHAS canary | +| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 268 queued / 1 in-progress after an earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | protected main now includes #2279 at `e6334e...`; #2040 re-diverged after that merge; current descendant stack is #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | | P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate fixed source against then-current base and vulnerability database | -| P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review | +| P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | | P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | | P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | @@ -116,7 +118,7 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | | P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | | P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | -| P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | +| P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation; #1727 had executable regression/doctoring deleted by an intervening generated commit | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | | P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | ## 7. Performance, data, and DDD acceptance @@ -149,15 +151,16 @@ Current **Merge/Release Gate: FAIL**. Current causal order: -1. recover current-head Actions execution capacity through `.github#712`, removing only obsolete/superseded pressure and preserving current-head required evidence; the reduced queue count is encouraging but does not substitute for stable runner acquisition; -2. terminalize and independently review #2040 and current #2279; then validate descendants #2271 → #2275 while separately ordinary-forwarding Pages #2272 onto the accepted current foundation; -3. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; -4. revalidate and normally integrate #1623 against then-current protected ancestry and vulnerability database; -5. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; -6. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -7. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; -8. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; -9. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue is lower than the earlier 531 snapshot but remains volatile; +2. ordinary/non-force reconcile #2040 onto protected `main@e6334e...`, preserving both its scheduler contracts and the now-landed #2279 URL/redirect authority, then reacquire exact-head hosted evidence and qualifying independent review; +3. terminalize/review #2271 → #2275 on the current protected foundation, and terminalize/review Pages #2272 `cd3b41...` separately; +4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; +5. revalidate and normally integrate #1623 against then-current protected ancestry and vulnerability database; +6. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; +7. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +8. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; +9. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; +10. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. @@ -173,8 +176,12 @@ World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) Open Source Security Foundation. (n.d.). *OpenSSF Best Practices Badge criteria: Passing*. https://www.bestpractices.dev/en/criteria?details=true&rationale=true +PostgreSQL Global Development Group. (2026). *PostgreSQL 18 documentation: UUID functions*. PostgreSQL Documentation. https://www.postgresql.org/docs/current/functions-uuid.html + +PyCQA. (2026). *B608: hardcoded_sql_expressions*. Bandit documentation. https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html + The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. ## 11. Claim boundary -This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. +This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. \ No newline at end of file From 248e060e5f88a58598fe3dcf0ddc8ab1c643d07e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 19 Sep 2026 23:48:55 +0900 Subject: [PATCH 24/89] docs(gap): track backend SMTP dependency security --- docs/product-technical-gap-baseline.md | 57 ++++++++++++++++---------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a092f3549..d12b7fcc7 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.8 +**Baseline version:** 2.9 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -33,14 +33,14 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. ### 3.1 Central CI/security control plane -Protected central truth advanced to `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. +Protected central truth is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. -- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **268 queued / 1 in-progress**. This is still materially below v2.6's 531/4 snapshot but is volatile and not evidence of stable runner acquisition. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **330 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. - `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. -- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Fresh compare against `main@e6334e...` is now **diverged, 169 ahead / 33 behind, merge base `64aa08d7...`**. #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance; its previous reconciliation evidence remains source history, not acceptance for the new base. -- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the CodeQL dispatch repository-identity descendant. Its PR base now points to protected `main@e6334e...`, so #2279 is no longer an unlanded stack prerequisite. The head already carries the #2279 owner commit through prior ordinary two-parent ancestry and preserves the dispatch admission/stderr repair. Keep Draft until current-base hosted evidence and qualifying independent approval are current. -- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` remains the GHAS analysis-read capability-selector descendant of #2271. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. Its narrative that #2279 is still an acceptance prerequisite is now stale; the remaining prerequisites are current-base #2271/hosted acceptance and #2276 real target permission. -- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Its base is now protected `main@e6334e...`; keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. +- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Its PR metadata still records the preceding `base_sha=64aa08d7...`; #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance. Its previous reconciliation evidence remains source history, not acceptance for the new base. +- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the CodeQL dispatch repository-identity descendant. Its current-base path includes the landed #2279 authority and preserves the dispatch admission/stderr repair. Keep Draft until current-base hosted evidence and qualifying independent approval are current. +- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` remains the GHAS analysis-read capability-selector descendant of #2271. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. The remaining prerequisites are current-base #2271/hosted acceptance and #2276 real target permission. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is present in protected `main@e6334e...` or an accepted successor. - `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. @@ -48,9 +48,19 @@ No Naruon PR copies central workflow source. Naruon records owner identities, wa ### 3.2 Frontend dependency-security owner -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains canonical at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Its six-workflow GREEN generation and exact-head approval are historical evidence for that generation only. Later vulnerability-database evidence observed protected-base `next`/`sharp` debt already repaired by #1623 source, so Security must be reacquired against the then-current base/database after central execution capacity and workflow authority settle. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains canonical at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Its six-workflow GREEN generation and exact-head approval are historical evidence for that generation only. Later vulnerability-database evidence observed protected-base `next`/`sharp` debt already repaired by #1623 source, so Security must be reacquired against the then-current base/database after central execution capacity and workflow authority settle. Its live PR-state has been corrected to treat #2279 as landed and #2040 as re-diverged rather than waiting on the old central graph. -### 3.3 Workspace and migration lineage +### 3.3 Backend dependency-security and TestClient lock owner + +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) is the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. It pins `httpx2==2.5.0`, removes only the matching Starlette fallback-warning suppression, and proves TestClient runtime selection under warnings-as-errors. Its exact generation has Application CI, Security, Semgrep and Bandit success, while CodeQL remains a fail-closed central-control failure, Docker is queued, and qualifying independent approval is absent. + +[#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is the dependent broad backend-Python dependency lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`, stacked on #1565 and currently Draft/non-mergeable. Its current source updates `aiosmtplib 5.1.2 → 5.1.3` but does not regenerate `backend/uv.lock` and, if taken wholesale, drops #1565's direct `httpx2` contract. This is a repair finding, not a reason to discard the branch. + +The `aiosmtplib 5.1.3` delta is security-material and must survive reconciliation. Upstream v5.1.3 explicitly follows CVE-2026-53533 / GHSA-v3q9-hj7j-63hq by rejecting whitespace or angle brackets outside a quoted local part in SMTP address commands so caller-controlled input cannot smuggle extra ESMTP parameters; `sendmail` validates all addresses before command emission. The same release hardens `HELO`/`EHLO` hostname input, command/response synchronization, connection-lock cleanup and related lifecycle behavior. #1565's current base manifest still pins `aiosmtplib==5.1.2`, so this is a real current-source security Gap rather than a decorative version refresh. + +The minimum valid successor preserves both owners' contracts: keep #1565's direct reviewed `httpx2` pin and warnings-as-errors TestClient behavior, preserve `aiosmtplib==5.1.3`, regenerate `pyproject.toml`, plain requirements, hash-locked requirements and `uv.lock` as one coherent graph, add focused hostile SMTP address/hostname and relevant connection-lifecycle regression evidence, and reacquire exact-head backend/API/migration/security checks plus independent review. Do not create a second dependency writer unless #1685 explicitly delegates or loses this security slice. + +### 3.4 Workspace and migration lineage [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry/historical migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, with one authoritative line: @@ -60,17 +70,17 @@ No downstream feature may create a parallel Alembic head from protected `develop [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly retargeted to #1503 for opaque-ID backfill entropy. An intervening Sentinel commit `103a52c9fad2081cf6ff6d10d8e9c73bea7395e4` retained a valid prompt-template assertion but deleted the dedicated 42-line entropy regression and 33-line doctoring/TRACEABILITY record. Ordinary children `f501b09af6086de4e9a79ac77488622eb67fcd63` and exact current `2ac48fb7e591827804ba8e7e911f211b0c134ddf` restore those artifacts byte-for-byte while retaining the intervening commit in ancestry. The effective delta remains five files: the historical migration, bootstrap generation, bootstrap expectations, focused regression, and doctoring. #1727 stays Draft; it is mechanically mergeable but **ahead 6 / behind 37** relative to #1503's shared protected merge base, and exact `2ac48fb...` currently has no workflow runs or formal reviews/threads. No predecessor receipt transfers. -### 3.4 Generated provenance lanes +### 3.5 Generated provenance lanes Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is a current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. Generated writers should perform semantic owner-overlap detection before source mutation and become terminal/read-only after provenance reconciliation. Source-neutral `trigger CI` commits are not acceptance evidence. -### 3.5 Auditable data-hygiene owner +### 3.6 Auditable data-hygiene owner [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains canonical at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. Its delimiter repair is locally RED→GREEN, including 11 focused URL tests and 1,830 backend tests / 33 skipped with warnings-as-errors, but current hosted checks and qualifying post-last-push approval remain absent. ADR-0008 remains Proposed and #1590 remains open until protected-tree succession proves complete inheritance. -### 3.6 OpenSSF governance evidence owner +### 3.7 OpenSSF governance evidence owner Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft. @@ -106,9 +116,9 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 280 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 268 queued / 1 in-progress after an earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | protected main now includes #2279 at `e6334e...`; #2040 re-diverged after that merge; current descendant stack is #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | -| P0 | Dependency-security freshness | #1623 generation GREEN, later Trivy DB sees protected-base debt | revalidate fixed source against then-current base and vulnerability database | +| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 330 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | +| P0 | Dependency-security freshness | frontend #1623 needs current vulnerability-DB revalidation; backend #1565→#1685 must preserve `httpx2` and the `aiosmtplib 5.1.3` SMTP-injection hardening while rebuilding one lock/hash graph | current-base vulnerability scans + coherent backend manifest/uv/hash locks + hostile SMTP/TestClient regressions + exact-head CI/security/review | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | | P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | @@ -151,16 +161,17 @@ Current **Merge/Release Gate: FAIL**. Current causal order: -1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue is lower than the earlier 531 snapshot but remains volatile; +1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue remains volatile and currently has no in-progress run in the fresh snapshot; 2. ordinary/non-force reconcile #2040 onto protected `main@e6334e...`, preserving both its scheduler contracts and the now-landed #2279 URL/redirect authority, then reacquire exact-head hosted evidence and qualifying independent review; 3. terminalize/review #2271 → #2275 on the current protected foundation, and terminalize/review Pages #2272 `cd3b41...` separately; 4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; -5. revalidate and normally integrate #1623 against then-current protected ancestry and vulnerability database; -6. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; -7. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -8. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; -9. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; -10. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +5. revalidate and normally integrate frontend dependency-security #1623 against the then-current protected ancestry and vulnerability database; +6. integrate #1565's warning-free Starlette/httpx2 foundation, then ordinary/non-force reconcile #1685 so the combined dependency graph preserves both direct `httpx2` and `aiosmtplib==5.1.3`; regenerate plain/hash/uv locks and run focused SMTP hostile-input/lifecycle plus backend/API/security evidence; +7. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; +8. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +9. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; +10. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; +11. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. @@ -180,6 +191,8 @@ PostgreSQL Global Development Group. (2026). *PostgreSQL 18 documentation: UUID PyCQA. (2026). *B608: hardcoded_sql_expressions*. Bandit documentation. https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html +Cole, J. (2026, September 8). *aiosmtplib v5.1.3* [Software release]. GitHub. https://github.com/cole/aiosmtplib/releases/tag/v5.1.3 + The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. ## 11. Claim boundary From 482390756da001297c30e5c5cac423ed61c50e2e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 00:02:14 +0900 Subject: [PATCH 25/89] docs(gap): add LLM error confidentiality owner --- docs/product-technical-gap-baseline.md | 38 ++++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index d12b7fcc7..d9fc32864 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,6 +1,6 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.9 +**Baseline version:** 2.10 **Observed on:** 2026-09-19 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` @@ -21,7 +21,7 @@ When sources disagree, use this order: Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where behavior changes. -Current repository shape is **280 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. +Current repository shape is **281 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. ## 2. Current commercial classification @@ -35,7 +35,7 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Protected central truth is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. -- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **330 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **347 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. - `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. - `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Its PR metadata still records the preceding `base_sha=64aa08d7...`; #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance. Its previous reconciliation evidence remains source history, not acceptance for the new base. - `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the CodeQL dispatch repository-identity descendant. Its current-base path includes the landed #2279 authority and preserves the dispatch admission/stderr repair. Keep Draft until current-base hosted evidence and qualifying independent approval are current. @@ -60,6 +60,14 @@ The `aiosmtplib 5.1.3` delta is security-material and must survive reconciliatio The minimum valid successor preserves both owners' contracts: keep #1565's direct reviewed `httpx2` pin and warnings-as-errors TestClient behavior, preserve `aiosmtplib==5.1.3`, regenerate `pyproject.toml`, plain requirements, hash-locked requirements and `uv.lock` as one coherent graph, add focused hostile SMTP address/hostname and relevant connection-lifecycle regression evidence, and reacquire exact-head backend/API/migration/security checks plus independent review. Do not create a second dependency writer unless #1685 explicitly delegates or loses this security slice. +### 3.3.1 LLM provider error-confidentiality owner + +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) is the bounded LLM provider error-confidentiality repair at exact `7e8321bb5a059e6076a1ab1daa4f35ad8a6ae266`, currently Draft/open/mergeable with an effective three-file delta. Its generated first head `41644c0d51801547a4b408e23f7cad029c989c0d` correctly removed provider exception text from raised `LLMServiceError` but replaced direct log interpolation with `logger.error(..., exc_info=True)`, which still renders provider-controlled exception text and traceback into the log sink. + +The ordinary-forward repair records only fixed event text plus bounded `operation` and exception-class metadata, logs no exception string/traceback, and raises the fixed `LLMServiceError` `from None`. A hostile-canary regression now covers extraction, translation, standard OpenAI-compatible drafting and Ollama native drafting; it asserts the exact generic service message, absence of provider text in rendered logs, suppressed cause rendering, absence of `exc_info`, bounded metadata, and applicable client cleanup. The generated task-specific `.jules/sentinel.md` guidance was removed after the source fix and the file is byte-for-byte restored to protected-base blob `9208f58b118f11d0983c3a62df96916ec61a3384`. + +The first CodeRabbit review correctly required four-path regression coverage but incorrectly required traceback-aware `exc_info`; the valid coverage request was implemented and the unsafe logging recommendation was rejected with OWASP-based doctoring. That outdated thread is answered and resolved. Exact `7e8321b...` Application CI, Security, Semgrep, Bandit, CodeQL and Docker runs are currently queued, and no qualifying independent post-last-push approval exists. No local PASS is claimed because the current automation execution environment cannot run the repository test stack. Keep Draft until exact-head hosted acceptance is real. + ### 3.4 Workspace and migration lineage [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry/historical migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, with one authoritative line: @@ -74,7 +82,7 @@ No downstream feature may create a parallel Alembic head from protected `develop Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. -Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is a current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. Generated writers should perform semantic owner-overlap detection before source mutation and become terminal/read-only after provenance reconciliation. Source-neutral `trigger CI` commits are not acceptance evidence. +Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is a current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. #1733 adds a second pattern: generated security guidance improved one sink but recommended `exc_info=True`, which would have retained provider-controlled exception text in another sink. Generated writers should perform semantic owner-overlap and threat-boundary verification before source mutation, and task-specific self-modifying guidance should be removed once the durable source/test/doctoring fix exists. Source-neutral `trigger CI` commits are not acceptance evidence. ### 3.6 Auditable data-hygiene owner @@ -115,10 +123,11 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 280 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 330 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Release-train convergence | 281 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 347 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | | P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 needs current vulnerability-DB revalidation; backend #1565→#1685 must preserve `httpx2` and the `aiosmtplib 5.1.3` SMTP-injection hardening while rebuilding one lock/hash graph | current-base vulnerability scans + coherent backend manifest/uv/hash locks + hostile SMTP/TestClient regressions + exact-head CI/security/review | +| P0 | LLM provider error confidentiality | #1733 exact `7e8321b...` repairs provider exception leakage across service exceptions/logs and carries four-path secret-canary coverage, but hosted exact-head evidence and independent approval are pending | current-head Application CI/security/Semgrep/Bandit/CodeQL/Docker terminal success + zero valid review findings + qualifying post-last-push approval | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | | P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | @@ -128,7 +137,7 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | | P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | | P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | -| P1 | Generated-writer owner lock | repeated generated source re-entry after zero-delta reconciliation; #1727 had executable regression/doctoring deleted by an intervening generated commit | semantic owner-overlap detection and writer-terminal/read-only control with regression evidence | +| P1 | Generated-writer owner lock | generated source re-entry has deleted executable evidence (#1727) and recommended an unsafe log-sink substitute before verification (#1733) | semantic owner/threat-boundary detection, durable source/test/doctoring transfer, and terminal/read-only generated guidance after repair | | P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | ## 7. Performance, data, and DDD acceptance @@ -167,11 +176,12 @@ Current causal order: 4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; 5. revalidate and normally integrate frontend dependency-security #1623 against the then-current protected ancestry and vulnerability database; 6. integrate #1565's warning-free Starlette/httpx2 foundation, then ordinary/non-force reconcile #1685 so the combined dependency graph preserves both direct `httpx2` and `aiosmtplib==5.1.3`; regenerate plain/hash/uv locks and run focused SMTP hostile-input/lifecycle plus backend/API/security evidence; -7. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; -8. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -9. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; -10. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; -11. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. +7. terminalize and independently review #1733's fixed-message/bounded-metadata error-confidentiality contract and four-path hostile-canary evidence; no traceback/provider-text logging may return; +8. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; +9. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +10. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; +11. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; +12. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. @@ -193,6 +203,10 @@ PyCQA. (2026). *B608: hardcoded_sql_expressions*. Bandit documentation. https:// Cole, J. (2026, September 8). *aiosmtplib v5.1.3* [Software release]. GitHub. https://github.com/cole/aiosmtplib/releases/tag/v5.1.3 +OWASP Foundation. (n.d.). *Logging cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html + +OWASP Foundation. (n.d.). *Microservices security cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Microservices_Security_Cheat_Sheet.html + The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. ## 11. Claim boundary From 30db32df5ac5116acc5e32933ebbbb07d4ad7629 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 00:13:36 +0900 Subject: [PATCH 26/89] docs(gap): refresh central stack and LLM redaction authority --- docs/product-technical-gap-baseline.md | 32 ++++++++++++++------------ 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index d9fc32864..60e2dbc35 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,7 +1,7 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.10 -**Observed on:** 2026-09-19 (Asia/Seoul) +**Baseline version:** 2.11 +**Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) @@ -35,11 +35,11 @@ GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Protected central truth is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. -- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **347 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **376 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. - `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. - `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Its PR metadata still records the preceding `base_sha=64aa08d7...`; #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance. Its previous reconciliation evidence remains source history, not acceptance for the new base. -- `.github#2271@8aff1a6a581613709c01747fe68c1f7523fe84da` is the CodeQL dispatch repository-identity descendant. Its current-base path includes the landed #2279 authority and preserves the dispatch admission/stderr repair. Keep Draft until current-base hosted evidence and qualifying independent approval are current. -- `.github#2275@f54aeb6f5c6b30534ee2f12e040208e098957b4b` remains the GHAS analysis-read capability-selector descendant of #2271. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack is **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. The remaining prerequisites are current-base #2271/hosted acceptance and #2276 real target permission. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It has ordinary two-parent restacked the previously reviewed owner generation onto protected `main@e6334e...`; the tree remains byte-identical to the prior reviewed generation and the protected-main compare is 8 ahead / 0 behind across exactly three owned paths. It is Ready for review, not merge-accepted: fresh Python Security, Semgrep, CodeQL and Security runs remain queued/nonterminal and a qualifying current-head approval is still required. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS analysis-read capability-selector descendant of current #2271 `a0e1424...`. Its ordinary two-parent successor retains the prior selector tree byte-for-byte while recording current #2271 ancestry. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack remains **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. Fresh CodeQL/Semgrep/Security runs remain queued. Acceptance still requires #2271 acceptance, #2276 real target permission, terminal exact-head checks and qualifying independent approval. - `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is present in protected `main@e6334e...` or an accepted successor. - `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. @@ -62,11 +62,13 @@ The minimum valid successor preserves both owners' contracts: keep #1565's direc ### 3.3.1 LLM provider error-confidentiality owner -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) is the bounded LLM provider error-confidentiality repair at exact `7e8321bb5a059e6076a1ab1daa4f35ad8a6ae266`, currently Draft/open/mergeable with an effective three-file delta. Its generated first head `41644c0d51801547a4b408e23f7cad029c989c0d` correctly removed provider exception text from raised `LLMServiceError` but replaced direct log interpolation with `logger.error(..., exc_info=True)`, which still renders provider-controlled exception text and traceback into the log sink. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) is the bounded LLM provider error-confidentiality repair at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, currently Draft/open/mergeable with an effective three-file delta. Its generated first head `41644c0d51801547a4b408e23f7cad029c989c0d` correctly removed provider exception text from raised `LLMServiceError` but replaced direct log interpolation with `logger.error(..., exc_info=True)`, which still rendered provider-controlled exception text and traceback into the log sink. -The ordinary-forward repair records only fixed event text plus bounded `operation` and exception-class metadata, logs no exception string/traceback, and raises the fixed `LLMServiceError` `from None`. A hostile-canary regression now covers extraction, translation, standard OpenAI-compatible drafting and Ollama native drafting; it asserts the exact generic service message, absence of provider text in rendered logs, suppressed cause rendering, absence of `exc_info`, bounded metadata, and applicable client cleanup. The generated task-specific `.jules/sentinel.md` guidance was removed after the source fix and the file is byte-for-byte restored to protected-base blob `9208f58b118f11d0983c3a62df96916ec61a3384`. +The ordinary-forward production repair records only fixed event text plus bounded `operation` and exception-class metadata, logs no exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. A hostile-canary regression covers extraction, translation, standard OpenAI-compatible drafting and Ollama native drafting; it asserts the exact generic service message, absence of provider text in rendered logs, suppressed cause rendering, absence of `exc_info`, bounded metadata, and applicable client cleanup. The generated task-specific `.jules/sentinel.md` guidance was removed after the source fix and the file is byte-for-byte restored to protected-base blob `9208f58b118f11d0983c3a62df96916ec61a3384`. -The first CodeRabbit review correctly required four-path regression coverage but incorrectly required traceback-aware `exc_info`; the valid coverage request was implemented and the unsafe logging recommendation was rejected with OWASP-based doctoring. That outdated thread is answered and resolved. Exact `7e8321b...` Application CI, Security, Semgrep, Bandit, CodeQL and Docker runs are currently queued, and no qualifying independent post-last-push approval exists. No local PASS is claimed because the current automation execution environment cannot run the repository test stack. Keep Draft until exact-head hosted acceptance is real. +After the stronger reviewed `7e8321bb...` generation, generated commit `1da2457c0e8cfa71a620515a93611b97d4aad200` arrived as an ordinary child. It left production source and the four-path regression intact but partially rolled back doctoring by deleting the review-finding verification, explicit four-path evidence, generated-writer cleanup record and exact repair lineage. Ordinary-forward `9d9d5e0...` retains that intervening commit in ancestry and restores the stronger TRACEABILITY record without product-source churn. Predecessor receipts do not transfer. + +The first CodeRabbit review correctly required four-path regression coverage but incorrectly required traceback-aware `exc_info`; the valid coverage request was implemented and the unsafe logging recommendation was rejected with OWASP-based doctoring. The old thread is resolved/outdated. Exact `9d9d5e0...` Application CI, Security, Semgrep, Bandit, CodeQL and Docker runs are currently queued, and no qualifying independent post-last-push approval exists. No local PASS is claimed because the current automation execution environment cannot run the repository test stack. Keep Draft until exact-head hosted acceptance is real. ### 3.4 Workspace and migration lineage @@ -82,7 +84,7 @@ No downstream feature may create a parallel Alembic head from protected `develop Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. -Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is a current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. #1733 adds a second pattern: generated security guidance improved one sink but recommended `exc_info=True`, which would have retained provider-controlled exception text in another sink. Generated writers should perform semantic owner-overlap and threat-boundary verification before source mutation, and task-specific self-modifying guidance should be removed once the durable source/test/doctoring fix exists. Source-neutral `trigger CI` commits are not acceptance evidence. +Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is one current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. #1733 demonstrates both forms of the failure: the initial generated security guidance recommended `exc_info=True`, which would have retained provider-controlled exception text in another sink, and a later generated child `1da2457...` partially rolled back the stronger owner doctoring after the source/test repair already existed. Generated writers should perform semantic owner-overlap and threat-boundary verification before source mutation, and task-specific self-modifying guidance should be removed once the durable source/test/doctoring fix exists. Source-neutral `trigger CI` commits are not acceptance evidence. ### 3.6 Auditable data-hygiene owner @@ -124,10 +126,10 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 281 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 347 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `8aff1a...` → #2275 `f54aeb...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | +| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 376 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `a0e1424...` → #2275 `572cfed...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 needs current vulnerability-DB revalidation; backend #1565→#1685 must preserve `httpx2` and the `aiosmtplib 5.1.3` SMTP-injection hardening while rebuilding one lock/hash graph | current-base vulnerability scans + coherent backend manifest/uv/hash locks + hostile SMTP/TestClient regressions + exact-head CI/security/review | -| P0 | LLM provider error confidentiality | #1733 exact `7e8321b...` repairs provider exception leakage across service exceptions/logs and carries four-path secret-canary coverage, but hosted exact-head evidence and independent approval are pending | current-head Application CI/security/Semgrep/Bandit/CodeQL/Docker terminal success + zero valid review findings + qualifying post-last-push approval | +| P0 | LLM provider error confidentiality | #1733 exact `9d9d5e0...` preserves the four-path secret-canary repair and restores TRACEABILITY after generated child `1da2457...` partially rolled the doctoring back; hosted exact-head evidence and independent approval are pending | current-head Application CI/security/Semgrep/Bandit/CodeQL/Docker terminal success + zero valid review findings + qualifying post-last-push approval | | P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | | P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | | P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | @@ -137,7 +139,7 @@ Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b | P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | | P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | | P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | -| P1 | Generated-writer owner lock | generated source re-entry has deleted executable evidence (#1727) and recommended an unsafe log-sink substitute before verification (#1733) | semantic owner/threat-boundary detection, durable source/test/doctoring transfer, and terminal/read-only generated guidance after repair | +| P1 | Generated-writer owner lock | generated source re-entry has deleted executable evidence (#1727), recommended an unsafe log-sink substitute, and later rolled back owner TRACEABILITY (#1733) | semantic owner/threat-boundary detection, durable source/test/doctoring transfer, and terminal/read-only generated guidance after repair | | P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | ## 7. Performance, data, and DDD acceptance @@ -172,11 +174,11 @@ Current causal order: 1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue remains volatile and currently has no in-progress run in the fresh snapshot; 2. ordinary/non-force reconcile #2040 onto protected `main@e6334e...`, preserving both its scheduler contracts and the now-landed #2279 URL/redirect authority, then reacquire exact-head hosted evidence and qualifying independent review; -3. terminalize/review #2271 → #2275 on the current protected foundation, and terminalize/review Pages #2272 `cd3b41...` separately; +3. terminalize/review current-main-restacked #2271 `a0e1424...` → #2275 `572cfed...`, and terminalize/review Pages #2272 `cd3b41...` separately; 4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; 5. revalidate and normally integrate frontend dependency-security #1623 against the then-current protected ancestry and vulnerability database; 6. integrate #1565's warning-free Starlette/httpx2 foundation, then ordinary/non-force reconcile #1685 so the combined dependency graph preserves both direct `httpx2` and `aiosmtplib==5.1.3`; regenerate plain/hash/uv locks and run focused SMTP hostile-input/lifecycle plus backend/API/security evidence; -7. terminalize and independently review #1733's fixed-message/bounded-metadata error-confidentiality contract and four-path hostile-canary evidence; no traceback/provider-text logging may return; +7. terminalize and independently review #1733 exact `9d9d5e0...`, preserving fixed-message/bounded-metadata error confidentiality, four-path hostile-canary evidence and the restored TRACEABILITY record; no traceback/provider-text logging or generated doctoring rollback may return; 8. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; 9. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; 10. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; From 40ca646856e8d5275523ea96fa59b00e74a4e08a Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 00:47:50 +0900 Subject: [PATCH 27/89] docs(gap): refresh reconciled central scheduler authority --- docs/product-technical-gap-baseline.md | 239 +++++------------- .../2026-09-20-baseline-v2.11.md | 216 ++++++++++++++++ 2 files changed, 278 insertions(+), 177 deletions(-) create mode 100644 docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 60e2dbc35..57acbe491 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,216 +1,101 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.11 +**Baseline version:** 2.12 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Historical point-in-time inventories and the previous v1.9 ledger remain preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`; intervening v2.x generations remain reconstructable from Git history. Historical evidence is audit material, not current merge or release authority. +This file is the current product/technical authority overlay. Baseline v2.11 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. -## 1. Evidence hierarchy and release posture +## 1. Evidence and release posture -When sources disagree, use this order: +Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -1. exact protected-branch code, migrations, tests, runtime contracts, and security boundaries; -2. exact protected-branch architecture and operations documents; -3. exact current pull-request source and current-head evidence; -4. open Issues and Proposed/Accepted ADRs, with Accepted status requiring landed evidence; -5. archived baseline observations, older plans, README statements, and historical PR descriptions. +The current repository shape is **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. -Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where behavior changes. +A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. -Current repository shape is **281 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. +## 2. Current central CI/security owner graph -## 2. Current commercial classification +Protected central authority is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are therefore protected ancestry; #2279 is not an open foundation prerequisite. -Naruon remains a production-oriented pre-GA communication and context control plane. Customer-owned mail, calendar, contact, and file systems remain systems of record. Naruon owns scoped context, policy, recommendation and intent state, provider-command/retry/reconciliation evidence, authorization boundaries, and the buyer-visible decision/action experience. +- `.github#712` remains the Actions execution-capacity owner. At this observation there are **401 queued / 0 in-progress** runs. This is not stable runner acquisition; do not generate source-neutral wake commits or blind unchanged-head reruns. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has now completed a second ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, Ready for review, mergeable, 8 ahead / 0 behind and still awaiting terminal exact-head checks plus qualifying independent approval. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` separately preserves the Pages caller-input shell/SAST lane while carrying landed #2279 ancestry. It remains Draft pending hosted exact-head Pages/security/SAST/CodeQL/runtime evidence and independent approval. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. +- `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. -GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Individual PR GREEN, high coverage, generated artifacts, or local test volume do not constitute GA. GA requires one protected immutable identity proving the buyer journey, provider interoperability, recovery/customer exit, current security evidence, and an operable support contract. +Naruon must not copy central workflow source. It records owner identities and adopts accepted/released contracts through ordinary-forward consumer changes only. -## 3. Current owner graph and integration gates +## 3. Product owner boundaries -### 3.1 Central CI/security control plane +### Frontend dependency security -Protected central truth is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI owners. -- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **376 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. -- `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. -- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Its PR metadata still records the preceding `base_sha=64aa08d7...`; #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance. Its previous reconciliation evidence remains source history, not acceptance for the new base. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It has ordinary two-parent restacked the previously reviewed owner generation onto protected `main@e6334e...`; the tree remains byte-identical to the prior reviewed generation and the protected-main compare is 8 ahead / 0 behind across exactly three owned paths. It is Ready for review, not merge-accepted: fresh Python Security, Semgrep, CodeQL and Security runs remain queued/nonterminal and a qualifying current-head approval is still required. -- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS analysis-read capability-selector descendant of current #2271 `a0e1424...`. Its ordinary two-parent successor retains the prior selector tree byte-for-byte while recording current #2271 ancestry. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack remains **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. Fresh CodeQL/Semgrep/Security runs remain queued. Acceptance still requires #2271 acceptance, #2276 real target permission, terminal exact-head checks and qualifying independent approval. -- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. -- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is present in protected `main@e6334e...` or an accepted successor. -- `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. +### Backend dependency security -No Naruon PR copies central workflow source. Naruon records owner identities, waits fail-closed for accepted/released contracts, then ordinary-restacks its own consumers. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the dependent broad backend lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`; its `aiosmtplib==5.1.3` security delta must survive, but a valid successor must also preserve #1565's direct `httpx2` contract and regenerate one coherent plain/hash/uv lock graph. Add hostile SMTP address/hostname and connection-lifecycle regressions before acceptance. -### 3.2 Frontend dependency-security owner +### LLM provider error confidentiality -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains canonical at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Its six-workflow GREEN generation and exact-head approval are historical evidence for that generation only. Later vulnerability-database evidence observed protected-base `next`/`sharp` debt already repaired by #1623 source, so Security must be reacquired against the then-current base/database after central execution capacity and workflow authority settle. Its live PR-state has been corrected to treat #2279 as landed and #2040 as re-diverged rather than waiting on the old central graph. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its six exact-head hosted workflows remain queued; no predecessor receipt transfers. -### 3.3 Backend dependency-security and TestClient lock owner +### Workspace and migrations -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) is the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. It pins `httpx2==2.5.0`, removes only the matching Starlette fallback-warning suppression, and proves TestClient runtime selection under warnings-as-errors. Its exact generation has Application CI, Security, Semgrep and Bandit success, while CodeQL remains a fail-closed central-control failure, Docker is queued, and qualifying independent approval is absent. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7` with one migration line: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. No descendant may create a parallel head from protected `develop`. -[#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is the dependent broad backend-Python dependency lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`, stacked on #1565 and currently Draft/non-mergeable. Its current source updates `aiosmtplib 5.1.2 → 5.1.3` but does not regenerate `backend/uv.lock` and, if taken wholesale, drops #1565's direct `httpx2` contract. This is a repair finding, not a reason to discard the branch. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the bounded opaque-ID entropy descendant at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, retargeted to #1503. It retains the intervening generated commit but restores the deleted executable entropy regression and doctoring. Keep Draft and ordinary-adopt on the then-current #1503 lineage before acceptance. -The `aiosmtplib 5.1.3` delta is security-material and must survive reconciliation. Upstream v5.1.3 explicitly follows CVE-2026-53533 / GHSA-v3q9-hj7j-63hq by rejecting whitespace or angle brackets outside a quoted local part in SMTP address commands so caller-controlled input cannot smuggle extra ESMTP parameters; `sendmail` validates all addresses before command emission. The same release hardens `HELO`/`EHLO` hostname input, command/response synchronization, connection-lock cleanup and related lifecycle behavior. #1565's current base manifest still pins `aiosmtplib==5.1.2`, so this is a real current-source security Gap rather than a decorative version refresh. +### LLM governance/released contract -The minimum valid successor preserves both owners' contracts: keep #1565's direct reviewed `httpx2` pin and warnings-as-errors TestClient behavior, preserve `aiosmtplib==5.1.3`, regenerate `pyproject.toml`, plain requirements, hash-locked requirements and `uv.lock` as one coherent graph, add focused hostile SMTP address/hostname and relevant connection-lifecycle regression evidence, and reacquire exact-head backend/API/migration/security checks plus independent review. Do not create a second dependency writer unless #1685 explicitly delegates or loses this security slice. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is currently `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. -### 3.3.1 LLM provider error-confidentiality owner +## 4. Buyer-visible UI and localization -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) is the bounded LLM provider error-confidentiality repair at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, currently Draft/open/mergeable with an effective three-file delta. Its generated first head `41644c0d51801547a4b408e23f7cad029c989c0d` correctly removed provider exception text from raised `LLMServiceError` but replaced direct log interpolation with `logger.error(..., exc_info=True)`, which still rendered provider-controlled exception text and traceback into the log sink. +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Because this PR changes only frontend product/test files and `frontend/package.json`, do not patch central workflow or duplicate dependency-security ownership here. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. -The ordinary-forward production repair records only fixed event text plus bounded `operation` and exception-class metadata, logs no exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. A hostile-canary regression covers extraction, translation, standard OpenAI-compatible drafting and Ollama native drafting; it asserts the exact generic service message, absence of provider text in rendered logs, suppressed cause rendering, absence of `exc_info`, bounded metadata, and applicable client cleanup. The generated task-specific `.jules/sentinel.md` guidance was removed after the source fix and the file is byte-for-byte restored to protected-base blob `9208f58b118f11d0983c3a62df96916ec61a3384`. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single UI Localization Catalog Gap. The implementation must follow #1503's then-current migration head, use a product-owned DB-versioned screen-scoped resource, keep UI translation separate from ontology labels, support KO/EN/JA/ZH/VI/ES/DE/FR, and validate CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. Do not broaden #1729 into the catalog implementation. -After the stronger reviewed `7e8321bb...` generation, generated commit `1da2457c0e8cfa71a620515a93611b97d4aad200` arrived as an ordinary child. It left production source and the four-path regression intact but partially rolled back doctoring by deleting the review-finding verification, explicit four-path evidence, generated-writer cleanup record and exact repair lineage. Ordinary-forward `9d9d5e0...` retains that intervening commit in ancestry and restores the stronger TRACEABILITY record without product-source churn. Predecessor receipts do not transfer. +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-state owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Rendered interaction contracts exist, but real-browser keyboard/focus/touch/AT, responsive screenshots, eight-locale released resources and current-head independent acceptance remain missing. **UI Delivery Gate: FAIL.** -The first CodeRabbit review correctly required four-path regression coverage but incorrectly required traceback-aware `exc_info`; the valid coverage request was implemented and the unsafe logging recommendation was rejected with OWASP-based doctoring. The old thread is resolved/outdated. Exact `9d9d5e0...` Application CI, Security, Semgrep, Bandit, CodeQL and Docker runs are currently queued, and no qualifying independent post-last-push approval exists. No local PASS is claimed because the current automation execution environment cannot run the repository test stack. Keep Draft until exact-head hosted acceptance is real. +## 5. Generated-writer and governance boundaries -### 3.4 Workspace and migration lineage +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 both demonstrate why generated commits must be inspected as intervening deltas: deleting executable tests or doctoring after a valid owner repair is a repair finding, not a reason to force-rewrite history. Preserve valid generated deltas, restore lost contracts ordinary-forward, remove task-specific self-modifying guidance after its durable purpose is complete, and never treat source-neutral `trigger CI` commits as acceptance evidence. -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry/historical migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, with one authoritative line: +Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. -`0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` - -No downstream feature may create a parallel Alembic head from protected `develop`; descendants adopt the then-current canonical migration head. - -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly retargeted to #1503 for opaque-ID backfill entropy. An intervening Sentinel commit `103a52c9fad2081cf6ff6d10d8e9c73bea7395e4` retained a valid prompt-template assertion but deleted the dedicated 42-line entropy regression and 33-line doctoring/TRACEABILITY record. Ordinary children `f501b09af6086de4e9a79ac77488622eb67fcd63` and exact current `2ac48fb7e591827804ba8e7e911f211b0c134ddf` restore those artifacts byte-for-byte while retaining the intervening commit in ancestry. The effective delta remains five files: the historical migration, bootstrap generation, bootstrap expectations, focused regression, and doctoring. #1727 stays Draft; it is mechanically mergeable but **ahead 6 / behind 37** relative to #1503's shared protected merge base, and exact `2ac48fb...` currently has no workflow runs or formal reviews/threads. No predecessor receipt transfers. - -### 3.5 Generated provenance lanes - -Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. - -Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is one current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. #1733 demonstrates both forms of the failure: the initial generated security guidance recommended `exc_info=True`, which would have retained provider-controlled exception text in another sink, and a later generated child `1da2457...` partially rolled back the stronger owner doctoring after the source/test repair already existed. Generated writers should perform semantic owner-overlap and threat-boundary verification before source mutation, and task-specific self-modifying guidance should be removed once the durable source/test/doctoring fix exists. Source-neutral `trigger CI` commits are not acceptance evidence. - -### 3.6 Auditable data-hygiene owner - -[#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains canonical at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. Its delimiter repair is locally RED→GREEN, including 11 focused URL tests and 1,830 backend tests / 33 skipped with warnings-as-errors, but current hosted checks and qualifying post-last-push approval remain absent. ADR-0008 remains Proposed and #1590 remains open until protected-tree succession proves complete inheritance. - -### 3.7 OpenSSF governance evidence owner - -Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft. - -OpenSSF Best Practices Passing is for FLOSS projects and requires every MUST/MUST NOT criterion, including `floss_license`, to be satisfied. Naruon's current proprietary license is therefore a **legal/business eligibility blocker** to Passing unless an authorized copyright-holder/legal/business licensing decision changes that boundary. Engineering must not fabricate a project id, badge, waiver, or remediation date. This lane is governance evidence, not a reason to weaken product gates or a mandatory release dependency unless the business explicitly chooses OpenSSF Passing as a release criterion. - -The current effective change-control contract must also be represented accurately: ruleset `17214772` requires one approving review, stale-review dismissal, last-push approval and resolved threads; inherited `18156473` requires one approving review, stale-review dismissal and resolved threads but currently has `require_last_push_approval=false`. The integrated contract still requires last-push approval because `17214772` is active. - -## 4. UI, localization, and OIDC interaction state - -[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-feedback owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Its effective delta is `SettingsLayout.tsx`, the rendered pending-feedback regression, and doctoring. jsdom proves per-action pending state, duplicate-click prevention, `aria-busy`, visible pending copy, success cleanup, rejected-logout cleanup and error surfacing. Real-browser keyboard/focus/touch/AT, responsive screenshots, multilingual resource consumption, terminal exact-head hosted evidence and qualifying independent review remain absent. - -Canonical localization Gap [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) owns the product-local **UI Localization Catalog** for KO/EN/JA/ZH/VI/ES/DE/FR: stable `(screen_key, message_key)` identity, normalized DB revisions, immutable published resource versions, placeholder validation, screen-scoped ETag/version reads, UI-copy/ontology-label separation, read-only runtime credentials, and locale-specific Storybook/browser/a11y acceptance. It must begin from the then-current canonical #1503 migration ancestry rather than create a parallel DB head. - -**UI Delivery Gate for #1729: FAIL.** Intent is PASS; functional completeness/resilience are PARTIAL; multilingual delivery and buyer-visible exact-head evidence are FAIL. - -## 5. LLM and cross-repository contract boundary - -Protected `develop` still carries a live governance contradiction: `AGENTS.md` describes central Strix as directly selecting GitHub Models, named fallbacks, Vertex and direct OpenAI modes, while the canonical CWL contract requires all model-backed Actions to request only logical `orchestrator/free` through the gateway and assigns provider/model/group discovery/fallback to contextual-orchestrator. - -This defect already has one canonical Naruon owner. Issue [#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) and PR [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) own the governance repair; #1549 remains Draft at exact `9e47f25e256f52f13df267e0383bc3b036ac6f9e` with an effective six-file docs/test/config delta. Do not open a second AGENTS/CLAUDE/ARCHITECTURE LLM-governance writer. - -The intended released-owner boundary is unchanged: - -- Naruon product/domain truth, authorization, tools and context stay local; -- model-backed Actions request `orchestrator/free` only and do not select provider/model/group or paid fallback; -- contextual-orchestrator owns provider discovery, capability/price/latency/availability/accuracy routing and fallback; -- production consumption requires an immutable released CO API/client/schema identity and otherwise fails closed. - -Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but GitHub Releases remains exactly `[]`. Therefore neither that moving protected SHA nor another unpublished owner commit is a production consumer identity. #1549 must refresh its owner-head narrative but must not bind product behavior to mutable main. - -## 6. Buyer-visible P0/P1 Gap baseline +## 6. Commercial Gap register | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 281 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 376 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | -| P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `a0e1424...` → #2275 `572cfed...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | -| P0 | Dependency-security freshness | frontend #1623 needs current vulnerability-DB revalidation; backend #1565→#1685 must preserve `httpx2` and the `aiosmtplib 5.1.3` SMTP-injection hardening while rebuilding one lock/hash graph | current-base vulnerability scans + coherent backend manifest/uv/hash locks + hostile SMTP/TestClient regressions + exact-head CI/security/review | -| P0 | LLM provider error confidentiality | #1733 exact `9d9d5e0...` preserves the four-path secret-canary repair and restores TRACEABILITY after generated child `1da2457...` partially rolled the doctoring back; hosted exact-head evidence and independent approval are pending | current-head Application CI/security/Semgrep/Bandit/CodeQL/Docker terminal success + zero valid review findings + qualifying post-last-push approval | -| P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | -| P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | -| P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | -| P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | -| P0 | Connector/provider operability | protocol/writeback/retry foundations exist; full released connector lifecycle remains incomplete | signed installable artifact, enrollment/rotation, capability health, idempotent reconciliation, support evidence | -| P0 | Recovery/customer exit | historical baseline records partial backup/object/portability work, not one buyer round trip | restore/PITR and tenant export→clean-import rehearsal preserving provenance/authorization | -| P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | -| P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | -| P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | -| P1 | Generated-writer owner lock | generated source re-entry has deleted executable evidence (#1727), recommended an unsafe log-sink substitute, and later rolled back owner TRACEABILITY (#1733) | semantic owner/threat-boundary detection, durable source/test/doctoring transfer, and terminal/read-only generated guidance after repair | -| P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | - -## 7. Performance, data, and DDD acceptance - -- DDD Subdomain/Bounded Context/Context Map and Aggregate/Entity/Value Object/Domain Service/Repository/Event/Invariant naming must match ADR, code, API, DB and tests. -- Aggregates keep transactions minimal. No LLM/network/long computation occurs inside an explicit database transaction. Cross-service SQL is forbidden. -- New persistence uses normalized schemas, descriptive multi-word `snake_case`, explicit ownership/tenant keys, and idempotent item-level UPSERT where appropriate. -- Applicable buyer web/API paths target realistic p95 ≤20 ms. Evidence uses real query/I/O/render/runtime conditions; no sample shrink, measurement exclusion, or unrealistic cache warm-up. -- Performance/security/data-science hot paths are Rust-first where profiling and contract constraints justify it; Python remains a documented boundary only when no practical Rust replacement exists. -- Deprecation and warning output is a defect to root-cause, fix, or explicitly track. - -## 8. UI quality contract - -Material UI is incomplete without normal/loading/empty/error/permission states, responsive composition, keyboard/focus/touch/a11y evidence, and exact-head screenshot/E2E where buyer-visible. Storybook source-component provenance and rendered Storybook behavior are separate evidence. - -Delivery Gate: - -- **Intent:** every visual/copy decision maps to a buyer task or product state. -- **Functional completeness:** displayed interactions work and preserve error/recovery semantics. -- **Content:** no template filler, unsupported statistics, fake customer/security/performance claims, or generic CTA copy. -- **Resilience:** mobile/intermediate widths, keyboard focus, loading/empty/error/permission states, and long/localized text do not break the task. -- **Evidence:** assertions bind to current source/resource identity and reproducible browser/test receipts. -- **Distinctiveness:** information architecture and interaction model remain recognizable without generic AI visual defaults. - -If one required axis fails, material UI is not complete. - -## 9. Release gate and next causal order - -Current **Merge/Release Gate: FAIL**. - -Current causal order: - -1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue remains volatile and currently has no in-progress run in the fresh snapshot; -2. ordinary/non-force reconcile #2040 onto protected `main@e6334e...`, preserving both its scheduler contracts and the now-landed #2279 URL/redirect authority, then reacquire exact-head hosted evidence and qualifying independent review; -3. terminalize/review current-main-restacked #2271 `a0e1424...` → #2275 `572cfed...`, and terminalize/review Pages #2272 `cd3b41...` separately; -4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; -5. revalidate and normally integrate frontend dependency-security #1623 against the then-current protected ancestry and vulnerability database; -6. integrate #1565's warning-free Starlette/httpx2 foundation, then ordinary/non-force reconcile #1685 so the combined dependency graph preserves both direct `httpx2` and `aiosmtplib==5.1.3`; regenerate plain/hash/uv locks and run focused SMTP hostile-input/lifecycle plus backend/API/security evidence; -7. terminalize and independently review #1733 exact `9d9d5e0...`, preserving fixed-message/bounded-metadata error confidentiality, four-path hostile-canary evidence and the restored TRACEABILITY record; no traceback/provider-text logging or generated doctoring rollback may return; -8. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; -9. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; -10. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; -11. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; -12. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. - -OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. - -No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. - -## 10. Standards and traceability additions - -Phillips, A., & Davis, M. (2009). *Tags for identifying languages* (BCP 47; RFC 5646). RFC Editor. https://doi.org/10.17487/RFC5646 - -Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC 9110). RFC Editor. https://doi.org/10.17487/RFC9110 - -World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ - -Open Source Security Foundation. (n.d.). *OpenSSF Best Practices Badge criteria: Passing*. https://www.bestpractices.dev/en/criteria?details=true&rationale=true - -PostgreSQL Global Development Group. (2026). *PostgreSQL 18 documentation: UUID functions*. PostgreSQL Documentation. https://www.postgresql.org/docs/current/functions-uuid.html - -PyCQA. (2026). *B608: hardcoded_sql_expressions*. Bandit documentation. https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html - -Cole, J. (2026, September 8). *aiosmtplib v5.1.3* [Software release]. GitHub. https://github.com/cole/aiosmtplib/releases/tag/v5.1.3 - -OWASP Foundation. (n.d.). *Logging cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html - -OWASP Foundation. (n.d.). *Microservices security cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Microservices_Security_Cheat_Sheet.html - -The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. - -## 11. Claim boundary - -This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. \ No newline at end of file +| P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; 401 queued / 0 in-progress at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | +| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 coherent lock/security reconciliation | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation queued | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | +| P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | +| P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | +| P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | +| P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | +| P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | +| P1 | Generated-writer owner lock | valid owner tests/doctoring have been deleted by generated children | semantic owner-overlap gate, protected test/doctoring invariants, no self-modifying residue | + +## 7. Current causal order + +1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. +2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. +3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently accept Pages #2272 `cd3b41...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. +4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI branches. +5. Integrate #1565 and ordinary/non-force reconcile #1685 so `httpx2` and `aiosmtplib==5.1.3` coexist in one coherent manifest/hash/uv graph with hostile SMTP/TestClient evidence. +6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. +7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. +8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. +10. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. + +**Merge/Release Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. diff --git a/docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md b/docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md new file mode 100644 index 000000000..60e2dbc35 --- /dev/null +++ b/docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md @@ -0,0 +1,216 @@ +# Naruon Product and Technical Gap Baseline + +**Baseline version:** 2.11 +**Observed on:** 2026-09-20 (Asia/Seoul) +**Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` +**Observed product version:** `0.14.4` +**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) +**Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) + +This file is the current product/technical authority overlay. Historical point-in-time inventories and the previous v1.9 ledger remain preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`; intervening v2.x generations remain reconstructable from Git history. Historical evidence is audit material, not current merge or release authority. + +## 1. Evidence hierarchy and release posture + +When sources disagree, use this order: + +1. exact protected-branch code, migrations, tests, runtime contracts, and security boundaries; +2. exact protected-branch architecture and operations documents; +3. exact current pull-request source and current-head evidence; +4. open Issues and Proposed/Accepted ADRs, with Accepted status requiring landed evidence; +5. archived baseline observations, older plans, README statements, and historical PR descriptions. + +Pending, queued, stale, predecessor-head, skipped-required, neutral, author-only, local-only, or model-only evidence is not passing evidence. A protected release requires one exact integrated head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance where behavior changes. + +Current repository shape is **281 open PRs and 75 open Issues**. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — are active. The latest GitHub Release is `v0.14.4`, published 2026-06-19, and is `immutable=false`; it is historical publication evidence, not the target commercial immutable release. + +## 2. Current commercial classification + +Naruon remains a production-oriented pre-GA communication and context control plane. Customer-owned mail, calendar, contact, and file systems remain systems of record. Naruon owns scoped context, policy, recommendation and intent state, provider-command/retry/reconciliation evidence, authorization boundaries, and the buyer-visible decision/action experience. + +GA-1 remains **Customer-owned Mail, Calendar, Contact, and File Control Plane**. Individual PR GREEN, high coverage, generated artifacts, or local test volume do not constitute GA. GA requires one protected immutable identity proving the buyer journey, provider interoperability, recovery/customer exit, current security evidence, and an operable support contract. + +## 3. Current owner graph and integration gates + +### 3.1 Central CI/security control plane + +Protected central truth is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the ordinary merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. The URL/redirect authority is therefore protected ancestry now; descendants must consume that landed owner state rather than wait for #2279 as an open prerequisite. + +- `.github#712` remains the canonical organization Actions queue-starvation owner. During this observation window the queue had previously contracted as low as 156 queued / 1 in-progress, but the current fresh observation is **376 queued / 0 in-progress**. This remains volatile and is not evidence of stable runner acquisition; zero in-progress alongside a three-digit queue strengthens the current execution-capacity concern. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the owner path, and do not blind-rerun unchanged heads. +- `.github#2279` is **merged**. Protected merge commit `e6334e229581a918e2f22de18733b76fa65d7e71` has parents prior `main@64aa08d7fa487deacd41c761c36277ca68cab6c9` and exact owner head `d1e4380c15e948aaf104d46aa134fa614058782a`. Initial GitHub REST authority validation, no-redirect production openers, bearer non-forwarding, executable G-17 ancestry validation, and owner-qualified foreign Semgrep evidence are now protected central source authority. Do not continue to model #2279 as a pending foundation PR. +- `.github#2040@ecc9e1d11149ae44ec4f8389e4ac72a08ba45ba7` had completed path-wise reconciliation against the previous protected main and locally verified **496 focused passed; 3,404 passed / 28 skipped / 40 subtests**. The #2279 merge moved protected main again. Its PR metadata still records the preceding `base_sha=64aa08d7...`; #2040 therefore needs another ordinary/non-force path-wise adoption of the newly landed central URL/redirect authority before exact-head acceptance. Its previous reconciliation evidence remains source history, not acceptance for the new base. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It has ordinary two-parent restacked the previously reviewed owner generation onto protected `main@e6334e...`; the tree remains byte-identical to the prior reviewed generation and the protected-main compare is 8 ahead / 0 behind across exactly three owned paths. It is Ready for review, not merge-accepted: fresh Python Security, Semgrep, CodeQL and Security runs remain queued/nonterminal and a qualifying current-head approval is still required. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS analysis-read capability-selector descendant of current #2271 `a0e1424...`. Its ordinary two-parent successor retains the prior selector tree byte-for-byte while recording current #2271 ancestry. It requires the exact `code-scanning/analyses?per_page=1&tool_name=CodeQL` endpoint and reviewed headers; focused stack remains **165 passed**, full local suite **3,378 passed / 28 skipped / 40 subtests**. Fresh CodeQL/Semgrep/Security runs remain queued. Acceptance still requires #2271 acceptance, #2276 real target permission, terminal exact-head checks and qualifying independent approval. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` has ordinary-forward adopted complete #2279 `d1e4380...` while preserving the Pages caller-input shell boundary and SAST compatibility work. Its exact tree verified **94 focused passed**, **94 passed with `GITHUB_ACTIONS=true`**, and **3,373 passed / 28 skipped / 40 subtests**. Keep Draft until fresh exact-head Pages/security/SAST/CodeQL/runtime evidence and independent review are terminal. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a fresh succession audit proves every valid delta/test/doctoring contract is present in protected `main@e6334e...` or an accepted successor. +- `.github#2276` remains the distinct real target-repository permission/canary boundary for the observed `code-scanning/analyses` 403. Capability selection cannot manufacture installation/repository permission. Acceptance requires an unchanged-target canary reading both protected-base and exact-head analyses and completing language pairing. + +No Naruon PR copies central workflow source. Naruon records owner identities, waits fail-closed for accepted/released contracts, then ordinary-restacks its own consumers. + +### 3.2 Frontend dependency-security owner + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains canonical at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Its six-workflow GREEN generation and exact-head approval are historical evidence for that generation only. Later vulnerability-database evidence observed protected-base `next`/`sharp` debt already repaired by #1623 source, so Security must be reacquired against the then-current base/database after central execution capacity and workflow authority settle. Its live PR-state has been corrected to treat #2279 as landed and #2040 as re-diverged rather than waiting on the old central graph. + +### 3.3 Backend dependency-security and TestClient lock owner + +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) is the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. It pins `httpx2==2.5.0`, removes only the matching Starlette fallback-warning suppression, and proves TestClient runtime selection under warnings-as-errors. Its exact generation has Application CI, Security, Semgrep and Bandit success, while CodeQL remains a fail-closed central-control failure, Docker is queued, and qualifying independent approval is absent. + +[#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is the dependent broad backend-Python dependency lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`, stacked on #1565 and currently Draft/non-mergeable. Its current source updates `aiosmtplib 5.1.2 → 5.1.3` but does not regenerate `backend/uv.lock` and, if taken wholesale, drops #1565's direct `httpx2` contract. This is a repair finding, not a reason to discard the branch. + +The `aiosmtplib 5.1.3` delta is security-material and must survive reconciliation. Upstream v5.1.3 explicitly follows CVE-2026-53533 / GHSA-v3q9-hj7j-63hq by rejecting whitespace or angle brackets outside a quoted local part in SMTP address commands so caller-controlled input cannot smuggle extra ESMTP parameters; `sendmail` validates all addresses before command emission. The same release hardens `HELO`/`EHLO` hostname input, command/response synchronization, connection-lock cleanup and related lifecycle behavior. #1565's current base manifest still pins `aiosmtplib==5.1.2`, so this is a real current-source security Gap rather than a decorative version refresh. + +The minimum valid successor preserves both owners' contracts: keep #1565's direct reviewed `httpx2` pin and warnings-as-errors TestClient behavior, preserve `aiosmtplib==5.1.3`, regenerate `pyproject.toml`, plain requirements, hash-locked requirements and `uv.lock` as one coherent graph, add focused hostile SMTP address/hostname and relevant connection-lifecycle regression evidence, and reacquire exact-head backend/API/migration/security checks plus independent review. Do not create a second dependency writer unless #1685 explicitly delegates or loses this security slice. + +### 3.3.1 LLM provider error-confidentiality owner + +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) is the bounded LLM provider error-confidentiality repair at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, currently Draft/open/mergeable with an effective three-file delta. Its generated first head `41644c0d51801547a4b408e23f7cad029c989c0d` correctly removed provider exception text from raised `LLMServiceError` but replaced direct log interpolation with `logger.error(..., exc_info=True)`, which still rendered provider-controlled exception text and traceback into the log sink. + +The ordinary-forward production repair records only fixed event text plus bounded `operation` and exception-class metadata, logs no exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. A hostile-canary regression covers extraction, translation, standard OpenAI-compatible drafting and Ollama native drafting; it asserts the exact generic service message, absence of provider text in rendered logs, suppressed cause rendering, absence of `exc_info`, bounded metadata, and applicable client cleanup. The generated task-specific `.jules/sentinel.md` guidance was removed after the source fix and the file is byte-for-byte restored to protected-base blob `9208f58b118f11d0983c3a62df96916ec61a3384`. + +After the stronger reviewed `7e8321bb...` generation, generated commit `1da2457c0e8cfa71a620515a93611b97d4aad200` arrived as an ordinary child. It left production source and the four-path regression intact but partially rolled back doctoring by deleting the review-finding verification, explicit four-path evidence, generated-writer cleanup record and exact repair lineage. Ordinary-forward `9d9d5e0...` retains that intervening commit in ancestry and restores the stronger TRACEABILITY record without product-source churn. Predecessor receipts do not transfer. + +The first CodeRabbit review correctly required four-path regression coverage but incorrectly required traceback-aware `exc_info`; the valid coverage request was implemented and the unsafe logging recommendation was rejected with OWASP-based doctoring. The old thread is resolved/outdated. Exact `9d9d5e0...` Application CI, Security, Semgrep, Bandit, CodeQL and Docker runs are currently queued, and no qualifying independent post-last-push approval exists. No local PASS is claimed because the current automation execution environment cannot run the repository test stack. Keep Draft until exact-head hosted acceptance is real. + +### 3.4 Workspace and migration lineage + +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the canonical workspace-registry/historical migration owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, with one authoritative line: + +`0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` + +No downstream feature may create a parallel Alembic head from protected `develop`; descendants adopt the then-current canonical migration head. + +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains correctly retargeted to #1503 for opaque-ID backfill entropy. An intervening Sentinel commit `103a52c9fad2081cf6ff6d10d8e9c73bea7395e4` retained a valid prompt-template assertion but deleted the dedicated 42-line entropy regression and 33-line doctoring/TRACEABILITY record. Ordinary children `f501b09af6086de4e9a79ac77488622eb67fcd63` and exact current `2ac48fb7e591827804ba8e7e911f211b0c134ddf` restore those artifacts byte-for-byte while retaining the intervening commit in ancestry. The effective delta remains five files: the historical migration, bootstrap generation, bootstrap expectations, focused regression, and doctoring. #1727 stays Draft; it is mechanically mergeable but **ahead 6 / behind 37** relative to #1503's shared protected merge base, and exact `2ac48fb...` currently has no workflow runs or formal reviews/threads. No predecessor receipt transfers. + +### 3.5 Generated provenance lanes + +Generated branches that rediscover an owned delta are provenance, not new owners. Current examples include #1724, #1728 and #1730. Their ordinary/non-force reconciliations reduce effective delta to the canonical owner tree or protected tree, and their checks/reviews do not transfer to actual owners. + +Repeated source re-entry after zero-delta reconciliation or deletion of owner tests/doctoring remains a control-plane Gap. #1727's `103a52c9...` regression is one current example: a generated writer kept one narrow assertion while removing broader executable coverage and traceability. #1733 demonstrates both forms of the failure: the initial generated security guidance recommended `exc_info=True`, which would have retained provider-controlled exception text in another sink, and a later generated child `1da2457...` partially rolled back the stronger owner doctoring after the source/test repair already existed. Generated writers should perform semantic owner-overlap and threat-boundary verification before source mutation, and task-specific self-modifying guidance should be removed once the durable source/test/doctoring fix exists. Source-neutral `trigger CI` commits are not acceptance evidence. + +### 3.6 Auditable data-hygiene owner + +[#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) remains canonical at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. Its delimiter repair is locally RED→GREEN, including 11 focused URL tests and 1,830 backend tests / 33 skipped with warnings-as-errors, but current hosted checks and qualifying post-last-push approval remain absent. ADR-0008 remains Proposed and #1590 remains open until protected-tree succession proves complete inheritance. + +### 3.7 OpenSSF governance evidence owner + +Issue [#1178](https://github.com/ContextualWisdomLab/naruon/issues/1178) and PR [#1732](https://github.com/ContextualWisdomLab/naruon/pull/1732) own the bounded OpenSSF Best Practices evidence lane. #1732 exact `a8e83d6701e4195e984d2e72de29b056cae55268` repairs the private vulnerability-reporting URL and adds a truthful enrollment packet, but remains Draft. + +OpenSSF Best Practices Passing is for FLOSS projects and requires every MUST/MUST NOT criterion, including `floss_license`, to be satisfied. Naruon's current proprietary license is therefore a **legal/business eligibility blocker** to Passing unless an authorized copyright-holder/legal/business licensing decision changes that boundary. Engineering must not fabricate a project id, badge, waiver, or remediation date. This lane is governance evidence, not a reason to weaken product gates or a mandatory release dependency unless the business explicitly chooses OpenSSF Passing as a release criterion. + +The current effective change-control contract must also be represented accurately: ruleset `17214772` requires one approving review, stale-review dismissal, last-push approval and resolved threads; inherited `18156473` requires one approving review, stale-review dismissal and resolved threads but currently has `require_last_push_approval=false`. The integrated contract still requires last-push approval because `17214772` is active. + +## 4. UI, localization, and OIDC interaction state + +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-feedback owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Its effective delta is `SettingsLayout.tsx`, the rendered pending-feedback regression, and doctoring. jsdom proves per-action pending state, duplicate-click prevention, `aria-busy`, visible pending copy, success cleanup, rejected-logout cleanup and error surfacing. Real-browser keyboard/focus/touch/AT, responsive screenshots, multilingual resource consumption, terminal exact-head hosted evidence and qualifying independent review remain absent. + +Canonical localization Gap [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) owns the product-local **UI Localization Catalog** for KO/EN/JA/ZH/VI/ES/DE/FR: stable `(screen_key, message_key)` identity, normalized DB revisions, immutable published resource versions, placeholder validation, screen-scoped ETag/version reads, UI-copy/ontology-label separation, read-only runtime credentials, and locale-specific Storybook/browser/a11y acceptance. It must begin from the then-current canonical #1503 migration ancestry rather than create a parallel DB head. + +**UI Delivery Gate for #1729: FAIL.** Intent is PASS; functional completeness/resilience are PARTIAL; multilingual delivery and buyer-visible exact-head evidence are FAIL. + +## 5. LLM and cross-repository contract boundary + +Protected `develop` still carries a live governance contradiction: `AGENTS.md` describes central Strix as directly selecting GitHub Models, named fallbacks, Vertex and direct OpenAI modes, while the canonical CWL contract requires all model-backed Actions to request only logical `orchestrator/free` through the gateway and assigns provider/model/group discovery/fallback to contextual-orchestrator. + +This defect already has one canonical Naruon owner. Issue [#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) and PR [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) own the governance repair; #1549 remains Draft at exact `9e47f25e256f52f13df267e0383bc3b036ac6f9e` with an effective six-file docs/test/config delta. Do not open a second AGENTS/CLAUDE/ARCHITECTURE LLM-governance writer. + +The intended released-owner boundary is unchanged: + +- Naruon product/domain truth, authorization, tools and context stay local; +- model-backed Actions request `orchestrator/free` only and do not select provider/model/group or paid fallback; +- contextual-orchestrator owns provider discovery, capability/price/latency/availability/accuracy routing and fallback; +- production consumption requires an immutable released CO API/client/schema identity and otherwise fails closed. + +Current contextual-orchestrator protected main is `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but GitHub Releases remains exactly `[]`. Therefore neither that moving protected SHA nor another unpublished owner commit is a production consumer identity. #1549 must refresh its owner-head narrative but must not bind product behavior to mutable main. + +## 6. Buyer-visible P0/P1 Gap baseline + +| Priority | Gap | Current boundary | Completion evidence | +| --- | --- | --- | --- | +| P0 | Release-train convergence | 281 open PRs; many stacked/provenance/dependency/governance lanes; protected head unchanged | canonical owner inventory, parent-first protected integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712` remains open; current snapshot is 376 queued / 0 in-progress after earlier contraction to 156/1; runner acquisition remains volatile | owner health separates current/obsolete runs; obsolete pressure removed without cancelling sole current-head evidence; required lanes receive runner assignment and settle terminally | +| P0 | Central CI/security acceptance | protected main includes #2279 at `e6334e...`; #2040 needs current-main readoption; descendant stack is #2271 `a0e1424...` → #2275 `572cfed...`; Pages #2272 `cd3b41...` has adopted #2279; #2269 succession and #2276 permission remain incomplete | #2040 current-main reconciliation, descendant terminal hosted checks/current-head review, verified #2269 succession, real unchanged-target GHAS canary | +| P0 | Dependency-security freshness | frontend #1623 needs current vulnerability-DB revalidation; backend #1565→#1685 must preserve `httpx2` and the `aiosmtplib 5.1.3` SMTP-injection hardening while rebuilding one lock/hash graph | current-base vulnerability scans + coherent backend manifest/uv/hash locks + hostile SMTP/TestClient regressions + exact-head CI/security/review | +| P0 | LLM provider error confidentiality | #1733 exact `9d9d5e0...` preserves the four-path secret-canary repair and restores TRACEABILITY after generated child `1da2457...` partially rolled the doctoring back; hosted exact-head evidence and independent approval are pending | current-head Application CI/security/Semgrep/Bandit/CodeQL/Docker terminal success + zero valid review findings + qualifying post-last-push approval | +| P0 | Workspace/migration convergence | #1503 source repairs owner-binding RED but is not protected-integrated; #1727 entropy child repaired a generated test/doctoring deletion and remains Draft | one Alembic head, real PostgreSQL fresh + historical upgrade, exact-head CI/security/review, ordinary descendant adoption | +| P0 | LLM governance contradiction | protected AGENTS still advertises direct provider/model routing; #1548/#1549 own repair | #1549 normal integration after released CO identity + current-base exact-head checks/review | +| P0 | Immutable LLM contract | CO protected main exists but releases are `[]` | immutable owner release, consumer version/digest pin, schema/E2E/model behavior/security/SBOM/provenance | +| P0 | Product/release truth | latest Naruon Release `v0.14.4` is mutable and predates current protected head | code-current docs, version/CHANGELOG, immutable publication, SBOM/provenance/reproducibility/rollback | +| P0 | Connector/provider operability | protocol/writeback/retry foundations exist; full released connector lifecycle remains incomplete | signed installable artifact, enrollment/rotation, capability health, idempotent reconciliation, support evidence | +| P0 | Recovery/customer exit | historical baseline records partial backup/object/portability work, not one buyer round trip | restore/PITR and tenant export→clean-import rehearsal preserving provenance/authorization | +| P1 | Auditable data hygiene | #1418 locally GREEN; hosted checks/current-head approval pending | terminal exact-head checks/review, normal protected integration, verified #1590 succession | +| P1 | UI localization | #1731 is architecture Gap only; current surfaces still embed Korean product copy | versioned 8-locale DB resource/API/cache/publish + Storybook/browser/a11y acceptance | +| P1 | OIDC pending UX | #1729 jsdom repair exists but hosted/browser/multilingual evidence incomplete | terminal exact-head checks/review + browser/AT/responsive evidence + released locale resource consumption | +| P1 | Generated-writer owner lock | generated source re-entry has deleted executable evidence (#1727), recommended an unsafe log-sink substitute, and later rolled back owner TRACEABILITY (#1733) | semantic owner/threat-boundary detection, durable source/test/doctoring transfer, and terminal/read-only generated guidance after repair | +| P1 | Typed context/scientific differentiation | generic context/search/extractor foundations exist; no protected live STM/TEPP claim | released typed/scientific owner contract with uncertainty/provenance/abstention; no lexical-as-psychometrics marketing | + +## 7. Performance, data, and DDD acceptance + +- DDD Subdomain/Bounded Context/Context Map and Aggregate/Entity/Value Object/Domain Service/Repository/Event/Invariant naming must match ADR, code, API, DB and tests. +- Aggregates keep transactions minimal. No LLM/network/long computation occurs inside an explicit database transaction. Cross-service SQL is forbidden. +- New persistence uses normalized schemas, descriptive multi-word `snake_case`, explicit ownership/tenant keys, and idempotent item-level UPSERT where appropriate. +- Applicable buyer web/API paths target realistic p95 ≤20 ms. Evidence uses real query/I/O/render/runtime conditions; no sample shrink, measurement exclusion, or unrealistic cache warm-up. +- Performance/security/data-science hot paths are Rust-first where profiling and contract constraints justify it; Python remains a documented boundary only when no practical Rust replacement exists. +- Deprecation and warning output is a defect to root-cause, fix, or explicitly track. + +## 8. UI quality contract + +Material UI is incomplete without normal/loading/empty/error/permission states, responsive composition, keyboard/focus/touch/a11y evidence, and exact-head screenshot/E2E where buyer-visible. Storybook source-component provenance and rendered Storybook behavior are separate evidence. + +Delivery Gate: + +- **Intent:** every visual/copy decision maps to a buyer task or product state. +- **Functional completeness:** displayed interactions work and preserve error/recovery semantics. +- **Content:** no template filler, unsupported statistics, fake customer/security/performance claims, or generic CTA copy. +- **Resilience:** mobile/intermediate widths, keyboard focus, loading/empty/error/permission states, and long/localized text do not break the task. +- **Evidence:** assertions bind to current source/resource identity and reproducible browser/test receipts. +- **Distinctiveness:** information architecture and interaction model remain recognizable without generic AI visual defaults. + +If one required axis fails, material UI is not complete. + +## 9. Release gate and next causal order + +Current **Merge/Release Gate: FAIL**. + +Current causal order: + +1. continue `.github#712` execution-capacity repair without blind unchanged-head reruns; the queue remains volatile and currently has no in-progress run in the fresh snapshot; +2. ordinary/non-force reconcile #2040 onto protected `main@e6334e...`, preserving both its scheduler contracts and the now-landed #2279 URL/redirect authority, then reacquire exact-head hosted evidence and qualifying independent review; +3. terminalize/review current-main-restacked #2271 `a0e1424...` → #2275 `572cfed...`, and terminalize/review Pages #2272 `cd3b41...` separately; +4. complete #2269 succession audit and #2276 unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance; +5. revalidate and normally integrate frontend dependency-security #1623 against the then-current protected ancestry and vulnerability database; +6. integrate #1565's warning-free Starlette/httpx2 foundation, then ordinary/non-force reconcile #1685 so the combined dependency graph preserves both direct `httpx2` and `aiosmtplib==5.1.3`; regenerate plain/hash/uv locks and run focused SMTP hostile-input/lifecycle plus backend/API/security evidence; +7. terminalize and independently review #1733 exact `9d9d5e0...`, preserving fixed-message/bounded-metadata error confidentiality, four-path hostile-canary evidence and the restored TRACEABILITY record; no traceback/provider-text logging or generated doctoring rollback may return; +8. integrate #1694 → #1691 and direct-code prerequisites, then #1503 with one healthy migration head and real PostgreSQL fresh/historical evidence; ordinary-adopt #1727's bounded entropy delta on the then-current owner tree and reacquire evidence; +9. ordinary-restack downstream workspace/Reply-SLA/migration consumers and reacquire invalidated exact-head evidence; +10. after CO publishes an immutable API/client/schema release, finish canonical #1549 governance integration without mutable-owner binding; +11. create one #1731 localization implementation owner from the then-current migration head, publish/test the eight-locale screen-resource contract, then ordinary-adapt #1729; +12. only after an exact integrated protected candidate exists, update version/CHANGELOG and publish an immutable release/package/OCI identity with SBOM, provenance, reproducibility, rollback, and buyer-visible acceptance evidence. + +OpenSSF #1178/#1732 proceeds as a separate governance/legal lane. It does not enter the release-critical causal chain unless an authorized business decision explicitly makes a Passing badge a release criterion. + +No force push, destructive rebase, self-approval, admin bypass, source-neutral wake commit, synthetic success, stale check/review transfer, duplicate owner, mutable sibling dependency, whole-file conflict overwrite, or gate weakening is part of this path. + +## 10. Standards and traceability additions + +Phillips, A., & Davis, M. (2009). *Tags for identifying languages* (BCP 47; RFC 5646). RFC Editor. https://doi.org/10.17487/RFC5646 + +Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC 9110). RFC Editor. https://doi.org/10.17487/RFC9110 + +World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines (WCAG) 2.2*. https://www.w3.org/TR/WCAG22/ + +Open Source Security Foundation. (n.d.). *OpenSSF Best Practices Badge criteria: Passing*. https://www.bestpractices.dev/en/criteria?details=true&rationale=true + +PostgreSQL Global Development Group. (2026). *PostgreSQL 18 documentation: UUID functions*. PostgreSQL Documentation. https://www.postgresql.org/docs/current/functions-uuid.html + +PyCQA. (2026). *B608: hardcoded_sql_expressions*. Bandit documentation. https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html + +Cole, J. (2026, September 8). *aiosmtplib v5.1.3* [Software release]. GitHub. https://github.com/cole/aiosmtplib/releases/tag/v5.1.3 + +OWASP Foundation. (n.d.). *Logging cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html + +OWASP Foundation. (n.d.). *Microservices security cheat sheet*. OWASP Cheat Sheet Series. https://cheatsheetseries.owasp.org/cheatsheets/Microservices_Security_Cheat_Sheet.html + +The archived v1.9 baseline retains the broader protocol, observability, provenance, storage, supply-chain, and UI research bibliography. New implementations must bind cited standards to exact code/API/test evidence rather than cite them decoratively. + +## 11. Claim boundary + +This baseline is a product and technical decision record, not a certification, market valuation, or assertion that Naruon is already GA. Coverage percentages, PR volume, local test counts, model reviews, and documentation volume are supporting evidence only. Commercial completion requires the end-to-end buyer journey on the exact released identity, with current security, interoperability, recovery, authorization, provenance, operations, and support evidence. \ No newline at end of file From 2872f2736135064bc8869c7529b3799273213046 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 02:41:12 +0900 Subject: [PATCH 28/89] docs(gap): preserve baseline v2.12 snapshot --- .../2026-09-20-baseline-v2.12.md | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md diff --git a/docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md b/docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md new file mode 100644 index 000000000..57acbe491 --- /dev/null +++ b/docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md @@ -0,0 +1,101 @@ +# Naruon Product and Technical Gap Baseline + +**Baseline version:** 2.12 +**Observed on:** 2026-09-20 (Asia/Seoul) +**Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` +**Observed product version:** `0.14.4` +**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) +**Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) + +This file is the current product/technical authority overlay. Baseline v2.11 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. + +## 1. Evidence and release posture + +Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. + +The current repository shape is **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. + +A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. + +## 2. Current central CI/security owner graph + +Protected central authority is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are therefore protected ancestry; #2279 is not an open foundation prerequisite. + +- `.github#712` remains the Actions execution-capacity owner. At this observation there are **401 queued / 0 in-progress** runs. This is not stable runner acquisition; do not generate source-neutral wake commits or blind unchanged-head reruns. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has now completed a second ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, Ready for review, mergeable, 8 ahead / 0 behind and still awaiting terminal exact-head checks plus qualifying independent approval. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` separately preserves the Pages caller-input shell/SAST lane while carrying landed #2279 ancestry. It remains Draft pending hosted exact-head Pages/security/SAST/CodeQL/runtime evidence and independent approval. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. +- `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. + +Naruon must not copy central workflow source. It records owner identities and adopts accepted/released contracts through ordinary-forward consumer changes only. + +## 3. Product owner boundaries + +### Frontend dependency security + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI owners. + +### Backend dependency security + +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the dependent broad backend lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`; its `aiosmtplib==5.1.3` security delta must survive, but a valid successor must also preserve #1565's direct `httpx2` contract and regenerate one coherent plain/hash/uv lock graph. Add hostile SMTP address/hostname and connection-lifecycle regressions before acceptance. + +### LLM provider error confidentiality + +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its six exact-head hosted workflows remain queued; no predecessor receipt transfers. + +### Workspace and migrations + +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7` with one migration line: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. No descendant may create a parallel head from protected `develop`. + +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the bounded opaque-ID entropy descendant at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, retargeted to #1503. It retains the intervening generated commit but restores the deleted executable entropy regression and doctoring. Keep Draft and ordinary-adopt on the then-current #1503 lineage before acceptance. + +### LLM governance/released contract + +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is currently `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. + +## 4. Buyer-visible UI and localization + +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Because this PR changes only frontend product/test files and `frontend/package.json`, do not patch central workflow or duplicate dependency-security ownership here. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. + +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single UI Localization Catalog Gap. The implementation must follow #1503's then-current migration head, use a product-owned DB-versioned screen-scoped resource, keep UI translation separate from ontology labels, support KO/EN/JA/ZH/VI/ES/DE/FR, and validate CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. Do not broaden #1729 into the catalog implementation. + +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-state owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Rendered interaction contracts exist, but real-browser keyboard/focus/touch/AT, responsive screenshots, eight-locale released resources and current-head independent acceptance remain missing. **UI Delivery Gate: FAIL.** + +## 5. Generated-writer and governance boundaries + +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 both demonstrate why generated commits must be inspected as intervening deltas: deleting executable tests or doctoring after a valid owner repair is a repair finding, not a reason to force-rewrite history. Preserve valid generated deltas, restore lost contracts ordinary-forward, remove task-specific self-modifying guidance after its durable purpose is complete, and never treat source-neutral `trigger CI` commits as acceptance evidence. + +Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. + +## 6. Commercial Gap register + +| Priority | Gap | Current boundary | Completion evidence | +| --- | --- | --- | --- | +| P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; 401 queued / 0 in-progress at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | +| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 coherent lock/security reconciliation | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation queued | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | +| P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | +| P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | +| P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | +| P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | +| P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | +| P1 | Generated-writer owner lock | valid owner tests/doctoring have been deleted by generated children | semantic owner-overlap gate, protected test/doctoring invariants, no self-modifying residue | + +## 7. Current causal order + +1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. +2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. +3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently accept Pages #2272 `cd3b41...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. +4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI branches. +5. Integrate #1565 and ordinary/non-force reconcile #1685 so `httpx2` and `aiosmtplib==5.1.3` coexist in one coherent manifest/hash/uv graph with hostile SMTP/TestClient evidence. +6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. +7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. +8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. +10. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. + +**Merge/Release Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. From 59e2857a65e6ddec3ea86e3d90ff0d3b263cbd57 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 02:41:56 +0900 Subject: [PATCH 29/89] docs(gap): record generated owner regression and current queue pressure --- docs/product-technical-gap-baseline.md | 34 ++++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 57acbe491..0cc9c16b8 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.12 +**Baseline version:** 2.13 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Baseline v2.11 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. +This file is the current product/technical authority overlay. Baseline v2.12 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md`; v2.11 remains at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. ## 1. Evidence and release posture @@ -21,9 +21,9 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are therefore protected ancestry; #2279 is not an open foundation prerequisite. -- `.github#712` remains the Actions execution-capacity owner. At this observation there are **401 queued / 0 in-progress** runs. This is not stable runner acquisition; do not generate source-neutral wake commits or blind unchanged-head reruns. -- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has now completed a second ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, Ready for review, mergeable, 8 ahead / 0 behind and still awaiting terminal exact-head checks plus qualifying independent approval. +- `.github#712` remains the Actions execution-capacity owner. At this observation there are **606 queued / 0 in-progress** runs. The backlog increased materially from the prior 401/0 observation and there is no stable runner acquisition. Do not generate source-neutral wake commits or blind unchanged-head reruns. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind, and still awaiting terminal exact-head checks plus qualifying independent approval. Earlier text that called this Ready is superseded by the live PR lifecycle. - `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. - `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` separately preserves the Pages caller-input shell/SAST lane while carrying landed #2279 ancestry. It remains Draft pending hosted exact-head Pages/security/SAST/CodeQL/runtime evidence and independent approval. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. @@ -35,15 +35,15 @@ Naruon must not copy central workflow source. It records owner identities and ad ### Frontend dependency security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI owners. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI or generated provenance owners. ### Backend dependency security -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the dependent broad backend lane at exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21`; its `aiosmtplib==5.1.3` security delta must survive, but a valid successor must also preserve #1565's direct `httpx2` contract and regenerate one coherent plain/hash/uv lock graph. Add hostile SMTP address/hostname and connection-lifecycle regressions before acceptance. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to the #1565 branch but its exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21` tree is not yet a valid Git descendant of #1565: fresh ancestry verification found it diverged from the protected merge base and its broad dependency graph does not preserve #1565's direct `httpx2` development/TestClient contract. #1685's `aiosmtplib==5.1.3` security delta remains valid and must survive. The repair is ordinary/non-force lossless reconciliation onto #1565 followed by regeneration of one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph and exact-head installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Do not close either owner or hand-edit generated lock/hash material as a workaround. ### LLM provider error confidentiality -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its six exact-head hosted workflows remain queued; no predecessor receipt transfers. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its exact-head hosted generation remains subject to the central execution-capacity blocker; no predecessor receipt transfers. ### Workspace and migrations @@ -65,7 +65,9 @@ Naruon must not copy central workflow source. It records owner identities and ad ## 5. Generated-writer and governance boundaries -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 both demonstrate why generated commits must be inspected as intervening deltas: deleting executable tests or doctoring after a valid owner repair is a repair finding, not a reason to force-rewrite history. Preserve valid generated deltas, restore lost contracts ordinary-forward, remove task-specific self-modifying guidance after its durable purpose is complete, and never treat source-neutral `trigger CI` commits as acceptance evidence. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 now demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed the regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. + +The invariant is therefore stronger than "generated commits may delete doctoring": any generated descendant of a provenance/owner branch must be semantically checked for cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. @@ -74,24 +76,24 @@ Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current p | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 401 queued / 0 in-progress at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | -| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 coherent lock/security reconciliation | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation queued | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | +| P0 | Actions execution capacity | `.github#712`; **606 queued / 0 in-progress** at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271 is Draft/current-main based; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | +| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 requires real ancestry/contract reconciliation and coherent lock/security regeneration | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation execution-capacity blocked | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | | P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | | P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | | P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | | P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | | P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated-writer owner lock | valid owner tests/doctoring have been deleted by generated children | semantic owner-overlap gate, protected test/doctoring invariants, no self-modifying residue | +| P1 | Generated-writer owner lock | #1727/#1733 evidence rollback and #1728 cross-owner security/performance rollback reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue | ## 7. Current causal order 1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. 2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. 3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently accept Pages #2272 `cd3b41...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. -4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI branches. -5. Integrate #1565 and ordinary/non-force reconcile #1685 so `httpx2` and `aiosmtplib==5.1.3` coexist in one coherent manifest/hash/uv graph with hostile SMTP/TestClient evidence. +4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI or generated provenance branches. +5. Preserve #1565 as the bounded TestClient/httpx2 owner and ordinary/non-force reconcile #1685 into a real descendant while retaining `aiosmtplib==5.1.3`; regenerate one coherent manifest/plain/hash/uv graph and reacquire installation, warnings-as-errors, TestClient, hostile SMTP/lifecycle, Security and CodeQL evidence. 6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. 7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. 8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. From 9706c4907e005c429e7571fcefc36d490bdbdb3b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 05:46:47 +0900 Subject: [PATCH 30/89] docs(gap): preserve baseline v2.13 before owner-graph refresh --- .../2026-09-20-baseline-v2.13.md | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md diff --git a/docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md b/docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md new file mode 100644 index 000000000..a8947b537 --- /dev/null +++ b/docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md @@ -0,0 +1,103 @@ +# Naruon Product and Technical Gap Baseline + +**Baseline version:** 2.13 +**Observed on:** 2026-09-20 (Asia/Seoul) +**Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` +**Observed product version:** `0.14.4` +**Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) +**Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) + +This file is the current product/technical authority overlay. Baseline v2.12 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md`; v2.11 remains at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. + +## 1. Evidence and release posture + +Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. + +The current repository shape is **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. + +A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. + +## 2. Current central CI/security owner graph + +Protected central authority is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are therefore protected ancestry; #2279 is not an open foundation prerequisite. + +- `.github#712` remains the Actions execution-capacity owner. At this observation there are **606 queued / 0 in-progress** runs. The backlog increased materially from the prior 401/0 observation and there is no stable runner acquisition. Do not generate source-neutral wake commits or blind unchanged-head reruns. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind, and still awaiting terminal exact-head checks plus qualifying independent approval. Earlier text that called this Ready is superseded by the live PR lifecycle. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. +- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` separately preserves the Pages caller-input shell/SAST lane while carrying landed #2279 ancestry. It remains Draft pending hosted exact-head Pages/security/SAST/CodeQL/runtime evidence and independent approval. +- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. +- `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. + +Naruon must not copy central workflow source. It records owner identities and adopts accepted/released contracts through ordinary-forward consumer changes only. + +## 3. Product owner boundaries + +### Frontend dependency security + +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI or generated provenance owners. + +### Backend dependency security + +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to the #1565 branch but its exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21` tree is not yet a valid Git descendant of #1565: fresh ancestry verification found it diverged from the protected merge base and its broad dependency graph does not preserve #1565's direct `httpx2` development/TestClient contract. #1685's `aiosmtplib==5.1.3` security delta remains valid and must survive. The repair is ordinary/non-force lossless reconciliation onto #1565 followed by regeneration of one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph and exact-head installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Do not close either owner or hand-edit generated lock/hash material as a workaround. + +### LLM provider error confidentiality + +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its exact-head hosted generation remains subject to the central execution-capacity blocker; no predecessor receipt transfers. + +### Workspace and migrations + +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7` with one migration line: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. No descendant may create a parallel head from protected `develop`. + +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the bounded opaque-ID entropy descendant at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, retargeted to #1503. It retains the intervening generated commit but restores the deleted executable entropy regression and doctoring. Keep Draft and ordinary-adopt on the then-current #1503 lineage before acceptance. + +### LLM governance/released contract + +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is currently `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. + +## 4. Buyer-visible UI and localization + +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Because this PR changes only frontend product/test files and `frontend/package.json`, do not patch central workflow or duplicate dependency-security ownership here. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. + +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single UI Localization Catalog Gap. The implementation must follow #1503's then-current migration head, use a product-owned DB-versioned screen-scoped resource, keep UI translation separate from ontology labels, support KO/EN/JA/ZH/VI/ES/DE/FR, and validate CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. Do not broaden #1729 into the catalog implementation. + +[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-state owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Rendered interaction contracts exist, but real-browser keyboard/focus/touch/AT, responsive screenshots, eight-locale released resources and current-head independent acceptance remain missing. **UI Delivery Gate: FAIL.** + +## 5. Generated-writer and governance boundaries + +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 now demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed the regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. + +The invariant is therefore stronger than "generated commits may delete doctoring": any generated descendant of a provenance/owner branch must be semantically checked for cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. + +Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. + +## 6. Commercial Gap register + +| Priority | Gap | Current boundary | Completion evidence | +| --- | --- | --- | --- | +| P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; **606 queued / 0 in-progress** at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271 is Draft/current-main based; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | +| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 requires real ancestry/contract reconciliation and coherent lock/security regeneration | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation execution-capacity blocked | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | +| P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | +| P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | +| P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | +| P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | +| P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | +| P1 | Generated-writer owner lock | #1727/#1733 evidence rollback and #1728 cross-owner security/performance rollback reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue | + +## 7. Current causal order + +1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. +2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. +3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently accept Pages #2272 `cd3b41...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. +4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI or generated provenance branches. +5. Preserve #1565 as the bounded TestClient/httpx2 owner and ordinary/non-force reconcile #1685 into a real descendant while retaining `aiosmtplib==5.1.3`; regenerate one coherent manifest/plain/hash/uv graph and reacquire installation, warnings-as-errors, TestClient, hostile SMTP/lifecycle, Security and CodeQL evidence. +6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. +7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. +8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. +10. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. + +**Merge/Release Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From afa58e94375975cc9d32e7b66a51cf6c434bceff Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 05:47:56 +0900 Subject: [PATCH 31/89] docs(gap): refresh central runtime and Storybook delivery authority --- docs/product-technical-gap-baseline.md | 50 ++++++++++++++------------ 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 0cc9c16b8..a95afe84e 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,31 +1,31 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.13 +**Baseline version:** 2.14 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Baseline v2.12 is preserved byte-for-byte at `docs/product-technical-gap-history/2026-09-20-baseline-v2.12.md`; v2.11 remains at `docs/product-technical-gap-history/2026-09-20-baseline-v2.11.md`; the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. +This file is the current product/technical authority overlay. Baseline v2.13 is preserved at `docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md`; v2.12 and v2.11 remain under the same history directory, and the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -The current repository shape is **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +The current repository shape remains **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. ## 2. Current central CI/security owner graph -Protected central authority is `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are therefore protected ancestry; #2279 is not an open foundation prerequisite. +Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open foundation prerequisite. -- `.github#712` remains the Actions execution-capacity owner. At this observation there are **606 queued / 0 in-progress** runs. The backlog increased materially from the prior 401/0 observation and there is no stable runner acquisition. Do not generate source-neutral wake commits or blind unchanged-head reruns. -- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves the scheduler/credential/no-restamp contracts, adopts the landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests, but fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv runs remain queued and current-head independent approval is still required. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind, and still awaiting terminal exact-head checks plus qualifying independent approval. Earlier text that called this Ready is superseded by the live PR lifecycle. +- `.github#712` remains the Actions execution-capacity owner, but the earlier **606 queued / 0 in-progress** and later **761 / 0** snapshots are no longer valid as blanket current-state statements. Fresh owner evidence now shows **partial/intermittent runner acquisition with backlog still present**. On `.github#2271@a0e1424...`, SAST, CodeQL language detection, Python detection, Security scope detection, and gitleaks have acquired hosted runners and completed successfully, while downstream CodeQL compatibility, pip-audit/Bandit, Trivy, and Scorecard jobs remain positively unassigned (`runner_id=0`, `steps=[]`). This is not stable capacity recovery and does not authorize blind reruns or wake commits. Missing workflow generations must also be separated from workflow-parse/admission defects rather than being mislabeled as runner starvation. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves scheduler/credential/no-restamp contracts, adopts landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests. Fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal and current-head independent approval is still required. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind. Several first-stage jobs have now executed successfully, but downstream required jobs remain unassigned/nonterminal; qualifying independent current-head approval is still missing. Partial runner acquisition is execution evidence, not acceptance. - `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. -- `.github#2272@cd3b41b8989e096d1ee375d332347c8bb819acf9` separately preserves the Pages caller-input shell/SAST lane while carrying landed #2279 ancestry. It remains Draft pending hosted exact-head Pages/security/SAST/CodeQL/runtime evidence and independent approval. +- `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` is now the current Pages/SAST/Strix successor. Fresh compare to protected main is **15 ahead / 0 behind**, mergeable/Draft. It preserves the Pages caller-input shell boundary and landed #2279 ancestry, then repairs a hosted Runtime Quality defect in the isolated Strix fixture harness: fixture repositories copied `strix_quick_gate.sh` and `strix_model_utils.sh` but omitted the executed `strix_evidence_binding.py`, causing intended success/retry/provider-failure/scope/remediation fixtures to collapse before their assertions. Invalid intermediate reconstruction commits remain in ancestry for auditability but are not evidence; ordinary protected-main adoption plus `4e8829f...` restores the complete harness and materializes the binder next to each model helper. The current exact hosted Pages/security/Python-Security/SAST/Runtime-Quality generation is queued and CodeQL is pending; predecessor 94-focused/3,373-full receipts do not transfer. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. - `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. @@ -39,11 +39,11 @@ Naruon must not copy central workflow source. It records owner identities and ad ### Backend dependency security -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to the #1565 branch but its exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21` tree is not yet a valid Git descendant of #1565: fresh ancestry verification found it diverged from the protected merge base and its broad dependency graph does not preserve #1565's direct `httpx2` development/TestClient contract. #1685's `aiosmtplib==5.1.3` security delta remains valid and must survive. The repair is ordinary/non-force lossless reconciliation onto #1565 followed by regeneration of one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph and exact-head installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Do not close either owner or hand-edit generated lock/hash material as a workaround. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to the #1565 branch but exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21` is not yet a valid Git descendant of #1565 and its broad dependency graph does not preserve #1565's direct `httpx2` development/TestClient contract. #1685's `aiosmtplib==5.1.3` security delta remains valid and must survive. The repair is ordinary/non-force lossless reconciliation onto #1565 followed by regeneration of one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph and exact-head installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Do not close either owner or hand-edit generated lock/hash material as a workaround. ### LLM provider error confidentiality -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Its exact-head hosted generation remains subject to the central execution-capacity blocker; no predecessor receipt transfers. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Exact-head hosted acceptance remains incomplete; no predecessor receipt transfers. ### Workspace and migrations @@ -53,11 +53,15 @@ Naruon must not copy central workflow source. It records owner identities and ad ### LLM governance/released contract -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is currently `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main remains `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. -## 4. Buyer-visible UI and localization +## 4. Buyer-visible UI, Storybook and localization -[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Because this PR changes only frontend product/test files and `frontend/package.json`, do not patch central workflow or duplicate dependency-security ownership here. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. + +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded static Storybook design-token precursor at exact `655c97376d0c5ad4560f96973663d55add76d082`. Its effective diff against current protected `develop` remains exactly five additive files: three design/doctoring documents plus `storybook-design-tokens.css` and its test. Six repository-owned workflows are GREEN, but the branch is **19 ahead / 1 behind** protected `develop`, lacks qualifying current-head independent approval and all live organization-required evidence, and deliberately contains **no Storybook runtime, `.storybook` configuration, component story, browser interaction, accessibility gate, DTCG JSON artifact, or verified current Figma mapping**. Production CSS remains runtime token authority. Treat #1354 as a static contract precursor, not completed design-system delivery. **UI Delivery Gate: FAIL.** + +The follow-on executable Storybook/design-system slice must use an exactly compatible pinned Storybook package set for the then-current React/Next.js toolchain; create representative reusable component states rather than page-only screenshots; cover normal/loading/empty/error/permission and responsive states; execute keyboard/focus/touch/a11y interactions in a real browser; audit or remove candidate token scales before product/Figma consumption; and verify a fresh Figma authority mapping rather than assuming historical node references remain current. shadcn/ui source availability is not Storybook evidence. [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single UI Localization Catalog Gap. The implementation must follow #1503's then-current migration head, use a product-owned DB-versioned screen-scoped resource, keep UI translation separate from ontology labels, support KO/EN/JA/ZH/VI/ES/DE/FR, and validate CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. Do not broaden #1729 into the catalog implementation. @@ -65,9 +69,9 @@ Naruon must not copy central workflow source. It records owner identities and ad ## 5. Generated-writer and governance boundaries -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 now demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed the regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. -The invariant is therefore stronger than "generated commits may delete doctoring": any generated descendant of a provenance/owner branch must be semantically checked for cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. +The invariant is stronger than "generated commits may delete doctoring": any generated descendant of a provenance/owner branch must be semantically checked for cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. @@ -76,28 +80,30 @@ Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current p | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; **606 queued / 0 in-progress** at observation | stable runner acquisition; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair is complete at `652764a...`; #2271 is Draft/current-main based; #2271→#2275 and separate #2272 still await hosted/current-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | +| P0 | Actions execution capacity | `.github#712`; partial/intermittent runner acquisition, downstream jobs still positively unassigned | stable runner acquisition; parse/admission defects classified separately; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair complete at `652764a...`; #2271 Draft/current-main; #2271→#2275 plus separate #2272 `4e8829f...` await exact-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | | P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 requires real ancestry/contract reconciliation and coherent lock/security regeneration | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted generation execution-capacity blocked | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted acceptance incomplete | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | | P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | | P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | | P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | +| P1 | Executable Storybook/design system | #1354 static five-file token precursor only; 19 ahead/1 behind, no runtime/stories/browser/a11y/Figma-sync evidence | protected-base adoption + pinned runtime/build + representative component/state stories + interaction/a11y/responsive browser evidence + production-token audit + fresh Figma mapping | | P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | | P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | | P1 | Generated-writer owner lock | #1727/#1733 evidence rollback and #1728 cross-owner security/performance rollback reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue | ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. +1. Restore **stable**, not merely intermittent, Actions runner acquisition through `.github#712`; keep parse/admission defects separate and do not blind-rerun unchanged heads. 2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. -3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently accept Pages #2272 `cd3b41...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. +3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently terminalize and review Pages/Strix #2272 `4e8829f...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. 4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI or generated provenance branches. 5. Preserve #1565 as the bounded TestClient/httpx2 owner and ordinary/non-force reconcile #1685 into a real descendant while retaining `aiosmtplib==5.1.3`; regenerate one coherent manifest/plain/hash/uv graph and reacquire installation, warnings-as-errors, TestClient, hostile SMTP/lifecycle, Security and CodeQL evidence. 6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. 7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. 8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. -10. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +10. Reconcile #1354 ordinary/non-force onto the then-current protected base and treat it only as the static token precursor; build and verify the executable Storybook/design-system follow-on with real component/browser/a11y/responsive/Figma evidence rather than equating source components with Storybook delivery. +11. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. -**Merge/Release Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From ab3f82114b6de33a2d3c07419558baf57acb64fb Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 05:52:45 +0900 Subject: [PATCH 32/89] docs(gap): record NetworkGraph duplicate adoption --- docs/product-technical-gap-baseline.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a95afe84e..07699b458 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.14 +**Baseline version:** 2.15 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Baseline v2.13 is preserved at `docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md`; v2.12 and v2.11 remain under the same history directory, and the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. +This file is the current product/technical authority overlay. Baseline v2.13 is preserved at `docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md`; v2.12 and v2.11 remain under the same history directory, and the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. The complete v2.14 source remains audit-visible in Git ancestry. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -The current repository shape remains **281 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +The current repository shape is **282 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,11 +21,11 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open foundation prerequisite. -- `.github#712` remains the Actions execution-capacity owner, but the earlier **606 queued / 0 in-progress** and later **761 / 0** snapshots are no longer valid as blanket current-state statements. Fresh owner evidence now shows **partial/intermittent runner acquisition with backlog still present**. On `.github#2271@a0e1424...`, SAST, CodeQL language detection, Python detection, Security scope detection, and gitleaks have acquired hosted runners and completed successfully, while downstream CodeQL compatibility, pip-audit/Bandit, Trivy, and Scorecard jobs remain positively unassigned (`runner_id=0`, `steps=[]`). This is not stable capacity recovery and does not authorize blind reruns or wake commits. Missing workflow generations must also be separated from workflow-parse/admission defects rather than being mislabeled as runner starvation. +- `.github#712` remains the Actions execution-capacity owner, but the earlier **606 queued / 0 in-progress** and later **761 / 0** snapshots are no longer valid as blanket current-state statements. Fresh owner evidence shows **partial/intermittent runner acquisition with backlog still present**. On `.github#2271@a0e1424...`, SAST, CodeQL language detection, Python detection, Security scope detection, and gitleaks acquired hosted runners and completed successfully, while downstream CodeQL compatibility, pip-audit/Bandit, Trivy, and Scorecard jobs remained positively unassigned (`runner_id=0`, `steps=[]`). This is not stable capacity recovery and does not authorize blind reruns or wake commits. Missing workflow generations must also be separated from workflow-parse/admission defects rather than being mislabeled as runner starvation. - `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves scheduler/credential/no-restamp contracts, adopts landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests. Fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal and current-head independent approval is still required. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind. Several first-stage jobs have now executed successfully, but downstream required jobs remain unassigned/nonterminal; qualifying independent current-head approval is still missing. Partial runner acquisition is execution evidence, not acceptance. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind. Several first-stage jobs have executed successfully, but downstream required jobs remain unassigned/nonterminal; qualifying independent current-head approval is still missing. Partial runner acquisition is execution evidence, not acceptance. - `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. -- `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` is now the current Pages/SAST/Strix successor. Fresh compare to protected main is **15 ahead / 0 behind**, mergeable/Draft. It preserves the Pages caller-input shell boundary and landed #2279 ancestry, then repairs a hosted Runtime Quality defect in the isolated Strix fixture harness: fixture repositories copied `strix_quick_gate.sh` and `strix_model_utils.sh` but omitted the executed `strix_evidence_binding.py`, causing intended success/retry/provider-failure/scope/remediation fixtures to collapse before their assertions. Invalid intermediate reconstruction commits remain in ancestry for auditability but are not evidence; ordinary protected-main adoption plus `4e8829f...` restores the complete harness and materializes the binder next to each model helper. The current exact hosted Pages/security/Python-Security/SAST/Runtime-Quality generation is queued and CodeQL is pending; predecessor 94-focused/3,373-full receipts do not transfer. +- `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` is the current Pages/SAST/Strix successor. Fresh compare to protected main is **15 ahead / 0 behind**, mergeable/Draft. It preserves the Pages caller-input shell boundary and landed #2279 ancestry, then repairs a hosted Runtime Quality defect in the isolated Strix fixture harness: fixture repositories copied `strix_quick_gate.sh` and `strix_model_utils.sh` but omitted the executed `strix_evidence_binding.py`, causing intended success/retry/provider-failure/scope/remediation fixtures to collapse before their assertions. Invalid intermediate reconstruction commits remain in ancestry for auditability but are not evidence; ordinary protected-main adoption plus `4e8829f...` restores the complete harness and materializes the binder next to each model helper. The current exact hosted Pages/security/Python-Security/SAST/Runtime-Quality generation is queued and CodeQL is pending; predecessor 94-focused/3,373-full receipts do not transfer. - `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. - `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. @@ -71,7 +71,9 @@ The follow-on executable Storybook/design-system slice must use an exactly compa Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. -The invariant is stronger than "generated commits may delete doctoring": any generated descendant of a provenance/owner branch must be semantically checked for cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. +A new generated direct-`develop` duplicate, [#1734](https://github.com/ContextualWisdomLab/naruon/pull/1734), re-proposed the bounded relationship/node option loops already canonically owned by #1593 `97235208ade7666c2cd32d1714a4c2fd23c484a9`, without #1593's stronger iterator-read regression and test-isolation repair, and added task-specific `.jules/bolt.md` plus a duplicate CHANGELOG claim. It was not closed or force-rewritten. Ordinary two-parent adoption `696b5974ed75eca2b514de2b03ba49a634eece68` preserves generated predecessor `ba1d941b...` for provenance, adopts #1593, points at exact canonical tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`, retargets onto the #1593 branch, and is Draft with **zero changed files / zero additions / zero deletions**. #1734 owns no independent product/performance delta and its direct-`develop` receipts do not transfer to #1593. + +The invariant is stronger than "generated commits may delete doctoring": any generated descendant or new generated duplicate must be semantically checked for existing canonical ownership, cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. @@ -79,7 +81,7 @@ Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current p | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 281 open PRs; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Release-train convergence | 282 open PRs; newest #1734 repaired to zero-delta provenance; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | | P0 | Actions execution capacity | `.github#712`; partial/intermittent runner acquisition, downstream jobs still positively unassigned | stable runner acquisition; parse/admission defects classified separately; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | | P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair complete at `652764a...`; #2271 Draft/current-main; #2271→#2275 plus separate #2272 `4e8829f...` await exact-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | | P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 requires real ancestry/contract reconciliation and coherent lock/security regeneration | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | @@ -90,7 +92,7 @@ Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current p | P1 | Executable Storybook/design system | #1354 static five-file token precursor only; 19 ahead/1 behind, no runtime/stories/browser/a11y/Figma-sync evidence | protected-base adoption + pinned runtime/build + representative component/state stories + interaction/a11y/responsive browser evidence + production-token audit + fresh Figma mapping | | P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | | P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated-writer owner lock | #1727/#1733 evidence rollback and #1728 cross-owner security/performance rollback reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue | +| P1 | Generated-writer owner lock | #1727/#1733 evidence rollback, #1728 cross-owner rollback, and #1734 direct duplicate reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue, generated duplicates reduced to provenance | ## 7. Current causal order @@ -104,6 +106,7 @@ Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current p 8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. 10. Reconcile #1354 ordinary/non-force onto the then-current protected base and treat it only as the static token precursor; build and verify the executable Storybook/design-system follow-on with real component/browser/a11y/responsive/Figma evidence rather than equating source components with Storybook delivery. -11. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +11. Keep #1734 as zero-delta provenance on #1593; do not merge it independently or count its historical direct-`develop` runs as owner evidence. +12. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From 9e093962fed8b4ce8e6123b33ce205ee6a203c76 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 06:44:09 +0900 Subject: [PATCH 33/89] docs(gap): record canonical-owner repairs for generated duplicates --- docs/product-technical-gap-baseline.md | 118 ++++++++++++------------- 1 file changed, 57 insertions(+), 61 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 07699b458..c09c9e2f0 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,112 +1,108 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.15 +**Baseline version:** 2.16 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. Baseline v2.13 is preserved at `docs/product-technical-gap-history/2026-09-20-baseline-v2.13.md`; v2.12 and v2.11 remain under the same history directory, and the older v1.9 snapshot remains at `docs/product-technical-gap-history/2026-09-12-baseline-v1.9.md`. The complete v2.14 source remains audit-visible in Git ancestry. Historical snapshots and predecessor checks/reviews are audit material, not current merge or release authority. +This file is the current product/technical authority overlay. v2.15 remains audit-visible as blob `07699b4588e1b8198c1357b8ca2064703151628f` in Git ancestry; v2.13/v2.12/v2.11 and v1.9 historical snapshots remain under `docs/product-technical-gap-history/`. Historical evidence is audit material, not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -The current repository shape is **282 open PRs and 75 open Issues**. Protected `develop` has 17 required contexts. The latest published Naruon release remains `v0.14.4` and is `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Current repository inventory is **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — remain active. Latest published Naruon release is still `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. -## 2. Current central CI/security owner graph +## 2. Central CI/security owner graph -Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open foundation prerequisite. +Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner, but the earlier **606 queued / 0 in-progress** and later **761 / 0** snapshots are no longer valid as blanket current-state statements. Fresh owner evidence shows **partial/intermittent runner acquisition with backlog still present**. On `.github#2271@a0e1424...`, SAST, CodeQL language detection, Python detection, Security scope detection, and gitleaks acquired hosted runners and completed successfully, while downstream CodeQL compatibility, pip-audit/Bandit, Trivy, and Scorecard jobs remained positively unassigned (`runner_id=0`, `steps=[]`). This is not stable capacity recovery and does not authorize blind reruns or wake commits. Missing workflow generations must also be separated from workflow-parse/admission defects rather than being mislabeled as runner starvation. -- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` has completed ordinary/non-force reconciliation onto protected `main@e6334e...`. Its base is current main, it is **175 ahead / 0 behind**, mergeable and Draft. The current generation preserves scheduler/credential/no-restamp contracts, adopts landed URL/redirect authority, and repairs repository identity so hostile embedded `..` and component-ending `.` fail before `gh api` while `.github` and `repo.name` remain valid. Exact-blob probes are GREEN; predecessor local evidence includes 586 focused and 3,438 passed / 28 skipped / 40 subtests. Fresh exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal and current-head independent approval is still required. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` is the CodeQL dispatch repository-identity descendant. It is current-main based, mergeable and **Draft**, 8 ahead / 0 behind. Several first-stage jobs have executed successfully, but downstream required jobs remain unassigned/nonterminal; qualifying independent current-head approval is still missing. Partial runner acquisition is execution evidence, not acceptance. -- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` is the GHAS `code-scanning/analyses` capability-selector descendant of current #2271. Its exact endpoint/header contract is locally verified, but capability selection does not create repository permission. It remains Draft pending #2271 acceptance, terminal exact-head checks, independent approval, and #2276. -- `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` is the current Pages/SAST/Strix successor. Fresh compare to protected main is **15 ahead / 0 behind**, mergeable/Draft. It preserves the Pages caller-input shell boundary and landed #2279 ancestry, then repairs a hosted Runtime Quality defect in the isolated Strix fixture harness: fixture repositories copied `strix_quick_gate.sh` and `strix_model_utils.sh` but omitted the executed `strix_evidence_binding.py`, causing intended success/retry/provider-failure/scope/remediation fixtures to collapse before their assertions. Invalid intermediate reconstruction commits remain in ancestry for auditability but are not evidence; ordinary protected-main adoption plus `4e8829f...` restores the complete harness and materializes the binder next to each model helper. The current exact hosted Pages/security/Python-Security/SAST/Runtime-Quality generation is queued and CodeQL is pending; predecessor 94-focused/3,373-full receipts do not transfer. -- `.github#2269@834d285f90241b4741247408001fd7534ce5a3b0` remains historical redirect/test-seam lineage. Do not close it until a lossless succession audit proves every valid delta/test/doctoring contract is present in protected central ancestry or an accepted successor. -- `.github#2276` remains the real target-repository permission/canary boundary for the reproduced `GET .../code-scanning/analyses` HTTP 403. Acceptance requires an unchanged-target canary that reads both protected-base and exact-head analyses and completes language pairing while 401/403/transport errors remain fail-closed. +- `.github#712` remains the Actions execution-capacity owner. The current point-in-time observation is **785 queued / 0 in-progress**. This is stronger starvation evidence than v2.15's partial-recovery snapshot, but it remains an operational observation rather than source acceptance. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. +- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` remains current-main based, 175 ahead / 0 behind, mergeable and Draft. Repository-identity repair and current-main reconciliation are present. Exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal; local/predecessor evidence does not substitute for hosted exact-head acceptance or independent approval. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e`, `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373`, and separate Pages/SAST/Strix owner `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` remain downstream acceptance lanes. #2272 preserves the Pages caller-input shell boundary and repairs the isolated Strix fixture omission of `strix_evidence_binding.py`; intermediate broken reconstructions remain audit ancestry only. +- `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the real unchanged-target `code-scanning/analyses` permission/canary boundary. Capability selection cannot manufacture repository permission. -Naruon must not copy central workflow source. It records owner identities and adopts accepted/released contracts through ordinary-forward consumer changes only. +Naruon must not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. ## 3. Product owner boundaries -### Frontend dependency security +### Dependency and security ownership -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Prior GREEN evidence is generation-specific. Reacquire vulnerability-database evidence against the then-current protected ancestry after the central CodeQL/security control plane settles; do not copy dependency fixes into unrelated UI or generated provenance owners. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`; current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. -### Backend dependency security +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to #1565 but is not yet a valid Git descendant and does not preserve the direct `httpx2` development/TestClient contract. Preserve #1685's `aiosmtplib==5.1.3`, ordinary/non-force reconcile onto #1565, regenerate one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph, then reacquire installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Never hand-edit generated lock/hash material as a workaround. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) owns the direct Starlette TestClient/httpx2 foundation at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to the #1565 branch but exact `d096a5c235d2c1d8b5a5751cdd4e2c8cbba17c21` is not yet a valid Git descendant of #1565 and its broad dependency graph does not preserve #1565's direct `httpx2` development/TestClient contract. #1685's `aiosmtplib==5.1.3` security delta remains valid and must survive. The repair is ordinary/non-force lossless reconciliation onto #1565 followed by regeneration of one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph and exact-head installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Do not close either owner or hand-edit generated lock/hash material as a workaround. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Provider text/traceback suppression plus four-path hostile canaries and restored TRACEABILITY are source-complete, but exact-head hosted acceptance remains incomplete. -### LLM provider error confidentiality +### Workspace, migrations and opaque identifiers -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Production logs fixed event text plus bounded operation/exception-class metadata only, emits no provider exception string/traceback, and raises fixed `LLMServiceError` messages `from None`. Four-path hostile-canary coverage spans extraction, translation, OpenAI-compatible drafting and Ollama drafting. Ordinary child `9d9d5e0...` also restored TRACEABILITY deleted by generated child `1da2457...`. Exact-head hosted acceptance remains incomplete; no predecessor receipt transfers. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration/bootstrap heads from protected `develop`. -### Workspace and migrations +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. It correctly treats Bandit B608 as the hard-coded SQL-expression heuristic rather than a weak-randomness rule, covers all three bootstrap UID generators plus historical migration `0003_prompt_template_scope`, forbids `random()::text`, preserves already-populated identifiers, and retains dedicated regression + doctoring/TRACEABILITY. -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7` with one migration line: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. No descendant may create a parallel head from protected `develop`. +New generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) duplicated that same repair with inflated MEDIUM/cryptographic-vulnerability framing and task-specific Sentinel doctrine. It was repaired ordinary-forward: current head `46c7a9b3a6472f4e4188964ee1778bc99960d752` keeps generated predecessor `22020df3...` as first-parent provenance, adopts #1727 as second parent, points at exact canonical #1727 tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto the #1727 branch, and is Draft with **zero changed files / zero additions / zero deletions**. #1736 owns no independent security/migration delta and its former direct-`develop` receipts do not transfer. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the bounded opaque-ID entropy descendant at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, retargeted to #1503. It retains the intervening generated commit but restores the deleted executable entropy regression and doctoring. Keep Draft and ordinary-adopt on the then-current #1503 lineage before acceptance. +### LLM governance / released contract -### LLM governance/released contract - -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main remains `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`, but its GitHub Releases inventory is empty. That mutable protected SHA is not a released API/client/schema identity. Naruon remains fail-closed until CO publishes an immutable versioned contract, then ordinary-bumps the consumer. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is still mutable owner source until an immutable API/client/schema release exists. Naruon remains fail-closed and must not bind a mutable owner head as a released contract. ## 4. Buyer-visible UI, Storybook and localization -[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar detail-sidebar owner at exact `477a333be738da0ca1f02faa809db98a59f250d2`. Its source/test contract removes fabricated event facts and inert controls and exposes honest disabled-action reasons. Exact-head Application CI, Bandit, Semgrep and Docker are GREEN; Security is RED specifically in `trivy-fs` while scorecard, dependency-review and OSV are GREEN; CodeQL compatibility verdicts for JavaScript/TypeScript, Actions and Python are RED at the current central dispatch verdict gate. Route current vulnerability attribution/revalidation through #1623 and CodeQL control-plane repair through the central owner graph. UI Delivery remains FAIL until exact-head security/CodeQL plus qualifying post-change review/browser acceptance are terminal. +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. Application CI/Bandit/Semgrep/Docker evidence does not override inherited Trivy and central CodeQL verdict failures. UI Delivery remains FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. + +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains a static Storybook design-token precursor only. It does not supply Storybook runtime/config, representative component-state stories, real-browser interaction/a11y/responsive evidence, DTCG artifact or current Figma mapping. Executable Storybook/design-system delivery remains a P1 buyer-visible Gap; shadcn/ui component source is not Storybook evidence. -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded static Storybook design-token precursor at exact `655c97376d0c5ad4560f96973663d55add76d082`. Its effective diff against current protected `develop` remains exactly five additive files: three design/doctoring documents plus `storybook-design-tokens.css` and its test. Six repository-owned workflows are GREEN, but the branch is **19 ahead / 1 behind** protected `develop`, lacks qualifying current-head independent approval and all live organization-required evidence, and deliberately contains **no Storybook runtime, `.storybook` configuration, component story, browser interaction, accessibility gate, DTCG JSON artifact, or verified current Figma mapping**. Production CSS remains runtime token authority. Treat #1354 as a static contract precursor, not completed design-system delivery. **UI Delivery Gate: FAIL.** +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It must follow the canonical migration lineage, keep UI translation separate from ontology labels, avoid whole-catalog browser loading, and verify CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. -The follow-on executable Storybook/design-system slice must use an exactly compatible pinned Storybook package set for the then-current React/Next.js toolchain; create representative reusable component states rather than page-only screenshots; cover normal/loading/empty/error/permission and responsive states; execute keyboard/focus/touch/a11y interactions in a real browser; audit or remove candidate token scales before product/Figma consumption; and verify a fresh Figma authority mapping rather than assuming historical node references remain current. shadcn/ui source availability is not Storybook evidence. +### Tasks async loading feedback -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single UI Localization Catalog Gap. The implementation must follow #1503's then-current migration head, use a product-owned DB-versioned screen-scoped resource, keep UI translation separate from ontology labels, support KO/EN/JA/ZH/VI/ES/DE/FR, and validate CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. Do not broaden #1729 into the catalog implementation. +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is now the repaired canonical owner for visual loading feedback on `팔로업 작업 생성`, `의도 생성`, and `실행 요청`. Its previous head had accumulated unrelated central-governance, backend URL-validation, broad formatting/doctoring and self-modifying Palette changes. Ordinary two-parent repair `9673832c785db70470432b42f2e7cd046867a4ee` preserves that ancestry, adopts protected `develop`, and restores a bounded **three-file** effective delta only: `TasksLayout.tsx` plus synchronized Lucide mocks in its component/page tests. Protected-base compare is ahead-only, 14 commits in ancestry, 0 behind. The spinner is supplemental/`aria-hidden`; accessible state remains the existing text transition and `aria-busy` contract. -[#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC pending-state owner at exact `85e312360c6342f9bb02b6a6004b2a69599bd4e6`. Rendered interaction contracts exist, but real-browser keyboard/focus/touch/AT, responsive screenshots, eight-locale released resources and current-head independent acceptance remain missing. **UI Delivery Gate: FAIL.** +The current #1463 exact head still lacks focused interaction proof for the loading transitions, real-browser keyboard/focus/responsive/AT evidence, terminal hosted required checks and qualifying independent post-last-push approval. **UI Delivery Gate: FAIL.** -## 5. Generated-writer and governance boundaries +Generated direct-`develop` duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) re-proposed the same feature and also introduced `TasksLayout.test.tsx.orig` plus duplicate CHANGELOG text. It was repaired ordinary-forward after #1463: current head `be1172b745c0e786597aa1a9ce5142b3b6fa3745` preserves generated predecessor `831bbfe9...`, adopts #1463 `9673832c...`, points at the exact canonical #1463 tree `56a1fe2f444db0ddfd482503c7db4814842a291e`, retargets onto #1463, and is Draft with **zero changed files / zero additions / zero deletions**. #1735 is provenance only. -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. #1727 and #1733 demonstrate evidence/TRACEABILITY rollback; #1728 demonstrates a broader cross-owner product regression. After #1728 had been reduced to zero effective delta on canonical memo owner #1675 `8addfa1c...`, generated descendant `ed6576d54d95cb4d9cea258421fa16d915707598` reintroduced 16 effective paths (+294/-1,099): it deleted or weakened dependency-security tests, downgraded Next.js/sharp/js-yaml/nanoid/Vitest material, deleted bounded NetworkGraph option/label tests, replaced early-stop bounded iteration with whole-collection materialization, and re-added task-specific Bolt doctrine. This was repaired without history rewriting: `9bf6c7a3d1f008c48f3e37665cb0bc27fa87987f` removed regenerated doctrine and ordinary child `77e5f46305955f96ae31f7b81e5d84e6ed23bd4d` restored the exact canonical #1675 tree. Fresh compare from #1675 to #1728 current head is **ahead 5 / behind 0 / zero changed files**. #1728 remains open Draft provenance, not an independent product/security/performance owner. +## 5. Generated-writer invariant -A new generated direct-`develop` duplicate, [#1734](https://github.com/ContextualWisdomLab/naruon/pull/1734), re-proposed the bounded relationship/node option loops already canonically owned by #1593 `97235208ade7666c2cd32d1714a4c2fd23c484a9`, without #1593's stronger iterator-read regression and test-isolation repair, and added task-specific `.jules/bolt.md` plus a duplicate CHANGELOG claim. It was not closed or force-rewritten. Ordinary two-parent adoption `696b5974ed75eca2b514de2b03ba49a634eece68` preserves generated predecessor `ba1d941b...` for provenance, adopts #1593, points at exact canonical tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`, retargets onto the #1593 branch, and is Draft with **zero changed files / zero additions / zero deletions**. #1734 owns no independent product/performance delta and its direct-`develop` receipts do not transfer to #1593. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Existing examples now include #1727/#1733 evidence/TRACEABILITY rollback, #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, and #1736 duplicate opaque-ID security work. -The invariant is stronger than "generated commits may delete doctoring": any generated descendant or new generated duplicate must be semantically checked for existing canonical ownership, cross-owner reintroduction, test deletion, dependency/security regression, bounded-performance regression, or self-modifying guidance before its delta is accepted. Preserve valid ancestry, repair ordinary-forward to the canonical owner tree/contract, and never transfer generated-hosted receipts to the owner. +Every generated descendant/new duplicate must be checked semantically for existing owner overlap, source/test/fixture deletion, dependency or security regression, bounded-performance regression, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate lanes to Draft provenance, and never transfer their predecessor hosted receipts to the owner. -Issue #1178 and PR #1732 own the OpenSSF Best Practices evidence lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver item. This is a governance/legal lane unless the business explicitly makes Passing a release criterion; do not weaken licensing or branch protection to satisfy a badge. +Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver; do not weaken licensing or branch protection for badge attainment. ## 6. Commercial Gap register | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 282 open PRs; newest #1734 repaired to zero-delta provenance; protected head unchanged | canonical owner inventory, parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; partial/intermittent runner acquisition, downstream jobs still positively unassigned | stable runner acquisition; parse/admission defects classified separately; obsolete pressure removed without cancelling sole current-head evidence; required lanes settle terminally | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciliation/source repair complete at `652764a...`; #2271 Draft/current-main; #2271→#2275 plus separate #2272 `4e8829f...` await exact-head acceptance; #2276 permission canary open | terminal exact-head checks + qualifying independent review + real unchanged-target GHAS canary + verified #2269 succession | -| P0 | Dependency-security freshness | frontend #1623 current-vulnerability revalidation; backend #1565→#1685 requires real ancestry/contract reconciliation and coherent lock/security regeneration | current DB scans, coherent manifests/locks, hostile regression evidence, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present; hosted acceptance incomplete | terminal current-head six-workflow evidence + zero valid findings + qualifying post-last-push approval | -| P0 | Workspace/migration convergence | #1503 sole migration line; downstream stacks must not fork it | one Alembic head, real PostgreSQL fresh/historical evidence, ordinary descendant restacks | -| P0 | Released LLM contract | CO main exists but Releases inventory is empty | immutable CO API/client/schema publication + Naruon consumer version bump + contract/E2E/security/SBOM/provenance evidence | -| P1 | Calendar buyer truth/a11y | #1682 product contract repaired; inherited security/central CodeQL gates still RED | current Trivy attribution/revalidation through owner path, central CodeQL verdict acceptance, browser/a11y/current-head review | -| P1 | Executable Storybook/design system | #1354 static five-file token precursor only; 19 ahead/1 behind, no runtime/stories/browser/a11y/Figma-sync evidence | protected-base adoption + pinned runtime/build + representative component/state stories + interaction/a11y/responsive browser evidence + production-token audit + fresh Figma mapping | -| P1 | UI localization | #1731 specified; no canonical DB/API implementation yet | eight-locale versioned resource + Storybook/browser/a11y + p95/API/cache/rollback evidence | -| P1 | OIDC interaction acceptance | #1729 jsdom contract only | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated-writer owner lock | #1727/#1733 evidence rollback, #1728 cross-owner rollback, and #1734 direct duplicate reproduced and repaired ordinary-forward | semantic owner-overlap gate, canonical-tree/delta check, protected test/doctoring invariants, no self-modifying residue, generated duplicates reduced to provenance | +| P0 | Release-train convergence | 284 open PRs; newest #1735/#1736 reduced to canonical-owner provenance; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; point-in-time 785 queued / 0 in-progress | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciled; #2271→#2275 plus separate #2272; #2276 real canary pending | terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | +| P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | +| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 zero-delta provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | +| P0 | Released LLM contract | immutable CO release absent | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | +| P1 | Tasks loading interaction | #1463 bounded three-file source repaired; #1735 zero-delta provenance | focused loading transition regression, browser keyboard/focus/responsive/AT, terminal exact-head checks/review | +| P1 | Executable Storybook/design system | #1354 static precursor only | pinned runtime/build, representative states, browser/a11y/responsive evidence, token audit, fresh Figma mapping | +| P1 | UI localization | #1731 specified; implementation not yet protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | +| P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | +| P1 | Generated-writer owner lock | #1728/#1734/#1735/#1736 demonstrate cross-owner duplication/regression modes | semantic owner-overlap gate, canonical-tree/delta check, no scratch/self-modifying residue, duplicate lanes reduced to provenance | ## 7. Current causal order -1. Restore **stable**, not merely intermittent, Actions runner acquisition through `.github#712`; keep parse/admission defects separate and do not blind-rerun unchanged heads. -2. Let #2040 exact `652764a...` settle terminal hosted checks and obtain qualifying current-head independent approval; source reconciliation and repository-identity repair are already present. -3. Accept #2271 `a0e1424...`, then #2275 `572cfed...`; independently terminalize and review Pages/Strix #2272 `4e8829f...`; prove #2269 succession and #2276 real unchanged-target analysis-read canary before claiming central CodeQL/GHAS acceptance. -4. Revalidate frontend dependency-security #1623 against the then-current vulnerability database; use it to resolve inherited Trivy findings rather than patching unrelated UI or generated provenance branches. -5. Preserve #1565 as the bounded TestClient/httpx2 owner and ordinary/non-force reconcile #1685 into a real descendant while retaining `aiosmtplib==5.1.3`; regenerate one coherent manifest/plain/hash/uv graph and reacquire installation, warnings-as-errors, TestClient, hostile SMTP/lifecycle, Security and CodeQL evidence. -6. Terminalize and independently review #1733 exact `9d9d5e0...` without reintroducing provider text, traceback logging or generated doctoring rollback. -7. Integrate #1694 → #1691 and prerequisites, then #1503 as the single migration lineage; ordinary-adopt #1727 and downstream workspace/Reply-SLA consumers on that protected ancestry. -8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -9. Implement #1731 as the sole localization owner after the canonical migration lineage lands, then ordinary-adopt its released screen resources into #1729 and other UI surfaces. -10. Reconcile #1354 ordinary/non-force onto the then-current protected base and treat it only as the static token precursor; build and verify the executable Storybook/design-system follow-on with real component/browser/a11y/responsive/Figma evidence rather than equating source components with Storybook delivery. -11. Keep #1734 as zero-delta provenance on #1593; do not merge it independently or count its historical direct-`develop` runs as owner evidence. -12. Reacquire buyer-visible browser/a11y/responsive/localization evidence, build one exact integrated protected candidate, then publish immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. - -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, real external permission evidence, current security scans, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file +1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. +2. Terminalize #2040 exact `652764a...`, then #2271 → #2275 and separate #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. +3. Revalidate frontend dependency-security #1623 against current vulnerability data. +4. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. +5. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. +6. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 zero-delta provenance only. +7. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +8. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. +9. Finish #1463 with actual loading-transition/browser/a11y evidence; keep #1735 as zero-delta provenance rather than an independent merge lane. +10. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. +11. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. + +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. From 745c343ea11251a58f9b633e6b461b4cbe25653f Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 06:48:18 +0900 Subject: [PATCH 34/89] docs(gap): record verified Tasks pending-action RED --- docs/product-technical-gap-baseline.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index c09c9e2f0..d611e0d3c 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.16 +**Baseline version:** 2.17 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.15 remains audit-visible as blob `07699b4588e1b8198c1357b8ca2064703151628f` in Git ancestry; v2.13/v2.12/v2.11 and v1.9 historical snapshots remain under `docs/product-technical-gap-history/`. Historical evidence is audit material, not current merge or release authority. +This file is the current product/technical authority overlay. v2.16 remains audit-visible as blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture @@ -21,7 +21,7 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. The current point-in-time observation is **785 queued / 0 in-progress**. This is stronger starvation evidence than v2.15's partial-recovery snapshot, but it remains an operational observation rather than source acceptance. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. +- `.github#712` remains the Actions execution-capacity owner. The latest fresh observations in this generation remain in the high-700 backlog range, with runner acquisition fluctuating between zero and low single digits. This is starvation evidence, not source acceptance. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. - `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` remains current-main based, 175 ahead / 0 behind, mergeable and Draft. Repository-identity repair and current-main reconciliation are present. Exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal; local/predecessor evidence does not substitute for hosted exact-head acceptance or independent approval. - `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e`, `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373`, and separate Pages/SAST/Strix owner `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` remain downstream acceptance lanes. #2272 preserves the Pages caller-input shell boundary and repairs the isolated Strix fixture omission of `strix_evidence_binding.py`; intermediate broken reconstructions remain audit ancestry only. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the real unchanged-target `code-scanning/analyses` permission/canary boundary. Capability selection cannot manufacture repository permission. @@ -44,7 +44,7 @@ Naruon must not copy central workflow source. It records owner identities and co [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. It correctly treats Bandit B608 as the hard-coded SQL-expression heuristic rather than a weak-randomness rule, covers all three bootstrap UID generators plus historical migration `0003_prompt_template_scope`, forbids `random()::text`, preserves already-populated identifiers, and retains dedicated regression + doctoring/TRACEABILITY. -New generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) duplicated that same repair with inflated MEDIUM/cryptographic-vulnerability framing and task-specific Sentinel doctrine. It was repaired ordinary-forward: current head `46c7a9b3a6472f4e4188964ee1778bc99960d752` keeps generated predecessor `22020df3...` as first-parent provenance, adopts #1727 as second parent, points at exact canonical #1727 tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto the #1727 branch, and is Draft with **zero changed files / zero additions / zero deletions**. #1736 owns no independent security/migration delta and its former direct-`develop` receipts do not transfer. +Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) duplicated that same repair with inflated MEDIUM/cryptographic-vulnerability framing and task-specific Sentinel doctrine. It was repaired ordinary-forward: current head `46c7a9b3a6472f4e4188964ee1778bc99960d752` keeps generated predecessor `22020df3...` as first-parent provenance, adopts #1727 as second parent, points at exact canonical #1727 tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto the #1727 branch, and is Draft with zero effective product delta. #1736 owns no independent security/migration delta and its former direct-`develop` receipts do not transfer. ### LLM governance / released contract @@ -60,11 +60,15 @@ New generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab ### Tasks async loading feedback -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is now the repaired canonical owner for visual loading feedback on `팔로업 작업 생성`, `의도 생성`, and `실행 요청`. Its previous head had accumulated unrelated central-governance, backend URL-validation, broad formatting/doctoring and self-modifying Palette changes. Ordinary two-parent repair `9673832c785db70470432b42f2e7cd046867a4ee` preserves that ancestry, adopts protected `develop`, and restores a bounded **three-file** effective delta only: `TasksLayout.tsx` plus synchronized Lucide mocks in its component/page tests. Protected-base compare is ahead-only, 14 commits in ancestry, 0 behind. The spinner is supplemental/`aria-hidden`; accessible state remains the existing text transition and `aria-busy` contract. +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is the repaired canonical owner for visual loading feedback on `팔로업 작업 생성`, `의도 생성`, and `실행 요청`. Ordinary two-parent repair `9673832c785db70470432b42f2e7cd046867a4ee` preserves its prior polluted ancestry, adopts protected `develop`, and reduces effective scope to exactly three intended files: `TasksLayout.tsx` plus synchronized component/page Lucide mocks. Unrelated central-governance, backend URL-validation, doctoring/generated-guidance, scratch artifacts and duplicate CHANGELOG changes are absent from the effective diff. -The current #1463 exact head still lacks focused interaction proof for the loading transitions, real-browser keyboard/focus/responsive/AT evidence, terminal hosted required checks and qualifying independent post-last-push approval. **UI Delivery Gate: FAIL.** +Fresh review/source verification exposed a still-valid functional RED on that repaired exact head. `의도 생성` and `실행 요청` share the single per-task `currentKnowledgeIntent.state === 'loading'`. Triggering either POST therefore disables both controls, marks both `aria-busy=true`, displays a Loader2 on both, and simultaneously changes the labels to `생성 중` and `실행 중`, even though only one action initiated the request. A resolved/outdated predecessor thread does not make this current behavior correct. -Generated direct-`develop` duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) re-proposed the same feature and also introduced `TasksLayout.test.tsx.orig` plus duplicate CHANGELOG text. It was repaired ordinary-forward after #1463: current head `be1172b745c0e786597aa1a9ce5142b3b6fa3745` preserves generated predecessor `831bbfe9...`, adopts #1463 `9673832c...`, points at the exact canonical #1463 tree `56a1fe2f444db0ddfd482503c7db4814842a291e`, retargets onto #1463, and is Draft with **zero changed files / zero additions / zero deletions**. #1735 is provenance only. +The minimum causal fix is action-specific pending identity per task (for example `pendingAction: 'create' | 'execute' | null`) while preserving mutual exclusion. Both controls may stay disabled while either request is pending, but only the initiating control may be busy, render the spinner and expose its loading label. Add deferred-request regressions that hold create and execute POSTs unresolved independently, prove the active/inactive button states, and prove success/error settlement resets. Reply-SLA has independent state and must remain unchanged. + +No source fix is claimed at `9673832c...`; #1463 remains Draft. **UI Delivery Gate: FAIL.** Functional completeness and accessibility semantics fail on the shared-pending-state RED; real-browser keyboard/focus/responsive/AT evidence, terminal exact-head hosted checks and qualifying independent post-last-push approval also remain missing. + +Generated direct-`develop` duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) re-proposed the same feature and introduced `TasksLayout.test.tsx.orig` plus duplicate CHANGELOG text. It was repaired ordinary-forward after #1463: current head `be1172b745c0e786597aa1a9ce5142b3b6fa3745` preserves generated predecessor `831bbfe9...`, adopts #1463 `9673832c...`, points at exact canonical #1463 tree `56a1fe2f444db0ddfd482503c7db4814842a291e`, retargets onto #1463, and is Draft with zero effective product delta. #1735 is provenance only; it does not repair the canonical #1463 interaction RED. ## 5. Generated-writer invariant @@ -79,13 +83,13 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 284 open PRs; newest #1735/#1736 reduced to canonical-owner provenance; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; point-in-time 785 queued / 0 in-progress | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Actions execution capacity | `.github#712`; high-700 queued backlog with unstable low/zero runner acquisition | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | | P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciled; #2271→#2275 plus separate #2272; #2276 real canary pending | terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 zero-delta provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | immutable CO release absent | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Tasks loading interaction | #1463 bounded three-file source repaired; #1735 zero-delta provenance | focused loading transition regression, browser keyboard/focus/responsive/AT, terminal exact-head checks/review | +| P1 | Tasks loading interaction | #1463 bounded owner repaired, but create/execute share one pending state; #1735 is zero-delta provenance | action-specific pending identity, deferred-request regressions, browser keyboard/focus/responsive/AT, terminal exact-head checks/review | | P1 | Executable Storybook/design system | #1354 static precursor only | pinned runtime/build, representative states, browser/a11y/responsive evidence, token audit, fresh Figma mapping | | P1 | UI localization | #1731 specified; implementation not yet protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | | P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | @@ -101,7 +105,7 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr 6. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 zero-delta provenance only. 7. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 8. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -9. Finish #1463 with actual loading-transition/browser/a11y evidence; keep #1735 as zero-delta provenance rather than an independent merge lane. +9. Repair #1463's create/execute pending-action identity ordinary-forward, add deferred-request RED→GREEN tests, then acquire real browser keyboard/focus/responsive/AT and hosted/review evidence. Keep #1735 zero-delta provenance only. 10. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. 11. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. From e6efecf51999ba1ac5d6b79cd99ae063a75a84ea Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 08:42:50 +0900 Subject: [PATCH 35/89] docs(gap): track canonical Strix owner convergence --- docs/product-technical-gap-baseline.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index d611e0d3c..25ec56b64 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.17 +**Baseline version:** 2.18 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.16 remains audit-visible as blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.17 remains audit-visible as blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`; v2.16 remains blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture @@ -21,9 +21,10 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. The latest fresh observations in this generation remain in the high-700 backlog range, with runner acquisition fluctuating between zero and low single digits. This is starvation evidence, not source acceptance. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. +- `.github#712` remains the Actions execution-capacity owner. The latest fresh observation is **599 queued / 3 in progress**. Runner acquisition is no longer literally zero at this instant, but three active runs against a ~600-run backlog is not stable capacity. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. - `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` remains current-main based, 175 ahead / 0 behind, mergeable and Draft. Repository-identity repair and current-main reconciliation are present. Exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal; local/predecessor evidence does not substitute for hosted exact-head acceptance or independent approval. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e`, `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373`, and separate Pages/SAST/Strix owner `.github#2272@4e8829f5e44c0e101cd1843106a4639ffd7f243a` remain downstream acceptance lanes. #2272 preserves the Pages caller-input shell boundary and repairs the isolated Strix fixture omission of `strix_evidence_binding.py`; intermediate broken reconstructions remain audit ancestry only. +- `.github#2291@00082e8dc7ab6bdd3261c4f7131f6e300a66b645` is now the canonical Strix trusted-binder/runtime owner. Its production gate resolves `strix_evidence_binding.py` beside the trusted script source, while executable fixtures keep `STRIX_REPO_ROOT` as a binder-free consumer workspace and invoke the trusted gate by absolute path. Earlier fixture/recovery mistakes remain ancestry only. Current-head Runtime Quality, CodeQL, Security, Python Security and Semgrep runs are queued; same-account COMMENT receipts and predecessor full-suite results are not acceptance. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` and `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` remain repository-identity/GHAS acceptance lanes. `.github#2272@0379535a87cb3c7fd4b4038c76b0670f4730fb7b` has now ordinary-adopted exact #2291 as its stack base while preserving the Pages caller-input shell boundary; the superseded consumer-binder copies and count-only fixture contract are no longer its effective owner claim. #2272 remains Draft and its Pages Input Security, Runtime Quality, Security, Python Security, Semgrep and CodeQL runs are queued/nonterminal. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the real unchanged-target `code-scanning/analyses` permission/canary boundary. Capability selection cannot manufacture repository permission. Naruon must not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. @@ -83,8 +84,8 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 284 open PRs; newest #1735/#1736 reduced to canonical-owner provenance; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; high-700 queued backlog with unstable low/zero runner acquisition | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciled; #2271→#2275 plus separate #2272; #2276 real canary pending | terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | +| P0 | Actions execution capacity | `.github#712`; 599 queued / 3 in progress in the latest fresh observation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciled; #2271→#2275 plus #2291→#2272; #2276 real canary pending | terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 zero-delta provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | @@ -98,7 +99,7 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr ## 7. Current causal order 1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. -2. Terminalize #2040 exact `652764a...`, then #2271 → #2275 and separate #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. +2. Terminalize #2040 exact `652764a...`, then #2271 → #2275 and #2291 → #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. 3. Revalidate frontend dependency-security #1623 against current vulnerability data. 4. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. 5. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. @@ -109,4 +110,4 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr 10. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. 11. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From 9478813d38686276b6bf2bd2ccbe6fca8699e672 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 09:49:19 +0900 Subject: [PATCH 36/89] docs(gap): record Tasks RED-GREEN and owner convergence --- docs/product-technical-gap-baseline.md | 83 ++++++++++++++------------ 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 25ec56b64..23cfa4c3e 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.18 +**Baseline version:** 2.19 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.17 remains audit-visible as blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`; v2.16 remains blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.18 remains audit-visible as blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`; v2.17 remains blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`; v2.16 remains blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -Current repository inventory is **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. The three effective rulesets — `CWL Central required workflows`, `Lock default branch`, and `PR` — remain active. Latest published Naruon release is still `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Current repository inventory is **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,11 +21,14 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. The latest fresh observation is **599 queued / 3 in progress**. Runner acquisition is no longer literally zero at this instant, but three active runs against a ~600-run backlog is not stable capacity. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. -- `.github#2040@652764a37fc8af032f03cbe75da84ca88aee96bb` remains current-main based, 175 ahead / 0 behind, mergeable and Draft. Repository-identity repair and current-main reconciliation are present. Exact-head CodeQL, Python Security, Security, SAST, Runtime Quality and Trusted-uv generations remain nonterminal; local/predecessor evidence does not substitute for hosted exact-head acceptance or independent approval. -- `.github#2291@00082e8dc7ab6bdd3261c4f7131f6e300a66b645` is now the canonical Strix trusted-binder/runtime owner. Its production gate resolves `strix_evidence_binding.py` beside the trusted script source, while executable fixtures keep `STRIX_REPO_ROOT` as a binder-free consumer workspace and invoke the trusted gate by absolute path. Earlier fixture/recovery mistakes remain ancestry only. Current-head Runtime Quality, CodeQL, Security, Python Security and Semgrep runs are queued; same-account COMMENT receipts and predecessor full-suite results are not acceptance. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` and `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` remain repository-identity/GHAS acceptance lanes. `.github#2272@0379535a87cb3c7fd4b4038c76b0670f4730fb7b` has now ordinary-adopted exact #2291 as its stack base while preserving the Pages caller-input shell boundary; the superseded consumer-binder copies and count-only fixture contract are no longer its effective owner claim. #2272 remains Draft and its Pages Input Security, Runtime Quality, Security, Python Security, Semgrep and CodeQL runs are queued/nonterminal. -- `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the real unchanged-target `code-scanning/analyses` permission/canary boundary. Capability selection cannot manufacture repository permission. +- `.github#712` remains the Actions execution-capacity owner. The latest fresh observation before this baseline generation is **620 queued / 3 in progress**. Runner acquisition is intermittent rather than totally absent, but this is not stable capacity. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. +- `.github#2040` has advanced beyond its former `652764a37fc8af032f03cbe75da84ca88aee96bb` authority to exact `7901ca565fb93a9e869cd4136476384ac3a07bdf`, **177 ahead / 0 behind** protected main. Its ordinary current-main reconciliation and repository-identity repair remain ancestry. New RED `82a4e2a83be9543fe02cd208bee6837aaf5aa085` and GREEN `7901ca5...` add the Noema document hash lock to Trusted uv full-suite trigger/cache/install closure. Current CodeQL is pending and SAST/Python Security/Runtime Quality/Trusted uv/Security are nonterminal; no predecessor evidence transfers. +- The new #2040 Trusted-uv delta overlaps canonical full-suite owner `.github#1911@dfeadc7adfb02d73e166104f2987f14fbf7fe82e`. #1911 explicitly owns `trusted-uv-materializer-quality-ci.yml` repository-wide dependency closure and already carries the same Noema-lock invariant, but its current head is **22 ahead / 33 behind** protected main with merge base `64aa08d7...`. Owner-path comments require #1911 to reconcile ordinary/non-force onto current protected main first, then #2040 to adopt/adapt the canonical result rather than retain a parallel Trusted-uv owner. Neither PR is close-as-superseded material. +- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` remains the CodeQL repository-identity admission owner, 8 ahead / 0 behind protected main, Draft/Proposed. SAST is terminal success while aggregate CodeQL/Python Security/Security remain nonterminal; partial hosted acquisition is not aggregate GREEN. +- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` remains stacked on #2271 and owns GHAS analysis-read credential selection only. SAST is terminal success; CodeQL/Security remain nonterminal. #2276 still must prove real target-repository `code-scanning/analyses` permission; selector logic cannot manufacture repository permission. +- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` is the canonical Strix trusted-binder/runtime owner. It keeps `STRIX_REPO_ROOT` as the consumer scan/artifact root while trusted gate/model-helper/binder runtime stays source-owned. The latest integration also models the `.github` gate/model helper as consumer source under scan without copying the binder. Local exact-tree evidence is recorded by the owner, but fresh Runtime Quality/CodeQL/Security/Python Security/Semgrep runs are queued/nonterminal. It is Ready for review, not merge-accepted. +- `.github#2272@6ac3d96dc8369a31be0fc76dd74d002424708215` now stacks on exact #2291 `782d67b...`, preserves the Pages caller-input shell boundary, and removes its superseded parallel Strix owner claim. It remains Draft/Proposed with fresh hosted acceptance and independent review pending. +- `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. Naruon must not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. @@ -43,13 +46,13 @@ Naruon must not copy central workflow source. It records owner identities and co [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration/bootstrap heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. It correctly treats Bandit B608 as the hard-coded SQL-expression heuristic rather than a weak-randomness rule, covers all three bootstrap UID generators plus historical migration `0003_prompt_template_scope`, forbids `random()::text`, preserves already-populated identifiers, and retains dedicated regression + doctoring/TRACEABILITY. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. It treats Bandit B608 as the hard-coded SQL-expression heuristic rather than a weak-randomness rule, covers all three bootstrap opaque-ID generators plus historical migration `0003_prompt_template_scope`, forbids `random()::text`, preserves populated identifiers, and retains dedicated regression plus doctoring/TRACEABILITY. -Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) duplicated that same repair with inflated MEDIUM/cryptographic-vulnerability framing and task-specific Sentinel doctrine. It was repaired ordinary-forward: current head `46c7a9b3a6472f4e4188964ee1778bc99960d752` keeps generated predecessor `22020df3...` as first-parent provenance, adopts #1727 as second parent, points at exact canonical #1727 tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto the #1727 branch, and is Draft with zero effective product delta. #1736 owns no independent security/migration delta and its former direct-`develop` receipts do not transfer. +Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) remains Draft provenance only. Current `46c7a9b3a6472f4e4188964ee1778bc99960d752` adopts #1727 and has zero effective product delta; generated severity inflation, Sentinel doctrine, and weaker standalone implementation are not owner authority. ### LLM governance / released contract -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is still mutable owner source until an immutable API/client/schema release exists. Naruon remains fail-closed and must not bind a mutable owner head as a released contract. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is mutable owner source until an immutable API/client/schema release exists. Naruon remains fail-closed and must not bind a mutable owner head as a released contract. Legacy protected `AGENTS.md` provider/model fallback prose does not override this owner path. ## 4. Buyer-visible UI, Storybook and localization @@ -57,25 +60,30 @@ Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/nar [#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains a static Storybook design-token precursor only. It does not supply Storybook runtime/config, representative component-state stories, real-browser interaction/a11y/responsive evidence, DTCG artifact or current Figma mapping. Executable Storybook/design-system delivery remains a P1 buyer-visible Gap; shadcn/ui component source is not Storybook evidence. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It must follow the canonical migration lineage, keep UI translation separate from ontology labels, avoid whole-catalog browser loading, and verify CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive states in Storybook and real browser E2E. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. ### Tasks async loading feedback -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is the repaired canonical owner for visual loading feedback on `팔로업 작업 생성`, `의도 생성`, and `실행 요청`. Ordinary two-parent repair `9673832c785db70470432b42f2e7cd046867a4ee` preserves its prior polluted ancestry, adopts protected `develop`, and reduces effective scope to exactly three intended files: `TasksLayout.tsx` plus synchronized component/page Lucide mocks. Unrelated central-governance, backend URL-validation, doctoring/generated-guidance, scratch artifacts and duplicate CHANGELOG changes are absent from the effective diff. +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is the canonical Tasks async-loading owner. The bounded owner repair `9673832c785db70470432b42f2e7cd046867a4ee` had exposed a real interaction/accessibility RED: `의도 생성` and `실행 요청` shared one per-task loading state, so either POST made both controls claim busy/spinner/loading labels. -Fresh review/source verification exposed a still-valid functional RED on that repaired exact head. `의도 생성` and `실행 요청` share the single per-task `currentKnowledgeIntent.state === 'loading'`. Triggering either POST therefore disables both controls, marks both `aria-busy=true`, displays a Loader2 on both, and simultaneously changes the labels to `생성 중` and `실행 중`, even though only one action initiated the request. A resolved/outdated predecessor thread does not make this current behavior correct. +This RED is now repaired ordinary-forward, without reopening unrelated owners: -The minimum causal fix is action-specific pending identity per task (for example `pendingAction: 'create' | 'execute' | null`) while preserving mutual exclusion. Both controls may stay disabled while either request is pending, but only the initiating control may be busy, render the spinner and expose its loading label. Add deferred-request regressions that hold create and execute POSTs unresolved independently, prove the active/inactive button states, and prove success/error settlement resets. Reply-SLA has independent state and must remain unchanged. +- focused RED `5caa7713293e610e68c87b0db0cc872c3ad2e068` adds a deferred-request contract for create and execute separately; +- exact current GREEN/source repair `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` adds `pending_action: 'create' | 'execute' | null`, preserves shared disablement for mutual exclusion, and assigns `aria-busy`, Loader2 and the busy label only to the initiating action; +- success/error settlement clears pending identity; reply-SLA keeps its independent state; +- protected-base compare is **16 ahead / 0 behind**, four effective frontend files, mergeable/Draft. -No source fix is claimed at `9673832c...`; #1463 remains Draft. **UI Delivery Gate: FAIL.** Functional completeness and accessibility semantics fail on the shared-pending-state RED; real-browser keyboard/focus/responsive/AT evidence, terminal exact-head hosted checks and qualifying independent post-last-push approval also remain missing. +Exact `bf9ce8e...` has fresh Application CI, CodeQL, Security, Semgrep, Bandit and Docker generations, but all are currently queued/nonterminal. No local/container PASS is claimed for this generation. Real-browser keyboard/focus/touch/responsive/assistive-technology evidence and qualifying independent post-last-push review are also absent. **UI Delivery Gate therefore remains FAIL despite the source-level functional repair.** -Generated direct-`develop` duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) re-proposed the same feature and introduced `TasksLayout.test.tsx.orig` plus duplicate CHANGELOG text. It was repaired ordinary-forward after #1463: current head `be1172b745c0e786597aa1a9ce5142b3b6fa3745` preserves generated predecessor `831bbfe9...`, adopts #1463 `9673832c...`, points at exact canonical #1463 tree `56a1fe2f444db0ddfd482503c7db4814842a291e`, retargets onto #1463, and is Draft with zero effective product delta. #1735 is provenance only; it does not repair the canonical #1463 interaction RED. +Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) was stale after #1463 advanced. It was descendant-restacked ordinary-forward at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7`: existing provenance is first parent, exact current #1463 is an additional parent, and the tree is exactly current #1463 tree `c14b5fbd79c4eb91919710524b7466b9d5a58a5c`. Fresh compare from #1463 is **ahead 3 / behind 0 / zero changed files**. #1735 remains Draft provenance only and owns no parallel UI delta or acceptance receipt. -## 5. Generated-writer invariant +## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Existing examples now include #1727/#1733 evidence/TRACEABILITY rollback, #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, and #1736 duplicate opaque-ID security work. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Existing examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, and #1736 duplicate opaque-ID security work. -Every generated descendant/new duplicate must be checked semantically for existing owner overlap, source/test/fixture deletion, dependency or security regression, bounded-performance regression, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate lanes to Draft provenance, and never transfer their predecessor hosted receipts to the owner. +Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate lanes to Draft provenance, and never transfer predecessor hosted receipts. + +Canonical owner movement also invalidates an earlier zero-delta provenance relation. When the owner advances, descendants must be freshly compared and ordinary-restacked if necessary. #1735 demonstrates this rule: it became 2 owner commits behind #1463 after the RED→GREEN repair and was immediately restored to a zero-effective-delta descendant without force rewriting history. Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver; do not weaken licensing or branch protection for badge attainment. @@ -83,31 +91,32 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 284 open PRs; newest #1735/#1736 reduced to canonical-owner provenance; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 599 queued / 3 in progress in the latest fresh observation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main reconciled; #2271→#2275 plus #2291→#2272; #2276 real canary pending | terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | +| P0 | Release-train convergence | 284 open PRs; #1735/#1736 are canonical-owner provenance; protected head unchanged | parent-first integration, descendant restack after owner movement, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; 620 queued / 3 in progress in latest pre-generation observation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main lineage plus #1911 Trusted-uv overlap finding; #2271→#2275 and #2291→#2272; #2276 canary pending | canonical-owner convergence, terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 zero-delta provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | immutable CO release absent | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Tasks loading interaction | #1463 bounded owner repaired, but create/execute share one pending state; #1735 is zero-delta provenance | action-specific pending identity, deferred-request regressions, browser keyboard/focus/responsive/AT, terminal exact-head checks/review | +| P1 | Tasks loading interaction | #1463 source-level RED→GREEN at `bf9ce8e...`; #1735 restacked zero-delta provenance | exact-head focused/hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | | P1 | Executable Storybook/design system | #1354 static precursor only | pinned runtime/build, representative states, browser/a11y/responsive evidence, token audit, fresh Figma mapping | | P1 | UI localization | #1731 specified; implementation not yet protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | | P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated-writer owner lock | #1728/#1734/#1735/#1736 demonstrate cross-owner duplication/regression modes | semantic owner-overlap gate, canonical-tree/delta check, no scratch/self-modifying residue, duplicate lanes reduced to provenance | +| P1 | Generated-writer owner lock | #1728/#1734/#1735/#1736 demonstrate duplicate/regression and owner-movement modes | semantic owner-overlap gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | ## 7. Current causal order 1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. -2. Terminalize #2040 exact `652764a...`, then #2271 → #2275 and #2291 → #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. -3. Revalidate frontend dependency-security #1623 against current vulnerability data. -4. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -5. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. -6. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 zero-delta provenance only. -7. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -8. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -9. Repair #1463's create/execute pending-action identity ordinary-forward, add deferred-request RED→GREEN tests, then acquire real browser keyboard/focus/responsive/AT and hosted/review evidence. Keep #1735 zero-delta provenance only. -10. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. -11. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. - -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file +2. Reconcile `.github#1911` onto current protected main and converge its canonical Trusted-uv/full-suite dependency closure with #2040; then terminalize #2040 exact `7901ca5...` without duplicate ownership. +3. Terminalize #2271 → #2275 and #2291 → #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. +4. Revalidate frontend dependency-security #1623 against current vulnerability data. +5. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. +6. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. +7. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. +8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +9. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. +10. Terminalize #1463 exact `bf9ce8e...`: run its focused deferred-request contract and hosted gates on the unchanged head, acquire real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review. Keep #1735 zero-effective-delta provenance aligned if the owner moves again. +11. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. +12. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. + +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. From ede0a2095496d123eeb238739838cf4a96b01b98 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 10:14:54 +0900 Subject: [PATCH 37/89] docs(gap): reconcile Storybook and central descendant owners --- docs/product-technical-gap-baseline.md | 95 ++++++++++++++------------ 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 23cfa4c3e..a9e355928 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.19 +**Baseline version:** 2.20 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.18 remains audit-visible as blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`; v2.17 remains blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`; v2.16 remains blob `c09c9e2f02b9f173b6d14689730b382c03701216`; v2.15 remains blob `07699b4588e1b8198c1357b8ca2064703151628f`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.19 remains audit-visible as blob `23cfa4c3ec24177741b8e05c45896edc540a1536`; v2.18 remains blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`; v2.17 remains blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. -Current repository inventory is **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Current repository inventory remains **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,16 +21,15 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. The latest fresh observation before this baseline generation is **620 queued / 3 in progress**. Runner acquisition is intermittent rather than totally absent, but this is not stable capacity. Preserve sole current-head evidence; remove only obsolete/superseded pressure through the canonical owner path; distinguish runner acquisition from workflow parse/admission defects; do not create source-neutral wake commits or blind reruns. -- `.github#2040` has advanced beyond its former `652764a37fc8af032f03cbe75da84ca88aee96bb` authority to exact `7901ca565fb93a9e869cd4136476384ac3a07bdf`, **177 ahead / 0 behind** protected main. Its ordinary current-main reconciliation and repository-identity repair remain ancestry. New RED `82a4e2a83be9543fe02cd208bee6837aaf5aa085` and GREEN `7901ca5...` add the Noema document hash lock to Trusted uv full-suite trigger/cache/install closure. Current CodeQL is pending and SAST/Python Security/Runtime Quality/Trusted uv/Security are nonterminal; no predecessor evidence transfers. -- The new #2040 Trusted-uv delta overlaps canonical full-suite owner `.github#1911@dfeadc7adfb02d73e166104f2987f14fbf7fe82e`. #1911 explicitly owns `trusted-uv-materializer-quality-ci.yml` repository-wide dependency closure and already carries the same Noema-lock invariant, but its current head is **22 ahead / 33 behind** protected main with merge base `64aa08d7...`. Owner-path comments require #1911 to reconcile ordinary/non-force onto current protected main first, then #2040 to adopt/adapt the canonical result rather than retain a parallel Trusted-uv owner. Neither PR is close-as-superseded material. -- `.github#2271@a0e1424de409ec474e7bc6e9f91a9e99b8a0915e` remains the CodeQL repository-identity admission owner, 8 ahead / 0 behind protected main, Draft/Proposed. SAST is terminal success while aggregate CodeQL/Python Security/Security remain nonterminal; partial hosted acquisition is not aggregate GREEN. -- `.github#2275@572cfed270ae3b3cd38faca4d97ce028093e5373` remains stacked on #2271 and owns GHAS analysis-read credential selection only. SAST is terminal success; CodeQL/Security remain nonterminal. #2276 still must prove real target-repository `code-scanning/analyses` permission; selector logic cannot manufacture repository permission. -- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` is the canonical Strix trusted-binder/runtime owner. It keeps `STRIX_REPO_ROOT` as the consumer scan/artifact root while trusted gate/model-helper/binder runtime stays source-owned. The latest integration also models the `.github` gate/model helper as consumer source under scan without copying the binder. Local exact-tree evidence is recorded by the owner, but fresh Runtime Quality/CodeQL/Security/Python Security/Semgrep runs are queued/nonterminal. It is Ready for review, not merge-accepted. -- `.github#2272@6ac3d96dc8369a31be0fc76dd74d002424708215` now stacks on exact #2291 `782d67b...`, preserves the Pages caller-input shell boundary, and removes its superseded parallel Strix owner claim. It remains Draft/Proposed with fresh hosted acceptance and independent review pending. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation before this generation is **217 queued / 1 in progress**. That is materially lower than the earlier 600–780 backlog, but one in-progress run against a three-digit queue is not stable capacity. The sole in-progress sample is the long-running protected-main Strix scan. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, distinguish runner acquisition from workflow parse/admission defects, and do not create source-neutral wake commits or blind reruns. +- `.github#2040@7901ca565fb93a9e869cd4136476384ac3a07bdf` remains Draft/mergeable on current protected main. Its repository-identity repair and ordinary current-main reconciliation are retained. The newest Trusted-uv change adds the Noema document hash lock to trigger/cache/install closure, but that responsibility overlaps canonical repository-wide full-suite owner `.github#1911@dfeadc7adfb02d73e166104f2987f14fbf7fe82e`. #1911 must ordinary-reconcile onto current protected main first; #2040 must then adopt/adapt the canonical result instead of retaining a parallel owner. Current #2040 CodeQL/SAST/Python Security/Runtime Quality/Trusted-uv/Security evidence is nonterminal. +- `.github#2271` advanced to exact `8da5f48fa0438ff33c766f03325f6e7f2a77dd9d`, tree `8c129bc3266842d6e244175894bd1f40f22ba1f5`, **21 ahead / 0 behind** protected main. Python Security on the prior generation found `anyio 4.14.0` CVEs; the current owner ordinary-adopts canonical AnyIO owner #2278 and retains the repository-identity admission delta while replacing only the canonical hash lock with `anyio==4.14.2`. Fresh exact-head SAST/Python Security/Security/CodeQL evidence is queued/nonterminal. It remains Draft/Proposed. +- `.github#2275` was stale behind the moved #2271 parent and is now ordinary-restacked at exact `0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6`, tree `6291c5b021562995fd94665efa5d96ced281a1e3`. Compare from current #2271 is **ahead 11 / behind 0 / merge base exact #2271**, with only the three GHAS credential-routing paths differing from the parent. The current tree therefore retains the canonical AnyIO fix while preserving the endpoint/header/capability-selector contract. No predecessor check/review receipt transfers. #2276 still must prove real target-repository `code-scanning/analyses` permission. +- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner and is Ready for review, not merge-accepted. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. +- `.github#2272` advanced to exact `f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb`, still stacked on #2291. It preserves the trusted-binder convergence and now adds a Pages caller-input validation boundary before credentialed Wrangler execution. The exact current head has seven effective paths and remains Draft/Proposed with fresh hosted acceptance and independent review pending. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. -Naruon must not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. +Naruon does not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. ## 3. Product owner boundaries @@ -38,7 +37,7 @@ Naruon must not copy central workflow source. It records owner identities and co [#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`; current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to #1565 but is not yet a valid Git descendant and does not preserve the direct `httpx2` development/TestClient contract. Preserve #1685's `aiosmtplib==5.1.3`, ordinary/non-force reconcile onto #1565, regenerate one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph, then reacquire installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Never hand-edit generated lock/hash material as a workaround. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to #1565 but is not yet a valid Git descendant and does not preserve the direct `httpx2` development/TestClient contract. Preserve #1685's `aiosmtplib==5.1.3`, ordinary/non-force reconcile onto #1565, regenerate one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph, then reacquire installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Never hand-edit generated lock/hash material. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Provider text/traceback suppression plus four-path hostile canaries and restored TRACEABILITY are source-complete, but exact-head hosted acceptance remains incomplete. @@ -46,36 +45,48 @@ Naruon must not copy central workflow source. It records owner identities and co [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration/bootstrap heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. It treats Bandit B608 as the hard-coded SQL-expression heuristic rather than a weak-randomness rule, covers all three bootstrap opaque-ID generators plus historical migration `0003_prompt_template_scope`, forbids `random()::text`, preserves populated identifiers, and retains dedicated regression plus doctoring/TRACEABILITY. - -Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) remains Draft provenance only. Current `46c7a9b3a6472f4e4188964ee1778bc99960d752` adopts #1727 and has zero effective product delta; generated severity inflation, Sentinel doctrine, and weaker standalone implementation are not owner authority. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) remains Draft provenance only at `46c7a9b3a6472f4e4188964ee1778bc99960d752` with zero effective product delta. ### LLM governance / released contract -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected main is mutable owner source until an immutable API/client/schema release exists. Naruon remains fail-closed and must not bind a mutable owner head as a released contract. Legacy protected `AGENTS.md` provider/model fallback prose does not override this owner path. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable owner source and its GitHub Releases inventory remains empty. Naruon remains fail-closed and must not bind a mutable owner head as a released API/client/schema contract. ## 4. Buyer-visible UI, Storybook and localization [#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. Application CI/Bandit/Semgrep/Docker evidence does not override inherited Trivy and central CodeQL verdict failures. UI Delivery remains FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains a static Storybook design-token precursor only. It does not supply Storybook runtime/config, representative component-state stories, real-browser interaction/a11y/responsive evidence, DTCG artifact or current Figma mapping. Executable Storybook/design-system delivery remains a P1 buyer-visible Gap; shadcn/ui component source is not Storybook evidence. +### Storybook/design-system owner graph -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded **static token-contract precursor**, not executable Storybook delivery. It has now been repaired onto canonical frontend dependency-security owner #1623 without changing package/lock/runtime source: -### Tasks async loading feedback +- predecessor `655c97376d0c5ad4560f96973663d55add76d082` remains first-parent ancestry; +- exact current `42e11bcf01de90c3b2045f9adc2c41a566062057` ordinary-adopts #1623 `509be4c...` as additional parent; +- current compare from #1623 is ahead-only / 0 behind with merge base exact #1623; +- the effective PR delta remains exactly five additive files: three design/doctoring documents, `storybook-design-tokens.css`, and its regression test. -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) is the canonical Tasks async-loading owner. The bounded owner repair `9673832c785db70470432b42f2e7cd046867a4ee` had exposed a real interaction/accessibility RED: `의도 생성` and `실행 요청` shared one per-task loading state, so either POST made both controls claim busy/spinner/loading labels. +Its old repository-local GREEN receipts are predecessor evidence after the restack. The new exact head requires fresh terminal checks and qualifying independent review. UI Delivery remains FAIL because this lane deliberately has no runtime/config/stories or browser/a11y evidence. -This RED is now repaired ordinary-forward, without reopening unrelated owners: +Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the **existing executable Storybook/runtime lineage** and must be repaired rather than replaced with a new duplicate writer. It is currently exact `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221`, Draft/non-mergeable on a historical base with 28 changed files. Its valid runtime/config/story intent is mixed with stale or cross-owner deltas: -- focused RED `5caa7713293e610e68c87b0db0cc872c3ad2e068` adds a deferred-request contract for create and execute separately; -- exact current GREEN/source repair `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` adds `pending_action: 'create' | 'execute' | null`, preserves shared disablement for mutual exclusion, and assigns `aria-busy`, Loader2 and the busy label only to the initiating action; -- success/error settlement clears pending identity; reply-SLA keeps its independent state; -- protected-base compare is **16 ahead / 0 behind**, four effective frontend files, mergeable/Draft. +- package/lock security belongs to #1623; do not transplant #1436's historical lock over the security owner; +- the static token taxonomy belongs to current #1354 and should be ordinary-adopted; +- `docs/product-technical-gap-baseline.md` belongs solely to #1602; +- reusable/shared workflow authority follows the central `.github` owner path rather than a feature-lane `.github/workflows/app-ci.yml` fork; +- confidence semantics belong to #1559's strict backend `0..100` contract; #1436's historical `[0,2)` unit-interval inference is obsolete and must not be revived; +- unintegrated ADR-0013/0014 `Accepted` status is premature; surviving Storybook architecture remains Proposed until landed evidence, while obsolete confidence semantics should be superseded by #1559; +- `DecisionPointCard`, `EmailDetail`, `SearchLayout`, product-events and related tests require fresh component/domain owner-overlap review before retention. -Exact `bf9ce8e...` has fresh Application CI, CodeQL, Security, Semgrep, Bandit and Docker generations, but all are currently queued/nonterminal. No local/container PASS is claimed for this generation. Real-browser keyboard/focus/touch/responsive/assistive-technology evidence and qualifying independent post-last-push review are also absent. **UI Delivery Gate therefore remains FAIL despite the source-level functional repair.** +Required executable Storybook reconstruction is therefore **#1623 → #1354 → repaired #1436**, using a resolver-backed coherent package/lock graph, valid Storybook runtime/config/stories only, deterministic static build, no remote font/image/analytics/telemetry dependency, normal/loading/empty/error/permission/destructive/busy state coverage, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence, current Figma mapping, terminal exact-head checks, and qualifying independent review. Do not hand-edit a stale lockfile to manufacture convergence. + +### Tasks async loading feedback -Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) was stale after #1463 advanced. It was descendant-restacked ordinary-forward at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7`: existing provenance is first parent, exact current #1463 is an additional parent, and the tree is exactly current #1463 tree `c14b5fbd79c4eb91919710524b7466b9d5a58a5c`. Fresh compare from #1463 is **ahead 3 / behind 0 / zero changed files**. #1735 remains Draft provenance only and owns no parallel UI delta or acceptance receipt. +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh repository workflows exist but remain nonterminal; real-browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review remain absent. **UI Delivery Gate therefore remains FAIL despite source-level functional repair.** + +Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) remains ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` and must be reswept if #1463 moves again. + +### Localization and interaction ownership + +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. ## 5. Generated-writer and descendant invariants @@ -83,7 +94,7 @@ Generated branches are provenance, not new owners, when an existing canonical ow Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate lanes to Draft provenance, and never transfer predecessor hosted receipts. -Canonical owner movement also invalidates an earlier zero-delta provenance relation. When the owner advances, descendants must be freshly compared and ordinary-restacked if necessary. #1735 demonstrates this rule: it became 2 owner commits behind #1463 after the RED→GREEN repair and was immediately restored to a zero-effective-delta descendant without force rewriting history. +Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when necessary. This applies to generated provenance and to normal central stacks: this generation repaired #2275 immediately after #2271 moved to adopt #2278's AnyIO security owner. Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver; do not weaken licensing or branch protection for badge attainment. @@ -91,32 +102,32 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 284 open PRs; #1735/#1736 are canonical-owner provenance; protected head unchanged | parent-first integration, descendant restack after owner movement, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 620 queued / 3 in progress in latest pre-generation observation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #2279 landed; #2040 current-main lineage plus #1911 Trusted-uv overlap finding; #2271→#2275 and #2291→#2272; #2276 canary pending | canonical-owner convergence, terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | +| P0 | Release-train convergence | 284 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; 217 queued / 1 in progress at this generation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #2040/#1911 owner overlap; #2271→#2275 repaired current; #2291→#2272; #2276 canary pending | canonical-owner convergence, terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | -| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 zero-delta provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | -| P0 | Released LLM contract | immutable CO release absent | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Tasks loading interaction | #1463 source-level RED→GREEN at `bf9ce8e...`; #1735 restacked zero-delta provenance | exact-head focused/hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | -| P1 | Executable Storybook/design system | #1354 static precursor only | pinned runtime/build, representative states, browser/a11y/responsive evidence, token audit, fresh Figma mapping | -| P1 | UI localization | #1731 specified; implementation not yet protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | +| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | +| P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | +| P1 | Tasks loading interaction | #1463 source-level RED→GREEN; #1735 zero-delta provenance | exact-head hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | +| P1 | Executable Storybook/design system | #1354 static owner now on #1623; #1436 is dirty existing runtime lineage | owner-safe #1436 reconstruction, coherent resolver-produced lock, representative states, browser/a11y/responsive evidence, token/Figma audit | +| P1 | UI localization | #1731 specified; implementation not protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | | P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated-writer owner lock | #1728/#1734/#1735/#1736 demonstrate duplicate/regression and owner-movement modes | semantic owner-overlap gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | +| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736 + central #2271→#2275 movement | semantic owner-overlap gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; do not blind-rerun unchanged heads. -2. Reconcile `.github#1911` onto current protected main and converge its canonical Trusted-uv/full-suite dependency closure with #2040; then terminalize #2040 exact `7901ca5...` without duplicate ownership. -3. Terminalize #2271 → #2275 and #2291 → #2272; prove #2269 succession and #2276 unchanged-target GHAS canary. +1. Restore stable Actions runner acquisition through `.github#712`; reduced backlog is not yet stable capacity. +2. Reconcile `.github#1911` onto current protected main and converge its canonical Trusted-uv/full-suite dependency closure with #2040; terminalize #2040 without duplicate ownership. +3. Terminalize current #2271 `8da5f48...` → current-restacked #2275 `0d68d7a...`; separately terminalize #2291 `782d67b...` → #2272 `f5b96a4...`; prove #2269 succession and #2276 unchanged-target GHAS canary. 4. Revalidate frontend dependency-security #1623 against current vulnerability data. 5. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. 6. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. 7. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. 8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 9. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -10. Terminalize #1463 exact `bf9ce8e...`: run its focused deferred-request contract and hosted gates on the unchanged head, acquire real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review. Keep #1735 zero-effective-delta provenance aligned if the owner moves again. -11. Reconcile #1354 onto the then-current protected base and build executable Storybook/design-system delivery with real component/browser/a11y/responsive/Figma evidence. +10. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. +11. Terminalize the static design-token chain #1623 → #1354 `42e11bc...`, then reconstruct existing #1436 as the executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. 12. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. From 9eea8ec976c383a4f8589b8fa9a7bea14e8388a3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 11:45:54 +0900 Subject: [PATCH 38/89] docs(gap): record generated UI provenance and trusted-uv reconciliation --- docs/product-technical-gap-baseline.md | 94 ++++++++++++++------------ 1 file changed, 51 insertions(+), 43 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a9e355928..b993307eb 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.20 +**Baseline version:** 2.21 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.19 remains audit-visible as blob `23cfa4c3ec24177741b8e05c45896edc540a1536`; v2.18 remains blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`; v2.17 remains blob `d611e0d3cb1dd90e9d8429fcfa112a977e989726`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.20 remains audit-visible as blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`; v2.18 remains blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture -Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, or model-only evidence is not passing evidence. +Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. -Current repository inventory remains **284 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory before this generation is **286 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,12 +21,13 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation before this generation is **217 queued / 1 in progress**. That is materially lower than the earlier 600–780 backlog, but one in-progress run against a three-digit queue is not stable capacity. The sole in-progress sample is the long-running protected-main Strix scan. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, distinguish runner acquisition from workflow parse/admission defects, and do not create source-neutral wake commits or blind reruns. -- `.github#2040@7901ca565fb93a9e869cd4136476384ac3a07bdf` remains Draft/mergeable on current protected main. Its repository-identity repair and ordinary current-main reconciliation are retained. The newest Trusted-uv change adds the Noema document hash lock to trigger/cache/install closure, but that responsibility overlaps canonical repository-wide full-suite owner `.github#1911@dfeadc7adfb02d73e166104f2987f14fbf7fe82e`. #1911 must ordinary-reconcile onto current protected main first; #2040 must then adopt/adapt the canonical result instead of retaining a parallel owner. Current #2040 CodeQL/SAST/Python Security/Runtime Quality/Trusted-uv/Security evidence is nonterminal. -- `.github#2271` advanced to exact `8da5f48fa0438ff33c766f03325f6e7f2a77dd9d`, tree `8c129bc3266842d6e244175894bd1f40f22ba1f5`, **21 ahead / 0 behind** protected main. Python Security on the prior generation found `anyio 4.14.0` CVEs; the current owner ordinary-adopts canonical AnyIO owner #2278 and retains the repository-identity admission delta while replacing only the canonical hash lock with `anyio==4.14.2`. Fresh exact-head SAST/Python Security/Security/CodeQL evidence is queued/nonterminal. It remains Draft/Proposed. -- `.github#2275` was stale behind the moved #2271 parent and is now ordinary-restacked at exact `0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6`, tree `6291c5b021562995fd94665efa5d96ced281a1e3`. Compare from current #2271 is **ahead 11 / behind 0 / merge base exact #2271**, with only the three GHAS credential-routing paths differing from the parent. The current tree therefore retains the canonical AnyIO fix while preserving the endpoint/header/capability-selector contract. No predecessor check/review receipt transfers. #2276 still must prove real target-repository `code-scanning/analyses` permission. -- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner and is Ready for review, not merge-accepted. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. -- `.github#2272` advanced to exact `f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb`, still stacked on #2291. It preserves the trusted-binder convergence and now adds a Pages caller-input validation boundary before credentialed Wrangler execution. The exact current head has seven effective paths and remains Draft/Proposed with fresh hosted acceptance and independent review pending. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **236 queued / 2 in progress**. This is far below the earlier 600–780 backlog but still not stable acquisition: a three-digit queue with only two active runs remains capacity-constrained. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, distinguish runner acquisition from workflow parse/admission defects, and do not create source-neutral wake commits or blind reruns. +- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is now ordinary-reconciled to current protected main at exact `169852c7fd0d0a451f1a3ef595b0922298ff331a`. The current commit keeps prior owner ancestry as first parent, adopts `main@e6334e229...` as the additional parent, starts from the protected-main tree, and reapplies the canonical owner blobs. Fresh compare is **ahead 23 / behind 0 / merge base exact protected main**. Because the materializer implementation and focused contract-test blobs already equal protected main, the effective current-main delta is now only `.github/workflows/trusted-uv-materializer-quality-ci.yml` (+41/-36). Ten natural exact-head workflow runs were created; they were nonterminal at the immediate post-reconciliation read, so predecessor receipts do not transfer. +- `.github#2040@7901ca565fb93a9e869cd4136476384ac3a07bdf` remains Draft/mergeable on current protected main with distinct CodeQL scheduler/credential/runtime-quality responsibilities, but it still changes `trusted-uv-materializer-quality-ci.yml`. It must ordinary/non-force adopt/adapt current #1911 or prove byte-/contract-equivalent succession before integration. #2040 must not remain a parallel Trusted-uv workflow owner, and its overlapping workflow must not be copied back into #1911. +- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. It remains Draft/Proposed pending exact-head terminal security/CodeQL evidence. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. #2276 still must prove real target-repository `code-scanning/analyses` permission. +- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. +- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains stacked on #2291, preserving trusted-binder convergence and adding the Pages caller-input validation boundary before credentialed Wrangler execution. It remains Draft/Proposed pending fresh hosted acceptance and review. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. Naruon does not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. @@ -57,32 +58,33 @@ Naruon does not copy central workflow source. It records owner identities and co ### Storybook/design-system owner graph -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded **static token-contract precursor**, not executable Storybook delivery. It has now been repaired onto canonical frontend dependency-security owner #1623 without changing package/lock/runtime source: +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded static token-contract precursor, not executable Storybook delivery. Exact current `42e11bcf01de90c3b2045f9adc2c41a566062057` ordinary-adopts #1623 `509be4c...`; its effective delta remains exactly five additive design/doctoring/token-regression files and deliberately excludes package/lock/runtime Storybook source. Fresh terminal checks and qualifying independent review remain required. -- predecessor `655c97376d0c5ad4560f96973663d55add76d082` remains first-parent ancestry; -- exact current `42e11bcf01de90c3b2045f9adc2c41a566062057` ordinary-adopts #1623 `509be4c...` as additional parent; -- current compare from #1623 is ahead-only / 0 behind with merge base exact #1623; -- the effective PR delta remains exactly five additive files: three design/doctoring documents, `storybook-design-tokens.css`, and its regression test. +Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the existing executable Storybook/runtime lineage and must be repaired rather than replaced. Exact `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221` remains Draft/non-mergeable on a historical base with mixed valid runtime/config/story intent and stale cross-owner deltas. Package/lock security belongs to #1623; static token taxonomy belongs to #1354; this Gap ledger belongs to #1602; shared CI follows central `.github`; confidence semantics follow #1559's strict backend `0..100` contract; unintegrated Storybook ADRs remain Proposed; component/domain files require owner-overlap review before retention. -Its old repository-local GREEN receipts are predecessor evidence after the restack. The new exact head requires fresh terminal checks and qualifying independent review. UI Delivery remains FAIL because this lane deliberately has no runtime/config/stories or browser/a11y evidence. +Required executable Storybook reconstruction is **#1623 → #1354 → repaired #1436**, using a resolver-backed coherent package/lock graph, valid runtime/config/stories only, deterministic static build, no remote font/image/analytics/telemetry dependency, normal/loading/empty/error/permission/destructive/busy state coverage, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence, current Figma mapping, terminal exact-head checks, and qualifying independent review. -Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the **existing executable Storybook/runtime lineage** and must be repaired rather than replaced with a new duplicate writer. It is currently exact `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221`, Draft/non-mergeable on a historical base with 28 changed files. Its valid runtime/config/story intent is mixed with stale or cross-owner deltas: +### Tasks async loading feedback -- package/lock security belongs to #1623; do not transplant #1436's historical lock over the security owner; -- the static token taxonomy belongs to current #1354 and should be ordinary-adopted; -- `docs/product-technical-gap-baseline.md` belongs solely to #1602; -- reusable/shared workflow authority follows the central `.github` owner path rather than a feature-lane `.github/workflows/app-ci.yml` fork; -- confidence semantics belong to #1559's strict backend `0..100` contract; #1436's historical `[0,2)` unit-interval inference is obsolete and must not be revived; -- unintegrated ADR-0013/0014 `Accepted` status is premature; surviving Storybook architecture remains Proposed until landed evidence, while obsolete confidence semantics should be superseded by #1559; -- `DecisionPointCard`, `EmailDetail`, `SearchLayout`, product-events and related tests require fresh component/domain owner-overlap review before retention. +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh repository workflows exist but remain nonterminal; real-browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review remain absent. **UI Delivery Gate remains FAIL despite source-level functional repair.** -Required executable Storybook reconstruction is therefore **#1623 → #1354 → repaired #1436**, using a resolver-backed coherent package/lock graph, valid Storybook runtime/config/stories only, deterministic static build, no remote font/image/analytics/telemetry dependency, normal/loading/empty/error/permission/destructive/busy state coverage, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence, current Figma mapping, terminal exact-head checks, and qualifying independent review. Do not hand-edit a stale lockfile to manufacture convergence. +Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) remains ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` and must be reswept if #1463 moves again. -### Tasks async loading feedback +### Settings native-disabled semantics -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh repository workflows exist but remain nonterminal; real-browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review remain absent. **UI Delivery Gate therefore remains FAIL despite source-level functional repair.** +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner. Causal source/doctoring head `1c8701e20984b54c13aeded2e975af3317a3b369` and live exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac` have the same tree `44359ea501bbe94e8a82aa1deb8e34e4b2c514b2`; the two later commits are source-neutral ancestry, not product progress or refreshed acceptance evidence. Exact-live-head hosted/browser/keyboard/responsive evidence and qualifying independent review remain pending. -Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) remains ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` and must be reswept if #1463 moves again. +Fresh generated duplicate [#1737](https://github.com/ContextualWisdomLab/naruon/pull/1737) initially reimplemented the same two-line `aria-disabled` removal plus task-specific `.jules/palette.md` guidance directly from `develop`. It has been repaired ordinary-forward at exact `3c8c02ff97f80c264088dd1664ba8590db574c14`: generated predecessor remains first-parent provenance, current #1676 `8a3ac516...` is the additional parent/base, current tree equals #1676, and the PR is Draft with zero effective product delta. #1737 is not an independent accessibility owner. + +### Design-QA fidelity and mobile state delivery + +Fresh generated [#1738](https://github.com/ContextualWisdomLab/naruon/pull/1738) exposed a buyer-visible correctness regression, not acceptable visual polish. Its generated predecessor `959dc2d6674e36623b0e75ea62d64d303ae7d736` hard-coded participant count `3명 (수신 2, 참조 1)`, invented attachment filenames `Q2_Plan_Draft.pdf` and `budget_v2.xlsx`, rendered `제안 확인` as a visible action without a handler, and added three static mobile cards without authoritative data, mounted buyer-path proof, or normal/loading/empty/error/permission interaction contracts. Task-specific `.jules/palette.md` explicitly recommended visual placeholders until real data was wired. + +Current corrective child `b6bd7f6483266cf296395ba8fbbd9c3c280ab201` preserves the generated predecessor in ancestry but restores the exact protected-`develop` tree, making #1738 Draft provenance with zero effective product delta. The fabricated content, dead CTA, static panels and placeholder doctrine are therefore quarantined rather than shipped. + +Closed historical #1193 proposed the same participant/attachment/meeting + mobile-panel slice and was closed to “drain PR queue” without a verified successor. Its tree contained the same class of hard-coded placeholder data and dead actions. That closure is not evidence that the valid product requirement was delivered, and its stale broad tree must not be restored wholesale. + +The surviving requirement is still real and must be routed through canonical product owners: EmailDetail participant/attachment/calendar behavior must use authoritative mail/thread/attachment/calendar contracts after owner/succession surgery of the relevant historical lineage; mobile workspace state composition must extend #1570 or a verified bounded successor with real data and mounted interactions. Completion requires no fabricated production content, no dead action, normal/loading/empty/error/permission states, real touch/keyboard/focus/AT/responsive evidence, current-head browser/E2E/screenshots, and qualifying review. **UI Delivery Gate for this slice is FAIL.** ### Localization and interaction ownership @@ -90,11 +92,13 @@ Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1 ## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Existing examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, and #1736 duplicate opaque-ID security work. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, #1736 duplicate opaque-ID security work, and #1737 duplicate Settings semantics. + +Generated design work is also rejected when it fabricates buyer truth or creates dead interactions. #1738 is the current exemplar: ancestry is retained but its effective tree is restored to protected `develop` until the valid intent is implemented by the proper product owners. A generated UI cannot pass Delivery Gate merely because decorative accessibility attributes are present. -Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate lanes to Draft provenance, and never transfer predecessor hosted receipts. +Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, unmounted/static interaction placeholders, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate/rejected lanes to Draft provenance, and never transfer predecessor hosted receipts. -Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when necessary. This applies to generated provenance and to normal central stacks: this generation repaired #2275 immediately after #2271 moved to adopt #2278's AnyIO security owner. +Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when necessary. Queue reduction alone never proves valid succession: a closed PR with unresolved unique delta must be reopened or repaired through a verified successor rather than treated as completed. Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver; do not weaken licensing or branch protection for badge attainment. @@ -102,32 +106,36 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 284 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 217 queued / 1 in progress at this generation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #2040/#1911 owner overlap; #2271→#2275 repaired current; #2291→#2272; #2276 canary pending | canonical-owner convergence, terminal exact-head checks, qualifying independent review, #2269 succession, unchanged-target GHAS canary | +| P0 | Release-train convergence | 286 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; 236 queued / 2 in progress immediately before this generation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #1911 current-main reconciled; #2040 overlap remains; #2271→#2275; #2291→#2272; #2276 canary pending | #2040 adopts/adapts #1911, terminal exact-head checks, qualifying review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | | P1 | Tasks loading interaction | #1463 source-level RED→GREEN; #1735 zero-delta provenance | exact-head hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | -| P1 | Executable Storybook/design system | #1354 static owner now on #1623; #1436 is dirty existing runtime lineage | owner-safe #1436 reconstruction, coherent resolver-produced lock, representative states, browser/a11y/responsive evidence, token/Figma audit | +| P1 | Settings native-disabled semantics | #1676 canonical; live head source-neutral over causal tree; #1737 zero-delta provenance | exact-live-head hosted + browser/keyboard/responsive evidence + qualifying review | +| P1 | Design-QA fidelity/mobile states | #1738 generated placeholder implementation quarantined; #1193 closure did not prove succession | authoritative EmailDetail/mobile owner implementation, no fabricated data/dead CTA, mounted lifecycle states, browser/E2E/a11y evidence | +| P1 | Executable Storybook/design system | #1354 static owner on #1623; #1436 dirty existing runtime lineage | owner-safe #1436 reconstruction, coherent resolver-produced lock, representative states, browser/a11y/responsive evidence, token/Figma audit | | P1 | UI localization | #1731 specified; implementation not protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | | P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736 + central #2271→#2275 movement | semantic owner-overlap gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | +| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736/#1737/#1738 + central parent movement | semantic owner-overlap/fidelity gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | ## 7. Current causal order 1. Restore stable Actions runner acquisition through `.github#712`; reduced backlog is not yet stable capacity. -2. Reconcile `.github#1911` onto current protected main and converge its canonical Trusted-uv/full-suite dependency closure with #2040; terminalize #2040 without duplicate ownership. -3. Terminalize current #2271 `8da5f48...` → current-restacked #2275 `0d68d7a...`; separately terminalize #2291 `782d67b...` → #2272 `f5b96a4...`; prove #2269 succession and #2276 unchanged-target GHAS canary. +2. Terminalize canonical `.github#1911@169852c7...` on current protected main, then ordinary/non-force converge #2040's overlapping Trusted-uv workflow while preserving #2040's unique CodeQL/runtime-quality responsibilities. +3. Terminalize current #2271→#2275 and separately #2291→#2272; prove #2269 succession and #2276 unchanged-target GHAS canary. 4. Revalidate frontend dependency-security #1623 against current vulnerability data. -5. Preserve #1565 as the bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. +5. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. 6. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. 7. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. 8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -9. Implement #1731 as the sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. +9. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. 10. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. -11. Terminalize the static design-token chain #1623 → #1354 `42e11bc...`, then reconstruct existing #1436 as the executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. -12. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +11. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. +12. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. +13. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. +14. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From 7dedda5c95e6adba59b292827712d6ddbe4fbfb6 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 12:45:43 +0900 Subject: [PATCH 39/89] docs(gap): record central owner convergence and cancelled acceptance evidence --- docs/product-technical-gap-baseline.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index b993307eb..6e6608fd2 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,17 +1,17 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.21 +**Baseline version:** 2.22 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.20 remains audit-visible as blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`; v2.18 remains blob `25ec56b6493a1ed577ce4481072d6db6c74ec7eb`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.21 remains audit-visible as blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture -Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. +Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. Fresh repository inventory before this generation is **286 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. @@ -21,9 +21,9 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **236 queued / 2 in progress**. This is far below the earlier 600–780 backlog but still not stable acquisition: a three-digit queue with only two active runs remains capacity-constrained. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, distinguish runner acquisition from workflow parse/admission defects, and do not create source-neutral wake commits or blind reruns. -- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is now ordinary-reconciled to current protected main at exact `169852c7fd0d0a451f1a3ef595b0922298ff331a`. The current commit keeps prior owner ancestry as first parent, adopts `main@e6334e229...` as the additional parent, starts from the protected-main tree, and reapplies the canonical owner blobs. Fresh compare is **ahead 23 / behind 0 / merge base exact protected main**. Because the materializer implementation and focused contract-test blobs already equal protected main, the effective current-main delta is now only `.github/workflows/trusted-uv-materializer-quality-ci.yml` (+41/-36). Ten natural exact-head workflow runs were created; they were nonterminal at the immediate post-reconciliation read, so predecessor receipts do not transfer. -- `.github#2040@7901ca565fb93a9e869cd4136476384ac3a07bdf` remains Draft/mergeable on current protected main with distinct CodeQL scheduler/credential/runtime-quality responsibilities, but it still changes `trusted-uv-materializer-quality-ci.yml`. It must ordinary/non-force adopt/adapt current #1911 or prove byte-/contract-equivalent succession before integration. #2040 must not remain a parallel Trusted-uv workflow owner, and its overlapping workflow must not be copied back into #1911. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **232 queued / 0 in progress**. The newest queued sample is a `repository_dispatch` against protected `main@e6334e...`, so the remaining starvation is not only stale side-branch pressure. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, and distinguish workflow generation/admission, runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. +- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are terminal **CANCELLED**. Combined statuses show successful Devin Review and CodeRabbit only; those do not substitute for the required hosted families. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has now completed the Trusted-uv owner convergence that v2.21 still listed as pending. It ordinary-adopts exact #1911 `c965664a...`; fresh compare is ahead-only with merge base exactly `c965664a...`, and neither `trusted-uv-materializer-quality-ci.yml` nor its contract test appears in #2040's remaining delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface rather than a parallel Trusted-uv implementation. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains pending. No #1911 or predecessor receipt transfers. - `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. It remains Draft/Proposed pending exact-head terminal security/CodeQL evidence. - `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. #2276 still must prove real target-repository `code-scanning/analyses` permission. - `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. @@ -66,9 +66,9 @@ Required executable Storybook reconstruction is **#1623 → #1354 → repaired # ### Tasks async loading feedback -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh repository workflows exist but remain nonterminal; real-browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review remain absent. **UI Delivery Gate remains FAIL despite source-level functional repair.** +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh exact-head Application CI, CodeQL, Security, Semgrep, Bandit and Docker generations all remain queued; all review threads are resolved/outdated, but there is still no qualifying independent post-last-push approval. Real-browser keyboard/focus/touch/responsive/AT evidence is also absent. **UI Delivery Gate remains FAIL despite source-level functional repair.** -Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) remains ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` and must be reswept if #1463 moves again. +Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) is ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` against current #1463 and must be reswept if #1463 moves again. ### Settings native-disabled semantics @@ -107,8 +107,8 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 286 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 236 queued / 2 in progress immediately before this generation | stable runner acquisition, parse/admission RCA separated, obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #1911 current-main reconciled; #2040 overlap remains; #2271→#2275; #2291→#2272; #2276 canary pending | #2040 adopts/adapts #1911, terminal exact-head checks, qualifying review, #2269 succession, unchanged-target GHAS canary | +| P0 | Actions execution capacity | `.github#712`; 232 queued / 0 in progress immediately before this generation | stable runner acquisition; admission/acquisition/cancellation RCA separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #1911 `c965664a...` contract repaired but current hosted families cancelled; #2040 `bd039185...` now losslessly converged; #2271→#2275; #2291→#2272; #2276 canary pending | exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | @@ -123,8 +123,8 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; reduced backlog is not yet stable capacity. -2. Terminalize canonical `.github#1911@169852c7...` on current protected main, then ordinary/non-force converge #2040's overlapping Trusted-uv workflow while preserving #2040's unique CodeQL/runtime-quality responsibilities. +1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make current-head cancellation acceptable evidence. +2. Reacquire legitimate exact-head hosted evidence for canonical `.github#1911@c965664a...`; then terminalize already-converged `.github#2040@bd039185...` on its distinct CodeQL/runtime-quality scope without reopening Trusted-uv ownership. 3. Terminalize current #2271→#2275 and separately #2291→#2272; prove #2269 succession and #2276 unchanged-target GHAS canary. 4. Revalidate frontend dependency-security #1623 against current vulnerability data. 5. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. From 1ec34f6b395c6a4112055637b98fd48f8e24ca6c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 13:47:04 +0900 Subject: [PATCH 40/89] docs(gap): record stacked-base workflow admission owner --- docs/product-technical-gap-baseline.md | 46 ++++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 6e6608fd2..a46b95e7e 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.22 +**Baseline version:** 2.23 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.21 remains audit-visible as blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture @@ -21,12 +21,13 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **232 queued / 0 in progress**. The newest queued sample is a `repository_dispatch` against protected `main@e6334e...`, so the remaining starvation is not only stale side-branch pressure. Preserve sole current-head evidence, remove only obsolete/superseded pressure through the canonical owner path, and distinguish workflow generation/admission, runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. -- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are terminal **CANCELLED**. Combined statuses show successful Devin Review and CodeRabbit only; those do not substitute for the required hosted families. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has now completed the Trusted-uv owner convergence that v2.21 still listed as pending. It ordinary-adopts exact #1911 `c965664a...`; fresh compare is ahead-only with merge base exactly `c965664a...`, and neither `trusted-uv-materializer-quality-ci.yml` nor its contract test appears in #2040's remaining delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface rather than a parallel Trusted-uv implementation. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains pending. No #1911 or predecessor receipt transfers. -- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. It remains Draft/Proposed pending exact-head terminal security/CodeQL evidence. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. #2276 still must prove real target-repository `code-scanning/analyses` permission. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **237 queued / 3 in progress**. The newest queued sample is a `repository_dispatch` against protected `main@e6334e...`, while long-running scheduled/review-recovery work is also occupying scarce execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. +- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are all terminal **CANCELLED**. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has completed Trusted-uv owner convergence by ordinary-adopting exact #1911 `c965664a...`; neither the Trusted-uv workflow nor its contract test remains in #2040's effective delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains nonterminal. No #1911 or predecessor receipt transfers. - `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. +- `.github#2109@f62172a424a2f86d14790459c149fe9762746453` is the canonical required-workflow lifecycle/stacked-base admission owner, stacked on #2291 and currently **Draft**, not protected ancestry. Its bounded contract removes pull-request base-name filters from Python Security and Runtime Quality while preserving push filters, adds Ready/Draft lifecycle admission including `converted_to_draft`, and prevents Draft work from consuming heavy runner admission. This owner is required before stacked descendants can claim complete Python Security/Runtime Quality evidence; Naruon must not copy those central workflow changes. +- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. Current Python Security `35480431734`, SAST `35480431728`, and Security `35480431743` are terminal **CANCELLED** while CodeQL `35480431778` remains nonterminal; this is incomplete acceptance, not recurrence of the pre-adoption AnyIO source RED. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. Its current SAST `35480836004` and Security `35480836015` are terminal **CANCELLED**, CodeQL `35480836023` remains nonterminal, and **no Python Security generation exists** because protected `python-security.yml` still admits PR bases only `[main, master, develop]` while #2275 targets a stacked owner branch. Treat this as deterministic admission omission owned by #2109, not runner starvation or #2275 source failure. #2276 still must prove real target-repository `code-scanning/analyses` permission. - `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains stacked on #2291, preserving trusted-binder convergence and adding the Pages caller-input validation boundary before credentialed Wrangler execution. It remains Draft/Proposed pending fresh hosted acceptance and review. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. @@ -107,8 +108,8 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 286 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 232 queued / 0 in progress immediately before this generation | stable runner acquisition; admission/acquisition/cancellation RCA separated; obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #1911 `c965664a...` contract repaired but current hosted families cancelled; #2040 `bd039185...` now losslessly converged; #2271→#2275; #2291→#2272; #2276 canary pending | exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | +| P0 | Actions execution capacity | `.github#712`; 237 queued / 3 in progress immediately before this generation | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Central CI/security acceptance | #1911 current families cancelled; #2040 Trusted-uv convergence complete; #2291→#2109 owns stacked-base/Draft admission; #2271→#2275 currently lacks Python Security generation; #2291→#2272; #2276 canary pending | protected admission contract, exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | @@ -123,19 +124,20 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make current-head cancellation acceptable evidence. +1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make current-head cancellation or missing workflow generation acceptable evidence. 2. Reacquire legitimate exact-head hosted evidence for canonical `.github#1911@c965664a...`; then terminalize already-converged `.github#2040@bd039185...` on its distinct CodeQL/runtime-quality scope without reopening Trusted-uv ownership. -3. Terminalize current #2271→#2275 and separately #2291→#2272; prove #2269 succession and #2276 unchanged-target GHAS canary. -4. Revalidate frontend dependency-security #1623 against current vulnerability data. -5. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -6. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. -7. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. -8. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -9. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -10. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. -11. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. -12. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. -13. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. -14. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +3. Terminalize canonical Strix parent `.github#2291`, then land/accept `.github#2109`'s stacked-base and Draft/Ready admission contract. `.github#2272` remains a separate #2291 descendant for Pages shell-input security. +4. Terminalize #2271 parent, then reacquire #2275 on the accepted central admission contract so Python Security is actually generated on its stacked base; prove #2269 succession and #2276 unchanged-target GHAS canary. +5. Revalidate frontend dependency-security #1623 against current vulnerability data. +6. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. +7. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. +8. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. +9. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +10. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. +11. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. +12. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. +13. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. +14. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. +15. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From dd0ac9fdc525eee0bf3afd7ef05aa36bc8cc0a09 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 18:15:07 +0900 Subject: [PATCH 41/89] docs(gap): refresh admission and inherited security authority --- docs/product-technical-gap-baseline.md | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a46b95e7e..94181f2a1 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.23 +**Baseline version:** 2.24 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.23 remains audit-visible as blob `a46b95e7e7d7135c5d9d9afd45b17145b37ade9f`; v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture @@ -21,13 +21,13 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation immediately before this generation was **237 queued / 3 in progress**. The newest queued sample is a `repository_dispatch` against protected `main@e6334e...`, while long-running scheduled/review-recovery work is also occupying scarce execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. +- `.github#712` remains the Actions execution-capacity owner. Two consecutive fresh observations immediately before this generation were **220 queued / 2 in progress**. The newest queued sample is still a `repository_dispatch` against protected `main@e6334e...`, while long-running Strix/review work occupies scarce execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. - Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are all terminal **CANCELLED**. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has completed Trusted-uv owner convergence by ordinary-adopting exact #1911 `c965664a...`; neither the Trusted-uv workflow nor its contract test remains in #2040's effective delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains nonterminal. No #1911 or predecessor receipt transfers. - `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. -- `.github#2109@f62172a424a2f86d14790459c149fe9762746453` is the canonical required-workflow lifecycle/stacked-base admission owner, stacked on #2291 and currently **Draft**, not protected ancestry. Its bounded contract removes pull-request base-name filters from Python Security and Runtime Quality while preserving push filters, adds Ready/Draft lifecycle admission including `converted_to_draft`, and prevents Draft work from consuming heavy runner admission. This owner is required before stacked descendants can claim complete Python Security/Runtime Quality evidence; Naruon must not copy those central workflow changes. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` is the canonical required-workflow lifecycle/stacked-base admission owner, stacked on #2291 and currently **Draft**, not protected ancestry. Its current tree is unchanged from predecessor `f62172a...`; the later stale-generation oracle was withdrawn rather than becoming a second scheduler owner. On this same exact tree, a Ready transition generated CodeQL, Python Security, Runtime Quality, SAST and Security for the stacked base; converting the PR back to Draft cancelled the queued heavy Ready generation, while the latest Draft generation skips the heavy jobs/produces no CodeQL job. This validates the bounded Ready/Draft admission lifecycle, including stacked-base admission and Draft withdrawal behavior, but is not hosted GREEN or protected acceptance. #2283/#2289 retain exact-head review scheduling/predecessor-cleanup ownership. Naruon and #2275 must consume the accepted central contract rather than copy workflow source. - `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. Current Python Security `35480431734`, SAST `35480431728`, and Security `35480431743` are terminal **CANCELLED** while CodeQL `35480431778` remains nonterminal; this is incomplete acceptance, not recurrence of the pre-adoption AnyIO source RED. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. Its current SAST `35480836004` and Security `35480836015` are terminal **CANCELLED**, CodeQL `35480836023` remains nonterminal, and **no Python Security generation exists** because protected `python-security.yml` still admits PR bases only `[main, master, develop]` while #2275 targets a stacked owner branch. Treat this as deterministic admission omission owned by #2109, not runner starvation or #2275 source failure. #2276 still must prove real target-repository `code-scanning/analyses` permission. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. Its current SAST `35480836004` and Security `35480836015` are terminal **CANCELLED**, CodeQL `35480836023` remains nonterminal, and **no Python Security generation exists** because protected `python-security.yml` still admits PR bases only `[main, master, develop]` while #2275 targets a stacked owner branch. Treat this as deterministic admission omission owned by #2109, not runner starvation or #2275 source failure. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head; #2109 canary receipts do not transfer. #2276 still must prove real target-repository `code-scanning/analyses` permission. - `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains stacked on #2291, preserving trusted-binder convergence and adding the Pages caller-input validation boundary before credentialed Wrangler execution. It remains Draft/Proposed pending fresh hosted acceptance and review. - `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. @@ -37,11 +37,11 @@ Naruon does not copy central workflow source. It records owner identities and co ### Dependency and security ownership -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`; current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`; current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. Consumer evidence from #1733 predecessor exact `9d9d5e0...` now includes Security Scan `35450922558` failing specifically in `trivy-fs` job `105968932721`. #1733 changes no dependency manifest/lockfile and its frontend snapshot still carries the protected-line `next`/`eslint-config-next 16.2.12`, while #1623 carries the newer `16.3.4` dependency-security floor. The connector does not expose the failing Trivy print-step output, so no specific CVE is attributed from that run; repair/revalidation remains here rather than broadening #1733. [#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to #1565 but is not yet a valid Git descendant and does not preserve the direct `httpx2` development/TestClient contract. Preserve #1685's `aiosmtplib==5.1.3`, ordinary/non-force reconcile onto #1565, regenerate one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph, then reacquire installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Never hand-edit generated lock/hash material. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `9d9d5e0b4bde3febb7cef0e925e493c4fc16cd04`, Draft/open/mergeable. Provider text/traceback suppression plus four-path hostile canaries and restored TRACEABILITY are source-complete, but exact-head hosted acceptance remains incomplete. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open/mergeable. A second intervening generated child `958cf7765d0cd1d6f4163938dfb648aa241712b8` repeated the earlier doctoring/TRACEABILITY rollback without changing production source or the four-path hostile-canary regression; ordinary-forward `2b47bc7...` retains that ancestry and restores the stronger traceability record. The predecessor exact `9d9d5e0...` had Application CI/SAST/Bandit/Docker GREEN but Security `35450922558` terminal **FAILURE** in `trivy-fs`, now routed to #1623 as inherited dependency evidence; CodeQL never terminalized before the head moved. Current exact `2b47bc7...` has a fresh six-workflow generation (`35501312839`, `35501312832`, `35501312851`, `35501312870`, `35501312824`, `35501313014`) still queued/pending. No predecessor check/review receipt transfers, and there is no qualifying independent current-head approval. ### Workspace, migrations and opaque identifiers @@ -108,10 +108,10 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 286 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 237 queued / 3 in progress immediately before this generation | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Actions execution capacity | `.github#712`; 220 queued / 2 in progress in two consecutive fresh sweeps | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | | P0 | Central CI/security acceptance | #1911 current families cancelled; #2040 Trusted-uv convergence complete; #2291→#2109 owns stacked-base/Draft admission; #2271→#2275 currently lacks Python Security generation; #2291→#2272; #2276 canary pending | protected admission contract, exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | -| P0 | Dependency-security freshness | frontend #1623 revalidation; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 source/test/TRACEABILITY repair present | terminal current-head hosted evidence + zero valid findings + qualifying review | +| P0 | Dependency-security freshness | frontend #1623 owns current Trivy/dependency revalidation including #1733 inherited Security RED; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...`; source/test/TRACEABILITY repair restored after second generated rollback; fresh hosted generation nonterminal | terminal current-head hosted evidence + zero valid findings + qualifying review after canonical dependency revalidation | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | | P1 | Tasks loading interaction | #1463 source-level RED→GREEN; #1735 zero-delta provenance | exact-head hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | @@ -126,11 +126,11 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr 1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make current-head cancellation or missing workflow generation acceptable evidence. 2. Reacquire legitimate exact-head hosted evidence for canonical `.github#1911@c965664a...`; then terminalize already-converged `.github#2040@bd039185...` on its distinct CodeQL/runtime-quality scope without reopening Trusted-uv ownership. -3. Terminalize canonical Strix parent `.github#2291`, then land/accept `.github#2109`'s stacked-base and Draft/Ready admission contract. `.github#2272` remains a separate #2291 descendant for Pages shell-input security. -4. Terminalize #2271 parent, then reacquire #2275 on the accepted central admission contract so Python Security is actually generated on its stacked base; prove #2269 succession and #2276 unchanged-target GHAS canary. -5. Revalidate frontend dependency-security #1623 against current vulnerability data. +3. Terminalize canonical Strix parent `.github#2291`, then land/accept `.github#2109@42e3f7a...`'s stacked-base and Draft/Ready admission contract. `.github#2272` remains a separate #2291 descendant for Pages shell-input security. +4. Terminalize #2271 parent, then reacquire #2275 on the accepted central admission contract so Python Security/Runtime Quality are actually generated on #2275's own exact head; prove #2269 succession and #2276 unchanged-target GHAS canary. +5. Revalidate frontend dependency-security #1623 against current vulnerability data, including the inherited #1733 predecessor Trivy RED; do not manufacture a feature-local dependency fix. 6. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -7. Terminalize #1733 without reintroducing provider text, traceback logging or generated TRACEABILITY rollback. +7. Terminalize #1733 exact `2b47bc7...` after #1623 revalidation/adoption as required, without reintroducing provider text, traceback logging or generated TRACEABILITY rollback; current exact-head six-workflow generation and independent review are still outstanding. 8. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. 9. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 10. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. From cbe34770e316da350b39730d4b624b3b47890f78 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 20:12:54 +0900 Subject: [PATCH 42/89] docs(gap): record checksum owner and generated duplicate provenance --- docs/product-technical-gap-baseline.md | 48 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 94181f2a1..2bc5c59b0 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.24 +**Baseline version:** 2.25 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.23 remains audit-visible as blob `a46b95e7e7d7135c5d9d9afd45b17145b37ade9f`; v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.24 remains audit-visible as blob `94181f2a1756985a4e4aee9fddc8a599c3a09703`; v2.23 remains audit-visible as blob `a46b95e7e7d7135c5d9d9afd45b17145b37ade9f`; v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. -Fresh repository inventory before this generation is **286 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory before this generation is **287 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,7 +21,7 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Two consecutive fresh observations immediately before this generation were **220 queued / 2 in progress**. The newest queued sample is still a `repository_dispatch` against protected `main@e6334e...`, while long-running Strix/review work occupies scarce execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. +- `.github#712` remains the Actions execution-capacity owner. A fresh pre-generation observation is **222 queued / 3 in progress**. The newest queued sample is a central required-workflow run, while long-running scheduled/review work still occupies execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. - Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are all terminal **CANCELLED**. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has completed Trusted-uv owner convergence by ordinary-adopting exact #1911 `c965664a...`; neither the Trusted-uv workflow nor its contract test remains in #2040's effective delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains nonterminal. No #1911 or predecessor receipt transfers. - `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. @@ -43,6 +43,14 @@ Naruon does not copy central workflow source. It records owner identities and co [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open/mergeable. A second intervening generated child `958cf7765d0cd1d6f4163938dfb648aa241712b8` repeated the earlier doctoring/TRACEABILITY rollback without changing production source or the four-path hostile-canary regression; ordinary-forward `2b47bc7...` retains that ancestry and restores the stronger traceability record. The predecessor exact `9d9d5e0...` had Application CI/SAST/Bandit/Docker GREEN but Security `35450922558` terminal **FAILURE** in `trivy-fs`, now routed to #1623 as inherited dependency evidence; CodeQL never terminalized before the head moved. Current exact `2b47bc7...` has a fresh six-workflow generation (`35501312839`, `35501312832`, `35501312851`, `35501312870`, `35501312824`, `35501313014`) still queued/pending. No predecessor check/review receipt transfers, and there is no qualifying independent current-head approval. +### Data-hygiene and checksum utility ownership + +[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the product contract for the auditable data-hygiene utility suite. Its normal checksum surface is deliberately limited to SHA-256, SHA-3-256 and BLAKE2b-256; MD5/SHA-1 are not normal security-labelled options. A future legacy digest surface must be separately named `legacy_checksum`, disabled by default, require explicit `non_security_use=true`, emit a machine-readable deprecation warning, and never be used as authentication/integrity/security evidence. + +[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623 exact `509be4c1...`, Draft/open/mergeable with nine effective files. It preserves exact UTF-8 bytes without normalization, enforces the 1 MiB UTF-8 ceiling, exposes stable invalid-UTF-8 and unsupported-algorithm errors, carries the unkeyed-digest authenticity warning, and keeps ADR-0007 Proposed until protected integration. Its current tests pin published empty-input SHA-256 evidence and incremental byte-chunk equivalence even when chunk boundaries split Korean/emoji multibyte UTF-8 sequences. Current feature-base executable evidence and qualifying independent review remain required; predecessor receipts do not transfer. + +Generated [#1739](https://github.com/ContextualWisdomLab/naruon/pull/1739) initially created a second direct-`develop` `hash_generator` at `f9179305d900ed47fd346e6c7c102ae82d659145`. That implementation exposed MD5 on the normal surface, described weak and modern digests together as security hashes, omitted the one-MiB bound, stable invalid-UTF-8 failure and authenticity warning, used default BLAKE2b output rather than the bounded BLAKE2b-256 contract, and duplicated registry/API/test/CHANGELOG ownership. It is repaired ordinary/non-force at exact `79ced706b20f65c934d187df32ddcb7d15cbe18e`: the generated predecessor remains first-parent provenance, #1361 exact `6bf2989...` is the additional parent/base, the current tree equals #1361 tree `8893360d2741ed9d2ab2453e49d0974e509e164d`, and fresh compare from #1361 is ahead-only / 0 behind with zero effective file delta. #1739 is Draft provenance, not an independent hash/checksum owner. #1247 remains open for the broader data-hygiene suite; #1418 separately owns URL/contact hygiene. + ### Workspace, migrations and opaque identifiers [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration/bootstrap heads from protected `develop`. @@ -93,11 +101,11 @@ The surviving requirement is still real and must be routed through canonical pro ## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, #1736 duplicate opaque-ID security work, and #1737 duplicate Settings semantics. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, #1736 duplicate opaque-ID security work, #1737 duplicate Settings semantics, and #1739 duplicate checksum/hash work. Generated design work is also rejected when it fabricates buyer truth or creates dead interactions. #1738 is the current exemplar: ancestry is retained but its effective tree is restored to protected `develop` until the valid intent is implemented by the proper product owners. A generated UI cannot pass Delivery Gate merely because decorative accessibility attributes are present. -Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, unmounted/static interaction placeholders, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate/rejected lanes to Draft provenance, and never transfer predecessor hosted receipts. +Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interaction placeholders, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate/rejected lanes to Draft provenance, and never transfer predecessor hosted receipts. Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when necessary. Queue reduction alone never proves valid succession: a closed PR with unresolved unique delta must be reopened or repaired through a verified successor rather than treated as completed. @@ -107,20 +115,21 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 286 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; 220 queued / 2 in progress in two consecutive fresh sweeps | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Release-train convergence | 287 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; fresh pre-generation observation 222 queued / 3 in progress | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | | P0 | Central CI/security acceptance | #1911 current families cancelled; #2040 Trusted-uv convergence complete; #2291→#2109 owns stacked-base/Draft admission; #2271→#2275 currently lacks Python Security generation; #2291→#2272; #2276 canary pending | protected admission contract, exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | | P0 | Dependency-security freshness | frontend #1623 owns current Trivy/dependency revalidation including #1733 inherited Security RED; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...`; source/test/TRACEABILITY repair restored after second generated rollback; fresh hosted generation nonterminal | terminal current-head hosted evidence + zero valid findings + qualifying review after canonical dependency revalidation | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | +| P1 | Data-hygiene checksum contract | #1247 contract; #1361 sole implementation owner; #1739 zero-delta generated provenance | #1623 prerequisite integration, #1361 exact-head hosted/security/review acceptance, no weak digest normal surface, 1 MiB/UTF-8/error/known-vector/chunk-equivalence evidence | | P1 | Tasks loading interaction | #1463 source-level RED→GREEN; #1735 zero-delta provenance | exact-head hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | | P1 | Settings native-disabled semantics | #1676 canonical; live head source-neutral over causal tree; #1737 zero-delta provenance | exact-live-head hosted + browser/keyboard/responsive evidence + qualifying review | | P1 | Design-QA fidelity/mobile states | #1738 generated placeholder implementation quarantined; #1193 closure did not prove succession | authoritative EmailDetail/mobile owner implementation, no fabricated data/dead CTA, mounted lifecycle states, browser/E2E/a11y evidence | | P1 | Executable Storybook/design system | #1354 static owner on #1623; #1436 dirty existing runtime lineage | owner-safe #1436 reconstruction, coherent resolver-produced lock, representative states, browser/a11y/responsive evidence, token/Figma audit | | P1 | UI localization | #1731 specified; implementation not protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | | P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736/#1737/#1738 + central parent movement | semantic owner-overlap/fidelity gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | +| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736/#1737/#1738/#1739 + central parent movement | semantic owner-overlap/fidelity gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | ## 7. Current causal order @@ -129,15 +138,16 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr 3. Terminalize canonical Strix parent `.github#2291`, then land/accept `.github#2109@42e3f7a...`'s stacked-base and Draft/Ready admission contract. `.github#2272` remains a separate #2291 descendant for Pages shell-input security. 4. Terminalize #2271 parent, then reacquire #2275 on the accepted central admission contract so Python Security/Runtime Quality are actually generated on #2275's own exact head; prove #2269 succession and #2276 unchanged-target GHAS canary. 5. Revalidate frontend dependency-security #1623 against current vulnerability data, including the inherited #1733 predecessor Trivy RED; do not manufacture a feature-local dependency fix. -6. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -7. Terminalize #1733 exact `2b47bc7...` after #1623 revalidation/adoption as required, without reintroducing provider text, traceback logging or generated TRACEABILITY rollback; current exact-head six-workflow generation and independent review are still outstanding. -8. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. -9. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -10. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -11. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. -12. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. -13. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. -14. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. -15. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +6. Preserve #1361 as sole checksum owner, then after #1623 integration obtain #1361 feature-base exact-head hosted/security/review acceptance. Keep #1739 as zero-delta provenance and do not reintroduce MD5/SHA-1 into the normal security-labelled surface. +7. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. +8. Terminalize #1733 exact `2b47bc7...` after #1623 revalidation/adoption as required, without reintroducing provider text, traceback logging or generated TRACEABILITY rollback; current exact-head six-workflow generation and independent review are still outstanding. +9. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. +10. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +11. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. +12. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. +13. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. +14. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. +15. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. +16. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From f780d5bcb6a7b81cbfd1b774ab1cea2716e40cc5 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 20:44:41 +0900 Subject: [PATCH 43/89] docs(gap): record Strix fixture isolation RED --- docs/product-technical-gap-baseline.md | 140 ++++++++++--------------- 1 file changed, 54 insertions(+), 86 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 2bc5c59b0..5d453f080 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.25 +**Baseline version:** 2.26 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.24 remains audit-visible as blob `94181f2a1756985a4e4aee9fddc8a599c3a09703`; v2.23 remains audit-visible as blob `a46b95e7e7d7135c5d9d9afd45b17145b37ade9f`; v2.22 remains audit-visible as blob `6e6608fd2da9c1105215ba325d4999dffb7b484e`; v2.21 remains blob `b993307ebcd05fb9f09090bb85f02af7697e2be1`; v2.20 remains blob `a9e35592842c7b06bc78181e7d6fe25a20843e91`; v2.19 remains blob `23cfa4c3ec24177741b8e05c45896edc540a1536`. Earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.25 remains audit-visible as blob `2bc5c59b0f6e1b2ad6fb0ef2a44842a464ad8c2c`; v2.24 remains blob `94181f2a1756985a4e4aee9fddc8a599c3a09703`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. -Fresh repository inventory before this generation is **287 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory is **287 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,133 +21,101 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. A fresh pre-generation observation is **222 queued / 3 in progress**. The newest queued sample is a central required-workflow run, while long-running scheduled/review work still occupies execution. Raw queue totals therefore remain insufficient: preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption. Do not create source-neutral wake commits or blind unchanged-head reruns. -- Canonical repository-wide/full-suite Trusted-uv owner `.github#1911` is exact `c965664a6d7fe0b75bf7ea019a9059220a32f06b`, ordinary-reconciled to current protected main. The predecessor `169852c7...` correctly reduced the protected-base owner delta, but its retained contract test still encoded the older two-job/path-filter design. Current `c965664a...` repairs the test to the actual single hardened job, unfiltered `push: main`, exact PR-head/main-push checkout semantics, and both hash-locked OpenCode/Noema dependency closures. Fresh current-head hosted evidence is **not GREEN**: Python Security `35484950365`, SAST `35484950385`, Security `35484950398`, Trusted-uv `35484950390`, and CodeQL `35484950369` are all terminal **CANCELLED**. Keep Draft and route execution RCA through #712 rather than mutating source to manufacture another generation. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has completed Trusted-uv owner convergence by ordinary-adopting exact #1911 `c965664a...`; neither the Trusted-uv workflow nor its contract test remains in #2040's effective delta. #2040 therefore retains only its distinct CodeQL scheduler/credential/runtime-quality and related documentation/test surface. Hosted acceptance remains incomplete: SAST `35484975926`, Security `35484975879`, Python Security `35484975909`, Trusted-uv `35484975956`, and Runtime Quality `35484975898` are **CANCELLED** while CodeQL `35484975910` remains nonterminal. No #1911 or predecessor receipt transfers. -- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` remains the canonical Strix trusted-binder/runtime owner. `STRIX_REPO_ROOT` is the consumer scan/artifact root; gate/model helper/binder remain trusted-source-owned. Fresh hosted acceptance and qualifying approval remain required. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` is the canonical required-workflow lifecycle/stacked-base admission owner, stacked on #2291 and currently **Draft**, not protected ancestry. Its current tree is unchanged from predecessor `f62172a...`; the later stale-generation oracle was withdrawn rather than becoming a second scheduler owner. On this same exact tree, a Ready transition generated CodeQL, Python Security, Runtime Quality, SAST and Security for the stacked base; converting the PR back to Draft cancelled the queued heavy Ready generation, while the latest Draft generation skips the heavy jobs/produces no CodeQL job. This validates the bounded Ready/Draft admission lifecycle, including stacked-base admission and Draft withdrawal behavior, but is not hosted GREEN or protected acceptance. #2283/#2289 retain exact-head review scheduling/predecessor-cleanup ownership. Naruon and #2275 must consume the accepted central contract rather than copy workflow source. -- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO owner #2278 and retains repository-identity admission while using `anyio==4.14.2`. Current Python Security `35480431734`, SAST `35480431728`, and Security `35480431743` are terminal **CANCELLED** while CodeQL `35480431778` remains nonterminal; this is incomplete acceptance, not recurrence of the pre-adoption AnyIO source RED. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271, ahead 11 / behind 0 with merge base exact parent, preserving only the bounded GHAS credential-routing delta. Its current SAST `35480836004` and Security `35480836015` are terminal **CANCELLED**, CodeQL `35480836023` remains nonterminal, and **no Python Security generation exists** because protected `python-security.yml` still admits PR bases only `[main, master, develop]` while #2275 targets a stacked owner branch. Treat this as deterministic admission omission owned by #2109, not runner starvation or #2275 source failure. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head; #2109 canary receipts do not transfer. #2276 still must prove real target-repository `code-scanning/analyses` permission. -- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains stacked on #2291, preserving trusted-binder convergence and adding the Pages caller-input validation boundary before credentialed Wrangler execution. It remains Draft/Proposed pending fresh hosted acceptance and review. -- `.github#2269` remains historical redirect/test-seam lineage until a lossless succession audit proves all valid contracts are preserved. `.github#2276` remains the unchanged-target GHAS permission/canary boundary. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **230 queued / 2 in progress**. The newest queued sample is a `repository_dispatch` CodeQL scan on protected central `main`, while a long-running PR Review Autofix remains in progress. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption; do not create source-neutral wake commits or blind unchanged-head reruns. +- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner on current protected main. Its current Python Security, SAST, Security, Trusted-uv and CodeQL generations are terminal **CANCELLED**. Cancellation is missing hosted acceptance, not source GREEN. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has ordinary-adopted #1911 and no longer retains a parallel Trusted-uv delta. Its remaining CodeQL scheduler/credential/runtime-quality scope is still unaccepted: Runtime Quality, SAST, Security, Python Security and Trusted-uv are cancelled while CodeQL remains nonterminal. +- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` is the canonical Strix trusted-runtime/evidence-binder owner, but **source acceptance is currently RED before queue acceptance is considered**. Exact-head review of `scripts/ci/test_strix_quick_gate.sh` found 26 `materialize_trusted_gate_fixture` occurrences: one helper definition, one already-correct trusted-runtime call, and **24 concrete specialized consumer-root materializations**. Those 24 fixtures copy `strix_evidence_binding.py` into the consumer root and can therefore pass even if the production gate regresses to resolving the binder from consumer-controlled state. The complete repair belongs in #2291: move every production-boundary specialized fixture to a sibling/non-consumer trusted runtime root, materialize gate/model/binder only there, invoke the trusted gate by absolute path with `STRIX_REPO_ROOT="$repo_root_dir"`, keep the consumer root binder-free except explicit source-under-scan cases, preserve each scenario's existing environment/assertions, and retain a negative consumer-binder assertion. A single additional isolated test does not repair the 24 masking call sites. Existing focused/full local receipts predate this finding and do not close it. Hosted Runtime Quality and SAST success likewise cannot override the source P1; Python Security/Security are cancelled and CodeQL remains queued. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and is stacked on #2291. Same-tree evidence proves Ready admission of CodeQL/Python Security/Runtime Quality/SAST/Security and Draft conversion cancellation/skipping, but it is not hosted GREEN or protected acceptance. It must consume the repaired #2291 owner; it must not copy the Strix binder/runtime fix. +- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO 4.14.2 and retains repository-identity admission. Python Security/SAST/Security are cancelled and CodeQL remains pending. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271 with only the bounded GHAS credential-routing delta. Its stacked base produces no Python Security generation under the protected base-name filter; #2109 owns that admission defect. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head. #2276 still owns the unchanged-target GHAS analysis-read permission canary. +- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains the Pages/SAST descendant on #2291. Its own fresh re-review independently records the same inherited #2291 24-call-site fixture-masking P1. It must ordinary-adopt the completed #2291 repair before child acceptance and must not become a second Strix runtime owner. +- `.github#2269` remains historical redirect/test-seam lineage until lossless succession is proven; `.github#2276` remains the real target-repository permission/canary boundary. -Naruon does not copy central workflow source. It records owner identities and consumes accepted/released contracts through ordinary-forward changes only. +Naruon does not copy central workflow source. It records canonical owner identities and consumes accepted/released contracts through ordinary-forward changes only. ## 3. Product owner boundaries ### Dependency and security ownership -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`; current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. Consumer evidence from #1733 predecessor exact `9d9d5e0...` now includes Security Scan `35450922558` failing specifically in `trivy-fs` job `105968932721`. #1733 changes no dependency manifest/lockfile and its frontend snapshot still carries the protected-line `next`/`eslint-config-next 16.2.12`, while #1623 carries the newer `16.3.4` dependency-security floor. The connector does not expose the failing Trivy print-step output, so no specific CVE is attributed from that run; repair/revalidation remains here rather than broadening #1733. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. Consumer evidence from #1733 predecessor exact `9d9d5e0...` includes Security Scan `35450922558` failing in `trivy-fs` job `105968932721`; #1733 changes no dependency manifest/lockfile, so repair/revalidation remains with #1623 rather than broadening the feature owner. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is retargeted to #1565 but is not yet a valid Git descendant and does not preserve the direct `httpx2` development/TestClient contract. Preserve #1685's `aiosmtplib==5.1.3`, ordinary/non-force reconcile onto #1565, regenerate one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph, then reacquire installation, warnings-as-errors, TestClient selection, hostile SMTP/lifecycle, Security and CodeQL evidence. Never hand-edit generated lock/hash material. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) must ordinary/non-force reconcile onto #1565 while preserving its distinct SMTP dependency delta and regenerate one coherent resolver-produced `pyproject.toml` / requirements / hashed requirements / `uv.lock` graph before hosted acceptance. Never hand-edit generated lock/hash material. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open/mergeable. A second intervening generated child `958cf7765d0cd1d6f4163938dfb648aa241712b8` repeated the earlier doctoring/TRACEABILITY rollback without changing production source or the four-path hostile-canary regression; ordinary-forward `2b47bc7...` retains that ancestry and restores the stronger traceability record. The predecessor exact `9d9d5e0...` had Application CI/SAST/Bandit/Docker GREEN but Security `35450922558` terminal **FAILURE** in `trivy-fs`, now routed to #1623 as inherited dependency evidence; CodeQL never terminalized before the head moved. Current exact `2b47bc7...` has a fresh six-workflow generation (`35501312839`, `35501312832`, `35501312851`, `35501312870`, `35501312824`, `35501313014`) still queued/pending. No predecessor check/review receipt transfers, and there is no qualifying independent current-head approval. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open/mergeable. Production/test/TRACEABILITY repairs suppress provider-controlled exception text/traceback across the four owned paths. Its predecessor inherited Trivy RED is routed to #1623; current exact-head workflow generation is nonterminal and no predecessor receipt or approval transfers. ### Data-hygiene and checksum utility ownership -[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the product contract for the auditable data-hygiene utility suite. Its normal checksum surface is deliberately limited to SHA-256, SHA-3-256 and BLAKE2b-256; MD5/SHA-1 are not normal security-labelled options. A future legacy digest surface must be separately named `legacy_checksum`, disabled by default, require explicit `non_security_use=true`, emit a machine-readable deprecation warning, and never be used as authentication/integrity/security evidence. +[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) remains the product contract for the auditable data-hygiene suite. The normal checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only. MD5/SHA-1 are excluded from the normal security-labelled surface; any buyer-backed legacy mode must be separately named, disabled by default, explicitly acknowledged as non-security use, and machine-deprecated. -[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623 exact `509be4c1...`, Draft/open/mergeable with nine effective files. It preserves exact UTF-8 bytes without normalization, enforces the 1 MiB UTF-8 ceiling, exposes stable invalid-UTF-8 and unsupported-algorithm errors, carries the unkeyed-digest authenticity warning, and keeps ADR-0007 Proposed until protected integration. Its current tests pin published empty-input SHA-256 evidence and incremental byte-chunk equivalence even when chunk boundaries split Korean/emoji multibyte UTF-8 sequences. Current feature-base executable evidence and qualifying independent review remain required; predecessor receipts do not transfer. - -Generated [#1739](https://github.com/ContextualWisdomLab/naruon/pull/1739) initially created a second direct-`develop` `hash_generator` at `f9179305d900ed47fd346e6c7c102ae82d659145`. That implementation exposed MD5 on the normal surface, described weak and modern digests together as security hashes, omitted the one-MiB bound, stable invalid-UTF-8 failure and authenticity warning, used default BLAKE2b output rather than the bounded BLAKE2b-256 contract, and duplicated registry/API/test/CHANGELOG ownership. It is repaired ordinary/non-force at exact `79ced706b20f65c934d187df32ddcb7d15cbe18e`: the generated predecessor remains first-parent provenance, #1361 exact `6bf2989...` is the additional parent/base, the current tree equals #1361 tree `8893360d2741ed9d2ab2453e49d0974e509e164d`, and fresh compare from #1361 is ahead-only / 0 behind with zero effective file delta. #1739 is Draft provenance, not an independent hash/checksum owner. #1247 remains open for the broader data-hygiene suite; #1418 separately owns URL/contact hygiene. +[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. It preserves exact UTF-8 bytes, enforces the one-MiB byte ceiling, stable invalid-UTF-8/algorithm errors and authenticity warning, and pins known-answer/chunk-equivalence evidence. Fresh exact-head workflow lookup still returns zero PR workflow runs, so this remains an admission RED, not GREEN. Generated #1739 exact `79ced706b20f65c934d187df32ddcb7d15cbe18e` ordinary-adopts #1361 with zero effective product delta and remains provenance only. ### Workspace, migrations and opaque identifiers -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration/bootstrap heads from protected `develop`. - -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill entropy owner at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`, stacked on #1503. Generated direct-`develop` PR [#1736](https://github.com/ContextualWisdomLab/naruon/pull/1736) remains Draft provenance only at `46c7a9b3a6472f4e4188964ee1778bc99960d752` with zero effective product delta. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration heads from protected `develop`. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill owner on #1503; generated #1736 remains zero-effective-delta provenance. ### LLM governance / released contract -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable owner source and its GitHub Releases inventory remains empty. Naruon remains fail-closed and must not bind a mutable owner head as a released API/client/schema contract. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. Protected `AGENTS.md` still contains provider/model-specific GitHub Models fallback guidance that conflicts with the canonical `contextual-orchestrator` boundary, but this is already owned by #1548/#1549 and must not spawn a second governance writer. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable source and its GitHub Releases inventory is empty; Naruon therefore remains fail-closed and must not bind a mutable owner head as released API/client/schema authority. ## 4. Buyer-visible UI, Storybook and localization -[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. Application CI/Bandit/Semgrep/Docker evidence does not override inherited Trivy and central CodeQL verdict failures. UI Delivery remains FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. - -### Storybook/design-system owner graph - -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) is the bounded static token-contract precursor, not executable Storybook delivery. Exact current `42e11bcf01de90c3b2045f9adc2c41a566062057` ordinary-adopts #1623 `509be4c...`; its effective delta remains exactly five additive design/doctoring/token-regression files and deliberately excludes package/lock/runtime Storybook source. Fresh terminal checks and qualifying independent review remain required. - -Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the existing executable Storybook/runtime lineage and must be repaired rather than replaced. Exact `034d2ff4e0d120d1e7b7669b35ea8eea7d8c1221` remains Draft/non-mergeable on a historical base with mixed valid runtime/config/story intent and stale cross-owner deltas. Package/lock security belongs to #1623; static token taxonomy belongs to #1354; this Gap ledger belongs to #1602; shared CI follows central `.github`; confidence semantics follow #1559's strict backend `0..100` contract; unintegrated Storybook ADRs remain Proposed; component/domain files require owner-overlap review before retention. - -Required executable Storybook reconstruction is **#1623 → #1354 → repaired #1436**, using a resolver-backed coherent package/lock graph, valid runtime/config/stories only, deterministic static build, no remote font/image/analytics/telemetry dependency, normal/loading/empty/error/permission/destructive/busy state coverage, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence, current Figma mapping, terminal exact-head checks, and qualifying independent review. - -### Tasks async loading feedback - -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the canonical Tasks async-loading owner. Exact `bf9ce8e8f5ad1b4cf2f2ddc9c5f547a7d733f60e` repairs the prior shared-busy RED with action-specific `pending_action`, preserving mutual exclusion while assigning `aria-busy`, Loader2 and busy label only to the initiating action. Fresh exact-head Application CI, CodeQL, Security, Semgrep, Bandit and Docker generations all remain queued; all review threads are resolved/outdated, but there is still no qualifying independent post-last-push approval. Real-browser keyboard/focus/touch/responsive/AT evidence is also absent. **UI Delivery Gate remains FAIL despite source-level functional repair.** +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. Inherited dependency/central evidence remains incomplete; UI Delivery stays FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. -Generated duplicate [#1735](https://github.com/ContextualWisdomLab/naruon/pull/1735) is ordinary-restacked zero-effective-delta provenance at `b53d2018a14ec0aa2ed778142d04ef4abd7be1d7` against current #1463 and must be reswept if #1463 moves again. +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains the static design-token precursor on #1623. Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the existing executable Storybook/runtime lineage and must be repaired rather than replaced. Package/lock security belongs to #1623; token taxonomy belongs to #1354; baseline ownership stays here; unintegrated Storybook ADRs remain Proposed. Required reconstruction is #1623 → #1354 → repaired #1436 with resolver-backed package/lock state, deterministic static build, representative normal/loading/empty/error/permission/destructive/busy states, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence and current Figma mapping. -### Settings native-disabled semantics +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the Tasks async-loading owner; source-level pending-action repair exists, but current hosted/browser/AT/independent-review evidence is incomplete. Generated #1735 remains zero-delta provenance. -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner. Causal source/doctoring head `1c8701e20984b54c13aeded2e975af3317a3b369` and live exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac` have the same tree `44359ea501bbe94e8a82aa1deb8e34e4b2c514b2`; the two later commits are source-neutral ancestry, not product progress or refreshed acceptance evidence. Exact-live-head hosted/browser/keyboard/responsive evidence and qualifying independent review remain pending. +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the Settings native-disabled semantics owner; generated #1737 is zero-delta provenance. Current hosted/browser/keyboard/responsive evidence and qualifying review remain outstanding. -Fresh generated duplicate [#1737](https://github.com/ContextualWisdomLab/naruon/pull/1737) initially reimplemented the same two-line `aria-disabled` removal plus task-specific `.jules/palette.md` guidance directly from `develop`. It has been repaired ordinary-forward at exact `3c8c02ff97f80c264088dd1664ba8590db574c14`: generated predecessor remains first-parent provenance, current #1676 `8a3ac516...` is the additional parent/base, current tree equals #1676, and the PR is Draft with zero effective product delta. #1737 is not an independent accessibility owner. +Generated #1738 remains quarantined zero-delta provenance after its predecessor fabricated participant counts and attachment names, exposed an unbound CTA, and added static unmounted mobile panels. Its valid intent must be rebuilt through authoritative EmailDetail/mail/thread/attachment/calendar owners and #1570 or a verified mobile-state successor with real data plus normal/loading/empty/error/permission, touch/keyboard/focus/AT/responsive, exact-head browser/E2E/screenshot evidence. Historical #1193 closure does not prove delivery. -### Design-QA fidelity and mobile state delivery - -Fresh generated [#1738](https://github.com/ContextualWisdomLab/naruon/pull/1738) exposed a buyer-visible correctness regression, not acceptable visual polish. Its generated predecessor `959dc2d6674e36623b0e75ea62d64d303ae7d736` hard-coded participant count `3명 (수신 2, 참조 1)`, invented attachment filenames `Q2_Plan_Draft.pdf` and `budget_v2.xlsx`, rendered `제안 확인` as a visible action without a handler, and added three static mobile cards without authoritative data, mounted buyer-path proof, or normal/loading/empty/error/permission interaction contracts. Task-specific `.jules/palette.md` explicitly recommended visual placeholders until real data was wired. - -Current corrective child `b6bd7f6483266cf296395ba8fbbd9c3c280ab201` preserves the generated predecessor in ancestry but restores the exact protected-`develop` tree, making #1738 Draft provenance with zero effective product delta. The fabricated content, dead CTA, static panels and placeholder doctrine are therefore quarantined rather than shipped. - -Closed historical #1193 proposed the same participant/attachment/meeting + mobile-panel slice and was closed to “drain PR queue” without a verified successor. Its tree contained the same class of hard-coded placeholder data and dead actions. That closure is not evidence that the valid product requirement was delivered, and its stale broad tree must not be restored wholesale. - -The surviving requirement is still real and must be routed through canonical product owners: EmailDetail participant/attachment/calendar behavior must use authoritative mail/thread/attachment/calendar contracts after owner/succession surgery of the relevant historical lineage; mobile workspace state composition must extend #1570 or a verified bounded successor with real data and mounted interactions. Completion requires no fabricated production content, no dead action, normal/loading/empty/error/permission states, real touch/keyboard/focus/AT/responsive evidence, current-head browser/E2E/screenshots, and qualifying review. **UI Delivery Gate for this slice is FAIL.** - -### Localization and interaction ownership - -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text expansion/font fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner rather than a parallel localization implementation. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text-expansion/font-fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes the catalog only after that owner reaches protected ancestry. ## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner dependency/security/performance rollback, #1734 duplicate NetworkGraph work, #1735 duplicate Tasks loading UX, #1736 duplicate opaque-ID security work, #1737 duplicate Settings semantics, and #1739 duplicate checksum/hash work. - -Generated design work is also rejected when it fabricates buyer truth or creates dead interactions. #1738 is the current exemplar: ancestry is retained but its effective tree is restored to protected `develop` until the valid intent is implemented by the proper product owners. A generated UI cannot pass Delivery Gate merely because decorative accessibility attributes are present. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner rollback, #1734 NetworkGraph duplicate, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. -Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interaction placeholders, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, convert duplicate/rejected lanes to Draft provenance, and never transfer predecessor hosted receipts. +Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interactions, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, keep duplicate/rejected lanes Draft, and never transfer predecessor hosted receipts. -Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when necessary. Queue reduction alone never proves valid succession: a closed PR with unresolved unique delta must be reopened or repaired through a verified successor rather than treated as completed. +Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when needed. Queue reduction alone never proves succession. -Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver; do not weaken licensing or branch protection for badge attainment. +Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver. ## 6. Commercial Gap register | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 287 open PRs; protected head unchanged; owner movement requires descendant resweep | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; fresh pre-generation observation 222 queued / 3 in progress | stable runner acquisition; generation/admission/first-runner/downstream-runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Central CI/security acceptance | #1911 current families cancelled; #2040 Trusted-uv convergence complete; #2291→#2109 owns stacked-base/Draft admission; #2271→#2275 currently lacks Python Security generation; #2291→#2272; #2276 canary pending | protected admission contract, exact-head hosted GREEN without wake commits, qualifying review, #2269 succession, unchanged-target GHAS canary | -| P0 | Dependency-security freshness | frontend #1623 owns current Trivy/dependency revalidation including #1733 inherited Security RED; backend #1565→#1685 real ancestry/coherent graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...`; source/test/TRACEABILITY repair restored after second generated rollback; fresh hosted generation nonterminal | terminal current-head hosted evidence + zero valid findings + qualifying review after canonical dependency revalidation | -| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 sole opaque-ID descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | +| P0 | Release-train convergence | 287 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; fresh 230 queued / 2 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Strix trusted-runtime isolation | #2291 has active 24-call-site specialized-fixture masking P1; #2109 and #2272 depend on it | realistic RED, all 24 production-boundary fixtures moved to non-consumer trusted runtime, consumer binder-free negative proof, exact-head GREEN/review/hosted acceptance | +| P0 | Central CI/security acceptance | #1911 cancelled; #2040 unique scope incomplete; #2271→#2275 stacked admission incomplete; #2276 canary pending | exact-head hosted GREEN without wake commits, qualifying review, accepted stacked-base contract, unchanged-target GHAS proof | +| P0 | Dependency-security freshness | #1623 owns current Trivy/dependency revalidation including #1733 inherited RED; #1565→#1685 backend graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...` source/test/TRACEABILITY repaired; current evidence nonterminal | terminal current-head evidence, zero valid findings, qualifying review after dependency revalidation | +| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Data-hygiene checksum contract | #1247 contract; #1361 sole implementation owner; #1739 zero-delta generated provenance | #1623 prerequisite integration, #1361 exact-head hosted/security/review acceptance, no weak digest normal surface, 1 MiB/UTF-8/error/known-vector/chunk-equivalence evidence | -| P1 | Tasks loading interaction | #1463 source-level RED→GREEN; #1735 zero-delta provenance | exact-head hosted GREEN, browser keyboard/focus/touch/responsive/AT evidence, qualifying review | -| P1 | Settings native-disabled semantics | #1676 canonical; live head source-neutral over causal tree; #1737 zero-delta provenance | exact-live-head hosted + browser/keyboard/responsive evidence + qualifying review | -| P1 | Design-QA fidelity/mobile states | #1738 generated placeholder implementation quarantined; #1193 closure did not prove succession | authoritative EmailDetail/mobile owner implementation, no fabricated data/dead CTA, mounted lifecycle states, browser/E2E/a11y evidence | -| P1 | Executable Storybook/design system | #1354 static owner on #1623; #1436 dirty existing runtime lineage | owner-safe #1436 reconstruction, coherent resolver-produced lock, representative states, browser/a11y/responsive evidence, token/Figma audit | -| P1 | UI localization | #1731 specified; implementation not protected | eight-locale versioned resource + Storybook/browser/a11y + cache/API/rollback evidence | -| P1 | OIDC interaction acceptance | #1729 rendered contract incomplete | real browser/AT/responsive/eight-locale current-head acceptance | -| P1 | Generated/descendant owner lock | #1728/#1734/#1735/#1736/#1737/#1738/#1739 + central parent movement | semantic owner-overlap/fidelity gate, owner-movement descendant sweep, canonical-tree/delta check, no scratch/self-modifying residue | +| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance; exact #1361 has zero workflow runs | #1623 prerequisite integration, stacked admission, exact-head hosted/security/review acceptance, bounded UTF-8/known-vector contract | +| P1 | Tasks/Settings interaction acceptance | #1463 and #1676 source repairs exist; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | +| P1 | Design-QA fidelity/mobile states | #1738 placeholder implementation quarantined | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | +| P1 | Executable Storybook/design system | #1354 static owner; #1436 existing runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | +| P1 | UI localization/OIDC | #1731 specified; #1729 interaction owner | eight-locale versioned resource, cache/API/rollback plus Storybook/browser/a11y integration | +| P1 | Generated/descendant owner lock | current zero-delta/rejected provenance set | semantic overlap/fidelity gate, owner-movement resweep, no scratch/self-modifying residue | ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make current-head cancellation or missing workflow generation acceptable evidence. -2. Reacquire legitimate exact-head hosted evidence for canonical `.github#1911@c965664a...`; then terminalize already-converged `.github#2040@bd039185...` on its distinct CodeQL/runtime-quality scope without reopening Trusted-uv ownership. -3. Terminalize canonical Strix parent `.github#2291`, then land/accept `.github#2109@42e3f7a...`'s stacked-base and Draft/Ready admission contract. `.github#2272` remains a separate #2291 descendant for Pages shell-input security. -4. Terminalize #2271 parent, then reacquire #2275 on the accepted central admission contract so Python Security/Runtime Quality are actually generated on #2275's own exact head; prove #2269 succession and #2276 unchanged-target GHAS canary. -5. Revalidate frontend dependency-security #1623 against current vulnerability data, including the inherited #1733 predecessor Trivy RED; do not manufacture a feature-local dependency fix. -6. Preserve #1361 as sole checksum owner, then after #1623 integration obtain #1361 feature-base exact-head hosted/security/review acceptance. Keep #1739 as zero-delta provenance and do not reintroduce MD5/SHA-1 into the normal security-labelled surface. +1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make cancellation, missing generation, or runner-unassigned work passing evidence. +2. Reacquire legitimate exact-head hosted evidence for `.github#1911`; then terminalize already-converged `.github#2040` only on its distinct CodeQL/runtime-quality scope. +3. Repair `.github#2291` **source-first**: reproduce the specialized-fixture trust-boundary RED, remove all 24 consumer-root binder/runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. Only after that may #2109 and #2272 ordinary-adopt the repaired parent and reacquire their own evidence. +4. Terminalize #2271; then reacquire #2275 under the accepted stacked-base admission contract so Python Security/Runtime Quality are generated on #2275 itself. Prove #2269 succession and #2276 unchanged-target GHAS permission. +5. Revalidate #1623 against current vulnerability data, including #1733 inherited Trivy evidence, and integrate normally. +6. Preserve #1361 as sole checksum owner; after #1623 + stacked admission integrate, obtain #1361 exact-head hosted/security/review acceptance. Keep #1739 zero-delta provenance. 7. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -8. Terminalize #1733 exact `2b47bc7...` after #1623 revalidation/adoption as required, without reintroducing provider text, traceback logging or generated TRACEABILITY rollback; current exact-head six-workflow generation and independent review are still outstanding. +8. Terminalize #1733 after #1623 revalidation/adoption without reintroducing provider text, traceback logging, or generated TRACEABILITY rollback. 9. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. 10. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 11. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -12. Terminalize #1463 exact `bf9ce8e...` with hosted gates, real browser keyboard/focus/touch/responsive/AT evidence and qualifying independent review; keep #1735 aligned if the owner moves. -13. Terminalize #1676 live exact `8a3ac516...` on its unchanged causal tree and keep #1737 zero-delta provenance aligned. -14. Repair the valid #1738 design-QA intent through authoritative EmailDetail and #1570/mobile owner paths; do not restore #1193 or any fabricated/static placeholder implementation. -15. Terminalize static design-token chain #1623 → #1354, then reconstruct existing #1436 as executable Storybook lane without stale dependency, CI, baseline, confidence or product-domain ownership. Acquire current Figma/Storybook/browser/a11y evidence. -16. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +12. Terminalize #1463 and #1676 with exact-head hosted plus real browser/accessibility evidence; keep #1735/#1737 aligned if their owners move. +13. Repair #1738's surviving EmailDetail/mobile intent through authoritative product owners; do not restore fabricated/static placeholder implementations. +14. Terminalize #1623 → #1354 and reconstruct #1436 as the executable Storybook lane with current Figma/browser/a11y evidence. +15. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From aabc504aa5ca692a5c71b3871c7125bceb51674b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 22:56:18 +0900 Subject: [PATCH 44/89] docs(gap): integrate localization owner and current Strix RED --- docs/product-technical-gap-baseline.md | 53 +++++++++++++------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 5d453f080..bf7e6e36d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,19 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.26 +**Baseline version:** 2.27 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.25 remains audit-visible as blob `2bc5c59b0f6e1b2ad6fb0ef2a44842a464ad8c2c`; v2.24 remains blob `94181f2a1756985a4e4aee9fddc8a599c3a09703`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.26 remains audit-visible as blob `5d453f080d2d8b496cf14d1be2c4de5f6205358f`; v2.25 remains blob `2bc5c59b0f6e1b2ad6fb0ef2a44842a464ad8c2c`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. -Fresh repository inventory is **287 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory is **288 open PRs and 75 open Issues**. The increase from 287 is the new bounded UI Localization Catalog implementation owner #1740; it does not create a second product Gap. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. @@ -21,14 +21,14 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **230 queued / 2 in progress**. The newest queued sample is a `repository_dispatch` CodeQL scan on protected central `main`, while a long-running PR Review Autofix remains in progress. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption; do not create source-neutral wake commits or blind unchanged-head reruns. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **189 queued / 2 in progress**. The newest queued sample is a `repository_dispatch` CodeQL scan on protected central `main`; long-running Strix work remains in progress. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption; do not create source-neutral wake commits or blind unchanged-head reruns. - `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner on current protected main. Its current Python Security, SAST, Security, Trusted-uv and CodeQL generations are terminal **CANCELLED**. Cancellation is missing hosted acceptance, not source GREEN. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has ordinary-adopted #1911 and no longer retains a parallel Trusted-uv delta. Its remaining CodeQL scheduler/credential/runtime-quality scope is still unaccepted: Runtime Quality, SAST, Security, Python Security and Trusted-uv are cancelled while CodeQL remains nonterminal. -- `.github#2291@782d67b433aa71cf2c81b2a81f55ae192a317f3b` is the canonical Strix trusted-runtime/evidence-binder owner, but **source acceptance is currently RED before queue acceptance is considered**. Exact-head review of `scripts/ci/test_strix_quick_gate.sh` found 26 `materialize_trusted_gate_fixture` occurrences: one helper definition, one already-correct trusted-runtime call, and **24 concrete specialized consumer-root materializations**. Those 24 fixtures copy `strix_evidence_binding.py` into the consumer root and can therefore pass even if the production gate regresses to resolving the binder from consumer-controlled state. The complete repair belongs in #2291: move every production-boundary specialized fixture to a sibling/non-consumer trusted runtime root, materialize gate/model/binder only there, invoke the trusted gate by absolute path with `STRIX_REPO_ROOT="$repo_root_dir"`, keep the consumer root binder-free except explicit source-under-scan cases, preserve each scenario's existing environment/assertions, and retain a negative consumer-binder assertion. A single additional isolated test does not repair the 24 masking call sites. Existing focused/full local receipts predate this finding and do not close it. Hosted Runtime Quality and SAST success likewise cannot override the source P1; Python Security/Security are cancelled and CodeQL remains queued. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and is stacked on #2291. Same-tree evidence proves Ready admission of CodeQL/Python Security/Runtime Quality/SAST/Security and Draft conversion cancellation/skipping, but it is not hosted GREEN or protected acceptance. It must consume the repaired #2291 owner; it must not copy the Strix binder/runtime fix. -- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO 4.14.2 and retains repository-identity admission. Python Security/SAST/Security are cancelled and CodeQL remains pending. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` is ordinary-restacked on current #2271 with only the bounded GHAS credential-routing delta. Its stacked base produces no Python Security generation under the protected base-name filter; #2109 owns that admission defect. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head. #2276 still owns the unchanged-target GHAS analysis-read permission canary. -- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains the Pages/SAST descendant on #2291. Its own fresh re-review independently records the same inherited #2291 24-call-site fixture-masking P1. It must ordinary-adopt the completed #2291 repair before child acceptance and must not become a second Strix runtime owner. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has ordinary-adopted #1911 and no longer retains a parallel Trusted-uv delta. Its remaining CodeQL scheduler/credential/runtime-quality scope is still unaccepted. +- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and remains **source RED before queue acceptance is considered**. The accepted P1 is unchanged: 26 `materialize_trusted_gate_fixture` occurrences consist of one helper definition, one already-correct trusted-runtime call, and **24 concrete specialized consumer-root materializations** that can mask a regression back to consumer-controlled binder resolution. Exact `a8d6261d...` now adds an executable test-only RED (`tests/test_strix_trusted_fixture_boundary.py`) that enumerates those owner-violating call sites; it does **not** claim repair. Acceptance requires every affected production-boundary fixture to move gate/model/binder into a sibling/non-consumer trusted runtime, invoke the trusted gate by absolute path with explicit `STRIX_REPO_ROOT="$repo_root_dir"`, keep the consumer root binder-free except explicit source-under-scan cases, preserve scenario environments/assertions, and retain negative consumer-binder proof. Existing predecessor receipts cannot override this current RED. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and depends on #2291. Same-tree evidence proves Ready admission and Draft conversion cancellation/skipping, but it is not hosted GREEN or protected acceptance. It must ordinary-adopt repaired #2291 rather than copy its runtime/binder fix. +- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO 4.14.2 and retains repository-identity admission; current hosted acceptance is incomplete. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` remains ordinary-restacked on #2271 with only the bounded GHAS credential-routing delta. Its stacked base lacks Python Security under the protected base-name filter; #2109 owns that admission defect. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head. #2276 retains the unchanged-target GHAS permission canary. +- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains the Pages/SAST descendant on #2291 and must ordinary-adopt the completed parent repair; it must not become a second Strix owner. - `.github#2269` remains historical redirect/test-seam lineage until lossless succession is proven; `.github#2276` remains the real target-repository permission/canary boundary. Naruon does not copy central workflow source. It records canonical owner identities and consumes accepted/released contracts through ordinary-forward changes only. @@ -47,7 +47,7 @@ Naruon does not copy central workflow source. It records canonical owner identit [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) remains the product contract for the auditable data-hygiene suite. The normal checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only. MD5/SHA-1 are excluded from the normal security-labelled surface; any buyer-backed legacy mode must be separately named, disabled by default, explicitly acknowledged as non-security use, and machine-deprecated. -[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. It preserves exact UTF-8 bytes, enforces the one-MiB byte ceiling, stable invalid-UTF-8/algorithm errors and authenticity warning, and pins known-answer/chunk-equivalence evidence. Fresh exact-head workflow lookup still returns zero PR workflow runs, so this remains an admission RED, not GREEN. Generated #1739 exact `79ced706b20f65c934d187df32ddcb7d15cbe18e` ordinary-adopts #1361 with zero effective product delta and remains provenance only. +[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. It preserves exact UTF-8 bytes, enforces the one-MiB byte ceiling, stable invalid-UTF-8/algorithm errors and authenticity warning, and pins known-answer/chunk-equivalence evidence. Exact-head PR workflow generation remains an admission prerequisite. Generated #1739 exact `79ced706b20f65c934d187df32ddcb7d15cbe18e` ordinary-adopts #1361 with zero effective product delta and remains provenance only. ### Workspace, migrations and opaque identifiers @@ -69,11 +69,11 @@ Naruon does not copy central workflow source. It records canonical owner identit Generated #1738 remains quarantined zero-delta provenance after its predecessor fabricated participant counts and attachment names, exposed an unbound CTA, and added static unmounted mobile panels. Its valid intent must be rebuilt through authoritative EmailDetail/mail/thread/attachment/calendar owners and #1570 or a verified mobile-state successor with real data plus normal/loading/empty/error/permission, touch/keyboard/focus/AT/responsive, exact-head browser/E2E/screenshot evidence. Historical #1193 closure does not prove delivery. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap for KO/EN/JA/ZH/VI/ES/DE/FR. It follows canonical migration lineage, keeps UI translation separate from ontology labels, avoids whole-catalog browser loading, and requires CJK/text-expansion/font-fallback/keyboard/focus/touch/a11y/responsive evidence. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes the catalog only after that owner reaches protected ancestry. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is now its first bounded executable implementation owner at exact `6e80999b261610880089a852bc36f6f6ed5fb4da`. #1740 owns **pure domain policy only**: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, and exact named-placeholder schemas. It intentionally owns no database/Alembic/API/browser/Storybook/authoring/ontology/LLM path. A local standards review produced a real RED at `859b892e...` for wildcard lookup semantics; exact `6e80999b...` repairs that contract and has focused 16-test / 100% statement+branch local evidence. Its current Application CI, SAST, Security, CodeQL, Docker and Bandit generations are queued and it has no independent review, so it remains Draft. Persistence still waits for #1503 or a verified complete successor to reach protected ancestry, then creates the next ordinary single-head Alembic descendant. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes released screen resources only after localization persistence/API reach protected ancestry. ## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner rollback, #1734 NetworkGraph duplicate, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner rollback, repaired #1734 NetworkGraph provenance, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interactions, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, keep duplicate/rejected lanes Draft, and never transfer predecessor hosted receipts. @@ -85,37 +85,38 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 287 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; fresh 230 queued / 2 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Strix trusted-runtime isolation | #2291 has active 24-call-site specialized-fixture masking P1; #2109 and #2272 depend on it | realistic RED, all 24 production-boundary fixtures moved to non-consumer trusted runtime, consumer binder-free negative proof, exact-head GREEN/review/hosted acceptance | +| P0 | Release-train convergence | 288 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; fresh 189 queued / 2 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Strix trusted-runtime isolation | #2291 exact `a8d6261d...` carries executable RED for 24 specialized masking call sites; #2109/#2272 depend on it | all 24 production-boundary fixtures moved to non-consumer trusted runtime, consumer binder-free negative proof, exact-head GREEN/review/hosted acceptance | | P0 | Central CI/security acceptance | #1911 cancelled; #2040 unique scope incomplete; #2271→#2275 stacked admission incomplete; #2276 canary pending | exact-head hosted GREEN without wake commits, qualifying review, accepted stacked-base contract, unchanged-target GHAS proof | | P0 | Dependency-security freshness | #1623 owns current Trivy/dependency revalidation including #1733 inherited RED; #1565→#1685 backend graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | | P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...` source/test/TRACEABILITY repaired; current evidence nonterminal | terminal current-head evidence, zero valid findings, qualifying review after dependency revalidation | | P0 | Workspace/migration convergence | #1503 sole migration line; #1727 descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance; exact #1361 has zero workflow runs | #1623 prerequisite integration, stacked admission, exact-head hosted/security/review acceptance, bounded UTF-8/known-vector contract | +| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance | #1623 prerequisite integration, stacked admission, exact-head hosted/security/review acceptance, bounded UTF-8/known-vector contract | +| P1 | UI localization catalog | #1731 Gap; #1740 pure-policy owner; persistence waits for #1503 | versioned 3NF resource + immutable publication/rollback + screen-scoped API/cache + eight-locale completeness/placeholder enforcement | | P1 | Tasks/Settings interaction acceptance | #1463 and #1676 source repairs exist; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | | P1 | Design-QA fidelity/mobile states | #1738 placeholder implementation quarantined | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | | P1 | Executable Storybook/design system | #1354 static owner; #1436 existing runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | -| P1 | UI localization/OIDC | #1731 specified; #1729 interaction owner | eight-locale versioned resource, cache/API/rollback plus Storybook/browser/a11y integration | | P1 | Generated/descendant owner lock | current zero-delta/rejected provenance set | semantic overlap/fidelity gate, owner-movement resweep, no scratch/self-modifying residue | ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; a smaller backlog does not make cancellation, missing generation, or runner-unassigned work passing evidence. +1. Restore stable Actions runner acquisition through `.github#712`; backlog reduction alone does not make cancellation, missing generation, or runner-unassigned work passing evidence. 2. Reacquire legitimate exact-head hosted evidence for `.github#1911`; then terminalize already-converged `.github#2040` only on its distinct CodeQL/runtime-quality scope. -3. Repair `.github#2291` **source-first**: reproduce the specialized-fixture trust-boundary RED, remove all 24 consumer-root binder/runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. Only after that may #2109 and #2272 ordinary-adopt the repaired parent and reacquire their own evidence. +3. Repair `.github#2291` **source-first** from current executable RED `a8d6261d...`: remove all 24 consumer-root binder/runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. Only after that may #2109 and #2272 ordinary-adopt the repaired parent and reacquire their own evidence. 4. Terminalize #2271; then reacquire #2275 under the accepted stacked-base admission contract so Python Security/Runtime Quality are generated on #2275 itself. Prove #2269 succession and #2276 unchanged-target GHAS permission. 5. Revalidate #1623 against current vulnerability data, including #1733 inherited Trivy evidence, and integrate normally. 6. Preserve #1361 as sole checksum owner; after #1623 + stacked admission integrate, obtain #1361 exact-head hosted/security/review acceptance. Keep #1739 zero-delta provenance. 7. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. 8. Terminalize #1733 after #1623 revalidation/adoption without reintroducing provider text, traceback logging, or generated TRACEABILITY rollback. 9. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. -10. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -11. Implement #1731 as sole localization owner, then ordinary-adopt released screen resources into #1729 and other UI surfaces. -12. Terminalize #1463 and #1676 with exact-head hosted plus real browser/accessibility evidence; keep #1735/#1737 aligned if their owners move. -13. Repair #1738's surviving EmailDetail/mobile intent through authoritative product owners; do not restore fabricated/static placeholder implementations. -14. Terminalize #1623 → #1354 and reconstruct #1436 as the executable Storybook lane with current Figma/browser/a11y evidence. -15. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. +10. Preserve #1740 as the bounded #1731 pure-policy owner while Draft/current-head checks/review are incomplete. Once #1503 reaches protected ancestry, extend this lineage with the next single-head catalog migration, immutable resource-version aggregate and screen-scoped API/cache; do not create a second localization writer. +11. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +12. Ordinary-adopt released localization resources into #1729 and other UI surfaces and prove KO/EN/JA/ZH/VI/ES/DE/FR normal/loading/empty/error/permission, CJK/text expansion/font fallback, keyboard/focus/touch/a11y/responsive behavior. +13. Terminalize #1463 and #1676 with exact-head hosted plus real browser/accessibility evidence; keep #1735/#1737 aligned if their owners move. +14. Repair #1738's surviving EmailDetail/mobile intent through authoritative product owners; do not restore fabricated/static placeholder implementations. +15. Terminalize #1623 → #1354 and reconstruct #1436 as the executable Storybook lane with current Figma/browser/a11y evidence. +16. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file From 8afd0dffa4e5511180ef5961f9d73d5ba30ef0e3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 20 Sep 2026 23:59:08 +0900 Subject: [PATCH 45/89] docs(gap): refresh localization and NetworkGraph owner authority --- docs/product-technical-gap-baseline.md | 136 ++++++++++++++----------- 1 file changed, 77 insertions(+), 59 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index bf7e6e36d..acbfc43cc 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,83 +1,100 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.27 +**Baseline version:** 2.28 **Observed on:** 2026-09-20 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.26 remains audit-visible as blob `5d453f080d2d8b496cf14d1be2c4de5f6205358f`; v2.25 remains blob `2bc5c59b0f6e1b2ad6fb0ef2a44842a464ad8c2c`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.27 remains audit-visible as blob `bf7e6e36d58899704ac3331cace1be59387b62e4`; v2.26 remains blob `5d453f080d2d8b496cf14d1be2c4de5f6205358f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. -Fresh repository inventory is **288 open PRs and 75 open Issues**. The increase from 287 is the new bounded UI Localization Catalog implementation owner #1740; it does not create a second product Gap. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory is **289 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts and three active rulesets. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. ## 2. Central CI/security owner graph -Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. GitHub REST authority validation, redirect refusal, bearer non-forwarding, evidence-lineage validation, and owner-qualified foreign Semgrep evidence are protected ancestry; #2279 is not an open prerequisite. +Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **189 queued / 2 in progress**. The newest queued sample is a `repository_dispatch` CodeQL scan on protected central `main`; long-running Strix work remains in progress. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish workflow generation/admission, first runner acquisition, downstream runner acquisition, and terminal cancellation/preemption; do not create source-neutral wake commits or blind unchanged-head reruns. -- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner on current protected main. Its current Python Security, SAST, Security, Trusted-uv and CodeQL generations are terminal **CANCELLED**. Cancellation is missing hosted acceptance, not source GREEN. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has ordinary-adopted #1911 and no longer retains a parallel Trusted-uv delta. Its remaining CodeQL scheduler/credential/runtime-quality scope is still unaccepted. -- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and remains **source RED before queue acceptance is considered**. The accepted P1 is unchanged: 26 `materialize_trusted_gate_fixture` occurrences consist of one helper definition, one already-correct trusted-runtime call, and **24 concrete specialized consumer-root materializations** that can mask a regression back to consumer-controlled binder resolution. Exact `a8d6261d...` now adds an executable test-only RED (`tests/test_strix_trusted_fixture_boundary.py`) that enumerates those owner-violating call sites; it does **not** claim repair. Acceptance requires every affected production-boundary fixture to move gate/model/binder into a sibling/non-consumer trusted runtime, invoke the trusted gate by absolute path with explicit `STRIX_REPO_ROOT="$repo_root_dir"`, keep the consumer root binder-free except explicit source-under-scan cases, preserve scenario environments/assertions, and retain negative consumer-binder proof. Existing predecessor receipts cannot override this current RED. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and depends on #2291. Same-tree evidence proves Ready admission and Draft conversion cancellation/skipping, but it is not hosted GREEN or protected acceptance. It must ordinary-adopt repaired #2291 rather than copy its runtime/binder fix. -- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` ordinary-adopts canonical AnyIO 4.14.2 and retains repository-identity admission; current hosted acceptance is incomplete. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` remains ordinary-restacked on #2271 with only the bounded GHAS credential-routing delta. Its stacked base lacks Python Security under the protected base-name filter; #2109 owns that admission defect. After #2109 is accepted/protected, #2275 itself must reacquire Python Security/Runtime Quality on its own exact head. #2276 retains the unchanged-target GHAS permission canary. -- `.github#2272@f5b96a4cb8add16208a3c8dbacd99d94b65b4bcb` remains the Pages/SAST descendant on #2291 and must ordinary-adopt the completed parent repair; it must not become a second Strix owner. -- `.github#2269` remains historical redirect/test-seam lineage until lossless succession is proven; `.github#2276` remains the real target-repository permission/canary boundary. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **211 queued / 1 in progress**. The newest queued sample is a `repository_dispatch` CodeQL dispatch on protected central `main`; the single in-progress workload remains the long-running #2274 Strix run. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish generation/admission, first runner acquisition, downstream acquisition, cancellation and preemption. No source-neutral wake commits or blind unchanged-head reruns. +- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has converged off parallel Trusted-uv ownership; its distinct CodeQL/scheduler/runtime-quality scope remains unaccepted. +- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` remains **source RED before queue acceptance**. Its executable RED enumerates the remaining 24 specialized `materialize_trusted_gate_fixture` call sites that still co-locate trusted runtime/binder material with the consumer root and can mask a regression to consumer-controlled binder resolution. Acceptance requires all affected production-boundary fixtures to move gate/model/binder to a non-consumer trusted runtime, invoke the trusted gate by absolute path with explicit `STRIX_REPO_ROOT`, preserve scenario assertions, and prove consumer-binder absence. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and depends on repaired #2291. Same-tree Ready/Draft lifecycle canary evidence is useful but is not protected acceptance. +- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` retains repository-identity admission over canonical AnyIO ancestry; hosted acceptance remains incomplete. +- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` remains the bounded GHAS credential-routing child. After #2109 is accepted/protected it must reacquire Python Security/Runtime Quality on its own exact head. `.github#2276` retains the unchanged-target permission/canary boundary. +- `.github#2272` remains the Pages/SAST descendant on #2291 and must ordinary-adopt the repaired parent rather than become a second Strix owner. -Naruon does not copy central workflow source. It records canonical owner identities and consumes accepted/released contracts through ordinary-forward changes only. +Naruon does not copy central workflow source. It consumes accepted/released owner contracts through ordinary-forward changes only. ## 3. Product owner boundaries ### Dependency and security ownership -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. Consumer evidence from #1733 predecessor exact `9d9d5e0...` includes Security Scan `35450922558` failing in `trivy-fs` job `105968932721`; #1733 changes no dependency manifest/lockfile, so repair/revalidation remains with #1623 rather than broadening the feature owner. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. #1733 predecessor Security Scan `35450922558` failed in `trivy-fs` job `105968932721`; #1733 changes no dependency manifest/lockfile, so repair/revalidation remains with #1623. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) must ordinary/non-force reconcile onto #1565 while preserving its distinct SMTP dependency delta and regenerate one coherent resolver-produced `pyproject.toml` / requirements / hashed requirements / `uv.lock` graph before hosted acceptance. Never hand-edit generated lock/hash material. +A new cross-owner regression was found in #1593 history: intervening `30d52cef0c708c4625825bad6fb823b3d2766986` changed `frontend/package.json` and `frontend/pnpm-lock.yaml`, introduced Next/Sharp resolution changes, and deleted PostCSS security-floor/root-snapshot regression coverage. None of that delta is accepted in #1593. Exact #1593 repair `cd6f6d545fe860215d9f6f04b549520f31f68b0e` restores the prior canonical tree; dependency/security ownership remains solely with #1623. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open/mergeable. Production/test/TRACEABILITY repairs suppress provider-controlled exception text/traceback across the four owned paths. Its predecessor inherited Trivy RED is routed to #1623; current exact-head workflow generation is nonterminal and no predecessor receipt or approval transfers. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) must ordinary/non-force reconcile onto it while preserving its distinct SMTP dependency delta and regenerate one coherent resolver-produced dependency graph before hosted acceptance. + +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open. Its inherited Trivy RED is routed to #1623; predecessor receipts do not transfer. + +### NetworkGraph performance ownership + +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) is the canonical bounded relationship/node option owner. Fresh live inspection found its documented clean `97235208...` had been followed by cross-owner regression `30d52cef...` and a no-op child `e7b0711...`. Besides dependency/security drift, that regression weakened per-iterator read-count coverage into aggregate counters and moved the `try/finally` boundary after mutation of process-global `Map.prototype.values`, reintroducing the exact test-isolation leak risk previously repaired. + +Exact current #1593 is **`cd6f6d545fe860215d9f6f04b549520f31f68b0e`**, tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`. The repair is ordinary-forward from the intervening history, not a force rewrite, and restores the canonical two-file effective delta against #1623. Old formal approval on `97235208...` is historical only; current-head hosted and independent-review evidence must be reacquired. + +[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) is the canonical first-five non-empty label-summary child at **`8786c6e9923a90b7d43ad5439c096ef0f0556148`**, tree `387e2def9f44d7bb7226d8106d4f548f7a142bfa`. It ordinary-adopts repaired #1593 and preserves exactly three effective files. Worst-case sparse-label traversal remains O(N); only result storage is bounded. + +[#1674](https://github.com/ContextualWisdomLab/naruon/pull/1674) is zero-effective-delta provenance at **`48121f5adbe4a15410ec83e6f6dc44ef0a2f7f7a`** on current #1628. [#1675](https://github.com/ContextualWisdomLab/naruon/pull/1675) is the canonical memo-only child at **`059481ed9fafb34925d33df2106dcc15cc76268e`**, tree `db81645977cbddd363e592633d11377b46ec6207`, preserving the two-file `React.memo` + `React.Profiler` contract. Its old formal approval on `8addfa1c...` is stale after restack; current-head hosted/review/browser-performance evidence is required. + +Generated/provenance NetworkGraph descendants have been ordinary-restacked after owner movement: #1741 `388cbddaaa1b049e5baeb457f30fb4835c5eacbd`, #1720 `e65768e869f7737538c7243f8dc7e13b775bce78`, #1728 `f1105c3fe836e8b526628794229758e7dc70d212`, #1721 `ab1297b35f7d47600f94dc301f2d6817b784a640`, #1715 `c0cac5700c22632f00431dd41b08ff500e648d87`, #1703 `c6ded3c1bc851b6358ddce725bcc4ce05a2e81ca`, #1692 `58f488efe87376339f9689211b8c9c617de68d43`, and #1683 `a472cd9073f16a575ccea56223181275cd88393e`. These lanes remain Draft provenance, not source owners; historical generated receipts do not transfer. ### Data-hygiene and checksum utility ownership -[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) remains the product contract for the auditable data-hygiene suite. The normal checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only. MD5/SHA-1 are excluded from the normal security-labelled surface; any buyer-backed legacy mode must be separately named, disabled by default, explicitly acknowledged as non-security use, and machine-deprecated. +[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) remains the auditable data-hygiene contract. Normal checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only. MD5/SHA-1 are excluded from the normal security-labelled surface. -[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. It preserves exact UTF-8 bytes, enforces the one-MiB byte ceiling, stable invalid-UTF-8/algorithm errors and authenticity warning, and pins known-answer/chunk-equivalence evidence. Exact-head PR workflow generation remains an admission prerequisite. Generated #1739 exact `79ced706b20f65c934d187df32ddcb7d15cbe18e` ordinary-adopts #1361 with zero effective product delta and remains provenance only. +[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) remains the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Generated #1739 remains zero-effective-delta provenance. ### Workspace, migrations and opaque identifiers -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration heads from protected `develop`. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the sole opaque-UID backfill owner on #1503; generated #1736 remains zero-effective-delta provenance. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration heads from protected `develop`. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the opaque-UID backfill owner on #1503; #1736 remains provenance. ### LLM governance / released contract -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. Protected `AGENTS.md` still contains provider/model-specific GitHub Models fallback guidance that conflicts with the canonical `contextual-orchestrator` boundary, but this is already owned by #1548/#1549 and must not spawn a second governance writer. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable source and its GitHub Releases inventory is empty; Naruon therefore remains fail-closed and must not bind a mutable owner head as released API/client/schema authority. +[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable source and its GitHub Releases inventory is exactly empty. Naruon therefore remains fail-closed and must not bind a mutable owner head as released API/client/schema authority. ## 4. Buyer-visible UI, Storybook and localization -[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. Inherited dependency/central evidence remains incomplete; UI Delivery stays FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. UI Delivery stays FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. + +[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains the static design-token precursor on #1623. [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) remains the executable Storybook/runtime lineage and must be repaired rather than replaced. Package/lock security belongs to #1623; token taxonomy belongs to #1354. + +[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the Tasks async-loading owner; #1735 remains provenance. [#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the Settings native-disabled semantics owner; #1737 remains provenance. Hosted/browser/keyboard/responsive/AT evidence remains outstanding. -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains the static design-token precursor on #1623. Open [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) is the existing executable Storybook/runtime lineage and must be repaired rather than replaced. Package/lock security belongs to #1623; token taxonomy belongs to #1354; baseline ownership stays here; unintegrated Storybook ADRs remain Proposed. Required reconstruction is #1623 → #1354 → repaired #1436 with resolver-backed package/lock state, deterministic static build, representative normal/loading/empty/error/permission/destructive/busy states, keyboard/focus/touch/responsive/200%-zoom evidence, WCAG-oriented browser automation, manual accessible-name/AT evidence and current Figma mapping. +Generated #1738 remains quarantined zero-delta provenance after fabricated participant/attachment data and static/unbound UI behavior. Its valid intent must be rebuilt through authoritative mail/thread/attachment/calendar/mobile owners with real data and full lifecycle/browser/a11y evidence. -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the Tasks async-loading owner; source-level pending-action repair exists, but current hosted/browser/AT/independent-review evidence is incomplete. Generated #1735 remains zero-delta provenance. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`f07de3fce6b61afd8fe9dc5b72352a9b184ab854`** and currently owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, exact named-placeholder schemas, and typed validation boundaries. -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the Settings native-disabled semantics owner; generated #1737 is zero-delta provenance. Current hosted/browser/keyboard/responsive evidence and qualifying review remain outstanding. +#1740 now preserves two ordinary-forward RED→repair sequences. First, RFC 4647 lookup review repaired wildcard ordering and explicit `q=0` exclusion. Second, a fresh RED proved that CR/LF/NUL arriving via `Accept-Language` was incorrectly reported as `ui_locale_input_invalid` because a shared control-character helper hard-coded the explicit-locale code. The causal repair parameterizes that helper by caller boundary: explicit locale controls → `ui_locale_input_invalid`; `Accept-Language` controls → `ui_accept_language_invalid`. Temporary duplicate regression coverage was folded into the canonical policy suite and removed. -Generated #1738 remains quarantined zero-delta provenance after its predecessor fabricated participant counts and attachment names, exposed an unbound CTA, and added static unmounted mobile panels. Its valid intent must be rebuilt through authoritative EmailDetail/mail/thread/attachment/calendar owners and #1570 or a verified mobile-state successor with real data plus normal/loading/empty/error/permission, touch/keyboard/focus/AT/responsive, exact-head browser/E2E/screenshot evidence. Historical #1193 closure does not prove delivery. +The current #1740 head has no independent review. Application CI, CodeQL, Security Scan, SAST Semgrep, Bandit and Docker generations are queued. Earlier local 16-test/100%-coverage and `PYTHONPATH=.` receipts are predecessor history and **do not** count for the current head. Doctoring/TRACEABILITY now records RFC 5646, RFC 4647 and RFC 9110 plus the typed boundary decision without transferring stale receipts. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped UI Localization Catalog Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is now its first bounded executable implementation owner at exact `6e80999b261610880089a852bc36f6f6ed5fb4da`. #1740 owns **pure domain policy only**: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, and exact named-placeholder schemas. It intentionally owns no database/Alembic/API/browser/Storybook/authoring/ontology/LLM path. A local standards review produced a real RED at `859b892e...` for wildcard lookup semantics; exact `6e80999b...` repairs that contract and has focused 16-test / 100% statement+branch local evidence. Its current Application CI, SAST, Security, CodeQL, Docker and Bandit generations are queued and it has no independent review, so it remains Draft. Persistence still waits for #1503 or a verified complete successor to reach protected ancestry, then creates the next ordinary single-head Alembic descendant. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes released screen resources only after localization persistence/API reach protected ancestry. +#1740 intentionally owns no database/Alembic/API/browser/Storybook/authoring/ontology/LLM path. Persistence still waits for #1503 or a verified complete successor to reach protected ancestry, then creates the next ordinary single-head Alembic descendant. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes released screen resources only after localization persistence/API reach protected ancestry. ## 5. Generated-writer and descendant invariants -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include #1728 cross-owner rollback, repaired #1734 NetworkGraph provenance, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. +Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include repaired NetworkGraph lanes #1741/#1720/#1728/#1721/#1715/#1703/#1692/#1683, repaired #1734, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interactions, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, keep duplicate/rejected lanes Draft, and never transfer predecessor hosted receipts. -Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when needed. Queue reduction alone never proves succession. +Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when needed. The #1593 incident is a concrete owner-level example: a seemingly on-topic test commit carried dependency/security rollback and test-isolation regression, and a following no-op did not make that tree acceptable. Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver. @@ -85,38 +102,39 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | -| P0 | Release-train convergence | 288 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; fresh 189 queued / 2 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Strix trusted-runtime isolation | #2291 exact `a8d6261d...` carries executable RED for 24 specialized masking call sites; #2109/#2272 depend on it | all 24 production-boundary fixtures moved to non-consumer trusted runtime, consumer binder-free negative proof, exact-head GREEN/review/hosted acceptance | -| P0 | Central CI/security acceptance | #1911 cancelled; #2040 unique scope incomplete; #2271→#2275 stacked admission incomplete; #2276 canary pending | exact-head hosted GREEN without wake commits, qualifying review, accepted stacked-base contract, unchanged-target GHAS proof | -| P0 | Dependency-security freshness | #1623 owns current Trivy/dependency revalidation including #1733 inherited RED; #1565→#1685 backend graph repair | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 exact `2b47bc7...` source/test/TRACEABILITY repaired; current evidence nonterminal | terminal current-head evidence, zero valid findings, qualifying review after dependency revalidation | -| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 descendant; #1736 provenance | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | -| P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema publication + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance | #1623 prerequisite integration, stacked admission, exact-head hosted/security/review acceptance, bounded UTF-8/known-vector contract | -| P1 | UI localization catalog | #1731 Gap; #1740 pure-policy owner; persistence waits for #1503 | versioned 3NF resource + immutable publication/rollback + screen-scoped API/cache + eight-locale completeness/placeholder enforcement | -| P1 | Tasks/Settings interaction acceptance | #1463 and #1676 source repairs exist; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | -| P1 | Design-QA fidelity/mobile states | #1738 placeholder implementation quarantined | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | -| P1 | Executable Storybook/design system | #1354 static owner; #1436 existing runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | -| P1 | Generated/descendant owner lock | current zero-delta/rejected provenance set | semantic overlap/fidelity gate, owner-movement resweep, no scratch/self-modifying residue | +| P0 | Release-train convergence | 289 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | +| P0 | Actions execution capacity | `.github#712`; fresh 211 queued / 1 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Strix trusted-runtime isolation | #2291 exact `a8d6261d...` executable RED for 24 specialized masking call sites | complete fixture migration, consumer-binder negative proof, exact-head GREEN/review/hosted acceptance | +| P0 | Central CI/security acceptance | #1911/#2040 incomplete; #2109 depends on #2291; #2271→#2275 admission incomplete | exact-head hosted GREEN, qualifying review, accepted stacked-base contract, #2276 canary | +| P0 | Dependency-security freshness | #1623 owns Trivy/dependency revalidation and rejected #1593 cross-owner rollback evidence | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | +| P0 | LLM provider error confidentiality | #1733 source repaired; inherited dependency RED routed to #1623 | terminal current-head evidence and qualifying review after dependency revalidation | +| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 descendant | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | +| P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema release + consumer bump + contract/E2E/security/SBOM/provenance | +| P1 | NetworkGraph performance stack | #1593 `cd6f6d...` → #1628 `8786c6e...` → #1674 provenance → #1675 `059481ed...`; descendants restacked | current-head hosted GREEN/review, real browser/main-thread profile, no unsupported O(1)/p95 claim | +| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance | #1623 integration, stacked admission, exact-head hosted/security/review acceptance | +| P1 | UI localization catalog | #1731 Gap; #1740 `f07de3fc...` pure-policy owner; persistence waits for #1503 | versioned 3NF resource, immutable publication/rollback, screen-scoped API/cache, eight-locale completeness/placeholder enforcement | +| P1 | Tasks/Settings interaction acceptance | #1463/#1676 source repairs; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | +| P1 | Design-QA fidelity/mobile states | #1738 quarantined placeholder | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | +| P1 | Executable Storybook/design system | #1354 static owner; #1436 runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | +| P1 | Generated/descendant owner lock | repaired provenance set plus owner-movement resweep | semantic overlap/fidelity gate, ordinary restack after owner movement, no scratch/self-modifying residue | ## 7. Current causal order -1. Restore stable Actions runner acquisition through `.github#712`; backlog reduction alone does not make cancellation, missing generation, or runner-unassigned work passing evidence. -2. Reacquire legitimate exact-head hosted evidence for `.github#1911`; then terminalize already-converged `.github#2040` only on its distinct CodeQL/runtime-quality scope. -3. Repair `.github#2291` **source-first** from current executable RED `a8d6261d...`: remove all 24 consumer-root binder/runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. Only after that may #2109 and #2272 ordinary-adopt the repaired parent and reacquire their own evidence. -4. Terminalize #2271; then reacquire #2275 under the accepted stacked-base admission contract so Python Security/Runtime Quality are generated on #2275 itself. Prove #2269 succession and #2276 unchanged-target GHAS permission. -5. Revalidate #1623 against current vulnerability data, including #1733 inherited Trivy evidence, and integrate normally. -6. Preserve #1361 as sole checksum owner; after #1623 + stacked admission integrate, obtain #1361 exact-head hosted/security/review acceptance. Keep #1739 zero-delta provenance. -7. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph before hosted acceptance. -8. Terminalize #1733 after #1623 revalidation/adoption without reintroducing provider text, traceback logging, or generated TRACEABILITY rollback. -9. Integrate #1694 → #1691 and prerequisites, then #1503 as the sole migration lineage; ordinary-adopt #1727 and downstream consumers. Keep #1736 provenance only. -10. Preserve #1740 as the bounded #1731 pure-policy owner while Draft/current-head checks/review are incomplete. Once #1503 reaches protected ancestry, extend this lineage with the next single-head catalog migration, immutable resource-version aggregate and screen-scoped API/cache; do not create a second localization writer. -11. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -12. Ordinary-adopt released localization resources into #1729 and other UI surfaces and prove KO/EN/JA/ZH/VI/ES/DE/FR normal/loading/empty/error/permission, CJK/text expansion/font fallback, keyboard/focus/touch/a11y/responsive behavior. -13. Terminalize #1463 and #1676 with exact-head hosted plus real browser/accessibility evidence; keep #1735/#1737 aligned if their owners move. -14. Repair #1738's surviving EmailDetail/mobile intent through authoritative product owners; do not restore fabricated/static placeholder implementations. -15. Terminalize #1623 → #1354 and reconstruct #1436 as the executable Storybook lane with current Figma/browser/a11y evidence. +1. Restore stable Actions runner acquisition through `.github#712`; queue reduction alone does not make missing/cancelled/nonterminal evidence passing. +2. Reacquire legitimate exact-head hosted evidence for `.github#1911`, then terminalize `.github#2040` only on its distinct scope. +3. Repair `.github#2291` source-first from executable RED `a8d6261d...`: remove all 24 consumer-root trusted-runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. +4. Only after #2291 acceptance may #2109/#2272 ordinary-adopt it; then terminalize #2271 and reacquire #2275 under accepted stacked-base admission, preserving #2276 canary evidence. +5. Revalidate #1623 against current vulnerability data, including #1733 inherited Trivy and rejected #1593 dependency/security rollback evidence, and integrate normally. +6. Preserve repaired #1593 as sole bounded-option owner; obtain current-head hosted/review/browser-performance evidence. Then terminalize #1628 on repaired #1593. Keep #1674/#1741/#1720 provenance aligned. +7. Terminalize #1675 only after current prerequisite ancestry settles and current-head hosted/review/real performance evidence exists; keep #1683/#1692/#1703/#1715/#1721/#1728 zero-delta provenance aligned. +8. Preserve #1361 as checksum owner after #1623 and stacked admission; keep #1739 provenance. +9. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph. +10. Terminalize #1733 after #1623 revalidation/adoption without provider-text or traceback leakage. +11. Integrate migration prerequisites and #1694 → #1691 → #1503 as the sole migration lineage; ordinary-adopt #1727/downstream consumers. +12. Preserve #1740 as the bounded #1731 pure-policy owner while current-head checks/review are incomplete. After #1503 reaches protected ancestry, extend the same lineage with the next single-head catalog migration, immutable resource aggregate and screen-scoped API/cache. +13. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. +14. Ordinary-adopt released localization resources into #1729 and UI surfaces; prove KO/EN/JA/ZH/VI/ES/DE/FR normal/loading/empty/error/permission, CJK/text expansion/font fallback, keyboard/focus/touch/a11y/responsive behavior. +15. Terminalize #1463/#1676, rebuild #1738 surviving intent through authoritative data owners, and reconstruct #1436 Storybook through #1623 → #1354 with current Figma/browser/a11y evidence. 16. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. \ No newline at end of file +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. From ec4b511cc1fc80f233b19bd4ce88028df04466d5 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 00:44:14 +0900 Subject: [PATCH 46/89] docs(gap): record localization boundary repair v2.29 --- docs/product-technical-gap-baseline.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index acbfc43cc..0fa173a24 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,13 +1,13 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.28 -**Observed on:** 2026-09-20 (Asia/Seoul) +**Baseline version:** 2.29 +**Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.27 remains audit-visible as blob `bf7e6e36d58899704ac3331cace1be59387b62e4`; v2.26 remains blob `5d453f080d2d8b496cf14d1be2c4de5f6205358f`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +This file is the current product/technical authority overlay. v2.28 remains audit-visible as blob `acbfc43cc759c4a6689dd931f41bcbe3648eaab3`; v2.27 remains blob `bf7e6e36d58899704ac3331cace1be59387b62e4`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. ## 1. Evidence and release posture @@ -21,7 +21,7 @@ A releasable candidate requires one exact integrated protected head, terminal re Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. -- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **211 queued / 1 in progress**. The newest queued sample is a `repository_dispatch` CodeQL dispatch on protected central `main`; the single in-progress workload remains the long-running #2274 Strix run. This is not stable runner acquisition. Preserve sole current-head evidence and distinguish generation/admission, first runner acquisition, downstream acquisition, cancellation and preemption. No source-neutral wake commits or blind unchanged-head reruns. +- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **250 queued / 0 in progress**. The newest queued sample is Required OpenCode Review for `.github#2166@43aa19ac...`; protected central `main` itself remains unchanged. A non-empty queue with no running lane is stronger starvation evidence than queue depth alone. Preserve sole current-head evidence and distinguish generation/admission, first runner acquisition, downstream acquisition, cancellation and preemption. No source-neutral wake commits or blind unchanged-head reruns. - `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has converged off parallel Trusted-uv ownership; its distinct CodeQL/scheduler/runtime-quality scope remains unaccepted. - `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` remains **source RED before queue acceptance**. Its executable RED enumerates the remaining 24 specialized `materialize_trusted_gate_fixture` call sites that still co-locate trusted runtime/binder material with the consumer root and can mask a regression to consumer-controlled binder resolution. Acceptance requires all affected production-boundary fixtures to move gate/model/binder to a non-consumer trusted runtime, invoke the trusted gate by absolute path with explicit `STRIX_REPO_ROOT`, preserve scenario assertions, and prove consumer-binder absence. @@ -80,11 +80,13 @@ Generated/provenance NetworkGraph descendants have been ordinary-restacked after Generated #1738 remains quarantined zero-delta provenance after fabricated participant/attachment data and static/unbound UI behavior. Its valid intent must be rebuilt through authoritative mail/thread/attachment/calendar/mobile owners with real data and full lifecycle/browser/a11y evidence. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`f07de3fce6b61afd8fe9dc5b72352a9b184ab854`** and currently owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, exact named-placeholder schemas, and typed validation boundaries. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`ae34dee31fdef2e59359ec532fcc9865f4994566`** and currently owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, exact named-placeholder schemas, and typed validation boundaries. -#1740 now preserves two ordinary-forward RED→repair sequences. First, RFC 4647 lookup review repaired wildcard ordering and explicit `q=0` exclusion. Second, a fresh RED proved that CR/LF/NUL arriving via `Accept-Language` was incorrectly reported as `ui_locale_input_invalid` because a shared control-character helper hard-coded the explicit-locale code. The causal repair parameterizes that helper by caller boundary: explicit locale controls → `ui_locale_input_invalid`; `Accept-Language` controls → `ui_accept_language_invalid`. Temporary duplicate regression coverage was folded into the canonical policy suite and removed. +#1740 now preserves three ordinary-forward RED→repair sequences. First, RFC 4647 lookup review repaired wildcard ordering and explicit `q=0` exclusion. Second, a RED proved that CR/LF/NUL arriving via `Accept-Language` was incorrectly reported as `ui_locale_input_invalid` because a shared control-character helper hard-coded the explicit-locale code; the repair parameterizes that helper by caller boundary. Third, current-head review found both explicit locale and `Accept-Language` input were `.strip()`-normalized before control validation, so leading/trailing CRLF disappeared before the fail-closed guard. RED `de6bbfaf...` pins edge CRLF for both boundaries; `2d84ee69...` validates the original input before whitespace normalization. `da5288c...` folds the remaining wildcard q=0 regression into the canonical suite, `3d27ddc...` removes the superseded duplicate test file, and `ae34dee3...` makes doctoring/TRACEABILITY code-current. -The current #1740 head has no independent review. Application CI, CodeQL, Security Scan, SAST Semgrep, Bandit and Docker generations are queued. Earlier local 16-test/100%-coverage and `PYTHONPATH=.` receipts are predecessor history and **do not** count for the current head. Doctoring/TRACEABILITY now records RFC 5646, RFC 4647 and RFC 9110 plus the typed boundary decision without transferring stale receipts. +The exact #1740 contract is now: explicit locale CR/LF/NUL anywhere → `ui_locale_input_invalid`; `Accept-Language` CR/LF/NUL anywhere → `ui_accept_language_invalid`; only then may benign outer whitespace be normalized. This closes a boundary-canonicalization gap without broadening #1740 into persistence, API, browser or publication ownership. + +The current #1740 exact head has no independent review and GitHub currently reports **zero workflow runs** while the PR remains Draft. Earlier local/full-suite/coverage and predecessor hosted receipts do not transfer. Doctoring/TRACEABILITY records RFC 5646, RFC 4647 and RFC 9110 plus typed validation identity and the pre-normalization control-character decision. #1740 intentionally owns no database/Alembic/API/browser/Storybook/authoring/ontology/LLM path. Persistence still waits for #1503 or a verified complete successor to reach protected ancestry, then creates the next ordinary single-head Alembic descendant. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes released screen resources only after localization persistence/API reach protected ancestry. @@ -103,7 +105,7 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | Priority | Gap | Current boundary | Completion evidence | | --- | --- | --- | --- | | P0 | Release-train convergence | 289 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; fresh 211 queued / 1 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | +| P0 | Actions execution capacity | `.github#712`; fresh 250 queued / 0 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | | P0 | Strix trusted-runtime isolation | #2291 exact `a8d6261d...` executable RED for 24 specialized masking call sites | complete fixture migration, consumer-binder negative proof, exact-head GREEN/review/hosted acceptance | | P0 | Central CI/security acceptance | #1911/#2040 incomplete; #2109 depends on #2291; #2271→#2275 admission incomplete | exact-head hosted GREEN, qualifying review, accepted stacked-base contract, #2276 canary | | P0 | Dependency-security freshness | #1623 owns Trivy/dependency revalidation and rejected #1593 cross-owner rollback evidence | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | @@ -112,7 +114,7 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr | P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema release + consumer bump + contract/E2E/security/SBOM/provenance | | P1 | NetworkGraph performance stack | #1593 `cd6f6d...` → #1628 `8786c6e...` → #1674 provenance → #1675 `059481ed...`; descendants restacked | current-head hosted GREEN/review, real browser/main-thread profile, no unsupported O(1)/p95 claim | | P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance | #1623 integration, stacked admission, exact-head hosted/security/review acceptance | -| P1 | UI localization catalog | #1731 Gap; #1740 `f07de3fc...` pure-policy owner; persistence waits for #1503 | versioned 3NF resource, immutable publication/rollback, screen-scoped API/cache, eight-locale completeness/placeholder enforcement | +| P1 | UI localization catalog | #1731 Gap; #1740 `ae34dee3...` pure-policy owner; persistence waits for #1503 | edge-control-safe locale policy, versioned 3NF resource, immutable publication/rollback, screen-scoped API/cache, eight-locale completeness/placeholder enforcement | | P1 | Tasks/Settings interaction acceptance | #1463/#1676 source repairs; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | | P1 | Design-QA fidelity/mobile states | #1738 quarantined placeholder | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | | P1 | Executable Storybook/design system | #1354 static owner; #1436 runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | @@ -131,7 +133,7 @@ Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current propr 9. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph. 10. Terminalize #1733 after #1623 revalidation/adoption without provider-text or traceback leakage. 11. Integrate migration prerequisites and #1694 → #1691 → #1503 as the sole migration lineage; ordinary-adopt #1727/downstream consumers. -12. Preserve #1740 as the bounded #1731 pure-policy owner while current-head checks/review are incomplete. After #1503 reaches protected ancestry, extend the same lineage with the next single-head catalog migration, immutable resource aggregate and screen-scoped API/cache. +12. Preserve #1740 `ae34dee3...` as the bounded #1731 pure-policy owner with the pre-normalization CRLF repair while current-head checks/review are incomplete. After #1503 reaches protected ancestry, extend the same lineage with the next single-head catalog migration, immutable resource aggregate and screen-scoped API/cache. 13. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. 14. Ordinary-adopt released localization resources into #1729 and UI surfaces; prove KO/EN/JA/ZH/VI/ES/DE/FR normal/loading/empty/error/permission, CJK/text expansion/font fallback, keyboard/focus/touch/a11y/responsive behavior. 15. Terminalize #1463/#1676, rebuild #1738 surviving intent through authoritative data owners, and reconstruct #1436 Storybook through #1623 → #1354 with current Figma/browser/a11y evidence. From 9f14734b88b6b3a1ce9124830d93161a0d296fd9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 01:50:54 +0900 Subject: [PATCH 47/89] docs(gap): record RFC 9110 localization boundary --- docs/product-technical-gap-baseline.md | 149 ++++++++++--------------- 1 file changed, 60 insertions(+), 89 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 0fa173a24..18c91f9c1 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,142 +1,113 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.29 +**Baseline version:** 2.30 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -This file is the current product/technical authority overlay. v2.28 remains audit-visible as blob `acbfc43cc759c4a6689dd931f41bcbe3648eaab3`; v2.27 remains blob `bf7e6e36d58899704ac3331cace1be59387b62e4`; earlier snapshots remain audit material in Git ancestry and `docs/product-technical-gap-history/`. Historical evidence is not current merge or release authority. +v2.29 remains audit-visible as blob `0fa173a24b98b3ce1336c9516c4d787c7e76c539`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -## 1. Evidence and release posture +## 1. Evidence hierarchy and release posture -Authority order is protected code/runtime/migrations/tests → protected architecture/operations docs → exact current PR source and current-head evidence → open Issues/Proposed ADRs → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, neutral, local-only, author-only, model-only, or source-neutral wake evidence is not passing evidence. +When evidence conflicts, use this order: exact protected-branch code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. -Fresh repository inventory is **289 open PRs and 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required contexts and three active rulesets. Latest published Naruon release remains `v0.14.4`, `immutable=false`; it is historical publication evidence, not a commercial immutable release candidate. +Fresh repository inventory is **289 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. -A releasable candidate requires one exact integrated protected head, terminal required contexts, zero valid unresolved review findings, qualifying independent post-last-push review, current security evidence, immutable publication identity, SBOM/provenance, reproducibility, rollback evidence, and buyer-visible acceptance for changed behavior. +Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact integrated protected head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. -## 2. Central CI/security owner graph +**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** -Protected central authority remains `.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279 exact `d1e4380c15e948aaf104d46aa134fa614058782a`. +## 2. Central CI/security control plane -- `.github#712` remains the Actions execution-capacity owner. Fresh observation is **250 queued / 0 in progress**. The newest queued sample is Required OpenCode Review for `.github#2166@43aa19ac...`; protected central `main` itself remains unchanged. A non-empty queue with no running lane is stronger starvation evidence than queue depth alone. Preserve sole current-head evidence and distinguish generation/admission, first runner acquisition, downstream acquisition, cancellation and preemption. No source-neutral wake commits or blind unchanged-head reruns. -- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has converged off parallel Trusted-uv ownership; its distinct CodeQL/scheduler/runtime-quality scope remains unaccepted. -- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` remains **source RED before queue acceptance**. Its executable RED enumerates the remaining 24 specialized `materialize_trusted_gate_fixture` call sites that still co-locate trusted runtime/binder material with the consumer root and can mask a regression to consumer-controlled binder resolution. Acceptance requires all affected production-boundary fixtures to move gate/model/binder to a non-consumer trusted runtime, invoke the trusted gate by absolute path with explicit `STRIX_REPO_ROOT`, preserve scenario assertions, and prove consumer-binder absence. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` owns Draft/Ready plus stacked-base admission and depends on repaired #2291. Same-tree Ready/Draft lifecycle canary evidence is useful but is not protected acceptance. -- `.github#2271@8da5f48fa0438ff33c766f03325f6e7f2a77dd9d` retains repository-identity admission over canonical AnyIO ancestry; hosted acceptance remains incomplete. -- `.github#2275@0d68d7a8435652edc288d7bb3dfb06a7c8a59eb6` remains the bounded GHAS credential-routing child. After #2109 is accepted/protected it must reacquire Python Security/Runtime Quality on its own exact head. `.github#2276` retains the unchanged-target permission/canary boundary. -- `.github#2272` remains the Pages/SAST descendant on #2291 and must ordinary-adopt the repaired parent rather than become a second Strix owner. +Protected central authority remains `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279. -Naruon does not copy central workflow source. It consumes accepted/released owner contracts through ordinary-forward changes only. +- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation is **265 queued / 0 in progress**. The newest queued sample is repository-dispatch run `35523656599`, a CodeQL Scan Dispatch on the protected-main SHA. Admitted work is accumulating while no run owns an executing lane, so this is acquisition-starvation evidence rather than merely a large backlog. No blind rerun, source-neutral wake commit or required-check weakening is permitted. +- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current Python Security, SAST, Security, Trusted-uv and CodeQL generation is terminal cancelled; cancellation is missing hosted acceptance, not source GREEN. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality. Runtime Quality/SAST/Security/Python Security/Trusted-uv are cancelled and CodeQL is nonterminal; predecessor evidence does not transfer. +- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and is **source RED before hosted acceptance**. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still call `materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci"`, co-locating trusted binder/runtime with the consumer root and masking a regression to consumer-controlled binder resolution. One unresolved Major current-head review thread independently requires the same complete matrix repair. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions; a representative-only extra fixture is not sufficient. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` remains the Draft/Ready + stacked-base heavy-workflow admission successor. Its live base has advanced to #2291 `a8d6261d...`, so it is intentionally diverged and must ordinary/non-force adopt the repaired owner after #2291 completes. Same-tree Ready-generation / Draft-withdrawal evidence proves lifecycle shape only, not hosted GREEN. +- `.github#2271`, `#2275`, `#2276` retain repository-identity, GHAS analysis-capability and unchanged-target permission/canary boundaries respectively. #2275 must reacquire its own Python Security/Runtime Quality after the stacked-base admission contract is protected; capability selection cannot manufacture target-repository permission. +- `.github#2272` remains the separate Pages/SAST descendant on #2291 and must consume the completed Strix owner repair instead of copying it. -## 3. Product owner boundaries +Naruon does not copy central reusable-workflow source. Consumer PRs wait fail-closed for accepted/released owner contracts and ordinary-restack afterward. -### Dependency and security ownership +## 3. Product source-owner graph -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the sole frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`. Current vulnerability-database evidence must be reacquired before inherited Trivy findings are treated as resolved. #1733 predecessor Security Scan `35450922558` failed in `trivy-fs` job `105968932721`; #1733 changes no dependency manifest/lockfile, so repair/revalidation remains with #1623. +### 3.1 Dependency/security -A new cross-owner regression was found in #1593 history: intervening `30d52cef0c708c4625825bad6fb823b3d2766986` changed `frontend/package.json` and `frontend/pnpm-lock.yaml`, introduced Next/Sharp resolution changes, and deleted PostCSS security-floor/root-snapshot regression coverage. None of that delta is accepted in #1593. Exact #1593 repair `cd6f6d545fe860215d9f6f04b549520f31f68b0e` restores the prior canonical tree; dependency/security ownership remains solely with #1623. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open/mergeable. Its source carries `next`/`eslint-config-next 16.3.4`, `sharp 0.35.4` resolution and security-floor regressions. Its historical exact-head six-workflow GREEN and approval do not prove safety against the current vulnerability database. Later Trivy observations in #1718/#1682 and #1733 predecessor Security Scan `35450922558` require current-base/current-database revalidation in #1623 rather than dependency patches in feature PRs. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) must ordinary/non-force reconcile onto it while preserving its distinct SMTP dependency delta and regenerate one coherent resolver-produced dependency graph before hosted acceptance. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is the broader backend dependency descendant and must reconcile losslessly onto #1565 while preserving its distinct security-material dependency changes and one coherent resolver-produced lock graph. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded LLM-provider error-confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`, Draft/open. Its inherited Trivy RED is routed to #1623; predecessor receipts do not transfer. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`. Its source/test/doctoring delta is separate from inherited dependency Security RED, which is routed to #1623. -### NetworkGraph performance ownership +### 3.2 Migration/workspace ownership -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) is the canonical bounded relationship/node option owner. Fresh live inspection found its documented clean `97235208...` had been followed by cross-owner regression `30d52cef...` and a no-op child `e7b0711...`. Besides dependency/security drift, that regression weakened per-iterator read-count coverage into aggregate counters and moved the `try/finally` boundary after mutation of process-global `Map.prototype.values`, reintroducing the exact test-isolation leak risk previously repaired. +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage remains: -Exact current #1593 is **`cd6f6d545fe860215d9f6f04b549520f31f68b0e`**, tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`. The repair is ordinary-forward from the intervening history, not a force rewrite, and restores the canonical two-file effective delta against #1623. Old formal approval on `97235208...` is historical only; current-head hosted and independent-review evidence must be reacquired. +`0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. -[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) is the canonical first-five non-empty label-summary child at **`8786c6e9923a90b7d43ad5439c096ef0f0556148`**, tree `387e2def9f44d7bb7226d8106d4f548f7a142bfa`. It ordinary-adopts repaired #1593 and preserves exactly three effective files. Worst-case sparse-label traversal remains O(N); only result storage is bounded. +#1503 is Draft. The final integrated generation still depends on central execution/admission repair, #1623 current vulnerability revalidation, fresh-bootstrap owner #1694 and repository-local stacked admission owner #1691. Descendants must not create parallel Alembic heads from protected `develop`. -[#1674](https://github.com/ContextualWisdomLab/naruon/pull/1674) is zero-effective-delta provenance at **`48121f5adbe4a15410ec83e6f6dc44ef0a2f7f7a`** on current #1628. [#1675](https://github.com/ContextualWisdomLab/naruon/pull/1675) is the canonical memo-only child at **`059481ed9fafb34925d33df2106dcc15cc76268e`**, tree `db81645977cbddd363e592633d11377b46ec6207`, preserving the two-file `React.memo` + `React.Profiler` contract. Its old formal approval on `8addfa1c...` is stale after restack; current-head hosted/review/browser-performance evidence is required. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the opaque-UID backfill entropy owner on #1503. Generated #1736 is provenance only. -Generated/provenance NetworkGraph descendants have been ordinary-restacked after owner movement: #1741 `388cbddaaa1b049e5baeb457f30fb4835c5eacbd`, #1720 `e65768e869f7737538c7243f8dc7e13b775bce78`, #1728 `f1105c3fe836e8b526628794229758e7dc70d212`, #1721 `ab1297b35f7d47600f94dc301f2d6817b784a640`, #1715 `c0cac5700c22632f00431dd41b08ff500e648d87`, #1703 `c6ded3c1bc851b6358ddce725bcc4ce05a2e81ca`, #1692 `58f488efe87376339f9689211b8c9c617de68d43`, and #1683 `a472cd9073f16a575ccea56223181275cd88393e`. These lanes remain Draft provenance, not source owners; historical generated receipts do not transfer. +### 3.3 NetworkGraph/performance ownership -### Data-hygiene and checksum utility ownership +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `cd6f6d545fe860215d9f6f04b549520f31f68b0e`, tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`. It restores per-iterator read-count and process-global `Map.prototype.values` cleanup contracts after an intervening cross-owner regression. -[#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) remains the auditable data-hygiene contract. Normal checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only. MD5/SHA-1 are excluded from the normal security-labelled surface. +[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the first-five non-empty label-summary child at exact `8786c6e9923a90b7d43ad5439c096ef0f0556148`. Sparse-label traversal can remain O(N); only result storage is bounded. #1674 remains zero-effective-delta provenance and #1675 remains the memoization owner at exact `059481ed9fafb34925d33df2106dcc15cc76268e`. -[#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) remains the sole bounded `content_checksum_generator` implementation owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Generated #1739 remains zero-effective-delta provenance. +Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft provenance after ordinary/non-force convergence to their canonical owner trees. Generated receipts do not transfer and unsupported O(1)/buyer-p95 claims are not accepted. -### Workspace, migrations and opaque identifiers +### 3.4 Checksum/data-hygiene -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole canonical Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`; descendants must not create parallel migration heads from protected `develop`. [#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the opaque-UID backfill owner on #1503; #1736 remains provenance. +Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -### LLM governance / released contract +## 4. UI Localization Catalog — v2.30 material delta -[#1548](https://github.com/ContextualWisdomLab/naruon/issues/1548) / [#1549](https://github.com/ContextualWisdomLab/naruon/pull/1549) remain the sole Naruon LLM-governance owner. `contextual-orchestrator` protected `main@5665b0ad1e07ffb5e9f8c59e44b6b2a785298013` remains mutable source and its GitHub Releases inventory is exactly empty. Naruon therefore remains fail-closed and must not bind a mutable owner head as released API/client/schema authority. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner and has advanced to exact **`41aeb4ea59b7a2e24bc326b3239c434c3e135edf`**. -## 4. Buyer-visible UI, Storybook and localization +#1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) remains the Calendar buyer-truth/detail-sidebar owner. UI Delivery stays FAIL until exact-head security/CodeQL, browser/a11y and qualifying review evidence are terminal. +Four ordinary-forward RED→repair sequences now define the executable policy: -[#1354](https://github.com/ContextualWisdomLab/naruon/pull/1354) remains the static design-token precursor on #1623. [#1436](https://github.com/ContextualWisdomLab/naruon/pull/1436) remains the executable Storybook/runtime lineage and must be repaired rather than replaced. Package/lock security belongs to #1623; token taxonomy belongs to #1354. +1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. +2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). +3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. +4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. They can silently canonicalize explicit-locale HTAB/VT/FF/Unicode whitespace or treat VT/FF as header weight whitespace. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to `[ SP / HTAB ]`, and replaces broad stripping with explicit ASCII normalization. Doctoring/TRACEABILITY is current at `41aeb4ea...`. -[#1463](https://github.com/ContextualWisdomLab/naruon/pull/1463) remains the Tasks async-loading owner; #1735 remains provenance. [#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the Settings native-disabled semantics owner; #1737 remains provenance. Hosted/browser/keyboard/responsive/AT evidence remains outstanding. +Current localization invariants: -Generated #1738 remains quarantined zero-delta provenance after fabricated participant/attachment data and static/unbound UI behavior. Its valid intent must be rebuilt through authoritative mail/thread/attachment/calendar/mobile owners with real data and full lifecycle/browser/a11y evidence. +- explicit persisted/session locale: reject C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; +- `Accept-Language`: reject C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; VT, FF, NBSP and other Unicode whitespace are not protocol OWS; +- boundary-specific stable validation codes are preserved; +- once a locale is selected, missing active translation keys must fail rather than silently fall back per message; +- UI-copy resources remain separate from ontology/concept-label authority. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single DB-versioned, screen-scoped **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`ae34dee31fdef2e59359ec532fcc9865f4994566`** and currently owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release identities, persisted → session → weighted `Accept-Language` → product-default selection, stable screen/message keys, exact named-placeholder schemas, and typed validation boundaries. +The fourth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact #1740 `41aeb4ea...` currently has zero PR workflow runs and no formal review submission while Draft. Predecessor local/hosted evidence does not transfer and no source-neutral wake commit was created. -#1740 now preserves three ordinary-forward RED→repair sequences. First, RFC 4647 lookup review repaired wildcard ordering and explicit `q=0` exclusion. Second, a RED proved that CR/LF/NUL arriving via `Accept-Language` was incorrectly reported as `ui_locale_input_invalid` because a shared control-character helper hard-coded the explicit-locale code; the repair parameterizes that helper by caller boundary. Third, current-head review found both explicit locale and `Accept-Language` input were `.strip()`-normalized before control validation, so leading/trailing CRLF disappeared before the fail-closed guard. RED `de6bbfaf...` pins edge CRLF for both boundaries; `2d84ee69...` validates the original input before whitespace normalization. `da5288c...` folds the remaining wildcard q=0 regression into the canonical suite, `3d27ddc...` removes the superseded duplicate test file, and `ae34dee3...` makes doctoring/TRACEABILITY code-current. +Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. -The exact #1740 contract is now: explicit locale CR/LF/NUL anywhere → `ui_locale_input_invalid`; `Accept-Language` CR/LF/NUL anywhere → `ui_accept_language_invalid`; only then may benign outer whitespace be normalized. This closes a boundary-canonicalization gap without broadening #1740 into persistence, API, browser or publication ownership. +Buyer UI acceptance remains required for KO/EN/JA/ZH/VI/ES/DE/FR across normal/loading/empty/error/permission states, CJK wrapping/font fallback, Latin-script expansion/diacritics, keyboard/focus/touch/AT, responsive widths and exact-version screenshots. #1729 remains the bounded OIDC pending-interaction owner and may consume localization only after a released screen-resource contract exists. -The current #1740 exact head has no independent review and GitHub currently reports **zero workflow runs** while the PR remains Draft. Earlier local/full-suite/coverage and predecessor hosted receipts do not transfer. Doctoring/TRACEABILITY records RFC 5646, RFC 4647 and RFC 9110 plus typed validation identity and the pre-normalization control-character decision. +## 5. Other buyer-visible UI and generated-writer boundaries -#1740 intentionally owns no database/Alembic/API/browser/Storybook/authoring/ontology/LLM path. Persistence still waits for #1503 or a verified complete successor to reach protected ancestry, then creates the next ordinary single-head Alembic descendant. [#1729](https://github.com/ContextualWisdomLab/naruon/pull/1729) remains the bounded OIDC interaction-state owner and consumes released screen resources only after localization persistence/API reach protected ancestry. +#1682 remains the Calendar buyer-truth/detail-sidebar owner. #1463 remains the Tasks async-loading owner; generated #1735 is provenance. #1676 remains Settings native-disabled semantics owner; generated #1737 is provenance. #1354 remains the design-token precursor and #1436 the executable Storybook/runtime lineage; dependency/lock security stays with #1623. -## 5. Generated-writer and descendant invariants +Generated #1738 remains zero-effective-delta provenance because its predecessor fabricated participant/attachment data, exposed a dead CTA and supplied static/unmounted mobile panels without authoritative state. Any valid density/mobile intent must be rebuilt through canonical mail/thread/attachment/calendar/mobile owners with actual data and lifecycle/browser/a11y evidence. -Generated branches are provenance, not new owners, when an existing canonical owner already covers the delta. Current examples include repaired NetworkGraph lanes #1741/#1720/#1728/#1721/#1715/#1703/#1692/#1683, repaired #1734, #1735 Tasks duplicate, #1736 opaque-ID duplicate, #1737 Settings duplicate, #1738 rejected placeholder UI, and #1739 checksum/hash duplicate. +Generated descendants are re-read every run. When they duplicate an existing owner or delete/weaken tests, fixtures, traceability, dependency floors, buyer truth or security boundaries, repair is ordinary/non-force adoption/restack. Do not close useful history merely because effective delta becomes zero; keep provenance until the canonical owner integrates or a verified complete successor inherits all valid source/test/evidence. -Every generated descendant/new duplicate must be checked semantically for owner overlap, source/test/fixture deletion, dependency/security/performance regression, fabricated buyer-visible data, dead CTA, weak/deprecated security surface, unmounted/static interactions, severity/rule misclassification, scratch artifacts, duplicate CHANGELOG/doctoring, and self-modifying/task-specific guidance. Preserve valid ancestry, ordinary-forward to the canonical owner tree/contract, keep duplicate/rejected lanes Draft, and never transfer predecessor hosted receipts. +## 6. LLM/released-contract boundary -Canonical-owner movement invalidates an earlier zero-delta or stacked relation. Descendants must be freshly compared and ordinary-restacked when needed. The #1593 incident is a concrete owner-level example: a seemingly on-topic test commit carried dependency/security rollback and test-isolation regression, and a following no-op did not make that tree acceptable. +#1548/#1549 remain Naruon's LLM-governance owner path. `ContextualWisdomLab/contextual-orchestrator` protected `main` remains exact `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`; GitHub Releases inventory is exactly `[]`. Naruon therefore has no immutable released CO API/client/schema identity to consume and remains fail-closed. Mutable owner head, copied provider routing or direct provider/model hard-coding is not an acceptable substitute. -Issue #1178 and PR #1732 remain the OpenSSF governance/legal lane. Current proprietary licensing is an eligibility blocker for OpenSSF Passing, not a technical waiver. - -## 6. Commercial Gap register +## 7. Current causal order -| Priority | Gap | Current boundary | Completion evidence | -| --- | --- | --- | --- | -| P0 | Release-train convergence | 289 open PRs; protected head unchanged | parent-first integration, no orphaned valid delta, one immutable RC source SHA | -| P0 | Actions execution capacity | `.github#712`; fresh 250 queued / 0 in progress | stable runner acquisition; admission/runner/cancellation classes separated; obsolete pressure removed without cancelling sole current-head evidence | -| P0 | Strix trusted-runtime isolation | #2291 exact `a8d6261d...` executable RED for 24 specialized masking call sites | complete fixture migration, consumer-binder negative proof, exact-head GREEN/review/hosted acceptance | -| P0 | Central CI/security acceptance | #1911/#2040 incomplete; #2109 depends on #2291; #2271→#2275 admission incomplete | exact-head hosted GREEN, qualifying review, accepted stacked-base contract, #2276 canary | -| P0 | Dependency-security freshness | #1623 owns Trivy/dependency revalidation and rejected #1593 cross-owner rollback evidence | current vulnerability scans, coherent manifests/locks, hostile regressions, terminal CI/security/review | -| P0 | LLM provider error confidentiality | #1733 source repaired; inherited dependency RED routed to #1623 | terminal current-head evidence and qualifying review after dependency revalidation | -| P0 | Workspace/migration convergence | #1503 sole migration line; #1727 descendant | one Alembic head, real PostgreSQL fresh/historical execution, ordinary descendant restacks | -| P0 | Released LLM contract | contextual-orchestrator release inventory empty | immutable API/client/schema release + consumer bump + contract/E2E/security/SBOM/provenance | -| P1 | NetworkGraph performance stack | #1593 `cd6f6d...` → #1628 `8786c6e...` → #1674 provenance → #1675 `059481ed...`; descendants restacked | current-head hosted GREEN/review, real browser/main-thread profile, no unsupported O(1)/p95 claim | -| P1 | Data-hygiene checksum contract | #1361 sole implementation; #1739 provenance | #1623 integration, stacked admission, exact-head hosted/security/review acceptance | -| P1 | UI localization catalog | #1731 Gap; #1740 `ae34dee3...` pure-policy owner; persistence waits for #1503 | edge-control-safe locale policy, versioned 3NF resource, immutable publication/rollback, screen-scoped API/cache, eight-locale completeness/placeholder enforcement | -| P1 | Tasks/Settings interaction acceptance | #1463/#1676 source repairs; #1735/#1737 provenance | hosted GREEN + browser keyboard/focus/touch/responsive/AT + qualifying review | -| P1 | Design-QA fidelity/mobile states | #1738 quarantined placeholder | authoritative data/action implementation, lifecycle states, browser/E2E/a11y evidence | -| P1 | Executable Storybook/design system | #1354 static owner; #1436 runtime lineage | owner-safe reconstruction, coherent lock, representative states, browser/a11y/Figma evidence | -| P1 | Generated/descendant owner lock | repaired provenance set plus owner-movement resweep | semantic overlap/fidelity gate, ordinary restack after owner movement, no scratch/self-modifying residue | +The current minimum causal sequence is: -## 7. Current causal order +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. -1. Restore stable Actions runner acquisition through `.github#712`; queue reduction alone does not make missing/cancelled/nonterminal evidence passing. -2. Reacquire legitimate exact-head hosted evidence for `.github#1911`, then terminalize `.github#2040` only on its distinct scope. -3. Repair `.github#2291` source-first from executable RED `a8d6261d...`: remove all 24 consumer-root trusted-runtime materializations, prove consumer-root binder absence, then obtain exact-head GREEN, fresh independent review and hosted acceptance. -4. Only after #2291 acceptance may #2109/#2272 ordinary-adopt it; then terminalize #2271 and reacquire #2275 under accepted stacked-base admission, preserving #2276 canary evidence. -5. Revalidate #1623 against current vulnerability data, including #1733 inherited Trivy and rejected #1593 dependency/security rollback evidence, and integrate normally. -6. Preserve repaired #1593 as sole bounded-option owner; obtain current-head hosted/review/browser-performance evidence. Then terminalize #1628 on repaired #1593. Keep #1674/#1741/#1720 provenance aligned. -7. Terminalize #1675 only after current prerequisite ancestry settles and current-head hosted/review/real performance evidence exists; keep #1683/#1692/#1703/#1715/#1721/#1728 zero-delta provenance aligned. -8. Preserve #1361 as checksum owner after #1623 and stacked admission; keep #1739 provenance. -9. Preserve #1565 as bounded TestClient/httpx2 owner; ordinary/non-force reconcile #1685 and regenerate one coherent dependency graph. -10. Terminalize #1733 after #1623 revalidation/adoption without provider-text or traceback leakage. -11. Integrate migration prerequisites and #1694 → #1691 → #1503 as the sole migration lineage; ordinary-adopt #1727/downstream consumers. -12. Preserve #1740 `ae34dee3...` as the bounded #1731 pure-policy owner with the pre-normalization CRLF repair while current-head checks/review are incomplete. After #1503 reaches protected ancestry, extend the same lineage with the next single-head catalog migration, immutable resource aggregate and screen-scoped API/cache. -13. After contextual-orchestrator publishes an immutable API/client/schema release, finish #1549 without mutable-owner binding. -14. Ordinary-adopt released localization resources into #1729 and UI surfaces; prove KO/EN/JA/ZH/VI/ES/DE/FR normal/loading/empty/error/permission, CJK/text expansion/font fallback, keyboard/focus/touch/a11y/responsive behavior. -15. Terminalize #1463/#1676, rebuild #1738 surviving intent through authoritative data owners, and reconstruct #1436 Storybook through #1623 → #1354 with current Figma/browser/a11y evidence. -16. Reacquire buyer-visible acceptance, build one exact integrated protected candidate, then publish an immutable Naruon version/tag/package/GitHub Release with SBOM/provenance/reproducibility/rollback. - -**Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** Source repairs and local evidence do not substitute for terminal exact-head hosted checks, qualifying independent review, current security scans, real external permission evidence, released owner contracts, buyer-visible UI acceptance, or immutable publication. +Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. From f78693a0a45f4be7e32a88146668078e7bf9c7e2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 01:52:56 +0900 Subject: [PATCH 48/89] docs(gap): make hosted status live-authority only --- docs/product-technical-gap-baseline.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 18c91f9c1..560fe59c1 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,19 +1,21 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.30 +**Baseline version:** 2.31 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.29 remains audit-visible as blob `0fa173a24b98b3ce1336c9516c4d787c7e76c539`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.30 remains audit-visible as blob `18c91f9c10c3027d6cdc6f3ac4658995e44ef140`; v2.29 remains blob `0fa173a24b98b3ce1336c9516c4d787c7e76c539`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. + +v2.31 also removes an avoidably volatile baseline assertion introduced in v2.30: exact-head workflow *status* belongs to live PR/check authority rather than a durable product Gap ledger. The baseline records whether required evidence has been generated and whether acceptance has been established; per-run queued/pending/terminal state is read fresh from GitHub before any merge decision. ## 1. Evidence hierarchy and release posture When evidence conflicts, use this order: exact protected-branch code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. -Fresh repository inventory is **289 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. +Fresh repository inventory at this observation is **289 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact integrated protected head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. @@ -23,9 +25,9 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu Protected central authority remains `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279. -- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation is **265 queued / 0 in progress**. The newest queued sample is repository-dispatch run `35523656599`, a CodeQL Scan Dispatch on the protected-main SHA. Admitted work is accumulating while no run owns an executing lane, so this is acquisition-starvation evidence rather than merely a large backlog. No blind rerun, source-neutral wake commit or required-check weakening is permitted. -- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current Python Security, SAST, Security, Trusted-uv and CodeQL generation is terminal cancelled; cancellation is missing hosted acceptance, not source GREEN. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality. Runtime Quality/SAST/Security/Python Security/Trusted-uv are cancelled and CodeQL is nonterminal; predecessor evidence does not transfer. +- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation at v2.31 authoring is **265 queued / 0 in progress**. The newest queued sample is repository-dispatch run `35523656599`, a CodeQL Scan Dispatch on the protected-main SHA. Admitted work is accumulating while no run owns an executing lane, so this is acquisition-starvation evidence rather than merely a large backlog. No blind rerun, source-neutral wake commit or required-check weakening is permitted. +- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN; cancellation is missing hosted acceptance, not source GREEN. +- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality; current hosted acceptance remains incomplete and predecessor evidence does not transfer. - `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and is **source RED before hosted acceptance**. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still call `materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci"`, co-locating trusted binder/runtime with the consumer root and masking a regression to consumer-controlled binder resolution. One unresolved Major current-head review thread independently requires the same complete matrix repair. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions; a representative-only extra fixture is not sufficient. - `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` remains the Draft/Ready + stacked-base heavy-workflow admission successor. Its live base has advanced to #2291 `a8d6261d...`, so it is intentionally diverged and must ordinary/non-force adopt the repaired owner after #2291 completes. Same-tree Ready-generation / Draft-withdrawal evidence proves lifecycle shape only, not hosted GREEN. - `.github#2271`, `#2275`, `#2276` retain repository-identity, GHAS analysis-capability and unchanged-target permission/canary boundaries respectively. #2275 must reacquire its own Python Security/Runtime Quality after the stacked-base admission contract is protected; capability selection cannot manufacture target-repository permission. @@ -65,13 +67,13 @@ Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft p Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.30 material delta +## 4. UI Localization Catalog — v2.30/v2.31 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner and has advanced to exact **`41aeb4ea59b7a2e24bc326b3239c434c3e135edf`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`41aeb4ea59b7a2e24bc326b3239c434c3e135edf`**. #1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Four ordinary-forward RED→repair sequences now define the executable policy: +Four ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). @@ -86,7 +88,7 @@ Current localization invariants: - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The fourth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact #1740 `41aeb4ea...` currently has zero PR workflow runs and no formal review submission while Draft. Predecessor local/hosted evidence does not transfer and no source-neutral wake commit was created. +The fourth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact-head repository workflows have naturally generated for `41aeb4ea...`; their live state is authoritative in #1740/checks and must be read fresh before any acceptance decision. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. From 076058eee49ab3587a0ee47d84ec91e416ff7bce Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 02:47:33 +0900 Subject: [PATCH 49/89] docs(gap): record RFC 9110 q-parameter contract --- docs/product-technical-gap-baseline.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 560fe59c1..26a92eccb 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.31 +**Baseline version:** 2.32 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.30 remains audit-visible as blob `18c91f9c10c3027d6cdc6f3ac4658995e44ef140`; v2.29 remains blob `0fa173a24b98b3ce1336c9516c4d787c7e76c539`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.31 remains audit-visible as blob `560fe59c120171492eb113a08ce3ee95c2fdae52`; v2.30 remains blob `18c91f9c10c3027d6cdc6f3ac4658995e44ef140`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 also removes an avoidably volatile baseline assertion introduced in v2.30: exact-head workflow *status* belongs to live PR/check authority rather than a durable product Gap ledger. The baseline records whether required evidence has been generated and whether acceptance has been established; per-run queued/pending/terminal state is read fresh from GitHub before any merge decision. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advances the durable localization protocol contract only: RFC 9110 defines the content-negotiation quality parameter name `q` as case-insensitive, so valid `Q=` weights must be accepted with exactly the same qvalue and OWS semantics as `q=`. ## 1. Evidence hierarchy and release posture @@ -25,7 +25,7 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu Protected central authority remains `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279. -- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation at v2.31 authoring is **265 queued / 0 in progress**. The newest queued sample is repository-dispatch run `35523656599`, a CodeQL Scan Dispatch on the protected-main SHA. Admitted work is accumulating while no run owns an executing lane, so this is acquisition-starvation evidence rather than merely a large backlog. No blind rerun, source-neutral wake commit or required-check weakening is permitted. +- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation at v2.31 authoring was **265 queued / 0 in progress**; live queue/running state is volatile and must be read from GitHub before any acceptance decision. No blind rerun, source-neutral wake commit or required-check weakening is permitted. - `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN; cancellation is missing hosted acceptance, not source GREEN. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality; current hosted acceptance remains incomplete and predecessor evidence does not transfer. - `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and is **source RED before hosted acceptance**. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still call `materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci"`, co-locating trusted binder/runtime with the consumer root and masking a regression to consumer-controlled binder resolution. One unresolved Major current-head review thread independently requires the same complete matrix repair. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions; a representative-only extra fixture is not sufficient. @@ -67,28 +67,30 @@ Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft p Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.30/v2.31 material contract +## 4. UI Localization Catalog — v2.32 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`41aeb4ea59b7a2e24bc326b3239c434c3e135edf`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`2bc067e7b0a98b1d35630e77623e55bc9594992b`**. #1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Four ordinary-forward RED→repair sequences define the executable policy: +Five ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). 3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. -4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. They can silently canonicalize explicit-locale HTAB/VT/FF/Unicode whitespace or treat VT/FF as header weight whitespace. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to `[ SP / HTAB ]`, and replaces broad stripping with explicit ASCII normalization. Doctoring/TRACEABILITY is current at `41aeb4ea...`. +4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to SP/HTAB, and replaces broad stripping with explicit ASCII normalization. +5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. Doctoring/TRACEABILITY is current at `2bc067e7...`. Current localization invariants: - explicit persisted/session locale: reject C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; - `Accept-Language`: reject C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; VT, FF, NBSP and other Unicode whitespace are not protocol OWS; +- `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; - boundary-specific stable validation codes are preserved; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The fourth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact-head repository workflows have naturally generated for `41aeb4ea...`; their live state is authoritative in #1740/checks and must be read fresh before any acceptance decision. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The fifth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. From c22e52f4a8855e86a7428915a4d6c3827e4fb0da Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 03:48:27 +0900 Subject: [PATCH 50/89] docs(gap): record localization schema-container repair --- docs/product-technical-gap-baseline.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 26a92eccb..91b1dcc62 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.32 +**Baseline version:** 2.33 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.31 remains audit-visible as blob `560fe59c120171492eb113a08ce3ee95c2fdae52`; v2.30 remains blob `18c91f9c10c3027d6cdc6f3ac4658995e44ef140`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.32 remains audit-visible as blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advances the durable localization protocol contract only: RFC 9110 defines the content-negotiation quality parameter name `q` as case-insensitive, so valid `Q=` weights must be accepted with exactly the same qvalue and OWS semantics as `q=`. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advances the durable localization publication boundary: placeholder schemas are declared tuple/list collections, and arbitrary runtime iterables must not be silently coerced into versioned publication metadata or escape typed validation. ## 1. Evidence hierarchy and release posture @@ -25,7 +25,7 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu Protected central authority remains `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279. -- `.github#712` remains the sole Actions execution-capacity owner. Fresh observation at v2.31 authoring was **265 queued / 0 in progress**; live queue/running state is volatile and must be read from GitHub before any acceptance decision. No blind rerun, source-neutral wake commit or required-check weakening is permitted. +- `.github#712` remains the sole Actions execution-capacity owner. Runner queue/running state is volatile and must be read from GitHub before any acceptance decision. No blind rerun, source-neutral wake commit or required-check weakening is permitted. - `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN; cancellation is missing hosted acceptance, not source GREEN. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality; current hosted acceptance remains incomplete and predecessor evidence does not transfer. - `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and is **source RED before hosted acceptance**. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still call `materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci"`, co-locating trusted binder/runtime with the consumer root and masking a regression to consumer-controlled binder resolution. One unresolved Major current-head review thread independently requires the same complete matrix repair. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions; a representative-only extra fixture is not sufficient. @@ -67,19 +67,20 @@ Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft p Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.32 material contract +## 4. UI Localization Catalog — v2.33 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`2bc067e7b0a98b1d35630e77623e55bc9594992b`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`b1808593ca9ac147c06d8c6d1cc3ac0d0ed5efb2`**. #1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Five ordinary-forward RED→repair sequences define the executable policy: +Six ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). 3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. 4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to SP/HTAB, and replaces broad stripping with explicit ASCII normalization. -5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. Doctoring/TRACEABILITY is current at `2bc067e7...`. +5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. +6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` proves blind `tuple(placeholder_schema)` coercion lets `None` escape as raw `TypeError` and lets a one-key mapping masquerade as a valid schema by iterating its key. Causal fix `92a50acef8c7a3fbb38a926994add1641ac6c49d` validates the declared tuple/list container before conversion and emits `ui_placeholder_schema_invalid` for invalid containers. Doctoring/TRACEABILITY is current at `b1808593...`. Current localization invariants: @@ -87,10 +88,11 @@ Current localization invariants: - `Accept-Language`: reject C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; VT, FF, NBSP and other Unicode whitespace are not protocol OWS; - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; - boundary-specific stable validation codes are preserved; +- placeholder schemas are tuple/list runtime collections of unique lowercase names; mappings, generators, scalars, `None` and other arbitrary iterables fail closed rather than inheriting Python iteration semantics; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The fifth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime cannot execute the repository stack. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The sixth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. From 5027b60317e09b73207e1cfb081f328d6a1c1328 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 04:46:40 +0900 Subject: [PATCH 51/89] docs(gap): add translation text persistence boundary --- docs/product-technical-gap-baseline.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 91b1dcc62..0244bcccd 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.33 +**Baseline version:** 2.34 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.32 remains audit-visible as blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.33 remains audit-visible as blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advances the durable localization publication boundary: placeholder schemas are declared tuple/list collections, and arbitrary runtime iterables must not be silently coerced into versioned publication metadata or escape typed validation. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advances the durable translation-text persistence boundary: catalog text must reject PostgreSQL-incompatible U+0000 and non-scalar surrogate code points before placeholder parsing and must preserve a stable translation-input validation identity rather than leaking database/codec failures. ## 1. Evidence hierarchy and release posture @@ -67,20 +67,21 @@ Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft p Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.33 material contract +## 4. UI Localization Catalog — v2.34 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`b1808593ca9ac147c06d8c6d1cc3ac0d0ed5efb2`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`5d7056b15041e254bf2a6e33c70272534af7a7ea`**. -#1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +#1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Six ordinary-forward RED→repair sequences define the executable policy: +Seven ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). 3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. 4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to SP/HTAB, and replaces broad stripping with explicit ASCII normalization. 5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. -6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` proves blind `tuple(placeholder_schema)` coercion lets `None` escape as raw `TypeError` and lets a one-key mapping masquerade as a valid schema by iterating its key. Causal fix `92a50acef8c7a3fbb38a926994add1641ac6c49d` validates the declared tuple/list container before conversion and emits `ui_placeholder_schema_invalid` for invalid containers. Doctoring/TRACEABILITY is current at `b1808593...`. +6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` proves blind `tuple(placeholder_schema)` coercion lets `None` escape as raw `TypeError` and lets a one-key mapping masquerade as a valid schema by iterating its key. Causal fix `92a50acef8c7a3fbb38a926994add1641ac6c49d` validates the declared tuple/list container before conversion and emits `ui_placeholder_schema_invalid` for invalid containers. +7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` pins leading/trailing U+0000, isolated high/low surrogate code points, non-string translation input and valid multiline Unicode. Causal fix `dec6c694dcf930ef184b158de04260d8db433bec` adds `ui_translation_input_invalid` and rejects PostgreSQL-incompatible NUL plus non-scalar surrogate code points before placeholder parsing. Doctoring `8d7bae267c9b7d3cd640fece9d2d43173ebfc867` records PostgreSQL 18 and Unicode 18 primary authority; `5d7056b1...` aligns the pre-existing canonical regression with the new typed input boundary. Current localization invariants: @@ -88,13 +89,14 @@ Current localization invariants: - `Accept-Language`: reject C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; VT, FF, NBSP and other Unicode whitespace are not protocol OWS; - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; - boundary-specific stable validation codes are preserved; +- translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; - placeholder schemas are tuple/list runtime collections of unique lowercase names; mappings, generators, scalars, `None` and other arbitrary iterables fail closed rather than inheriting Python iteration semantics; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The sixth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The seventh repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. -Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. +Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. Buyer UI acceptance remains required for KO/EN/JA/ZH/VI/ES/DE/FR across normal/loading/empty/error/permission states, CJK wrapping/font fallback, Latin-script expansion/diacritics, keyboard/focus/touch/AT, responsive widths and exact-version screenshots. #1729 remains the bounded OIDC pending-interaction owner and may consume localization only after a released screen-resource contract exists. @@ -114,6 +116,6 @@ Generated descendants are re-read every run. When they duplicate an existing own The current minimum causal sequence is: -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 `5d7056b1...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. From 12ec9f21404ebba05cd7df1565646a1b794c4cd0 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 05:44:52 +0900 Subject: [PATCH 52/89] docs(gap): record placeholder element validation boundary --- docs/product-technical-gap-baseline.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 0244bcccd..bd77e2d74 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.34 +**Baseline version:** 2.35 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.33 remains audit-visible as blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.34 remains audit-visible as blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advances the durable translation-text persistence boundary: catalog text must reject PostgreSQL-incompatible U+0000 and non-scalar surrogate code points before placeholder parsing and must preserve a stable translation-input validation identity rather than leaking database/codec failures. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advances the placeholder-element validation ordering: collection elements must be validated as valid string names before hash-based duplicate detection so unhashable nested values cannot leak raw runtime exceptions past the localization boundary. ## 1. Evidence hierarchy and release posture @@ -67,13 +67,13 @@ Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft p Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.34 material contract +## 4. UI Localization Catalog — v2.35 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`5d7056b15041e254bf2a6e33c70272534af7a7ea`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`05c00ca9c48ba995e531200405e30f6eb0fb5f6a`**. #1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Seven ordinary-forward RED→repair sequences define the executable policy: +Eight ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). @@ -82,6 +82,7 @@ Seven ordinary-forward RED→repair sequences define the executable policy: 5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. 6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` proves blind `tuple(placeholder_schema)` coercion lets `None` escape as raw `TypeError` and lets a one-key mapping masquerade as a valid schema by iterating its key. Causal fix `92a50acef8c7a3fbb38a926994add1641ac6c49d` validates the declared tuple/list container before conversion and emits `ui_placeholder_schema_invalid` for invalid containers. 7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` pins leading/trailing U+0000, isolated high/low surrogate code points, non-string translation input and valid multiline Unicode. Causal fix `dec6c694dcf930ef184b158de04260d8db433bec` adds `ui_translation_input_invalid` and rejects PostgreSQL-incompatible NUL plus non-scalar surrogate code points before placeholder parsing. Doctoring `8d7bae267c9b7d3cd640fece9d2d43173ebfc867` records PostgreSQL 18 and Unicode 18 primary authority; `5d7056b1...` aligns the pre-existing canonical regression with the new typed input boundary. +8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` proves a declared tuple/list schema can still contain an unhashable nested list or mapping and leak raw `TypeError` because `set(schema)` ran before element validation. Causal fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2` validates every element as a simple string name before hash-based duplicate detection; doctoring `05c00ca9c48ba995e531200405e30f6eb0fb5f6a` records the ordering invariant. Current localization invariants: @@ -90,11 +91,11 @@ Current localization invariants: - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; - boundary-specific stable validation codes are preserved; - translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; -- placeholder schemas are tuple/list runtime collections of unique lowercase names; mappings, generators, scalars, `None` and other arbitrary iterables fail closed rather than inheriting Python iteration semantics; +- placeholder schemas are tuple/list runtime collections of unique lowercase names; mappings, generators, scalars, `None` and other arbitrary containers fail closed, and collection elements are validated before hash-based uniqueness so nested unhashable values also fail with `ui_placeholder_schema_invalid` rather than raw Python exceptions; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The seventh repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The eighth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. @@ -116,6 +117,6 @@ Generated descendants are re-read every run. When they duplicate an existing own The current minimum causal sequence is: -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 `5d7056b1...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 `05c00ca9...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. -Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. +Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. \ No newline at end of file From 9487e33d6b1bfd7fcbf14f2fcfff7bd725f797c4 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 06:48:53 +0900 Subject: [PATCH 53/89] docs(gap): advance canonical owner and localization baseline v2.36 --- docs/product-technical-gap-baseline.md | 70 ++++++++++++++------------ 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index bd77e2d74..46a79021d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,21 +1,21 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.35 +**Baseline version:** 2.36 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.34 remains audit-visible as blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.35 remains audit-visible as blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advances the placeholder-element validation ordering: collection elements must be validated as valid string names before hash-based duplicate detection so unhashable nested values cannot leak raw runtime exceptions past the localization boundary. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 adds the product-default runtime type boundary and refreshes the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. ## 1. Evidence hierarchy and release posture When evidence conflicts, use this order: exact protected-branch code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. -Fresh repository inventory at this observation is **289 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. +Fresh repository inventory at this observation is **291 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact integrated protected head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. @@ -28,10 +28,9 @@ Protected central authority remains `ContextualWisdomLab/.github/main@e6334e2295 - `.github#712` remains the sole Actions execution-capacity owner. Runner queue/running state is volatile and must be read from GitHub before any acceptance decision. No blind rerun, source-neutral wake commit or required-check weakening is permitted. - `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN; cancellation is missing hosted acceptance, not source GREEN. - `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality; current hosted acceptance remains incomplete and predecessor evidence does not transfer. -- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` is the canonical Strix trusted-runtime/evidence-binder owner and is **source RED before hosted acceptance**. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still call `materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci"`, co-locating trusted binder/runtime with the consumer root and masking a regression to consumer-controlled binder resolution. One unresolved Major current-head review thread independently requires the same complete matrix repair. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions; a representative-only extra fixture is not sufficient. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` remains the Draft/Ready + stacked-base heavy-workflow admission successor. Its live base has advanced to #2291 `a8d6261d...`, so it is intentionally diverged and must ordinary/non-force adopt the repaired owner after #2291 completes. Same-tree Ready-generation / Draft-withdrawal evidence proves lifecycle shape only, not hosted GREEN. -- `.github#2271`, `#2275`, `#2276` retain repository-identity, GHAS analysis-capability and unchanged-target permission/canary boundaries respectively. #2275 must reacquire its own Python Security/Runtime Quality after the stacked-base admission contract is protected; capability selection cannot manufacture target-repository permission. -- `.github#2272` remains the separate Pages/SAST descendant on #2291 and must consume the completed Strix owner repair instead of copying it. +- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` remains source RED before hosted acceptance. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still co-locate trusted binder/runtime with the consumer root. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions. +- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` remains the dependent stacked-admission successor and must ordinary/non-force adopt the repaired #2291 owner after that repair is complete. +- `.github#2271`, `#2275`, `#2276` retain repository-identity, GHAS analysis-capability and unchanged-target permission/canary boundaries; `.github#2272` remains the separate Pages/SAST descendant on #2291. Naruon does not copy central reusable-workflow source. Consumer PRs wait fail-closed for accepted/released owner contracts and ordinary-restack afterward. @@ -39,63 +38,68 @@ Naruon does not copy central reusable-workflow source. Consumer PRs wait fail-cl ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open/mergeable. Its source carries `next`/`eslint-config-next 16.3.4`, `sharp 0.35.4` resolution and security-floor regressions. Its historical exact-head six-workflow GREEN and approval do not prove safety against the current vulnerability database. Later Trivy observations in #1718/#1682 and #1733 predecessor Security Scan `35450922558` require current-base/current-database revalidation in #1623 rather than dependency patches in feature PRs. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Historical exact-head GREEN does not prove safety against the current vulnerability database; dependency/security changes remain owned here rather than in feature PRs. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is the broader backend dependency descendant and must reconcile losslessly onto #1565 while preserving its distinct security-material dependency changes and one coherent resolver-produced lock graph. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`. Its source/test/doctoring delta is separate from inherited dependency Security RED, which is routed to #1623. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`; inherited dependency Security RED is routed to #1623. -### 3.2 Migration/workspace ownership +### 3.2 Migration/workspace ownership and opaque UID entropy [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage remains: `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. -#1503 is Draft. The final integrated generation still depends on central execution/admission repair, #1623 current vulnerability revalidation, fresh-bootstrap owner #1694 and repository-local stacked admission owner #1691. Descendants must not create parallel Alembic heads from protected `develop`. +#1503 is Draft. Descendants must not create parallel Alembic heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the opaque-UID backfill entropy owner on #1503. Generated #1736 is provenance only. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing `prompt_uid`, WebDAV `source_uid`, and `folder_uid`, its focused entropy regression, corrected Bandit/severity diagnosis, and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. + +Generated #1743 started directly from `develop`, duplicated the same source repair, edited the historical `0003_prompt_template_scope` migration plus bootstrap source and asserted CRITICAL/authentication-bypass impact without #1727's narrower owner contract. It has been ordinary/non-force converged: `b4867a85c4b53f4155136abf9fcd68ae84f6a1a1` preserves the generated predecessor as first-parent history, adopts #1727 exact tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto #1727 and leaves **0 changed files / 0 additions / 0 deletions**. #1743 is Draft provenance, not a parallel security/migration owner. ### 3.3 NetworkGraph/performance ownership -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `cd6f6d545fe860215d9f6f04b549520f31f68b0e`, tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`. It restores per-iterator read-count and process-global `Map.prototype.values` cleanup contracts after an intervening cross-owner regression. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner. A fresh intervening commit `b2766686624ec1f35d4dbc523a2c35d763e8c717` again mixed unrelated CHANGELOG/dependency-lock/security-test changes and rewrote the bounded-options regression after prior repair `cd6f6d545fe860215d9f6f04b549520f31f68b0e`. Ordinary child **`0eb4b6dc5264db8568fd2a54adde9a91feb3cece`** restores canonical tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`; current effective scope is again only `NetworkGraph.tsx` and `NetworkGraph.bounded-options.test.tsx`. + +[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the separate first-five non-empty label-summary child. Sparse-label traversal can remain O(N); only result storage is bounded. #1674 remains zero-effective-delta provenance and #1675 remains the memoization owner. -[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the first-five non-empty label-summary child at exact `8786c6e9923a90b7d43ad5439c096ef0f0556148`. Sparse-label traversal can remain O(N); only result storage is bounded. #1674 remains zero-effective-delta provenance and #1675 remains the memoization owner at exact `059481ed9fafb34925d33df2106dcc15cc76268e`. +Generated #1742 directly reimplemented #1593's relationship/node bounded loops from protected `develop` and repeated an unsupported end-to-end `O(1)`/`O(K)` claim. It has been ordinary/non-force converged: `05c0b87f79b9e49416a0316f1cc91075c9a1e574` preserves generated history, adopts current #1593 canonical tree, retargets onto #1593 and leaves **0 changed files / 0 additions / 0 deletions**. #1742 is Draft provenance. Generated receipts do not transfer. -Generated NetworkGraph lanes, including #1741 and repaired #1734, remain Draft provenance after ordinary/non-force convergence to their canonical owner trees. Generated receipts do not transfer and unsupported O(1)/buyer-p95 claims are not accepted. +Generated NetworkGraph lanes remain Draft provenance after ordinary/non-force convergence to their canonical owner trees. If a canonical owner moves, descendants must re-read intervening deltas and follow the current owner without force-rewrite. ### 3.4 Checksum/data-hygiene Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.35 material contract +## 4. UI Localization Catalog — v2.36 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`05c00ca9c48ba995e531200405e30f6eb0fb5f6a`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`cf10a222d55fc27e49b28b7a9fb55f4d31a349aa`**. -#1740 still owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Eight ordinary-forward RED→repair sequences define the executable policy: +Nine ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). 3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. -4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` proves that generic Python `str.strip()` and regex `\s` are broader than HTTP OWS. Causal fix `9a6c8bb04be237c968b58987ca6ac4efb789a482` rejects C0/DEL at explicit-locale boundaries, permits HTAB only in the HTTP boundary where OWS allows it, restricts OWS parsing to SP/HTAB, and replaces broad stripping with explicit ASCII normalization. -5. **RFC 9110 quality-parameter case repair**: the standard explicitly defines the content-negotiation parameter name `q` as case-insensitive, while the implementation matched lowercase `q=` only. RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` pins `Q=` semantics at two ordering points. Causal fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15` narrows the change to `[qQ]=` while preserving the existing qvalue and OWS grammar. -6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` proves blind `tuple(placeholder_schema)` coercion lets `None` escape as raw `TypeError` and lets a one-key mapping masquerade as a valid schema by iterating its key. Causal fix `92a50acef8c7a3fbb38a926994add1641ac6c49d` validates the declared tuple/list container before conversion and emits `ui_placeholder_schema_invalid` for invalid containers. -7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` pins leading/trailing U+0000, isolated high/low surrogate code points, non-string translation input and valid multiline Unicode. Causal fix `dec6c694dcf930ef184b158de04260d8db433bec` adds `ui_translation_input_invalid` and rejects PostgreSQL-incompatible NUL plus non-scalar surrogate code points before placeholder parsing. Doctoring `8d7bae267c9b7d3cd640fece9d2d43173ebfc867` records PostgreSQL 18 and Unicode 18 primary authority; `5d7056b1...` aligns the pre-existing canonical regression with the new typed input boundary. -8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` proves a declared tuple/list schema can still contain an unhashable nested list or mapping and leak raw `TypeError` because `set(schema)` ran before element validation. Causal fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2` validates every element as a simple string name before hash-based duplicate detection; doctoring `05c00ca9c48ba995e531200405e30f6eb0fb5f6a` records the ordering invariant. +4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` → fix `9a6c8bb04be237c968b58987ca6ac4efb789a482`; protocol OWS is SP/HTAB, not Python's broader whitespace set. +5. **RFC 9110 quality-parameter case repair**: RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` → fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15`; `q=` and `Q=` have identical parameter-name semantics while qvalue grammar remains strict. +6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` → fix `92a50acef8c7a3fbb38a926994add1641ac6c49d`; runtime schema containers are tuple/list only. +7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` → fix `dec6c694dcf930ef184b158de04260d8db433bec`; NUL, surrogate and non-string translation input fail before persistence/placeholder parsing with `ui_translation_input_invalid`. +8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` → fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2`; every element is validated before `set(...)` duplicate detection so nested unhashable values cannot leak raw `TypeError`. +9. **Product-default runtime boundary repair**: RED `652137bd5b4fae436af207d8823a4e6e5122b8a0` proves list/mapping `product_default` values reach frozenset membership and leak raw unhashable `TypeError`. Causal fix `f079bb270aadb2748937d5491b718e87b4198834` validates runtime string type before membership and preserves `ui_locale_unsupported`; doctoring `cf10a222d55fc27e49b28b7a9fb55f4d31a349aa` records this as an internal product/runtime invariant. Current localization invariants: -- explicit persisted/session locale: reject C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; -- `Accept-Language`: reject C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; VT, FF, NBSP and other Unicode whitespace are not protocol OWS; +- explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; +- `Accept-Language` rejects C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; -- boundary-specific stable validation codes are preserved; +- `product_default` is runtime-validated as a string before supported-locale set membership, so malformed/unhashable values fail with `ui_locale_unsupported` instead of raw Python exceptions; - translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; -- placeholder schemas are tuple/list runtime collections of unique lowercase names; mappings, generators, scalars, `None` and other arbitrary containers fail closed, and collection elements are validated before hash-based uniqueness so nested unhashable values also fail with `ui_placeholder_schema_invalid` rather than raw Python exceptions; +- placeholder schemas are tuple/list runtime collections of unique lowercase names; arbitrary containers fail closed and elements are validated before hash-based uniqueness; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The eighth repair has executable regression source, but **no local/container PASS is claimed** because the current automation runtime does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The ninth repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. @@ -117,6 +121,6 @@ Generated descendants are re-read every run. When they duplicate an existing own The current minimum causal sequence is: -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503/#1727 migration lineage → #1740 `05c00ca9...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `cf10a222...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. -Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. \ No newline at end of file +Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. From 4268b32adad76cc0c635ea1611b13809fd610020 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 07:45:58 +0900 Subject: [PATCH 54/89] docs(gap): record Accept-Language list recipient contract --- docs/product-technical-gap-baseline.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 46a79021d..7716f37c5 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.36 +**Baseline version:** 2.37 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.35 remains audit-visible as blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.36 remains audit-visible as blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 adds the product-default runtime type boundary and refreshes the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 added the product-default runtime type boundary and refreshed the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. **v2.37 adds RFC 9110 recipient-side empty-list handling for the list-based `Accept-Language` field and advances the pure-policy owner to exact #1740 `8450a94d8f67ee704f126daca8fc838a3c5e5981`.** ## 1. Evidence hierarchy and release posture @@ -70,13 +70,13 @@ Generated NetworkGraph lanes remain Draft provenance after ordinary/non-force co Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.36 material contract +## 4. UI Localization Catalog — v2.37 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`cf10a222d55fc27e49b28b7a9fb55f4d31a349aa`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`8450a94d8f67ee704f126daca8fc838a3c5e5981`**. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Nine ordinary-forward RED→repair sequences define the executable policy: +Ten ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). @@ -87,19 +87,21 @@ Nine ordinary-forward RED→repair sequences define the executable policy: 7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` → fix `dec6c694dcf930ef184b158de04260d8db433bec`; NUL, surrogate and non-string translation input fail before persistence/placeholder parsing with `ui_translation_input_invalid`. 8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` → fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2`; every element is validated before `set(...)` duplicate detection so nested unhashable values cannot leak raw `TypeError`. 9. **Product-default runtime boundary repair**: RED `652137bd5b4fae436af207d8823a4e6e5122b8a0` proves list/mapping `product_default` values reach frozenset membership and leak raw unhashable `TypeError`. Causal fix `f079bb270aadb2748937d5491b718e87b4198834` validates runtime string type before membership and preserves `ui_locale_unsupported`; doctoring `cf10a222d55fc27e49b28b7a9fb55f4d31a349aa` records this as an internal product/runtime invariant. +10. **RFC 9110 list-recipient repair**: RED `20a7475c190585a1f94d34bd19c363f97dcc4e81` proves the parser rejects empty list elements in values such as `, fr;q=0.4, , en;q=0.8,` and an all-empty `,` field. Causal fix `eff473a04fd8cca5d76396c36ff0c1dbf3a033f6` ignores empty members before language-range matching, as RFC 9110 §5.6.1.2 requires recipients to do for a reasonable number of empty list elements. Empty members add no preference, do not become wildcards, and an all-empty list falls through to the existing product-default tier. Doctoring `8450a94d8f67ee704f126daca8fc838a3c5e5981` records the standard mapping and keeps the decision Proposed. Current localization invariants: - explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; - `Accept-Language` rejects C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; +- list recipients ignore a reasonable number of empty comma members rather than treating them as syntax errors or preference values; an all-empty list contributes no negotiated preference; - `product_default` is runtime-validated as a string before supported-locale set membership, so malformed/unhashable values fail with `ui_locale_unsupported` instead of raw Python exceptions; - translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; - placeholder schemas are tuple/list runtime collections of unique lowercase names; arbitrary containers fail closed and elements are validated before hash-based uniqueness; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The ninth repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Exact-head workflow state is authoritative in #1740/checks and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The tenth repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Immediately after exact doctoring `8450a94d...`, the exact-head pull-request workflow inventory was empty and formal review inventory was `[]`; workflow/review state remains volatile and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. @@ -121,6 +123,6 @@ Generated descendants are re-read every run. When they duplicate an existing own The current minimum causal sequence is: -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `cf10a222...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `8450a94d...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. From fe6262f0a247b5588ddc3c9d3e80758accf540d7 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 08:47:40 +0900 Subject: [PATCH 55/89] docs(gap): record bounded Accept-Language tolerance --- docs/product-technical-gap-baseline.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 7716f37c5..dbcbb4a5d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.37 +**Baseline version:** 2.38 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.36 remains audit-visible as blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.37 remains audit-visible as blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 added the product-default runtime type boundary and refreshed the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. **v2.37 adds RFC 9110 recipient-side empty-list handling for the list-based `Accept-Language` field and advances the pure-policy owner to exact #1740 `8450a94d8f67ee704f126daca8fc838a3c5e5981`.** +v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 added the product-default runtime type boundary and refreshed the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. v2.37 added RFC 9110 recipient-side empty-list handling for the list-based `Accept-Language` field. **v2.38 bounds that recipient tolerance so the robustness rule cannot become an attacker-controlled denial-of-service loop and advances the pure-policy owner to exact #1740 `d5588459d21b82fb1b84032001c0997b632507e4`.** ## 1. Evidence hierarchy and release posture @@ -70,13 +70,13 @@ Generated NetworkGraph lanes remain Draft provenance after ordinary/non-force co Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. -## 4. UI Localization Catalog — v2.37 material contract +## 4. UI Localization Catalog — v2.38 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`8450a94d8f67ee704f126daca8fc838a3c5e5981`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`d5588459d21b82fb1b84032001c0997b632507e4`**. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Ten ordinary-forward RED→repair sequences define the executable policy: +Eleven ordinary-forward RED→repair sequences define the executable policy: 1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. 2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). @@ -87,21 +87,22 @@ Ten ordinary-forward RED→repair sequences define the executable policy: 7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` → fix `dec6c694dcf930ef184b158de04260d8db433bec`; NUL, surrogate and non-string translation input fail before persistence/placeholder parsing with `ui_translation_input_invalid`. 8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` → fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2`; every element is validated before `set(...)` duplicate detection so nested unhashable values cannot leak raw `TypeError`. 9. **Product-default runtime boundary repair**: RED `652137bd5b4fae436af207d8823a4e6e5122b8a0` proves list/mapping `product_default` values reach frozenset membership and leak raw unhashable `TypeError`. Causal fix `f079bb270aadb2748937d5491b718e87b4198834` validates runtime string type before membership and preserves `ui_locale_unsupported`; doctoring `cf10a222d55fc27e49b28b7a9fb55f4d31a349aa` records this as an internal product/runtime invariant. -10. **RFC 9110 list-recipient repair**: RED `20a7475c190585a1f94d34bd19c363f97dcc4e81` proves the parser rejects empty list elements in values such as `, fr;q=0.4, , en;q=0.8,` and an all-empty `,` field. Causal fix `eff473a04fd8cca5d76396c36ff0c1dbf3a033f6` ignores empty members before language-range matching, as RFC 9110 §5.6.1.2 requires recipients to do for a reasonable number of empty list elements. Empty members add no preference, do not become wildcards, and an all-empty list falls through to the existing product-default tier. Doctoring `8450a94d8f67ee704f126daca8fc838a3c5e5981` records the standard mapping and keeps the decision Proposed. +10. **RFC 9110 list-recipient repair**: RED `20a7475c190585a1f94d34bd19c363f97dcc4e81` proves the parser rejects empty list elements in values such as `, fr;q=0.4, , en;q=0.8,` and an all-empty `,` field. Causal fix `eff473a04fd8cca5d76396c36ff0c1dbf3a033f6` ignores empty members before language-range matching, as RFC 9110 §5.6.1.2 requires recipients to do for a reasonable number of empty list elements. Empty members add no preference, do not become wildcards, and an all-empty list falls through to the existing product-default tier. +11. **RFC 9110 bounded-empty-list repair**: RED `7a68f034ef817abdad2c5744d8cbf4d0cf65ce03` proves the tenth repair interpreted “reasonable number” as unlimited even though RFC 9110 §5.6.1.2 explicitly warns recipients not to accept so many empty elements that the list can be used as a denial-of-service mechanism. Causal fix `b88aff67897bed9a533d21987d2db2618144b850` counts empty members, accepts through 32, and rejects the 33rd with `ui_accept_language_invalid`; doctoring `d5588459d21b82fb1b84032001c0997b632507e4` records that 32 is a reproducible Naruon product bound, not an RFC-defined constant. Current localization invariants: - explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; - `Accept-Language` rejects C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; - `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; -- list recipients ignore a reasonable number of empty comma members rather than treating them as syntax errors or preference values; an all-empty list contributes no negotiated preference; +- list recipients ignore at most 32 empty comma members under the current product bound; the 33rd fails with `ui_accept_language_invalid`. Empty members are never preference values, and an all-empty list within the bound contributes no negotiated preference; - `product_default` is runtime-validated as a string before supported-locale set membership, so malformed/unhashable values fail with `ui_locale_unsupported` instead of raw Python exceptions; - translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; - placeholder schemas are tuple/list runtime collections of unique lowercase names; arbitrary containers fail closed and elements are validated before hash-based uniqueness; - once a locale is selected, missing active translation keys must fail rather than silently fall back per message; - UI-copy resources remain separate from ontology/concept-label authority. -The tenth repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Immediately after exact doctoring `8450a94d...`, the exact-head pull-request workflow inventory was empty and formal review inventory was `[]`; workflow/review state remains volatile and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +The eleventh repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Exact-head workflow/review state remains volatile and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. @@ -123,6 +124,6 @@ Generated descendants are re-read every run. When they duplicate an existing own The current minimum causal sequence is: -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `8450a94d...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `d5588459...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. -Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. +Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. \ No newline at end of file From 0df6f0910ea36a384650c22c2dcf6c9686ed9d6a Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 09:44:05 +0900 Subject: [PATCH 56/89] docs(gap): baseline v2.39 RFC 4647 wildcard authority --- docs/product-technical-gap-baseline.md | 113 +++++++++++-------------- 1 file changed, 50 insertions(+), 63 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index dbcbb4a5d..9db17305b 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,21 +1,21 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.38 +**Baseline version:** 2.39 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.37 remains audit-visible as blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`; v2.33 remains blob `91b1dcc62409da0720823f136af204ddb97b8829`; v2.32 remains blob `26a92eccb1e5479aef443ce278f293bf01a684b7`; v2.31 remains blob `560fe59c120171492eb113a08ce3ee95c2fdae52`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.38 remains audit-visible as blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.31 separated durable product/evidence contracts from volatile per-run workflow state. v2.32 advanced the RFC 9110 case-insensitive `q` parameter contract. v2.33 advanced the placeholder-schema container boundary. v2.34 advanced the translation-text persistence boundary. v2.35 advanced placeholder-element validation ordering. v2.36 added the product-default runtime type boundary and refreshed the live owner graph after generated #1742/#1743 and a new intervening #1593 regression were ordinary/non-force converged to their canonical owners. v2.37 added RFC 9110 recipient-side empty-list handling for the list-based `Accept-Language` field. **v2.38 bounds that recipient tolerance so the robustness rule cannot become an attacker-controlled denial-of-service loop and advances the pure-policy owner to exact #1740 `d5588459d21b82fb1b84032001c0997b632507e4`.** +v2.39 advances one durable localization contract: RFC 4647 wildcard lookup control flow must preserve later concrete language ranges even when the current Naruon release does not support those ranges. Draft #1740 is advanced to exact `91d0b0a17a0492231e0d5bdfa163eb746837e8da`; RED `2ebe9758cb915841d86330bbabcd618f3f091d71` proves the old parser erased `pt-BR` too early for `*;q=0.9, pt-BR;q=0.8`, and causal fix `1664d9707d4b5b9366b422f8faf612418ecd7789` retains positive concrete-range ordering metadata before release-locale filtering. The selected locale remains `ko`, but the truthful authority becomes `product_default`, not `accept_language`. Focused TRACEABILITY is committed at exact `91d0b0a1...`. ## 1. Evidence hierarchy and release posture When evidence conflicts, use this order: exact protected-branch code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. -Fresh repository inventory at this observation is **291 open PRs / 75 open Issues**. Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Rulesets `18156473` (`CWL Central required workflows`), `17214772` (`Lock default branch`) and `15586698` (`PR`) are active. +Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Active rulesets and live PR/Issue inventory must be re-read before acceptance; volatile queue and workflow telemetry is never frozen into this baseline. Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact integrated protected head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. @@ -23,28 +23,27 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu ## 2. Central CI/security control plane -Protected central authority remains `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71`, the protected merge of #2279. +Protected central `.github/main` is the authority for reusable CI/review/security/release workflows. Naruon consumes accepted/released owner contracts and does not copy central workflow source. -- `.github#712` remains the sole Actions execution-capacity owner. Runner queue/running state is volatile and must be read from GitHub before any acceptance decision. No blind rerun, source-neutral wake commit or required-check weakening is permitted. -- `.github#1911@c965664a6d7fe0b75bf7ea019a9059220a32f06b` remains the canonical repository-wide/full-suite Trusted-uv owner. Its current hosted acceptance is not GREEN; cancellation is missing hosted acceptance, not source GREEN. -- `.github#2040@bd039185ddf8df88480971cdd3b69c38f4558609` has losslessly converged the Trusted-uv files through #1911. Its remaining owner scope is CodeQL scheduler/credential/runtime-quality; current hosted acceptance remains incomplete and predecessor evidence does not transfer. -- `.github#2291@a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081` remains source RED before hosted acceptance. Exact RED `tests/test_strix_trusted_fixture_boundary.py` enumerates 24 specialized fixtures that still co-locate trusted binder/runtime with the consumer root. Acceptance requires all 24 affected fixture families to use a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots and preserved scenario assertions. -- `.github#2109@42e3f7a8cbb03b117c898d3e125af87a5c6ce86b` remains the dependent stacked-admission successor and must ordinary/non-force adopt the repaired #2291 owner after that repair is complete. -- `.github#2271`, `#2275`, `#2276` retain repository-identity, GHAS analysis-capability and unchanged-target permission/canary boundaries; `.github#2272` remains the separate Pages/SAST descendant on #2291. +- `.github#712` is the Actions execution-capacity owner. Queue/running state is volatile and must be read live. No blind rerun, source-neutral wake commit or required-check weakening is permitted. +- `.github#1911` remains the canonical repository-wide/full-suite Trusted-uv owner; legitimate terminal hosted acceptance is still required. +- `.github#2040` has converged Trusted-uv ownership through #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope; predecessor or cancelled generations are not acceptance. +- `.github#2291` remains source RED until all 24 specialized Strix fixture families stop materializing trusted binder/runtime into the consumer root. Acceptance requires non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots, preserved scenario assertions and exact-head hosted/review evidence. +- `.github#2109` is the dependent stacked-admission successor and must ordinary/non-force adopt repaired #2291. `.github#2272` remains its separate Pages/SAST descendant. `.github#2271/#2275/#2276` retain repository-identity, GHAS analysis-capability and real target permission/canary boundaries. -Naruon does not copy central reusable-workflow source. Consumer PRs wait fail-closed for accepted/released owner contracts and ordinary-restack afterward. +No Naruon product lane may reinterpret incomplete central hosted evidence as product GREEN. ## 3. Product source-owner graph ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Historical exact-head GREEN does not prove safety against the current vulnerability database; dependency/security changes remain owned here rather than in feature PRs. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Its historical exact-head GREEN does not prove safety against the current vulnerability database. Current Trivy/CodeQL revalidation belongs here rather than in feature PRs. [#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner at exact `2b47bc7b57732d0dbe00db1ba498b49cdb512e8b`; inherited dependency Security RED is routed to #1623. +[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner; inherited dependency Security RED is routed to #1623. -### 3.2 Migration/workspace ownership and opaque UID entropy +### 3.2 Migration/workspace and opaque UID ownership [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage remains: @@ -52,78 +51,66 @@ Naruon does not copy central reusable-workflow source. Consumer PRs wait fail-cl #1503 is Draft. Descendants must not create parallel Alembic heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing `prompt_uid`, WebDAV `source_uid`, and `folder_uid`, its focused entropy regression, corrected Bandit/severity diagnosis, and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing public UIDs, focused entropy regression, corrected Bandit/severity diagnosis and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. -Generated #1743 started directly from `develop`, duplicated the same source repair, edited the historical `0003_prompt_template_scope` migration plus bootstrap source and asserted CRITICAL/authentication-bypass impact without #1727's narrower owner contract. It has been ordinary/non-force converged: `b4867a85c4b53f4155136abf9fcd68ae84f6a1a1` preserves the generated predecessor as first-parent history, adopts #1727 exact tree `ea5333fbf6949573a7a99ddb3e1f0439d81bdad8`, retargets onto #1727 and leaves **0 changed files / 0 additions / 0 deletions**. #1743 is Draft provenance, not a parallel security/migration owner. +Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero-effective-delta provenance. It must not become a parallel migration/security owner. -### 3.3 NetworkGraph/performance ownership +### 3.3 NetworkGraph/performance -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner. A fresh intervening commit `b2766686624ec1f35d4dbc523a2c35d763e8c717` again mixed unrelated CHANGELOG/dependency-lock/security-test changes and rewrote the bounded-options regression after prior repair `cd6f6d545fe860215d9f6f04b549520f31f68b0e`. Ordinary child **`0eb4b6dc5264db8568fd2a54adde9a91feb3cece`** restores canonical tree `ad5da38f3f6391dd4a36d8f0a2a8f6e3a251acc0`; current effective scope is again only `NetworkGraph.tsx` and `NetworkGraph.bounded-options.test.tsx`. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. Its effective scope is `NetworkGraph.tsx` plus `NetworkGraph.bounded-options.test.tsx`; unrelated dependency/security drift has been repaired ordinary-forward while retained in ancestry. -[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the separate first-five non-empty label-summary child. Sparse-label traversal can remain O(N); only result storage is bounded. #1674 remains zero-effective-delta provenance and #1675 remains the memoization owner. +[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the first-five non-empty label-summary child; #1674 remains zero-effective-delta provenance and #1675 remains memoization owner. Generated #1742 is ordinary/non-force converged to #1593 and remains zero-effective-delta provenance. Generated NetworkGraph descendants must follow current canonical owner ancestry rather than reimplement or inherit stale evidence. -Generated #1742 directly reimplemented #1593's relationship/node bounded loops from protected `develop` and repeated an unsupported end-to-end `O(1)`/`O(K)` claim. It has been ordinary/non-force converged: `05c0b87f79b9e49416a0316f1cc91075c9a1e574` preserves generated history, adopts current #1593 canonical tree, retargets onto #1593 and leaves **0 changed files / 0 additions / 0 deletions**. #1742 is Draft provenance. Generated receipts do not transfer. +### 3.4 Checksum/data hygiene -Generated NetworkGraph lanes remain Draft provenance after ordinary/non-force convergence to their canonical owner trees. If a canonical owner moves, descendants must re-read intervening deltas and follow the current owner without force-rewrite. +Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 remain outside the normal surface. #1361 remains the canonical `content_checksum_generator` owner; generated #1739 remains provenance. -### 3.4 Checksum/data-hygiene +## 4. UI Localization Catalog — v2.39 material contract -Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 are excluded from the normal surface. #1361 remains the sole `content_checksum_generator` implementation owner on #1623; generated #1739 remains zero-effective-delta provenance. - -## 4. UI Localization Catalog — v2.38 material contract - -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded implementation owner at exact **`d5588459d21b82fb1b84032001c0997b632507e4`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`91d0b0a17a0492231e0d5bdfa163eb746837e8da`**. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Eleven ordinary-forward RED→repair sequences define the executable policy: +Twelve ordinary-forward RED→repair sequences define the executable policy. The durable invariants include: + +1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; +2. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +3. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +4. RFC 9110 list recipients ignore at most 32 empty comma members under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +5. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +6. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, and never relies on incidental iterable/hashability behavior; +7. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; +8. wildcard/q=0 behavior preserves release-level supported-locale exclusions; +9. **RFC 4647 wildcard control flow preserves positive later concrete ranges even when they are unsupported by the current release.** RED `2ebe9758cb915841d86330bbabcd618f3f091d71` shows that `*;q=0.9, pt-BR;q=0.8` previously became `(ko, accept_language)` because `pt-BR` was discarded before wildcard deferral. Fix `1664d9707d4b5b9366b422f8faf612418ecd7789` retains concrete priority metadata before supported-locale filtering; the same input now reaches `(ko, product_default)`. Unsupported language ranges remain non-candidates. -1. RFC 4647 wildcard ordering and explicit `q=0` exclusion. -2. Boundary-specific control-character codes (`ui_locale_input_invalid` vs `ui_accept_language_invalid`). -3. Control rejection before normalization so leading/trailing CRLF cannot disappear through `.strip()`. -4. **RFC 9110 protocol-whitespace repair**: RED `8265e9bb08cc407c860f148f1823dd0f4ab6d13d` → fix `9a6c8bb04be237c968b58987ca6ac4efb789a482`; protocol OWS is SP/HTAB, not Python's broader whitespace set. -5. **RFC 9110 quality-parameter case repair**: RED `962e250c54d0da324ec29b21283ab0b02cd55e8c` → fix `b20b5593498c09855e6ef6fb213d9bf6ea764e15`; `q=` and `Q=` have identical parameter-name semantics while qvalue grammar remains strict. -6. **Placeholder-schema runtime boundary repair**: RED `e299d29b14943c368e581bcb3d35303a1ba3fb8f` → fix `92a50acef8c7a3fbb38a926994add1641ac6c49d`; runtime schema containers are tuple/list only. -7. **Translation-text persistence boundary repair**: RED `3e251cc253d2ccf62ec1a3209ab629c6cffbe149` → fix `dec6c694dcf930ef184b158de04260d8db433bec`; NUL, surrogate and non-string translation input fail before persistence/placeholder parsing with `ui_translation_input_invalid`. -8. **Placeholder-element validation-order repair**: RED `489bfd4fa2d6f3630cf33412f6d910d73c47e110` → fix `244cff4f8d8805f2b3eacf91a75c7da84052bfc2`; every element is validated before `set(...)` duplicate detection so nested unhashable values cannot leak raw `TypeError`. -9. **Product-default runtime boundary repair**: RED `652137bd5b4fae436af207d8823a4e6e5122b8a0` proves list/mapping `product_default` values reach frozenset membership and leak raw unhashable `TypeError`. Causal fix `f079bb270aadb2748937d5491b718e87b4198834` validates runtime string type before membership and preserves `ui_locale_unsupported`; doctoring `cf10a222d55fc27e49b28b7a9fb55f4d31a349aa` records this as an internal product/runtime invariant. -10. **RFC 9110 list-recipient repair**: RED `20a7475c190585a1f94d34bd19c363f97dcc4e81` proves the parser rejects empty list elements in values such as `, fr;q=0.4, , en;q=0.8,` and an all-empty `,` field. Causal fix `eff473a04fd8cca5d76396c36ff0c1dbf3a033f6` ignores empty members before language-range matching, as RFC 9110 §5.6.1.2 requires recipients to do for a reasonable number of empty list elements. Empty members add no preference, do not become wildcards, and an all-empty list falls through to the existing product-default tier. -11. **RFC 9110 bounded-empty-list repair**: RED `7a68f034ef817abdad2c5744d8cbf4d0cf65ce03` proves the tenth repair interpreted “reasonable number” as unlimited even though RFC 9110 §5.6.1.2 explicitly warns recipients not to accept so many empty elements that the list can be used as a denial-of-service mechanism. Causal fix `b88aff67897bed9a533d21987d2db2618144b850` counts empty members, accepts through 32, and rejects the 33rd with `ui_accept_language_invalid`; doctoring `d5588459d21b82fb1b84032001c0997b632507e4` records that 32 is a reproducible Naruon product bound, not an RFC-defined constant. +`UiLocaleSelection.selection_source` is part of product authority, not decoration. Returning the same display language with the wrong source corrupts explainability, session/persistence decisions and downstream evidence about which tier actually selected the locale. -Current localization invariants: +No local/container PASS is claimed for the current twelfth repair because this execution environment cannot obtain an exact repository checkout. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. -- explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; -- `Accept-Language` rejects C0/DEL except HTAB in valid RFC 9110 OWS positions; protocol OWS is exactly SP/HTAB; -- `q=` and `Q=` are equivalent quality-parameter spellings; qvalue syntax and range remain strict; -- list recipients ignore at most 32 empty comma members under the current product bound; the 33rd fails with `ui_accept_language_invalid`. Empty members are never preference values, and an all-empty list within the bound contributes no negotiated preference; -- `product_default` is runtime-validated as a string before supported-locale set membership, so malformed/unhashable values fail with `ui_locale_unsupported` instead of raw Python exceptions; -- translated catalog text rejects U+0000 and U+D800–U+DFFF before placeholder parsing with `ui_translation_input_invalid`; ordinary valid Unicode, line breaks and tabs remain valid copy; -- placeholder schemas are tuple/list runtime collections of unique lowercase names; arbitrary containers fail closed and elements are validated before hash-based uniqueness; -- once a locale is selected, missing active translation keys must fail rather than silently fall back per message; -- UI-copy resources remain separate from ontology/concept-label authority. +### Localization persistence/API/UI order -The eleventh repair has executable regression source, but **no local/container PASS is claimed** because the current execution environment does not contain the repository checkout needed for exact-head execution. Exact-head workflow/review state remains volatile and must be read fresh before acceptance. The baseline claims no terminal GREEN and no qualifying independent post-last-push review. No predecessor receipt transfer or source-neutral wake commit is permitted. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. -Persistence remains blocked until #1503 or a verified complete successor reaches protected ancestry. Then localization storage must create the next ordinary single-head Alembic descendant, use normalized 3NF resources, immutable published versions, translation-text/placeholder/completeness validation, short aggregate publication transactions, screen-scoped reads with ETag/version identity and no whole-catalog browser hydration. +A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. -Buyer UI acceptance remains required for KO/EN/JA/ZH/VI/ES/DE/FR across normal/loading/empty/error/permission states, CJK wrapping/font fallback, Latin-script expansion/diacritics, keyboard/focus/touch/AT, responsive widths and exact-version screenshots. #1729 remains the bounded OIDC pending-interaction owner and may consume localization only after a released screen-resource contract exists. +KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. -## 5. Other buyer-visible UI and generated-writer boundaries +## 5. Contextual Orchestrator and LLM boundary -#1682 remains the Calendar buyer-truth/detail-sidebar owner. #1463 remains the Tasks async-loading owner; generated #1735 is provenance. #1676 remains Settings native-disabled semantics owner; generated #1737 is provenance. #1354 remains the design-token precursor and #1436 the executable Storybook/runtime lineage; dependency/lock security stays with #1623. +All Naruon LLM behavior must consume an immutable released contextual-orchestrator API/client/schema contract. No mutable owner head, source copy, provider group hard-code or direct provider fallback is acceptable. Until contextual-orchestrator has a canonical release identity satisfying the product contract, dependent Naruon work such as #1549 remains fail-closed. Model-backed GitHub Actions must use the central `orchestrator/free` contract and gateway token only. -Generated #1738 remains zero-effective-delta provenance because its predecessor fabricated participant/attachment data, exposed a dead CTA and supplied static/unmounted mobile panels without authoritative state. Any valid density/mobile intent must be rebuilt through canonical mail/thread/attachment/calendar/mobile owners with actual data and lifecycle/browser/a11y evidence. +## 6. Remaining commercial/buyer-visible gaps -Generated descendants are re-read every run. When they duplicate an existing owner or delete/weaken tests, fixtures, traceability, dependency floors, buyer truth or security boundaries, repair is ordinary/non-force adoption/restack. Do not close useful history merely because effective delta becomes zero; keep provenance until the canonical owner integrates or a verified complete successor inherits all valid source/test/evidence. +The current causal order remains: -## 6. LLM/released-contract boundary +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` -#1548/#1549 remain Naruon's LLM-governance owner path. `ContextualWisdomLab/contextual-orchestrator` protected `main` remains exact `5665b0ad1e07ffb5e9f8c59e44b6b2a785298013`; GitHub Releases inventory is exactly `[]`. Naruon therefore has no immutable released CO API/client/schema identity to consume and remains fail-closed. Mutable owner head, copied provider routing or direct provider/model hard-coding is not an acceptable substitute. +Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. -## 7. Current causal order +## 7. Delivery gates -The current minimum causal sequence is: +**Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -`.github#712` stable runner acquisition → `.github#1911/#2040` legitimate terminal acceptance → **`.github#2291` complete 24-specialized-fixture trusted-runtime repair, exact-head GREEN/review/hosted acceptance** → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current vulnerability revalidation → #1694 → #1691 repository-local stacked admission → #1593 `0eb4b6dc...` exact-owner acceptance with #1742 provenance following it → #1628/#1674/#1675 and generated provenance convergence → #1361/#1739 → #1565/#1685 → #1733 → #1503 → #1727 `2ac48fb7...` with #1743 zero-delta provenance → localization migration lineage → #1740 `d5588459...` exact pure-policy acceptance → localization persistence/API/cache after #1503 protected ancestry → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → #1463/#1676 and authoritative #1738 intent → #1354/#1436 Storybook/runtime acceptance → one exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback`. +**UI Delivery Gate: FAIL.** The eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not yet integrated. -Review/check waiting blocks only the affected lane. Any genuine failure is RCA/fix/retest work, not a reason to weaken a gate. No force push, destructive rebase, self-approval, administrator bypass, source-neutral wake commit, blind rerun, mutable sibling dependency, cross-service SQL, duplicate canonical owner, parallel Alembic head, fabricated buyer-visible content, dead CTA, synthetic status or predecessor-evidence transfer is accepted. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches or source-only correctness. The next run must fresh-read all live authority before mutating or accepting any lane. From b9b7a6d0b3cce474a1620d41a63993961a3e5865 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 10:42:51 +0900 Subject: [PATCH 57/89] docs(gap): record canonical placeholder source contract --- docs/product-technical-gap-baseline.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 9db17305b..6092e23c5 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.39 +**Baseline version:** 2.40 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.38 remains audit-visible as blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`; v2.34 remains blob `0244bcccd5dfeed18d0994429a70ba6428a3076e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.39 remains audit-visible as blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.39 advances one durable localization contract: RFC 4647 wildcard lookup control flow must preserve later concrete language ranges even when the current Naruon release does not support those ranges. Draft #1740 is advanced to exact `91d0b0a17a0492231e0d5bdfa163eb746837e8da`; RED `2ebe9758cb915841d86330bbabcd618f3f091d71` proves the old parser erased `pt-BR` too early for `*;q=0.9, pt-BR;q=0.8`, and causal fix `1664d9707d4b5b9366b422f8faf612418ecd7789` retains positive concrete-range ordering metadata before release-locale filtering. The selected locale remains `ko`, but the truthful authority becomes `product_default`, not `accept_language`. Focused TRACEABILITY is committed at exact `91d0b0a1...`. +v2.40 advances one durable localization publication contract. Draft #1740 is advanced to exact `eb8fe8c43a017fed0ea029623d1380d824fd3150`; RED `8b19c7dfe43e3dca3c1e4b8980c0a9998a3aec43` proves the previous `Formatter.parse()`-based truthiness check silently treated `{account_name:}` like canonical `{account_name}` because Python represents an empty format specification as the empty string. Causal fix `6ed310e1065940fa14c258b48412490e7b98d751` preserves source-level `:`/`!` operator information before the standard parser normalizes it, and focused TRACEABILITY `eb8fe8c4...` records Python 3.14's replacement-field grammar. Versioned catalog source therefore accepts only the declared simple named-field syntax rather than semantically equivalent alternate formatter spellings. ## 1. Evidence hierarchy and release posture @@ -65,13 +65,13 @@ Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero- Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 remain outside the normal surface. #1361 remains the canonical `content_checksum_generator` owner; generated #1739 remains provenance. -## 4. UI Localization Catalog — v2.39 material contract +## 4. UI Localization Catalog — v2.40 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`91d0b0a17a0492231e0d5bdfa163eb746837e8da`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`eb8fe8c43a017fed0ea029623d1380d824fd3150`**. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Twelve ordinary-forward RED→repair sequences define the executable policy. The durable invariants include: +Thirteen ordinary-forward RED→repair sequences define the executable policy. The durable invariants include: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; @@ -81,11 +81,12 @@ Twelve ordinary-forward RED→repair sequences define the executable policy. The 6. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, and never relies on incidental iterable/hashability behavior; 7. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; 8. wildcard/q=0 behavior preserves release-level supported-locale exclusions; -9. **RFC 4647 wildcard control flow preserves positive later concrete ranges even when they are unsupported by the current release.** RED `2ebe9758cb915841d86330bbabcd618f3f091d71` shows that `*;q=0.9, pt-BR;q=0.8` previously became `(ko, accept_language)` because `pt-BR` was discarded before wildcard deferral. Fix `1664d9707d4b5b9366b422f8faf612418ecd7789` retains concrete priority metadata before supported-locale filtering; the same input now reaches `(ko, product_default)`. Unsupported language ranges remain non-candidates. +9. RFC 4647 wildcard control flow preserves positive later concrete ranges even when they are unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +10. **placeholder source syntax is canonical before parser normalization.** `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value. RED `8b19c7dfe43e3dca3c1e4b8980c0a9998a3aec43` proves the empty-format-specifier ambiguity and fix `6ed310e1065940fa14c258b48412490e7b98d751` preserves lexical `:`/`!` operator information before `Formatter.parse()`. -`UiLocaleSelection.selection_source` is part of product authority, not decoration. Returning the same display language with the wrong source corrupts explainability, session/persistence decisions and downstream evidence about which tier actually selected the locale. +Python 3.14 defines `:` as the delimiter for `format_spec` and documents that an empty format specification has default behavior. The product therefore does not use parsed semantic equivalence as publication identity; versioned source must satisfy the narrower catalog grammar. -No local/container PASS is claimed for the current twelfth repair because this execution environment cannot obtain an exact repository checkout. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. +No exact-head local/container PASS is claimed for the current thirteenth repair. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. ### Localization persistence/API/UI order From 46e831c1f1c05004a0fd14f05d74e97f153ad91b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 10:46:27 +0900 Subject: [PATCH 58/89] docs(gap): route generated Settings duplicate to canonical owner --- docs/product-technical-gap-baseline.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 6092e23c5..2eba56966 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.40 +**Baseline version:** 2.41 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.39 remains audit-visible as blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`; v2.35 remains blob `bd77e2d74834da8dc916d5979b828fe4cc200dea`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.40 remains audit-visible as blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.40 advances one durable localization publication contract. Draft #1740 is advanced to exact `eb8fe8c43a017fed0ea029623d1380d824fd3150`; RED `8b19c7dfe43e3dca3c1e4b8980c0a9998a3aec43` proves the previous `Formatter.parse()`-based truthiness check silently treated `{account_name:}` like canonical `{account_name}` because Python represents an empty format specification as the empty string. Causal fix `6ed310e1065940fa14c258b48412490e7b98d751` preserves source-level `:`/`!` operator information before the standard parser normalizes it, and focused TRACEABILITY `eb8fe8c4...` records Python 3.14's replacement-field grammar. Versioned catalog source therefore accepts only the declared simple named-field syntax rather than semantically equivalent alternate formatter spellings. +v2.41 preserves the v2.40 canonical-placeholder publication contract and records one owner-graph repair discovered after that baseline was written. Generated #1744 independently repeated #1676's Settings native-disabled semantics directly from protected `develop`; it has been ordinary/non-force converged at `e50d25580a3fa840b14855661e215a3368d8a73d` onto canonical #1676 exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, retargeted to that owner, converted to Draft, and reduced to zero effective product delta. The generated `.jules/palette.md` doctrine and weaker source-only implementation are provenance, not product authority. ## 1. Evidence hierarchy and release posture @@ -65,7 +65,13 @@ Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero- Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 remain outside the normal surface. #1361 remains the canonical `content_checksum_generator` owner; generated #1739 remains provenance. -## 4. UI Localization Catalog — v2.40 material contract +### 3.5 Settings native-disabled accessibility + +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Its bounded product tree owns the two source removals, focused `SettingsLayout.native-disabled.test.tsx` regression and standards doctoring; browser/keyboard/responsive acceptance remains a separate delivery gate. + +Generated #1716, #1737 and fresh #1744 are provenance only. #1744 started as a direct-`develop` two-line duplicate plus task-specific `.jules/palette.md`; ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves the generated history while adopting the exact #1676 tree, retargeting the PR to #1676 and leaving zero changed files. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. + +## 4. UI Localization Catalog — v2.41 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`eb8fe8c43a017fed0ea029623d1380d824fd3150`**. @@ -104,7 +110,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. From 787034f50c1923c5dd55c630902d7775dbc8f750 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 10:49:46 +0900 Subject: [PATCH 59/89] docs(gap): gate AI Hub memoization on measured evidence --- docs/product-technical-gap-baseline.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 2eba56966..68940ecd6 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.41 +**Baseline version:** 2.42 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.40 remains audit-visible as blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`; v2.36 remains blob `46a79021d3811b8e0018021a437326be19bba6df`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.41 remains audit-visible as blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.41 preserves the v2.40 canonical-placeholder publication contract and records one owner-graph repair discovered after that baseline was written. Generated #1744 independently repeated #1676's Settings native-disabled semantics directly from protected `develop`; it has been ordinary/non-force converged at `e50d25580a3fa840b14855661e215a3368d8a73d` onto canonical #1676 exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, retargeted to that owner, converted to Draft, and reduced to zero effective product delta. The generated `.jules/palette.md` doctrine and weaker source-only implementation are provenance, not product authority. +v2.42 preserves v2.41's owner-graph repair and adds one performance-evidence boundary discovered from generated #1745. #1745 exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` memoizes the `RunHistoryPanel` event-element subtree, but no realistic browser profile, stable-array trigger proof, before/after render receipt, or buyer-path p95 evidence currently supports the claimed performance improvement. The PR is therefore Draft and remains a performance hypothesis rather than accepted product progress. `useMemo` itself is not performance evidence, and task-specific `.jules/bolt.md` doctrine or decorative implementation comments are not product authority. ## 1. Evidence hierarchy and release posture @@ -69,9 +69,15 @@ Issue #1247 remains the checksum contract. Normal security-labelled checksum sur [#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Its bounded product tree owns the two source removals, focused `SettingsLayout.native-disabled.test.tsx` regression and standards doctoring; browser/keyboard/responsive acceptance remains a separate delivery gate. -Generated #1716, #1737 and fresh #1744 are provenance only. #1744 started as a direct-`develop` two-line duplicate plus task-specific `.jules/palette.md`; ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves the generated history while adopting the exact #1676 tree, retargeting the PR to #1676 and leaving zero changed files. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. +Generated #1716, #1737 and #1744 are provenance only. #1744 started as a direct-`develop` two-line duplicate plus task-specific `.jules/palette.md`; ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves the generated history while adopting the exact #1676 tree, retargeting the PR to #1676 and leaving zero changed files. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. -## 4. UI Localization Catalog — v2.41 material contract +### 3.6 AI Hub run-history rendering performance + +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft at exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6`. It memoizes the mapped `RunEvent` element subtree on `events` reference identity. The implementation is a hypothesis until the claimed trigger is demonstrated on realistic data and browser/runtime conditions. + +Acceptance requires a reproducible before/after profile on the same workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95 measurement. If the profile instead identifies list volume, reconciliation, unstable data identity, or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. + +## 4. UI Localization Catalog — v2.42 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`eb8fe8c43a017fed0ea029623d1380d824fd3150`**. @@ -110,7 +116,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -118,6 +124,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not yet integrated. +**UI Delivery Gate: FAIL.** The eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not yet integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches or source-only correctness. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, or source-only correctness. The next run must fresh-read all live authority before mutating or accepting any lane. From f117130782a385aebdc8c3d44e8a92efc1f4ffc0 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 11:49:43 +0900 Subject: [PATCH 60/89] docs(gap): bound localization parser resources --- docs/product-technical-gap-baseline.md | 48 ++++++++++++++------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 68940ecd6..78812f679 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.42 +**Baseline version:** 2.43 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.41 remains audit-visible as blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`; v2.37 remains blob `7716f37c571d4d631d6d385515a4cbe76e0e19cd`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.42 remains audit-visible as blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.42 preserves v2.41's owner-graph repair and adds one performance-evidence boundary discovered from generated #1745. #1745 exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` memoizes the `RunHistoryPanel` event-element subtree, but no realistic browser profile, stable-array trigger proof, before/after render receipt, or buyer-path p95 evidence currently supports the claimed performance improvement. The PR is therefore Draft and remains a performance hypothesis rather than accepted product progress. `useMemo` itself is not performance evidence, and task-specific `.jules/bolt.md` doctrine or decorative implementation comments are not product authority. +v2.43 preserves v2.42's owner graph and performance-evidence boundary and adds #1740's fourteenth localization-policy repair: valid locale negotiation input now has explicit product resource ceilings before expensive normalization/list work. Explicit locale values are capped at 128 characters, raw `Accept-Language` at 8192 characters, non-empty language ranges at 64, and ignored empty members remain capped at 32. Over-limit input fails closed and is never truncated. These are Naruon product limits, not IETF constants. ## 1. Evidence hierarchy and release posture @@ -77,34 +77,38 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Dr Acceptance requires a reproducible before/after profile on the same workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95 measurement. If the profile instead identifies list volume, reconciliation, unstable data identity, or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.42 material contract +## 4. UI Localization Catalog — v2.43 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`eb8fe8c43a017fed0ea029623d1380d824fd3150`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`30957821d00fa5e3eebc6cad5ed70820da8ac755`**. -#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Thirteen ordinary-forward RED→repair sequences define the executable policy. The durable invariants include: +Fourteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; -2. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -3. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -4. RFC 9110 list recipients ignore at most 32 empty comma members under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -5. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -6. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, and never relies on incidental iterable/hashability behavior; -7. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; -8. wildcard/q=0 behavior preserves release-level supported-locale exclusions; -9. RFC 4647 wildcard control flow preserves positive later concrete ranges even when they are unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -10. **placeholder source syntax is canonical before parser normalization.** `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value. RED `8b19c7dfe43e3dca3c1e4b8980c0a9998a3aec43` proves the empty-format-specifier ambiguity and fix `6ed310e1065940fa14c258b48412490e7b98d751` preserves lexical `:`/`!` operator information before `Formatter.parse()`. - -Python 3.14 defines `:` as the delimiter for `format_spec` and documents that an empty format specification has default behavior. The product therefore does not use parsed semantic equivalence as publication identity; versioned source must satisfy the narrower catalog grammar. - -No exact-head local/container PASS is claimed for the current thirteenth repair. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. +2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; +3. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +4. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work; +5. no more than **64 non-empty language ranges** are processed per value; +6. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +7. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +8. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +9. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, and never relies on incidental iterable/hashability behavior; +10. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; +11. wildcard/q=0 behavior preserves release-level supported-locale exclusions; +12. RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +13. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value; +14. **valid parser work has an explicit product budget.** RED `978fdbbc6135fa88a8d43e0971ed075ae546f9de` covers the 128/8192/64 boundaries; causal fix `0fdb5371eef63d6d7abe87ac14b69269c8519ff8` enforces them before expensive normalization/list processing, and focused TRACEABILITY `d25c7a627af720242c9503f8f2b90553c7c94405` records why these are product limits rather than IETF constants. + +RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits and requires limited-buffer protocols to support at least 35 characters. Naruon's 128/8192/64/32 bounds are therefore explicit application resource contracts layered over those standards. Over-limit values fail closed; no truncation changes negotiation semantics. + +No exact-head local/container PASS is claimed for the current fourteenth repair. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. ### Localization persistence/API/UI order Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. -A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. +A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the exact parser resource contract and reject over-limit negotiation before buyer-path work; realistic k6/E2E must measure normal and hostile-boundary behavior. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -116,7 +120,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `30957821...` exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. From 46d80741a0f5f607d6b395b8e24abb635ac06ece Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 12:43:06 +0900 Subject: [PATCH 61/89] docs(gap): baseline v2.44 identity bounds --- docs/product-technical-gap-baseline.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 78812f679..38d5694b9 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.43 +**Baseline version:** 2.44 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.42 remains audit-visible as blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`; v2.39 remains blob `9db17305b3da88f7571df20a5ce7bbc5f7756acd`; v2.38 remains blob `dbcbb4a5d6a6b369b11bf23f845d2df401d4532e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.43 remains audit-visible as blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.43 preserves v2.42's owner graph and performance-evidence boundary and adds #1740's fourteenth localization-policy repair: valid locale negotiation input now has explicit product resource ceilings before expensive normalization/list work. Explicit locale values are capped at 128 characters, raw `Accept-Language` at 8192 characters, non-empty language ranges at 64, and ignored empty members remain capped at 32. Over-limit input fails closed and is never truncated. These are Naruon product limits, not IETF constants. +v2.44 preserves v2.43's owner graph, measured-performance boundary and locale/header parser ceilings, and adds #1740's fifteenth localization-policy repair: product-owned `screen_key` and `message_key` identities are now capped at 128 characters before regex acceptance. Over-limit keys fail with their existing boundary-specific validation codes and are never truncated. The 128/128 identity ceilings are Naruon product limits, not PostgreSQL constants. ## 1. Evidence hierarchy and release posture @@ -77,13 +77,13 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Dr Acceptance requires a reproducible before/after profile on the same workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95 measurement. If the profile instead identifies list volume, reconciliation, unstable data identity, or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.43 material contract +## 4. UI Localization Catalog — v2.44 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`30957821d00fa5e3eebc6cad5ed70820da8ac755`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`e91445f55c0355423d4475bbd7a8f5ca3de7465c`**. -#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, stable screen/message keys, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Fourteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: +Fifteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; @@ -98,15 +98,16 @@ Fourteen ordinary-forward RED→repair sequences define the executable policy. D 11. wildcard/q=0 behavior preserves release-level supported-locale exclusions; 12. RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; 13. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -14. **valid parser work has an explicit product budget.** RED `978fdbbc6135fa88a8d43e0971ed075ae546f9de` covers the 128/8192/64 boundaries; causal fix `0fdb5371eef63d6d7abe87ac14b69269c8519ff8` enforces them before expensive normalization/list processing, and focused TRACEABILITY `d25c7a627af720242c9503f8f2b90553c7c94405` records why these are product limits rather than IETF constants. +14. valid negotiation parser work has an explicit product budget. RED `978fdbbc6135fa88a8d43e0971ed075ae546f9de` covers the 128/8192/64 boundaries; causal fix `0fdb5371eef63d6d7abe87ac14b69269c8519ff8` enforces them before expensive normalization/list processing; +15. product-owned catalog identities have an explicit product budget. RED `c0d802d33bf68ca6a8fbe70e4aaee5726b6d4a65` accepts 128-character `screen_key`/`message_key` values and rejects the 129th; causal fix `c40e2aa244249878405896fc1255d8c1df9d9dc5` enforces `_MAX_SCREEN_KEY_CHARS = 128` and `_MAX_MESSAGE_KEY_CHARS = 128` before regex acceptance, and focused TRACEABILITY `e91445f55c0355423d4475bbd7a8f5ca3de7465c` records the persistence/index rationale. -RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits and requires limited-buffer protocols to support at least 35 characters. Naruon's 128/8192/64/32 bounds are therefore explicit application resource contracts layered over those standards. Over-limit values fail closed; no truncation changes negotiation semantics. +RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts layered over those standards. The separate 128/128 `screen_key`/`message_key` ceilings are Naruon semantic identity limits layered above PostgreSQL `text`; PostgreSQL does not supply that product identity contract. Over-limit values fail closed and no truncation changes identity or negotiation semantics. -No exact-head local/container PASS is claimed for the current fourteenth repair. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. +No exact-head local/container PASS is claimed for the current fifteenth repair: an exact checkout was attempted, but this runtime cannot resolve the outbound Git host. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the same 128/128 key limits without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the exact parser resource contract and reject over-limit negotiation before buyer-path work; realistic k6/E2E must measure normal and hostile-boundary behavior. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -120,7 +121,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `30957821...` exact-head policy acceptance → localization persistence/API/cache → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `e91445f5...` exact-head policy acceptance → localization persistence/API/cache preserving 128/128 key and 128/8192/64/32 negotiation contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. From a01a603fce974abe0d07c918bb949139aea4b9c5 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 13:49:04 +0900 Subject: [PATCH 62/89] docs(gap): record localization content resource bounds --- docs/product-technical-gap-baseline.md | 27 ++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 38d5694b9..69bd97767 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.44 +**Baseline version:** 2.45 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.43 remains audit-visible as blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`; v2.40 remains blob `6092e23c545afe845b206842eb118d06999faf8e`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.44 remains audit-visible as blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; v2.43 remains blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.44 preserves v2.43's owner graph, measured-performance boundary and locale/header parser ceilings, and adds #1740's fifteenth localization-policy repair: product-owned `screen_key` and `message_key` identities are now capped at 128 characters before regex acceptance. Over-limit keys fail with their existing boundary-specific validation codes and are never truncated. The 128/128 identity ceilings are Naruon product limits, not PostgreSQL constants. +v2.45 preserves v2.44's owner graph, measured-performance boundary, negotiation ceilings and 128/128 catalog-key contract, and adds #1740's sixteenth localization-policy repair: translation text is capped at 16,384 Python characters, one placeholder identity at 64 characters, and one message/schema at 32 unique placeholder names. Limits are checked before downstream parser/collection work where practical, over-limit values fail with the existing boundary-specific validation code, and content/schema is never truncated. ## 1. Evidence hierarchy and release posture @@ -77,13 +77,13 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Dr Acceptance requires a reproducible before/after profile on the same workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95 measurement. If the profile instead identifies list volume, reconciliation, unstable data identity, or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.44 material contract +## 4. UI Localization Catalog — v2.45 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`e91445f55c0355423d4475bbd7a8f5ca3de7465c`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`7f7adef82bc1da611013989bd6b5b65050aefa7f`**. -#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, translation-text persistence validation, exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Fifteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: +Sixteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; @@ -99,17 +99,20 @@ Fifteen ordinary-forward RED→repair sequences define the executable policy. Du 12. RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; 13. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value; 14. valid negotiation parser work has an explicit product budget. RED `978fdbbc6135fa88a8d43e0971ed075ae546f9de` covers the 128/8192/64 boundaries; causal fix `0fdb5371eef63d6d7abe87ac14b69269c8519ff8` enforces them before expensive normalization/list processing; -15. product-owned catalog identities have an explicit product budget. RED `c0d802d33bf68ca6a8fbe70e4aaee5726b6d4a65` accepts 128-character `screen_key`/`message_key` values and rejects the 129th; causal fix `c40e2aa244249878405896fc1255d8c1df9d9dc5` enforces `_MAX_SCREEN_KEY_CHARS = 128` and `_MAX_MESSAGE_KEY_CHARS = 128` before regex acceptance, and focused TRACEABILITY `e91445f55c0355423d4475bbd7a8f5ca3de7465c` records the persistence/index rationale. +15. product-owned catalog identities have an explicit product budget. RED `c0d802d33bf68ca6a8fbe70e4aaee5726b6d4a65` accepts 128-character `screen_key`/`message_key` values and rejects the 129th; causal fix `c40e2aa244249878405896fc1255d8c1df9d9dc5` enforces `_MAX_SCREEN_KEY_CHARS = 128` and `_MAX_MESSAGE_KEY_CHARS = 128` before regex acceptance, and focused TRACEABILITY `e91445f55c0355423d4475bbd7a8f5ca3de7465c` records the persistence/index rationale; +16. translated content and placeholder metadata have explicit product budgets. RED `e1bdccc3b95bc41a8e03d29f3c581457cf586da5` accepts exactly 16,384 translation characters, a 64-character placeholder identity and 32 unique placeholder names, then rejects the next character/name/item with the boundary-specific typed error. Causal fix `8cf8880fb86a87af22b9f18afd36f45acfb0e70d` enforces `_MAX_TRANSLATION_MESSAGE_CHARS = 16_384`, `_MAX_PLACEHOLDER_NAME_CHARS = 64` and `_MAX_PLACEHOLDER_SCHEMA_ITEMS = 32`; focused TRACEABILITY `7f7adef82bc1da611013989bd6b5b65050aefa7f` records ordering, rejected alternatives and downstream obligations. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts layered over those standards. The separate 128/128 `screen_key`/`message_key` ceilings are Naruon semantic identity limits layered above PostgreSQL `text`; PostgreSQL does not supply that product identity contract. Over-limit values fail closed and no truncation changes identity or negotiation semantics. -No exact-head local/container PASS is claimed for the current fifteenth repair: an exact checkout was attempted, but this runtime cannot resolve the outbound Git host. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. +The 16,384/64/32 translation-content and placeholder ceilings are likewise Naruon product resource contracts, not values supplied by PostgreSQL, Unicode, Python or an IETF specification. MITRE CWE-400 is used as architecture/design traceability for bounding resource-triggering inputs, not as a standalone CVE/severity claim. Translation length is checked before Unicode/formatter work; schema length is checked before tuple copying; direct placeholder extraction enforces the same 32-name ceiling. Over-limit content and metadata are rejected, never truncated. + +No exact-head local/container PASS is claimed for the current sixteenth repair: direct Git checkout is unavailable because this runtime cannot resolve the outbound Git host. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the same 128/128 key limits without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the same 128/128 key and 16,384/64/32 translation/placeholder limits without truncation. -A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the exact parser resource contract and reject over-limit negotiation before buyer-path work; realistic k6/E2E must measure normal and hostile-boundary behavior. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. +A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the exact parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -121,7 +124,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `e91445f5...` exact-head policy acceptance → localization persistence/API/cache preserving 128/128 key and 128/8192/64/32 negotiation contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `7f7adef8...` exact-head policy acceptance → localization persistence/API/cache preserving 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. From a327599a407c1636d09a27f49cd6baecf9c51574 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 14:47:24 +0900 Subject: [PATCH 63/89] docs(gap): record explicit-locale BCP 47 repair --- docs/product-technical-gap-baseline.md | 79 +++++++++++++------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 69bd97767..34b97ef14 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.45 +**Baseline version:** 2.46 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.44 remains audit-visible as blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; v2.43 remains blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`; v2.41 remains blob `2eba56966e2079e8eeca9e79c22e050b3ab90daa`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.45 remains audit-visible as blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; v2.44 remains blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; v2.43 remains blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.45 preserves v2.44's owner graph, measured-performance boundary, negotiation ceilings and 128/128 catalog-key contract, and adds #1740's sixteenth localization-policy repair: translation text is capped at 16,384 Python characters, one placeholder identity at 64 characters, and one message/schema at 32 unique placeholder names. Limits are checked before downstream parser/collection work where practical, over-limit values fail with the existing boundary-specific validation code, and content/schema is never truncated. +v2.46 preserves v2.45's owner graph, measured-performance boundary, localization resource ceilings and all earlier durable contracts. It advances #1740 with a seventeenth ordinary-forward RED→repair: explicit persisted/session locale values now require RFC 5646 structural well-formedness rather than the broader legacy `primary-subtag *("-" subtag)` shape. The `Accept-Language` boundary remains separately governed by RFC 4647 language-range syntax. ## 1. Evidence hierarchy and release posture @@ -37,11 +37,9 @@ No Naruon product lane may reinterpret incomplete central hosted evidence as pro ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Its historical exact-head GREEN does not prove safety against the current vulnerability database. Current Trivy/CodeQL revalidation belongs here rather than in feature PRs. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Historical exact-head GREEN does not prove safety against the current vulnerability database; current Trivy/CodeQL revalidation belongs here rather than in feature PRs. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. - -[#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner; inherited dependency Security RED is routed to #1623. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner; inherited dependency Security RED is routed to #1623. ### 3.2 Migration/workspace and opaque UID ownership @@ -51,9 +49,7 @@ No Naruon product lane may reinterpret incomplete central hosted evidence as pro #1503 is Draft. Descendants must not create parallel Alembic heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing public UIDs, focused entropy regression, corrected Bandit/severity diagnosis and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. - -Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero-effective-delta provenance. It must not become a parallel migration/security owner. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing public UIDs, focused entropy regression, corrected Bandit/severity diagnosis and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero-effective-delta provenance. ### 3.3 NetworkGraph/performance @@ -67,52 +63,53 @@ Issue #1247 remains the checksum contract. Normal security-labelled checksum sur ### 3.5 Settings native-disabled accessibility -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Its bounded product tree owns the two source removals, focused `SettingsLayout.native-disabled.test.tsx` regression and standards doctoring; browser/keyboard/responsive acceptance remains a separate delivery gate. +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Its bounded product tree owns the source removals, focused `SettingsLayout.native-disabled.test.tsx` regression and standards doctoring; browser/keyboard/responsive acceptance remains a separate delivery gate. -Generated #1716, #1737 and #1744 are provenance only. #1744 started as a direct-`develop` two-line duplicate plus task-specific `.jules/palette.md`; ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves the generated history while adopting the exact #1676 tree, retargeting the PR to #1676 and leaving zero changed files. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. +Generated #1716, #1737 and #1744 are provenance only. #1744 ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves generated history while adopting exact #1676, retargeting to that owner and leaving zero effective product delta. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft at exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6`. It memoizes the mapped `RunEvent` element subtree on `events` reference identity. The implementation is a hypothesis until the claimed trigger is demonstrated on realistic data and browser/runtime conditions. +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remains Draft at exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6`. Memoizing the mapped `RunEvent` subtree on `events` reference identity is a performance hypothesis, not acceptance evidence. -Acceptance requires a reproducible before/after profile on the same workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95 measurement. If the profile instead identifies list volume, reconciliation, unstable data identity, or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. +Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.45 material contract +## 4. UI Localization Catalog — v2.46 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`7f7adef82bc1da611013989bd6b5b65050aefa7f`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`60fef97a6eab8ce2322f0920aecce3040ef35661`**. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Sixteen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: +Seventeen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -4. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work; -5. no more than **64 non-empty language ranges** are processed per value; -6. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -7. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -8. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -9. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, and never relies on incidental iterable/hashability behavior; -10. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; -11. wildcard/q=0 behavior preserves release-level supported-locale exclusions; -12. RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -13. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -14. valid negotiation parser work has an explicit product budget. RED `978fdbbc6135fa88a8d43e0971ed075ae546f9de` covers the 128/8192/64 boundaries; causal fix `0fdb5371eef63d6d7abe87ac14b69269c8519ff8` enforces them before expensive normalization/list processing; -15. product-owned catalog identities have an explicit product budget. RED `c0d802d33bf68ca6a8fbe70e4aaee5726b6d4a65` accepts 128-character `screen_key`/`message_key` values and rejects the 129th; causal fix `c40e2aa244249878405896fc1255d8c1df9d9dc5` enforces `_MAX_SCREEN_KEY_CHARS = 128` and `_MAX_MESSAGE_KEY_CHARS = 128` before regex acceptance, and focused TRACEABILITY `e91445f55c0355423d4475bbd7a8f5ca3de7465c` records the persistence/index rationale; -16. translated content and placeholder metadata have explicit product budgets. RED `e1bdccc3b95bc41a8e03d29f3c581457cf586da5` accepts exactly 16,384 translation characters, a 64-character placeholder identity and 32 unique placeholder names, then rejects the next character/name/item with the boundary-specific typed error. Causal fix `8cf8880fb86a87af22b9f18afd36f45acfb0e70d` enforces `_MAX_TRANSLATION_MESSAGE_CHARS = 16_384`, `_MAX_PLACEHOLDER_NAME_CHARS = 64` and `_MAX_PLACEHOLDER_SCHEMA_ITEMS = 32`; focused TRACEABILITY `7f7adef82bc1da611013989bd6b5b65050aefa7f` records ordering, rejected alternatives and downstream obligations. - -RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts layered over those standards. The separate 128/128 `screen_key`/`message_key` ceilings are Naruon semantic identity limits layered above PostgreSQL `text`; PostgreSQL does not supply that product identity contract. Over-limit values fail closed and no truncation changes identity or negotiation semantics. - -The 16,384/64/32 translation-content and placeholder ceilings are likewise Naruon product resource contracts, not values supplied by PostgreSQL, Unicode, Python or an IETF specification. MITRE CWE-400 is used as architecture/design traceability for bounding resource-triggering inputs, not as a standalone CVE/severity claim. Translation length is checked before Unicode/formatter work; schema length is checked before tuple copying; direct placeholder extraction enforces the same 32-name ceiling. Over-limit content and metadata are rejected, never truncated. - -No exact-head local/container PASS is claimed for the current sixteenth repair: direct Git checkout is unavailable because this runtime cannot resolve the outbound Git host. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be reacquired naturally. Predecessor workflow/review receipts do not transfer. +3. explicit persisted/session locale values must be structurally well-formed RFC 5646 language tags before release-primary normalization. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` rejects terminal private-use/extension singletons such as `en-x` and `en-u` while retaining `en-x-private` and `en-u-ca-gregory`; causal fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` implements the bounded `langtag` grammar and focused TRACEABILITY `60fef97a6eab8ce2322f0920aecce3040ef35661` records the standards boundary; +4. the explicit-locale check guarantees RFC 5646 **well-formedness**, not registry validity. A future registry-validity contract requires a pinned IANA Language Subtag Registry version, update/release process and reproducibility evidence; +5. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +6. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +7. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; +8. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +9. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +10. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +11. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +12. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +13. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; +14. translated text is capped at **16,384 Python characters** before Unicode/formatter work; +15. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; +16. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; +17. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted. + +RFC 5646 distinguishes well-formed tags from valid tags: registry validity depends on the particular IANA registry date and additional semantic constraints. This baseline therefore records only structural well-formedness for explicit locale preferences. The RFC 4647 `Accept-Language` range parser remains independent. + +RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. + +No predecessor workflow/review receipt transfers to current #1740 exact `60fef97a...`. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be acquired naturally. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the same 128/128 key and 16,384/64/32 translation/placeholder limits without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve RFC 5646 explicit-locale well-formedness, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. -A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the exact parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, a per-key network waterfall or a heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. +A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -124,7 +121,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `7f7adef8...` exact-head policy acceptance → localization persistence/API/cache preserving 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `60fef97a...` exact-head policy acceptance → localization persistence/API/cache preserving RFC 5646 explicit-locale well-formedness, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -134,4 +131,4 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **UI Delivery Gate: FAIL.** The eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not yet integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, or source-only correctness. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness or RFC 5646 well-formedness alone. The next run must fresh-read all live authority before mutating or accepting any lane. From c8d753e82a8dab9a50c8748b58fb5e4dced619f5 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 14:54:36 +0900 Subject: [PATCH 64/89] docs(gap): record grandfathered locale source RED --- docs/product-technical-gap-baseline.md | 48 +++++++++++++------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 34b97ef14..4513592f7 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.46 +**Baseline version:** 2.47 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.45 remains audit-visible as blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; v2.44 remains blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; v2.43 remains blob `78812f6798a91d8ee761b483d6a20b123f935ee4`; v2.42 remains blob `68940ecd64c1d10f011969d861ce18bc206f2995`. Earlier v2.x snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.46 remains audit-visible as blob `34b97ef14375705beb0047bffa1cad9994d2155f`; v2.45 remains blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; v2.44 remains blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.46 preserves v2.45's owner graph, measured-performance boundary, localization resource ceilings and all earlier durable contracts. It advances #1740 with a seventeenth ordinary-forward RED→repair: explicit persisted/session locale values now require RFC 5646 structural well-formedness rather than the broader legacy `primary-subtag *("-" subtag)` shape. The `Accept-Language` boundary remains separately governed by RFC 4647 language-range syntax. +v2.47 preserves v2.46's owner graph, measured-performance boundary, localization resource ceilings and all earlier durable contracts, but corrects one standards overclaim discovered immediately after the seventeenth localization repair. #1740 now carries an eighteenth executable RED proving that RFC 5646 `Language-Tag` includes grandfathered tags outside the structural `langtag` branch. The current source preserves `en-GB-oed` but still rejects supported-primary grandfathered `zh-min` and `zh-min-nan`; therefore explicit-locale RFC 5646 acceptance is not GREEN yet. ## 1. Evidence hierarchy and release posture @@ -73,41 +73,41 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remai Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.46 material contract +## 4. UI Localization Catalog — v2.47 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`60fef97a6eab8ce2322f0920aecce3040ef35661`**. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`8d9a0f67a47b26eb1e36a7bc65681470033c6f74`** and is currently source RED. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Seventeen ordinary-forward RED→repair sequences define the executable policy. Durable invariants include: +Seventeen ordinary-forward RED→repair sequences define the previously repaired policy. The eighteenth executable RED is intentionally open. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. explicit persisted/session locale values must be structurally well-formed RFC 5646 language tags before release-primary normalization. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` rejects terminal private-use/extension singletons such as `en-x` and `en-u` while retaining `en-x-private` and `en-u-ca-gregory`; causal fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` implements the bounded `langtag` grammar and focused TRACEABILITY `60fef97a6eab8ce2322f0920aecce3040ef35661` records the standards boundary; -4. the explicit-locale check guarantees RFC 5646 **well-formedness**, not registry validity. A future registry-validity contract requires a pinned IANA Language Subtag Registry version, update/release process and reproducibility evidence; -5. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; -6. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -7. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; -8. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -9. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -10. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -11. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -12. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -13. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence; -14. translated text is capped at **16,384 Python characters** before Unicode/formatter work; +3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` correctly reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; +4. RFC 5646 `Language-Tag` is broader than `langtag`: it also includes `privateuse` and `grandfathered`. Current RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` requires supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`. The current source already preserves `en-GB-oed` but rejects the two Chinese cases; therefore full explicit-locale RFC 5646 acceptance is not yet GREEN; +5. this boundary is still well-formedness, not live registry validity. A future registry-validity contract requires a pinned IANA Language Subtag Registry version, update/release process and reproducibility evidence; +6. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +7. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +8. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; +9. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +10. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +11. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +12. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +13. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +14. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; 15. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; 16. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; 17. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted. -RFC 5646 distinguishes well-formed tags from valid tags: registry validity depends on the particular IANA registry date and additional semantic constraints. This baseline therefore records only structural well-formedness for explicit locale preferences. The RFC 4647 `Accept-Language` range parser remains independent. +The eighteenth RED must be repaired in the pure-policy owner before exact-head GREEN is considered. The attempted production-source amendment in this run was not accepted by the execution safety boundary, so the regression remains deliberately visible rather than being weakened or deleted. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. -No predecessor workflow/review receipt transfers to current #1740 exact `60fef97a...`. Current-head hosted full-suite/coverage/security evidence and qualifying independent post-last-push review must be acquired naturally. +No predecessor workflow/review receipt transfers to current #1740 exact `8d9a0f67...`. The exact head is source RED and must not be merged or blind-rerun as though CI queueing could repair source semantics. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve RFC 5646 explicit-locale well-formedness, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until the #1740 explicit-locale RED is repaired, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale Language-Tag contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -121,7 +121,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `60fef97a...` exact-head policy acceptance → localization persistence/API/cache preserving RFC 5646 explicit-locale well-formedness, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `8d9a0f67...` supported-primary grandfathered-tag source repair → exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale Language-Tag semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -129,6 +129,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not yet integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. +**UI Delivery Gate: FAIL.** The localization pure-policy owner is currently source RED, and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness or RFC 5646 well-formedness alone. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, partial RFC 5646 coverage or an unresolved executable RED. The next run must fresh-read all live authority before mutating or accepting any lane. From a67e5dac75899f3d1f794cd6bab3cf2e6319963f Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 15:47:11 +0900 Subject: [PATCH 65/89] docs(gap): record localization grandfathered-tag repair --- docs/product-technical-gap-baseline.md | 31 +++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 4513592f7..a1c08dc7a 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.47 +**Baseline version:** 2.48 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.46 remains audit-visible as blob `34b97ef14375705beb0047bffa1cad9994d2155f`; v2.45 remains blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; v2.44 remains blob `38d5694b9bae4f57d63f2f3c9bec8b0ced287faf`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.47 remains audit-visible as blob `4513592f778afc036b7c713253173fcbf1aa59b8`; v2.46 remains blob `34b97ef14375705beb0047bffa1cad9994d2155f`; v2.45 remains blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.47 preserves v2.46's owner graph, measured-performance boundary, localization resource ceilings and all earlier durable contracts, but corrects one standards overclaim discovered immediately after the seventeenth localization repair. #1740 now carries an eighteenth executable RED proving that RFC 5646 `Language-Tag` includes grandfathered tags outside the structural `langtag` branch. The current source preserves `en-GB-oed` but still rejects supported-primary grandfathered `zh-min` and `zh-min-nan`; therefore explicit-locale RFC 5646 acceptance is not GREEN yet. +v2.48 preserves v2.47's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the ordinary-forward repair of the eighteenth localization RED. #1740 now accepts supported-primary grandfathered `en-GB-oed`, `zh-min`, and `zh-min-nan` through the explicit RFC 5646 language-tag path at exact `502669e233a500f98bc311bf181d56445fd23e59`. The source RED is repaired; exact-current-head hosted full-suite/security and qualifying independent review evidence remain required before policy acceptance. ## 1. Evidence hierarchy and release posture @@ -73,18 +73,18 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remai Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.47 material contract +## 4. UI Localization Catalog — v2.48 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`8d9a0f67a47b26eb1e36a7bc65681470033c6f74`** and is currently source RED. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`502669e233a500f98bc311bf181d56445fd23e59`**. The eighteenth source RED is repaired; exact-current-head hosted acceptance is still pending. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Seventeen ordinary-forward RED→repair sequences define the previously repaired policy. The eighteenth executable RED is intentionally open. Durable/current invariants are: +Eighteen ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` correctly reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; -4. RFC 5646 `Language-Tag` is broader than `langtag`: it also includes `privateuse` and `grandfathered`. Current RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` requires supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`. The current source already preserves `en-GB-oed` but rejects the two Chinese cases; therefore full explicit-locale RFC 5646 acceptance is not yet GREEN; +3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; +4. RFC 5646 `Language-Tag` is broader than `langtag`: it also includes `privateuse` and `grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` requires supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; causal source fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` now preserves all three. `zh-guoyu`, `zh-hakka`, and `zh-xiang` are grandfathered registry entries whose literal forms already satisfy the structural `langtag` pattern; 5. this boundary is still well-formedness, not live registry validity. A future registry-validity contract requires a pinned IANA Language Subtag Registry version, update/release process and reproducibility evidence; 6. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; 7. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; @@ -97,17 +97,16 @@ Seventeen ordinary-forward RED→repair sequences define the previously repaired 14. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; 15. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; 16. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -17. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted. - -The eighteenth RED must be repaired in the pure-policy owner before exact-head GREEN is considered. The attempted production-source amendment in this run was not accepted by the execution safety boundary, so the regression remains deliberately visible rather than being weakened or deleted. +17. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; +18. source correctness on the repaired grandfathered-tag path does not transfer predecessor hosted evidence. Exact `502669e2...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. -No predecessor workflow/review receipt transfers to current #1740 exact `8d9a0f67...`. The exact head is source RED and must not be merged or blind-rerun as though CI queueing could repair source semantics. +No predecessor workflow/review receipt transfers to current #1740 exact `502669e2...`. The source repair is present, but queued/pending/current-head review evidence must still become terminal and qualifying before merge. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until the #1740 explicit-locale RED is repaired, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale Language-Tag contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale Language-Tag contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -121,7 +120,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `8d9a0f67...` supported-primary grandfathered-tag source repair → exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale Language-Tag semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `502669e2...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale Language-Tag semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -129,6 +128,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The localization pure-policy owner is currently source RED, and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. +**UI Delivery Gate: FAIL.** The localization pure-policy source RED is repaired, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, partial RFC 5646 coverage or an unresolved executable RED. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, partial RFC 5646 coverage or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From 8b9f3762e66ae96ed8bc2edb4d1eeae615c17da3 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 15:50:52 +0900 Subject: [PATCH 66/89] docs(gap): record complete RFC 5646 syntax classification --- docs/product-technical-gap-baseline.md | 55 +++++++++++++------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a1c08dc7a..02b9072d4 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.48 +**Baseline version:** 2.49 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.47 remains audit-visible as blob `4513592f778afc036b7c713253173fcbf1aa59b8`; v2.46 remains blob `34b97ef14375705beb0047bffa1cad9994d2155f`; v2.45 remains blob `69bd977677373fb83bb5ab027b3fcb94c42faeb6`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.48 remains audit-visible as blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; v2.47 remains blob `4513592f778afc036b7c713253173fcbf1aa59b8`; v2.46 remains blob `34b97ef14375705beb0047bffa1cad9994d2155f`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.48 preserves v2.47's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the ordinary-forward repair of the eighteenth localization RED. #1740 now accepts supported-primary grandfathered `en-GB-oed`, `zh-min`, and `zh-min-nan` through the explicit RFC 5646 language-tag path at exact `502669e233a500f98bc311bf181d56445fd23e59`. The source RED is repaired; exact-current-head hosted full-suite/security and qualifying independent review evidence remain required before policy acceptance. +v2.49 preserves v2.48's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the nineteenth localization RED→repair. #1740 now classifies the complete RFC 5646 syntax branches before product support: structural `langtag`, private-use-only syntax, and the RFC's fixed irregular-grandfathered set. Well-formed values without a Naruon release primary now fail as `ui_locale_unsupported` rather than being misclassified as malformed. Current #1740 exact is `71d5043f3189ac3e613466a094c8a0577d24923f`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. ## 1. Evidence hierarchy and release posture @@ -73,40 +73,41 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remai Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.48 material contract +## 4. UI Localization Catalog — v2.49 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`502669e233a500f98bc311bf181d56445fd23e59`**. The eighteenth source RED is repaired; exact-current-head hosted acceptance is still pending. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`71d5043f3189ac3e613466a094c8a0577d24923f`**. Current source repairs are present; exact-current-head hosted acceptance is pending. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Eighteen ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: +Nineteen ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; -4. RFC 5646 `Language-Tag` is broader than `langtag`: it also includes `privateuse` and `grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` requires supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; causal source fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` now preserves all three. `zh-guoyu`, `zh-hakka`, and `zh-xiang` are grandfathered registry entries whose literal forms already satisfy the structural `langtag` pattern; -5. this boundary is still well-formedness, not live registry validity. A future registry-validity contract requires a pinned IANA Language Subtag Registry version, update/release process and reproducibility evidence; -6. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; -7. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -8. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; -9. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -10. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -11. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -12. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -13. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -14. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; -15. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; -16. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -17. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; -18. source correctness on the repaired grandfathered-tag path does not transfer predecessor hosted evidence. Exact `502669e2...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining supported ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; +4. RFC 5646 `Language-Tag` is `langtag / privateuse / grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` and fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` preserve supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; +5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` complete the syntax-versus-support boundary: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are syntactically well-formed but fail with `ui_locale_unsupported` because no first subtag maps to the eight release locales; +6. the irregular grandfathered set is fixed by RFC 5646 and does not create a moving registry dependency. Regular grandfathered forms that satisfy `langtag` use the structural branch. Broader registry validity remains a separate future versioned contract; +7. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +8. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +9. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; +10. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +11. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +12. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +13. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +14. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +15. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; +16. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; +17. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; +18. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; +19. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `71d5043f...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. -No predecessor workflow/review receipt transfers to current #1740 exact `502669e2...`. The source repair is present, but queued/pending/current-head review evidence must still become terminal and qualifying before merge. +No predecessor workflow/review receipt transfers to current #1740 exact `71d5043f...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale Language-Tag contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -120,7 +121,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `502669e2...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale Language-Tag semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `71d5043f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -128,6 +129,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The localization pure-policy source RED is repaired, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. +**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, partial RFC 5646 coverage or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From 20d97e89f47123ffe807af22bc1e0e34d8a33ef1 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 16:47:48 +0900 Subject: [PATCH 67/89] docs(gap): record twentieth localization repair --- docs/product-technical-gap-baseline.md | 49 +++++++++++++------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 02b9072d4..e6faf4e0b 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.49 +**Baseline version:** 2.50 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.48 remains audit-visible as blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; v2.47 remains blob `4513592f778afc036b7c713253173fcbf1aa59b8`; v2.46 remains blob `34b97ef14375705beb0047bffa1cad9994d2155f`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.49 remains audit-visible as blob `02b9072d40909dc7a5ec17e36155c751a5957758`; v2.48 remains blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; v2.47 remains blob `4513592f778afc036b7c713253173fcbf1aa59b8`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.49 preserves v2.48's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the nineteenth localization RED→repair. #1740 now classifies the complete RFC 5646 syntax branches before product support: structural `langtag`, private-use-only syntax, and the RFC's fixed irregular-grandfathered set. Well-formed values without a Naruon release primary now fail as `ui_locale_unsupported` rather than being misclassified as malformed. Current #1740 exact is `71d5043f3189ac3e613466a094c8a0577d24923f`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. +v2.50 preserves v2.49's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the twentieth localization RED→repair. #1740 now rejects a structural RFC 5646 `langtag` that repeats an extension singleton before private use: `en-a-bbb-a-ccc` is invalid, while `en-a-bbb-x-a-ccc` remains permitted because the second `a` is private-use data. This is a registry-independent RFC MUST guard, not a claim of live IANA Language Subtag Registry validity. Current #1740 exact is `81bbbcf86a0ebbb56176c6aa86c9d37c7b5651f3`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. ## 1. Evidence hierarchy and release posture @@ -73,41 +73,42 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remai Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.49 material contract +## 4. UI Localization Catalog — v2.50 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`71d5043f3189ac3e613466a094c8a0577d24923f`**. Current source repairs are present; exact-current-head hosted acceptance is pending. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`81bbbcf86a0ebbb56176c6aa86c9d37c7b5651f3`**. Current source repairs are present; exact-current-head hosted acceptance is pending. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Nineteen ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: +Twenty ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; 3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining supported ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; 4. RFC 5646 `Language-Tag` is `langtag / privateuse / grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` and fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` preserve supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; 5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` complete the syntax-versus-support boundary: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are syntactically well-formed but fail with `ui_locale_unsupported` because no first subtag maps to the eight release locales; -6. the irregular grandfathered set is fixed by RFC 5646 and does not create a moving registry dependency. Regular grandfathered forms that satisfy `langtag` use the structural branch. Broader registry validity remains a separate future versioned contract; -7. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; -8. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -9. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; -10. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -11. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -12. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -13. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -14. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -15. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; -16. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; -17. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -18. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; -19. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `71d5043f...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +6. RED `da7e2653a158a259f4d327f1cf017674c7721064` and fix `81e061c000a13261ced87b7d6f71fbce64637821` enforce RFC 5646 §2.2.6's registry-independent extension-singleton uniqueness rule: `en-a-bbb-a-ccc` is invalid, while `en-a-bbb-x-a-ccc` remains permitted because scanning stops at private-use `x`; +7. the irregular grandfathered set is fixed by RFC 5646 and does not create a moving registry dependency. Full BCP 47 validity still depends on a dated IANA registry and also excludes duplicate variants; those broader validity checks remain a separately versioned parser concern rather than being inferred by this singleton repair; +8. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +9. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +10. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; +11. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +12. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +13. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +14. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +15. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +16. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; +17. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; +18. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; +19. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; +20. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `81bbbcf8...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. -No predecessor workflow/review receipt transfers to current #1740 exact `71d5043f...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. +No predecessor workflow/review receipt transfers to current #1740 exact `81bbbcf8...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent-singleton contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -121,7 +122,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `71d5043f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `81bbbcf8...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent-singleton semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -131,4 +132,4 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, repeated extension singletons or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From 6f43c997b27054d88c50365096233187bc36c3d2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 17:49:32 +0900 Subject: [PATCH 68/89] docs(gap): record BCP47 validity repairs in v2.51 --- docs/product-technical-gap-baseline.md | 50 +++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e6faf4e0b..0d60c3296 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.50 +**Baseline version:** 2.51 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.49 remains audit-visible as blob `02b9072d40909dc7a5ec17e36155c751a5957758`; v2.48 remains blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; v2.47 remains blob `4513592f778afc036b7c713253173fcbf1aa59b8`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.50 remains audit-visible as blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; v2.49 remains blob `02b9072d40909dc7a5ec17e36155c751a5957758`; v2.48 remains blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.50 preserves v2.49's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the twentieth localization RED→repair. #1740 now rejects a structural RFC 5646 `langtag` that repeats an extension singleton before private use: `en-a-bbb-a-ccc` is invalid, while `en-a-bbb-x-a-ccc` remains permitted because the second `a` is private-use data. This is a registry-independent RFC MUST guard, not a claim of live IANA Language Subtag Registry validity. Current #1740 exact is `81bbbcf86a0ebbb56176c6aa86c9d37c7b5651f3`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. +v2.51 preserves v2.50's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the twenty-first and twenty-second localization RED→repair sequences. #1740 now enforces two additional registry-independent RFC 5646 validity rules after structural `langtag` matching: duplicate variant subtags are rejected case-insensitively before extensions/private use, and the compatibility ABNF's permanently reserved second/third extlang positions may not be occupied. Current #1740 exact is `91a0e8c402be8338b917feabfaa7e9872f76467f`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. ## 1. Evidence hierarchy and release posture @@ -73,13 +73,13 @@ Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remai Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. -## 4. UI Localization Catalog — v2.50 material contract +## 4. UI Localization Catalog — v2.51 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`81bbbcf86a0ebbb56176c6aa86c9d37c7b5651f3`**. Current source repairs are present; exact-current-head hosted acceptance is pending. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`91a0e8c402be8338b917feabfaa7e9872f76467f`**. Current source repairs are present; exact-current-head hosted acceptance is pending. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Twenty ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: +Twenty-two ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; @@ -87,28 +87,30 @@ Twenty ordinary-forward RED→repair sequences now define the current source pol 4. RFC 5646 `Language-Tag` is `langtag / privateuse / grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` and fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` preserve supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; 5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` complete the syntax-versus-support boundary: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are syntactically well-formed but fail with `ui_locale_unsupported` because no first subtag maps to the eight release locales; 6. RED `da7e2653a158a259f4d327f1cf017674c7721064` and fix `81e061c000a13261ced87b7d6f71fbce64637821` enforce RFC 5646 §2.2.6's registry-independent extension-singleton uniqueness rule: `en-a-bbb-a-ccc` is invalid, while `en-a-bbb-x-a-ccc` remains permitted because scanning stops at private-use `x`; -7. the irregular grandfathered set is fixed by RFC 5646 and does not create a moving registry dependency. Full BCP 47 validity still depends on a dated IANA registry and also excludes duplicate variants; those broader validity checks remain a separately versioned parser concern rather than being inferred by this singleton repair; -8. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; -9. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -10. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; -11. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -12. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; -13. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -14. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -15. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -16. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; -17. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; -18. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -19. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; -20. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `81bbbcf8...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +7. RED `c34b45957799575ea7e11c84992fdf84461b783f` and fix `96adc96dd5fab6e31734c2c23257b0f0f40447ee` enforce RFC 5646 §2.2.9's duplicate-variant prohibition case-insensitively before extensions/private use: `en-1901-1901` and `en-oxendict-OXENDICT` are invalid, while `en-1901-x-1901` remains valid structural input for release-level `en` normalization; +8. RED `c49c80904ae1c38ee529a4b65e2fdb6612863c47` and fix `983194dd129cc593a4caa3c8531fb669986e4262` enforce RFC 5646 §2.2.2's permanently reserved second/third extlang positions: `zh-cmn-yue` is invalid even though compatibility ABNF can match it, while one-extlang `zh-cmn-Hans-CN → zh` remains accepted. RFC Errata 5457 documents that this validity condition is omitted from §2.2.9's compact list but remains normative in §2.2.2; +9. the irregular grandfathered set and these structural validity checks do not create a moving registry dependency. Full BCP 47 validity still depends on a dated IANA registry for subtag membership, variant `Prefix` relationships, preferred values and canonicalization; those require an explicit version/update/provenance contract rather than inference in this pure-policy slice; +10. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +11. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; +12. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; +13. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; +14. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +15. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; +16. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +17. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +18. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; +19. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; +20. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; +21. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; +22. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `91a0e8c4...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. -No predecessor workflow/review receipt transfers to current #1740 exact `81bbbcf8...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. +No predecessor workflow/review receipt transfers to current #1740 exact `91a0e8c4...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent-singleton contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent validity contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. @@ -122,7 +124,7 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `81bbbcf8...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent-singleton semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `91a0e8c4...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -132,4 +134,4 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, repeated extension singletons or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From 442b1eca2f8da33c6264cf695d16d1b26247f863 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 18:46:08 +0900 Subject: [PATCH 69/89] docs(gap): retire unmeasured AI Hub memo from active gap Record #1745 ordinary convergence to the protected product tree after verifying that current run-event sources are bounded to at most eight rows and no buyer-path profile supports the generated memoization claim. Keep the generated history as provenance, remove it from the active causal blocker chain, and preserve the current localization and release gates. --- docs/product-technical-gap-baseline.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 0d60c3296..7ec571a45 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.51 +**Baseline version:** 2.52 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.50 remains audit-visible as blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; v2.49 remains blob `02b9072d40909dc7a5ec17e36155c751a5957758`; v2.48 remains blob `a1c08dc7af7ede905c14cbc6874d6d2853bcc360`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.51 remains audit-visible as blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; v2.50 remains blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; v2.49 remains blob `02b9072d40909dc7a5ec17e36155c751a5957758`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.51 preserves v2.50's owner graph, measured-performance boundary, localization resource ceilings and earlier durable contracts while recording the twenty-first and twenty-second localization RED→repair sequences. #1740 now enforces two additional registry-independent RFC 5646 validity rules after structural `langtag` matching: duplicate variant subtags are rejected case-insensitively before extensions/private use, and the compatibility ABNF's permanently reserved second/third extlang positions may not be occupied. Current #1740 exact is `91a0e8c402be8338b917feabfaa7e9872f76467f`; exact-current-head hosted full-suite/security and qualifying independent review remain required before policy acceptance. +v2.52 preserves v2.51's owner graph, localization resource ceilings and registry-independent RFC 5646 repairs while correcting the AI Hub RunHistory performance lane. Generated #1745 no longer carries an effective product change: the generated `useMemo([events])` claim was checked against the canonical `/api/ai-hub/surface` source, whose run-event inputs are bounded to at most eight current rows, and no buyer-path browser profile or p95 evidence identifies that bounded map as a causal bottleneck. #1745 is now ordinary/non-force converged at `a501ca663e01a53b3c60a1264a6e014ad0228c64` to the exact protected `develop` tree with zero changed files. The generated commit remains first-parent provenance; the unsupported memoization and task-specific doctrine are not current product delta. ## 1. Evidence hierarchy and release posture @@ -69,11 +69,13 @@ Generated #1716, #1737 and #1744 are provenance only. #1744 ordinary convergence ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remains Draft at exact `5cdebe154f1ea24b0f924769d0073c4dc701e7d6`. Memoizing the mapped `RunEvent` subtree on `events` reference identity is a performance hypothesis, not acceptance evidence. +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is now Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Fresh compare from protected `develop` is ahead-only with zero changed files; the current tree is exactly protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`. -Acceptance requires reproducible before/after browser profiling on the same realistic workload, evidence that unrelated state changes preserve `events` identity and currently incur material list construction/reconciliation cost, correctness/a11y parity, and the applicable buyer-path p95. If profiling identifies list volume, reconciliation, unstable data identity or another bottleneck, repair that causal path rather than retaining `useMemo` by inertia. Synthetic tiny lists, cache-warm-only runs, decorative performance comments and task-specific `.jules/bolt.md` text are not acceptance evidence. +The generated predecessor `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` wrapped `RunHistoryPanel`'s mapped event subtree in `useMemo([events])`, added task-specific `.jules/bolt.md` doctrine and asserted that potentially large event arrays justified the optimization. Canonical backend review disproved that premise for the current product surface: `_list_agent_run_records(...).limit(8)` feeds the primary `run_events`; fallback audit events are also bounded to eight and prompt fallback to five. No current browser profile, React render/commit timing, reference-stability evidence or buyer-path p95 receipt identifies mapping at most eight run rows as a material bottleneck. -## 4. UI Localization Catalog — v2.51 material contract +Ordinary convergence `a501ca66...` preserves the generated commit as first-parent history, adopts protected `develop` as an additional parent and restores the protected product tree without force rewrite. The generated performance claim therefore remains auditable but is not product progress. If future realistic profiling identifies RunHistory rendering as material, the measured owner must reproduce the real trigger on the bounded backend contract and fix the measured cause; the rejected memoization is not revived by inertia. + +## 4. UI Localization Catalog — v2.52 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`91a0e8c402be8338b917feabfaa7e9872f76467f`**. Current source repairs are present; exact-current-head hosted acceptance is pending. @@ -124,7 +126,9 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1745 measured AI Hub performance acceptance or causal replacement → #1503 → #1727 plus zero-delta provenance → #1740 `91a0e8c4...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 `91a0e8c4...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` + +#1745 is no longer an active causal blocker. It retains generated performance intent as zero-effective-delta provenance only. Any future RunHistory performance owner must start from reproduced buyer-path evidence rather than this rejected memoization. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -132,6 +136,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745 also lacks measured browser performance evidence and cannot be treated as UI delivery progress yet. +**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745's generated memoization has been removed from effective product scope rather than counted as UI/performance progress. Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From 2f7a50b938fca99ffd3116041ee9a36223bb6a05 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 19:45:34 +0900 Subject: [PATCH 70/89] docs(gap): record RFC 4647 wildcard default provenance repair --- docs/product-technical-gap-baseline.md | 69 +++++++++++++------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 7ec571a45..0eeb08e6a 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.52 +**Baseline version:** 2.53 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.51 remains audit-visible as blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; v2.50 remains blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; v2.49 remains blob `02b9072d40909dc7a5ec17e36155c751a5957758`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.52 remains audit-visible as blob `7ec571a4593547ae23ddfa815f27f4148f565681`; v2.51 remains blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; v2.50 remains blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.52 preserves v2.51's owner graph, localization resource ceilings and registry-independent RFC 5646 repairs while correcting the AI Hub RunHistory performance lane. Generated #1745 no longer carries an effective product change: the generated `useMemo([events])` claim was checked against the canonical `/api/ai-hub/surface` source, whose run-event inputs are bounded to at most eight current rows, and no buyer-path browser profile or p95 evidence identifies that bounded map as a causal bottleneck. #1745 is now ordinary/non-force converged at `a501ca663e01a53b3c60a1264a6e014ad0228c64` to the exact protected `develop` tree with zero changed files. The generated commit remains first-parent provenance; the unsupported memoization and task-specific doctrine are not current product delta. +v2.53 preserves v2.52's owner graph, #1745 zero-effective-delta performance correction, localization resource ceilings and registry-independent RFC 5646 repairs. The durable change is the twenty-third UI-localization RED→repair on #1740: RFC 4647 wildcard-only lookup no longer fabricates `selection_source=accept_language` when the selected locale is actually the configured product default. RED `deaf07941cfc2b607c2148f434ce1196a3db29d9`, causal fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` and doctoring/current exact head `d48e9e6f91d922e6b0dbf7497832836254c29eb9` make the selected locale and its authority provenance agree. ## 1. Evidence hierarchy and release posture @@ -69,52 +69,53 @@ Generated #1716, #1737 and #1744 are provenance only. #1744 ordinary convergence ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is now Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Fresh compare from protected `develop` is ahead-only with zero changed files; the current tree is exactly protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`. +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remains Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Fresh compare from protected `develop` is ahead-only with zero changed files; the current tree is exactly protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`. -The generated predecessor `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` wrapped `RunHistoryPanel`'s mapped event subtree in `useMemo([events])`, added task-specific `.jules/bolt.md` doctrine and asserted that potentially large event arrays justified the optimization. Canonical backend review disproved that premise for the current product surface: `_list_agent_run_records(...).limit(8)` feeds the primary `run_events`; fallback audit events are also bounded to eight and prompt fallback to five. No current browser profile, React render/commit timing, reference-stability evidence or buyer-path p95 receipt identifies mapping at most eight run rows as a material bottleneck. +The generated predecessor `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` wrapped `RunHistoryPanel`'s mapped event subtree in `useMemo([events])`, added task-specific `.jules/bolt.md` doctrine and asserted that potentially large event arrays justified the optimization. Canonical backend review disproved that premise for the current product surface: `_list_agent_run_records(...).limit(8)` feeds primary `run_events`; fallback audit events are also bounded to eight and prompt fallback to five. No current browser profile, React render/commit timing, reference-stability evidence or buyer-path p95 receipt identifies mapping at most eight run rows as a material bottleneck. -Ordinary convergence `a501ca66...` preserves the generated commit as first-parent history, adopts protected `develop` as an additional parent and restores the protected product tree without force rewrite. The generated performance claim therefore remains auditable but is not product progress. If future realistic profiling identifies RunHistory rendering as material, the measured owner must reproduce the real trigger on the bounded backend contract and fix the measured cause; the rejected memoization is not revived by inertia. +Ordinary convergence `a501ca66...` preserves the generated commit as first-parent history, adopts protected `develop` as an additional parent and restores the protected product tree without force rewrite. The generated performance claim remains auditable but is not product progress. Any future RunHistory performance owner starts from reproduced buyer-path evidence on the bounded backend contract. -## 4. UI Localization Catalog — v2.52 material contract +## 4. UI Localization Catalog — v2.53 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`91a0e8c402be8338b917feabfaa7e9872f76467f`**. Current source repairs are present; exact-current-head hosted acceptance is pending. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`d48e9e6f91d922e6b0dbf7497832836254c29eb9`**. Current source repairs are present; exact-current-head hosted acceptance is pending. #1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. -Twenty-two ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: +Twenty-three ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: 1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; 2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and source fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining supported ordinary `langtag` forms such as `en-x-private` and `en-u-ca-gregory`; +3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining `en-x-private` and `en-u-ca-gregory`; 4. RFC 5646 `Language-Tag` is `langtag / privateuse / grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` and fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` preserve supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; -5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` complete the syntax-versus-support boundary: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are syntactically well-formed but fail with `ui_locale_unsupported` because no first subtag maps to the eight release locales; -6. RED `da7e2653a158a259f4d327f1cf017674c7721064` and fix `81e061c000a13261ced87b7d6f71fbce64637821` enforce RFC 5646 §2.2.6's registry-independent extension-singleton uniqueness rule: `en-a-bbb-a-ccc` is invalid, while `en-a-bbb-x-a-ccc` remains permitted because scanning stops at private-use `x`; -7. RED `c34b45957799575ea7e11c84992fdf84461b783f` and fix `96adc96dd5fab6e31734c2c23257b0f0f40447ee` enforce RFC 5646 §2.2.9's duplicate-variant prohibition case-insensitively before extensions/private use: `en-1901-1901` and `en-oxendict-OXENDICT` are invalid, while `en-1901-x-1901` remains valid structural input for release-level `en` normalization; -8. RED `c49c80904ae1c38ee529a4b65e2fdb6612863c47` and fix `983194dd129cc593a4caa3c8531fb669986e4262` enforce RFC 5646 §2.2.2's permanently reserved second/third extlang positions: `zh-cmn-yue` is invalid even though compatibility ABNF can match it, while one-extlang `zh-cmn-Hans-CN → zh` remains accepted. RFC Errata 5457 documents that this validity condition is omitted from §2.2.9's compact list but remains normative in §2.2.2; -9. the irregular grandfathered set and these structural validity checks do not create a moving registry dependency. Full BCP 47 validity still depends on a dated IANA registry for subtag membership, variant `Prefix` relationships, preferred values and canonicalization; those require an explicit version/update/provenance contract rather than inference in this pure-policy slice; -10. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; its broader range grammar must not be reused as persisted/session language-tag validation or vice versa; +5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` separate language-tag syntax from eight-locale product support: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are well-formed but unsupported; +6. RED `da7e2653a158a259f4d327f1cf017674c7721064` and fix `81e061c000a13261ced87b7d6f71fbce64637821` enforce RFC 5646 §2.2.6 extension-singleton uniqueness before private use; +7. RED `c34b45957799575ea7e11c84992fdf84461b783f` and fix `96adc96dd5fab6e31734c2c23257b0f0f40447ee` reject duplicate variants case-insensitively before extensions/private use while allowing the same spelling inside private use; +8. RED `c49c80904ae1c38ee529a4b65e2fdb6612863c47` and fix `983194dd129cc593a4caa3c8531fb669986e4262` reject RFC 5646's permanently reserved second/third extlang positions while retaining one-extlang structural forms; +9. those structural checks do not create a moving registry dependency. Full BCP 47 registry membership, variant `Prefix`, preferred values and canonicalization require a dated IANA registry/version/update/provenance contract; +10. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; persisted/session language-tag validation and HTTP language-range validation are not interchangeable; 11. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -12. raw `Accept-Language` is capped at **8192 characters** before comma materialization/regex work and processes at most **64 non-empty language ranges**; -13. `q=` and `Q=` are equivalent quality-parameter names while qvalue syntax/range remains strict; -14. RFC 9110 list recipients ignore at most **32 empty comma members** under the Naruon product bound and reject the 33rd with `ui_accept_language_invalid`; +12. raw `Accept-Language` is capped at **8192 characters** before list/regex work and processes at most **64 non-empty language ranges**; +13. `q=` and `Q=` are equivalent parameter-name spellings while qvalue syntax/range remains strict; +14. RFC 9110 list-recipient semantics ignore at most **32 empty comma members** under Naruon's product bound and reject the 33rd; 15. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -16. wildcard/q=0 behavior preserves release-level supported-locale exclusions, and RFC 4647 wildcard control flow preserves positive later concrete ranges even when unsupported by the current release. `*;q=0.9, pt-BR;q=0.8` reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -17. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -18. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; -19. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; -20. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python's formatter would produce the same visible value; -21. all negotiation/key/content ceilings are Naruon product resource contracts layered over their standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; -22. source correctness on the repaired explicit-locale path does not transfer predecessor hosted evidence. Exact `91a0e8c4...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +16. RFC 4647 lookup preserves later positive concrete ranges even when unsupported. `*;q=0.9, pt-BR;q=0.8` skips `*`, fails to match Portuguese to release resources and reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; +17. twenty-third RED `deaf07941cfc2b607c2148f434ce1196a3db29d9` and fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` close the symmetric wildcard-only provenance defect: `*;q=0.9` resolves `(ko, product_default)`, and with `product_default="fr"` resolves `(fr, product_default)`. A supported q=0 exclusion still changes the candidate set, so `ko;q=0, *;q=0.8` may truthfully remain header-dependent and select `(en, accept_language)`; +18. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; +19. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; +20. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; +21. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python would render an equivalent visible value; +22. all negotiation/key/content ceilings are Naruon product resource contracts layered over standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; +23. source correctness does not transfer predecessor hosted evidence. Exact `d48e9e6f...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. -RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds are explicit application resource contracts. The separate 128/128 `screen_key`/`message_key` and 16,384/64/32 translation/placeholder ceilings are Naruon semantic/resource limits layered above PostgreSQL `text`, Unicode and Python behavior. +RFC 4647 §3.4 says `*` cannot identify a best matching tag; if it is the only range or no range follows, the default value is computed. §3.4.1 requires the application to define that defaulting behavior. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds, 128/128 key ceilings and 16,384/64/32 translation/placeholder ceilings are explicit application resource contracts. -No predecessor workflow/review receipt transfers to current #1740 exact `91a0e8c4...`. The source repairs are present, but queued/pending/current-head review evidence must become terminal and qualifying before merge. +No predecessor workflow/review receipt transfers to current #1740 exact `d48e9e6f...`. The RED, source repair and doctoring are present, but exact-head hosted checks and independent review must become terminal and qualifying before merge. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent validity contract, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. +Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent validity contract, truthful wildcard/default provenance, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. -A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve the parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. +A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -126,9 +127,9 @@ All Naruon LLM behavior must consume an immutable released contextual-orchestrat The current causal order remains: -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 `91a0e8c4...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity semantics, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity and truthful wildcard/default provenance, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` -#1745 is no longer an active causal blocker. It retains generated performance intent as zero-effective-delta provenance only. Any future RunHistory performance owner must start from reproduced buyer-path evidence rather than this rejected memoization. +#1745 is not an active causal blocker. It retains generated performance intent as zero-effective-delta provenance only. Any future RunHistory performance owner must start from reproduced buyer-path evidence rather than the rejected memoization. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -136,6 +137,6 @@ Wait state in one lane does not stop repair/development in independent lanes. Ge **Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. -**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745's generated memoization has been removed from effective product scope rather than counted as UI/performance progress. +**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745's generated memoization remains outside effective product scope rather than counted as UI/performance progress. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. From b77ca1da17dddcaea37a70f4178d08ad645b1e27 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 19:49:45 +0900 Subject: [PATCH 71/89] docs(gap): converge generated checksum and URL duplicate --- docs/product-technical-gap-baseline.md | 135 ++++++++++--------------- 1 file changed, 56 insertions(+), 79 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 0eeb08e6a..ccf12a556 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,142 +1,119 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.53 +**Baseline version:** 2.54 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.52 remains audit-visible as blob `7ec571a4593547ae23ddfa815f27f4148f565681`; v2.51 remains blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; v2.50 remains blob `e6faf4e0b6d507d6a62e3b96c8583ff7c912cab3`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.53 remains audit-visible as blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; v2.52 remains blob `7ec571a4593547ae23ddfa815f27f4148f565681`; v2.51 remains blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.53 preserves v2.52's owner graph, #1745 zero-effective-delta performance correction, localization resource ceilings and registry-independent RFC 5646 repairs. The durable change is the twenty-third UI-localization RED→repair on #1740: RFC 4647 wildcard-only lookup no longer fabricates `selection_source=accept_language` when the selected locale is actually the configured product default. RED `deaf07941cfc2b607c2148f434ce1196a3db29d9`, causal fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` and doctoring/current exact head `d48e9e6f91d922e6b0dbf7497832836254c29eb9` make the selected locale and its authority provenance agree. +v2.54 preserves v2.53's owner graph and the twenty-third #1740 RFC 4647 wildcard/default provenance repair. The durable addition is the generated-tool overlap correction for #1746. Generated predecessor `1b20567af6c3eedfbb69aa995f210fe94fbfcf16` attempted to create a second weak-digest security surface and a second regex-only URL extractor directly on `develop`; both are weaker duplicates of canonical owners #1361 and #1418. Ordinary two-parent convergence `167b32ec7077ff11e1d3e81c43a2205433a2bbd7` preserves generated history, adopts protected `develop`, restores exact protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, and leaves zero effective files. #1746 is Draft provenance only. ## 1. Evidence hierarchy and release posture -When evidence conflicts, use this order: exact protected-branch code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. +Evidence authority is: exact protected code/migrations/tests/runtime contracts → protected architecture/operations docs → exact current PR source and current-head evidence → live Issue/Proposed ADR authority → historical snapshots. Pending, queued, cancelled, stale, predecessor-head, skipped-required, source-neutral, author-only, local-only, or model-only evidence is not passing evidence. -Protected `develop` remains exact `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Active rulesets and live PR/Issue inventory must be re-read before acceptance; volatile queue and workflow telemetry is never frozen into this baseline. +Protected `develop` is `042b0c70531b229af3acbd0421a2f23098d848b3`, tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, with 17 required status contexts. Active rulesets, PR/Issue inventory, owner heads and releases must be re-read before acceptance; volatile queue telemetry is never frozen into this baseline. -Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact integrated protected head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. +Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immutable=false`. It is historical publication evidence only. A commercial candidate requires one exact protected integrated head with terminal required contexts, current security evidence, zero valid unresolved review findings, qualifying independent post-last-push review, immutable publication identity, SBOM/provenance, reproducibility, rollback and buyer-visible acceptance for changed behavior. **Merge/Release Gate: FAIL. UI Delivery Gate: FAIL.** ## 2. Central CI/security control plane -Protected central `.github/main` is the authority for reusable CI/review/security/release workflows. Naruon consumes accepted/released owner contracts and does not copy central workflow source. +Protected `ContextualWisdomLab/.github/main` owns reusable CI/review/security/release workflows. Naruon consumes canonical owner contracts and does not copy central workflow source. -- `.github#712` is the Actions execution-capacity owner. Queue/running state is volatile and must be read live. No blind rerun, source-neutral wake commit or required-check weakening is permitted. -- `.github#1911` remains the canonical repository-wide/full-suite Trusted-uv owner; legitimate terminal hosted acceptance is still required. -- `.github#2040` has converged Trusted-uv ownership through #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope; predecessor or cancelled generations are not acceptance. -- `.github#2291` remains source RED until all 24 specialized Strix fixture families stop materializing trusted binder/runtime into the consumer root. Acceptance requires non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots, preserved scenario assertions and exact-head hosted/review evidence. -- `.github#2109` is the dependent stacked-admission successor and must ordinary/non-force adopt repaired #2291. `.github#2272` remains its separate Pages/SAST descendant. `.github#2271/#2275/#2276` retain repository-identity, GHAS analysis-capability and real target permission/canary boundaries. +- `.github#712` owns Actions execution capacity. Queued current-head evidence remains incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. +- `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. +- `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. +- `.github#2291` remains source RED until every one of the 24 specialized Strix fixture families stops materializing trusted binder/runtime into the consumer root. Acceptance requires a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots, preserved scenario assertions and exact-head hosted/review evidence. +- `.github#2109` is the stacked-admission successor and must ordinary/non-force adopt repaired #2291. `.github#2272` remains its separate Pages/SAST descendant. `.github#2271/#2275/#2276` retain repository-identity, GHAS analysis-capability and real target permission/canary boundaries. -No Naruon product lane may reinterpret incomplete central hosted evidence as product GREEN. +No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. ## 3. Product source-owner graph ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Historical exact-head GREEN does not prove safety against the current vulnerability database; current Trivy/CodeQL revalidation belongs here rather than in feature PRs. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) remains the bounded provider-error confidentiality owner; inherited dependency Security RED is routed to #1623. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. ### 3.2 Migration/workspace and opaque UID ownership -[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage remains: +[#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage is `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. Descendants must not create parallel Alembic heads from protected `develop`. -`0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. - -#1503 is Draft. Descendants must not create parallel Alembic heads from protected `develop`. - -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. It owns the bounded `random()` → `gen_random_uuid()` repair for missing public UIDs, focused entropy regression, corrected Bandit/severity diagnosis and doctoring/TRACEABILITY. Opaque identity is defense in depth, not authorization. Generated #1743 is ordinary/non-force converged to #1727 and remains Draft zero-effective-delta provenance. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. Generated #1743 is zero-effective-delta provenance. Opaque identity remains defense in depth, not authorization. ### 3.3 NetworkGraph/performance -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. Its effective scope is `NetworkGraph.tsx` plus `NetworkGraph.bounded-options.test.tsx`; unrelated dependency/security drift has been repaired ordinary-forward while retained in ancestry. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 is zero-effective-delta provenance after ordinary convergence. -[#1628](https://github.com/ContextualWisdomLab/naruon/pull/1628) remains the first-five non-empty label-summary child; #1674 remains zero-effective-delta provenance and #1675 remains memoization owner. Generated #1742 is ordinary/non-force converged to #1593 and remains zero-effective-delta provenance. Generated NetworkGraph descendants must follow current canonical owner ancestry rather than reimplement or inherit stale evidence. +### 3.4 Data-hygiene/checksum/URL ownership -### 3.4 Checksum/data hygiene +Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the auditable data-hygiene product contract. -Issue #1247 remains the checksum contract. Normal security-labelled checksum surface is SHA-256, SHA-3-256 and BLAKE2b-256 only; MD5/SHA-1 remain outside the normal surface. #1361 remains the canonical `content_checksum_generator` owner; generated #1739 remains provenance. +- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. +- [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. +- Generated #1739 and earlier generated checksum descendants remain provenance only where their useful delta is inherited by #1361. +- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its predecessor exposed MD5/SHA-1 under security-labelled `hash_generator` and introduced an unbounded regex-only `url_extractor`. Both violate #1247/canonical-owner contracts. Ordinary two-parent convergence preserves generated history while restoring exact protected tree; fresh protected-base compare is ahead 2 / behind 0 / zero changed files. It is not a second checksum or URL owner and must not independently merge as product progress. ### 3.5 Settings native-disabled accessibility -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Its bounded product tree owns the source removals, focused `SettingsLayout.native-disabled.test.tsx` regression and standards doctoring; browser/keyboard/responsive acceptance remains a separate delivery gate. - -Generated #1716, #1737 and #1744 are provenance only. #1744 ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` preserves generated history while adopting exact #1676, retargeting to that owner and leaving zero effective product delta. It must not independently merge or broaden the narrow native-control decision into a repository-wide ban on `aria-disabled`. +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Generated #1716, #1737 and #1744 are provenance only; #1744 ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` has zero effective delta. Browser/keyboard/responsive acceptance remains a separate delivery gate. ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) remains Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Fresh compare from protected `develop` is ahead-only with zero changed files; the current tree is exactly protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`. - -The generated predecessor `5cdebe154f1ea24b0f924769d0073c4dc701e7d6` wrapped `RunHistoryPanel`'s mapped event subtree in `useMemo([events])`, added task-specific `.jules/bolt.md` doctrine and asserted that potentially large event arrays justified the optimization. Canonical backend review disproved that premise for the current product surface: `_list_agent_run_records(...).limit(8)` feeds primary `run_events`; fallback audit events are also bounded to eight and prompt fallback to five. No current browser profile, React render/commit timing, reference-stability evidence or buyer-path p95 receipt identifies mapping at most eight run rows as a material bottleneck. - -Ordinary convergence `a501ca66...` preserves the generated commit as first-parent history, adopts protected `develop` as an additional parent and restores the protected product tree without force rewrite. The generated performance claim remains auditable but is not product progress. Any future RunHistory performance owner starts from reproduced buyer-path evidence on the bounded backend contract. - -## 4. UI Localization Catalog — v2.53 material contract +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact **`d48e9e6f91d922e6b0dbf7497832836254c29eb9`**. Current source repairs are present; exact-current-head hosted acceptance is pending. +## 4. UI Localization Catalog — v2.54 material contract -#1740 owns pure domain policy only: KO/EN/JA/ZH/VI/ES/DE/FR release locale identity, persisted → session → weighted `Accept-Language` → product-default precedence, bounded locale/header parsing, bounded stable screen/message identities, bounded persistable translation text, bounded exact simple named-placeholder schemas and typed boundary failures. It owns no database/Alembic revision, HTTP API, browser cache/runtime, Storybook page, authoring UI, ontology-label authority or LLM translation path. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `d48e9e6f91d922e6b0dbf7497832836254c29eb9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. -Twenty-three ordinary-forward RED→repair sequences now define the current source policy. Durable/current invariants are: +Twenty-three ordinary-forward RED→repair sequences define the current policy. Durable invariants are: -1. explicit persisted/session locale rejects C0 controls and DEL before normalization; only ASCII SP is benign outer whitespace; -2. explicit locale input is capped at **128 characters** and rejected above the limit without truncation; -3. RED `478bd95fdbd2b6601fae1ab70c3513abf0f985fe` and fix `3a87209306ad1b3dee67cb9e0e9e513dfb7a4f3a` reject malformed terminal private-use/extension singletons such as `en-x` and `en-u` while retaining `en-x-private` and `en-u-ca-gregory`; -4. RFC 5646 `Language-Tag` is `langtag / privateuse / grandfathered`. RED `8d9a0f67a47b26eb1e36a7bc65681470033c6f74` and fix `aceef1b282d948411fe9b04b8cd08750fcdacfe8` preserve supported-primary grandfathered `en-GB-oed → en`, `zh-min → zh`, and `zh-min-nan → zh`; -5. RED `d23d4095d1c2ac8542f1ac247b6fee87fcb9485c` and fix `dc077bec9ae47e1421fa678ae43451f65784c410` separate language-tag syntax from eight-locale product support: private-use-only `x-private` and irregular grandfathered `i-klingon` / `sgn-BE-FR` are well-formed but unsupported; -6. RED `da7e2653a158a259f4d327f1cf017674c7721064` and fix `81e061c000a13261ced87b7d6f71fbce64637821` enforce RFC 5646 §2.2.6 extension-singleton uniqueness before private use; -7. RED `c34b45957799575ea7e11c84992fdf84461b783f` and fix `96adc96dd5fab6e31734c2c23257b0f0f40447ee` reject duplicate variants case-insensitively before extensions/private use while allowing the same spelling inside private use; -8. RED `c49c80904ae1c38ee529a4b65e2fdb6612863c47` and fix `983194dd129cc593a4caa3c8531fb669986e4262` reject RFC 5646's permanently reserved second/third extlang positions while retaining one-extlang structural forms; -9. those structural checks do not create a moving registry dependency. Full BCP 47 registry membership, variant `Prefix`, preferred values and canonicalization require a dated IANA registry/version/update/provenance contract; -10. `Accept-Language` remains a separate RFC 4647 basic-language-range boundary; persisted/session language-tag validation and HTTP language-range validation are not interchangeable; -11. `Accept-Language` rejects C0/DEL except HTAB where HTTP OWS permits it; protocol OWS is SP/HTAB rather than Python generic whitespace; -12. raw `Accept-Language` is capped at **8192 characters** before list/regex work and processes at most **64 non-empty language ranges**; -13. `q=` and `Q=` are equivalent parameter-name spellings while qvalue syntax/range remains strict; -14. RFC 9110 list-recipient semantics ignore at most **32 empty comma members** under Naruon's product bound and reject the 33rd; -15. runtime `product_default` is type-validated before set membership so arbitrary Python hashability cannot leak as product semantics; -16. RFC 4647 lookup preserves later positive concrete ranges even when unsupported. `*;q=0.9, pt-BR;q=0.8` skips `*`, fails to match Portuguese to release resources and reaches `(ko, product_default)` rather than falsely attributing the same locale to `accept_language`; -17. twenty-third RED `deaf07941cfc2b607c2148f434ce1196a3db29d9` and fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` close the symmetric wildcard-only provenance defect: `*;q=0.9` resolves `(ko, product_default)`, and with `product_default="fr"` resolves `(fr, product_default)`. A supported q=0 exclusion still changes the candidate set, so `ko;q=0, *;q=0.8` may truthfully remain header-dependent and select `(en, accept_language)`; -18. `screen_key` and `message_key` are capped at **128 characters** before regex acceptance; over-limit identities are rejected and never truncated; -19. translated catalog text rejects U+0000, isolated surrogate code points and non-string input before placeholder parsing/persistence and is capped at **16,384 Python characters**; -20. `placeholder_schema` is tuple/list only, validates element type/syntax before uniqueness, caps one name at **64 characters** and one message/schema at **32 unique names**, and direct extraction enforces the same 32-name ceiling; -21. placeholder source syntax is canonical before parser normalization. `{account_name}` is valid; `{account_name:}`, conversions, traversal and format specifications are invalid publication input even where Python would render an equivalent visible value; -22. all negotiation/key/content ceilings are Naruon product resource contracts layered over standards/storage boundaries. Over-limit values fail closed and no truncation is permitted; -23. source correctness does not transfer predecessor hosted evidence. Exact `d48e9e6f...` still requires fresh full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +1. release locales are exactly KO/EN/JA/ZH/VI/ES/DE/FR; +2. explicit persisted/session locale rejects C0/DEL before normalization, permits ASCII SP as the benign outer whitespace, and is capped at 128 characters without truncation; +3. malformed terminal singleton forms such as `en-x` and `en-u` are rejected while `en-x-private` and `en-u-ca-gregory` are retained; +4. supported-primary grandfathered `en-GB-oed`, `zh-min`, and `zh-min-nan` are retained; private-use-only and irregular-grandfathered syntax is separated from eight-locale support; +5. registry-independent RFC 5646 validity rejects repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy while leaving live registry membership/prefix/preferred-value/canonicalization to a dated IANA-registry contract; +6. `Accept-Language` is a separate RFC 4647 basic-language-range boundary, rejects C0/DEL except HTAB as HTTP OWS, uses SP/HTAB rather than Python generic whitespace, caps raw input at 8192 characters, handles at most 64 non-empty ranges and at most 32 empty list members, and treats `q=`/`Q=` equivalently while retaining strict qvalue syntax; +7. runtime `product_default` is type-validated before set membership; +8. lookup preserves later positive concrete ranges even when unsupported. `*;q=0.9, pt-BR;q=0.8` skips `*`, fails Portuguese against release resources and reaches `(ko, product_default)`; +9. twenty-third RED `deaf07941cfc2b607c2148f434ce1196a3db29d9` and fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` close wildcard-only provenance: `*;q=0.9` resolves `(ko, product_default)`, and with `product_default="fr"` resolves `(fr, product_default)`. Supported q=0 exclusion remains header-dependent, so `ko;q=0, *;q=0.8` may select `(en, accept_language)`; +10. `screen_key` and `message_key` are each capped at 128 characters before regex acceptance and are never truncated; +11. translated text rejects U+0000, isolated surrogates and non-string input and is capped at 16,384 Python characters; +12. placeholder schema is tuple/list only, validates elements before uniqueness, caps names at 64 characters and a message/schema at 32 unique names, and direct extraction enforces the same 32-name ceiling; +13. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; +14. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; +15. predecessor workflow/review receipts do not transfer. Exact `d48e9e6f...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. -RFC 4647 §3.4 says `*` cannot identify a best matching tag; if it is the only range or no range follows, the default value is computed. §3.4.1 requires the application to define that defaulting behavior. RFC 9110 §5.4 allows recipients to refuse field values larger than they are willing to process and does not set one universal field-size ceiling. RFC 4647 §4.4 permits range-length restrictions comparable to tag restrictions; RFC 5646 §4.4.1 permits documented implementation limits. Naruon's 128/8192/64/32 negotiation bounds, 128/128 key ceilings and 16,384/64/32 translation/placeholder ceilings are explicit application resource contracts. - -No predecessor workflow/review receipt transfers to current #1740 exact `d48e9e6f...`. The RED, source repair and doctoring are present, but exact-head hosted checks and independent review must become terminal and qualifying before merge. +RFC 4647 §3.4 states that `*` cannot identify a best matching tag and defaulting is computed when `*` is the only effective range or no later range follows; §3.4.1 requires the application to define default behavior. The doctoring on exact #1740 records this alongside RFC 9110/5646 resource-boundary reasoning. ### Localization persistence/API/UI order -Translation persistence must wait until #1503 or a verified complete successor reaches protected ancestry and until #1740 exact-current-head policy acceptance, then create the next ordinary Alembic descendant from the then-current single head. Published catalog versions are immutable, complete for all eight release locales, placeholder/text validated before publication and rollback-selectable without rewriting history. Persistence and API boundaries must preserve the repaired explicit-locale syntax/support/registry-independent validity contract, truthful wildcard/default provenance, the 128/128 key ceiling, the 128/8192/64/32 negotiation contract and the 16,384/64/32 translation/placeholder contract without truncation. - -A screen-scoped read contract returns only the requested screen/locale with immutable resource version and ETag/cache identity. The HTTP owner must preserve parser/content resource contracts and reject over-limit negotiation/content before buyer-path work; realistic k6/E2E must measure normal, exact-boundary and over-limit behavior. Do not ship a browser-wide mega-catalog, per-key network waterfall or heavy SPA i18n dependency by default. UI-copy authority remains separate from ontology/concept labels. +Translation persistence waits until #1503 or a verified complete successor reaches protected ancestry and #1740 exact-current-head policy acceptance. The next persistence owner must create one ordinary Alembic descendant from the then-current single head, publish immutable complete eight-locale resource versions, preserve exact placeholder/text validation and truthful wildcard/default provenance, and retain the 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts without truncation. -KO/EN/JA/ZH/VI/ES/DE/FR acceptance requires Storybook plus real-browser E2E for normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch semantics, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES text expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. +The read API is screen-scoped with immutable resource version plus ETag/cache identity; no browser-wide mega-catalog, per-key network waterfall, heavy browser i18n default or cross-service SQL. Realistic k6/E2E must cover normal, exact-boundary and over-limit behavior. KO/EN/JA/ZH/VI/ES/DE/FR UI acceptance requires Storybook plus real browser E2E across normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. ## 5. Contextual Orchestrator and LLM boundary -All Naruon LLM behavior must consume an immutable released contextual-orchestrator API/client/schema contract. No mutable owner head, source copy, provider group hard-code or direct provider fallback is acceptable. Until contextual-orchestrator has a canonical release identity satisfying the product contract, dependent Naruon work such as #1549 remains fail-closed. Model-backed GitHub Actions must use the central `orchestrator/free` contract and gateway token only. - -## 6. Remaining commercial/buyer-visible gaps +All Naruon LLM behavior consumes an immutable released contextual-orchestrator API/client/schema contract. Mutable owner heads, source copy, provider-group hard-codes and direct provider fallback are not accepted. Until contextual-orchestrator has the required canonical immutable release identity, dependent Naruon work such as #1549 remains fail-closed. Model-backed GitHub Actions use central `orchestrator/free` and gateway token only. -The current causal order remains: +## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 → #1628/#1674/#1675 → checksum/backend dependency owners → #1676 Settings native-disabled owner + zero-delta generated provenance → #1503 → #1727 plus zero-delta provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired explicit-locale syntax/support/registry-independent validity and truthful wildcard/default provenance, 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts → immutable contextual-orchestrator release + #1549 → #1729 and eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through their canonical owners → Storybook owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback.` +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745 is not an active causal blocker. It retains generated performance intent as zero-effective-delta provenance only. Any future RunHistory performance owner must start from reproduced buyer-path evidence rather than the rejected memoization. - -Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open as provenance unless a verified successor fully inherits all valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. +#1745 and #1746 are not active causal blockers; both preserve rejected/generated intent as zero-effective-delta provenance. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. ## 7. Delivery gates -**Merge/Release Gate: FAIL.** There is no exact protected integrated candidate satisfying required checks, current security evidence, independent post-last-push review and immutable release evidence. +**Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. + +**UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**UI Delivery Gate: FAIL.** The localization pure-policy source repairs are present, but exact-current-head acceptance is pending and eight-locale catalog persistence/API/page composition, Storybook/browser/a11y acceptance and current exact resource-version evidence are not integrated. #1745's generated memoization remains outside effective product scope rather than counted as UI/performance progress. +**Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable release artifacts, generated-provenance branches, unmeasured memoization, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. The next run must fresh-read all live authority before mutating or accepting any lane. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. From 980a80c484622942f5330703187e36775fce1527 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 20:47:33 +0900 Subject: [PATCH 72/89] docs(gap): record bounded dependency-update ownership --- docs/product-technical-gap-baseline.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index ccf12a556..383533ef8 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.54 +**Baseline version:** 2.55 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.53 remains audit-visible as blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; v2.52 remains blob `7ec571a4593547ae23ddfa815f27f4148f565681`; v2.51 remains blob `0d60c3296e3e5d29fea9749effd2fa43dc61aed1`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.54 remains audit-visible as blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; v2.53 remains blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; v2.52 remains blob `7ec571a4593547ae23ddfa815f27f4148f565681`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.54 preserves v2.53's owner graph and the twenty-third #1740 RFC 4647 wildcard/default provenance repair. The durable addition is the generated-tool overlap correction for #1746. Generated predecessor `1b20567af6c3eedfbb69aa995f210fe94fbfcf16` attempted to create a second weak-digest security surface and a second regex-only URL extractor directly on `develop`; both are weaker duplicates of canonical owners #1361 and #1418. Ordinary two-parent convergence `167b32ec7077ff11e1d3e81c43a2205433a2bbd7` preserves generated history, adopts protected `develop`, restores exact protected tree `8fde14381aaa430eeaaf61151dab6f6800127cd3`, and leaves zero effective files. #1746 is Draft provenance only. +v2.55 preserves v2.54's owner graph, #1740 twenty-third RFC 4647 wildcard/default provenance repair and #1746 generated-tool overlap correction. The durable addition is the dependency-update grouping repair now owned by Draft #1752. Protected `.github/dependabot.yml` grouped all backend Python, root CI Python and frontend npm version changes with wildcard `patterns: ["*"]` and no SemVer bound. The policy reproduced direct-to-`develop` generated PRs #1749 (76 backend updates), #1750 (19 frontend updates) and #1751 (104 root/CI updates), coupling security-material changes and unrelated compatibility migrations across existing canonical owners. #1752 exact `70d315da85be046d1d0f24a2ded861cd44e2bb69` adds an executable RED and a minimal prospective fix: those three wildcard groups are version-update patch-only; backend `aiosmtplib` is excluded for independent security review; major/minor updates remain visible as separate Dependabot PRs rather than being disabled. Existing generated PRs remain provenance/migration lanes and must still reconcile through their canonical owners. ## 1. Evidence hierarchy and release posture @@ -37,9 +37,13 @@ No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. Generated #1750 is now Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js `16.3.5` successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner. [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) remains the broader backend dependency descendant and must reconcile losslessly onto #1565 with one resolver-produced lock graph. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the current broad backend update lane, has been restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its current generated four-file delta lacks #1565's `backend/uv.lock` owner delta and is therefore not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. + +Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. It spans backend, connector, root CI/Strix and provider/model-client requirement inputs, so there is deliberately no synthetic single owner to retarget it onto. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. + +Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `70d315da85be046d1d0f24a2ded861cd44e2bb69` is the sole Naruon owner for the grouping-policy defect. RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment. Causal fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` changes only `backend-python`, `ci-python` and `frontend-npm`; it does not edit current generated locks, disable major/minor updates, copy central workflow source or weaken security/review gates. Exact-head hosted acceptance, independent review and a later Dependabot-cycle operational check remain required. ### 3.2 Migration/workspace and opaque UID ownership @@ -68,7 +72,7 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. -## 4. UI Localization Catalog — v2.54 material contract +## 4. UI Localization Catalog — v2.55 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `d48e9e6f91d922e6b0dbf7497832836254c29eb9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -104,9 +108,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1623 current-vulnerability revalidation → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745 and #1746 are not active causal blockers; both preserve rejected/generated intent as zero-effective-delta provenance. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. +#1745 and #1746 are not active causal blockers; both preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. ## 7. Delivery gates @@ -114,6 +118,8 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. +**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; repair present in #1752.** The reproduced wildcard mega-group policy now has an executable RED and bounded prospective fix, but #1752 itself still needs exact-head hosted/review acceptance and the current generated dependency lanes still require owner-specific reconciliation. Do not count their direct generated branches as accepted security or compatibility upgrades. + **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From fcbfa268e9abcc5e947ef49fd83d9d02d6fdec83 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 21 Sep 2026 21:47:10 +0900 Subject: [PATCH 73/89] docs(gap): isolate Dependabot manifest owners --- docs/product-technical-gap-baseline.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 383533ef8..39341d472 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.55 +**Baseline version:** 2.56 **Observed on:** 2026-09-21 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.54 remains audit-visible as blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; v2.53 remains blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; v2.52 remains blob `7ec571a4593547ae23ddfa815f27f4148f565681`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.55 remains audit-visible as blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; v2.53 remains blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.55 preserves v2.54's owner graph, #1740 twenty-third RFC 4647 wildcard/default provenance repair and #1746 generated-tool overlap correction. The durable addition is the dependency-update grouping repair now owned by Draft #1752. Protected `.github/dependabot.yml` grouped all backend Python, root CI Python and frontend npm version changes with wildcard `patterns: ["*"]` and no SemVer bound. The policy reproduced direct-to-`develop` generated PRs #1749 (76 backend updates), #1750 (19 frontend updates) and #1751 (104 root/CI updates), coupling security-material changes and unrelated compatibility migrations across existing canonical owners. #1752 exact `70d315da85be046d1d0f24a2ded861cd44e2bb69` adds an executable RED and a minimal prospective fix: those three wildcard groups are version-update patch-only; backend `aiosmtplib` is excluded for independent security review; major/minor updates remain visible as separate Dependabot PRs rather than being disabled. Existing generated PRs remain provenance/migration lanes and must still reconcile through their canonical owners. +v2.56 preserves v2.55's owner graph, #1740 twenty-third RFC 4647 wildcard/default provenance repair and #1746 generated-tool overlap correction. The durable change is a second causal repair inside Draft #1752. The first #1752 repair bounded backend Python, root CI Python and frontend npm wildcard groups to version-update patches and excluded backend `aiosmtplib`. Fresh inspection of generated #1751 then showed that root `pip` scanning itself crossed owner boundaries before grouping: the same `ci-python` PR changed three `backend/` requirement files, two `connector/` requirement files and three root CI/Strix requirement files. #1752 exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` now carries a second RED/fix pair requiring root `pip` to exclude `backend/**` and `connector/**`, leaving those trees to their dedicated Dependabot entries while root CI requirements remain under the root entry. ## 1. Evidence hierarchy and release posture @@ -41,9 +41,9 @@ No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. [#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the current broad backend update lane, has been restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its current generated four-file delta lacks #1565's `backend/uv.lock` owner delta and is therefore not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. -Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. It spans backend, connector, root CI/Strix and provider/model-client requirement inputs, so there is deliberately no synthetic single owner to retarget it onto. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. +Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. Its exact changed-file inventory proves the root `pip` stanza crossed manifest-owner boundaries: `backend/requirements-agent.txt`, `backend/requirements-hashes.txt`, `backend/requirements.txt`, `connector/requirements-hashes.txt`, `connector/requirements.txt`, `requirements-bandit-ci-hashes.txt`, `requirements-strix-ci-hashes.txt`, and `requirements-strix-ci.txt`. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. -Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `70d315da85be046d1d0f24a2ded861cd44e2bb69` is the sole Naruon owner for the grouping-policy defect. RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment. Causal fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` changes only `backend-python`, `ci-python` and `frontend-npm`; it does not edit current generated locks, disable major/minor updates, copy central workflow source or weaken security/review gates. Exact-head hosted acceptance, independent review and a later Dependabot-cycle operational check remain required. +Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head hosted acceptance, independent review and a later Dependabot-cycle operational check remain required. ### 3.2 Migration/workspace and opaque UID ownership @@ -72,7 +72,7 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. -## 4. UI Localization Catalog — v2.55 material contract +## 4. UI Localization Catalog — v2.56 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `d48e9e6f91d922e6b0dbf7497832836254c29eb9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -108,7 +108,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745 and #1746 are not active causal blockers; both preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -118,8 +118,8 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; repair present in #1752.** The reproduced wildcard mega-group policy now has an executable RED and bounded prospective fix, but #1752 itself still needs exact-head hosted/review acceptance and the current generated dependency lanes still require owner-specific reconciliation. Do not count their direct generated branches as accepted security or compatibility upgrades. +**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group problem and root-pip nested-manifest bleed now both have executable RED/fix pairs. #1752 itself still needs exact-head hosted/review acceptance, and a later Dependabot cycle must prove that root `ci-python` no longer changes `backend/` or `connector/` while major/minor updates remain separately visible. Current generated dependency lanes still require owner-specific reconciliation. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From 35b9b315a914db4fe763437ceef507a7fa63e32f Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 00:51:12 +0900 Subject: [PATCH 74/89] docs(gap): record explicit locale whitespace boundary --- docs/product-technical-gap-baseline.md | 31 +++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 39341d472..69fefe76d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.56 -**Observed on:** 2026-09-21 (Asia/Seoul) +**Baseline version:** 2.57 +**Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.55 remains audit-visible as blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; v2.53 remains blob `0eeb08e6a75a819e89adbf2d08e6c83a3909a26b`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.56 remains audit-visible as blob `39341d4723d0982aa11aa7b24faf5394600bc074`; v2.55 remains blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.56 preserves v2.55's owner graph, #1740 twenty-third RFC 4647 wildcard/default provenance repair and #1746 generated-tool overlap correction. The durable change is a second causal repair inside Draft #1752. The first #1752 repair bounded backend Python, root CI Python and frontend npm wildcard groups to version-update patches and excluded backend `aiosmtplib`. Fresh inspection of generated #1751 then showed that root `pip` scanning itself crossed owner boundaries before grouping: the same `ci-python` PR changed three `backend/` requirement files, two `connector/` requirement files and three root CI/Strix requirement files. #1752 exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` now carries a second RED/fix pair requiring root `pip` to exclude `backend/**` and `connector/**`, leaving those trees to their dedicated Dependabot entries while root CI requirements remain under the root entry. +v2.57 preserves v2.56's owner graph and both causal repairs in Draft #1752. The durable addition is #1740's twenty-fourth RFC 5646 explicit-locale repair: persisted/session locale identity is no longer silently rewritten with ASCII-SP trimming before language-tag validation. RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` pins leading/trailing-SP inputs to `ui_locale_input_invalid`; causal fix `c94c9345008cf6e339a9f90f59afccc18adea39f` removes SP trimming only from the explicit locale path, while HTTP `Accept-Language` keeps its separate SP/HTAB OWS contract. #1740 current exact is `97279b9dfd8d47d3033007d36398ccf7aa9e6943`. ## 1. Evidence hierarchy and release posture @@ -53,7 +53,7 @@ Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact ### 3.3 NetworkGraph/performance -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 is zero-effective-delta provenance after ordinary convergence. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 and #1754 are zero-effective-delta provenance after ordinary convergence; neither is independent product progress nor evidence for an end-to-end O(1) NetworkGraph path. ### 3.4 Data-hygiene/checksum/URL ownership @@ -72,14 +72,14 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. -## 4. UI Localization Catalog — v2.56 material contract +## 4. UI Localization Catalog — v2.57 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `d48e9e6f91d922e6b0dbf7497832836254c29eb9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `97279b9dfd8d47d3033007d36398ccf7aa9e6943`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. -Twenty-three ordinary-forward RED→repair sequences define the current policy. Durable invariants are: +Twenty-four ordinary-forward RED→repair sequences define the current policy. Durable invariants are: 1. release locales are exactly KO/EN/JA/ZH/VI/ES/DE/FR; -2. explicit persisted/session locale rejects C0/DEL before normalization, permits ASCII SP as the benign outer whitespace, and is capped at 128 characters without truncation; +2. explicit persisted/session locale rejects C0/DEL and any surrounding SP before RFC 5646 acceptance, is capped at 128 characters without truncation, and is never silently trimmed into a different language-tag identity; 3. malformed terminal singleton forms such as `en-x` and `en-u` are rejected while `en-x-private` and `en-u-ca-gregory` are retained; 4. supported-primary grandfathered `en-GB-oed`, `zh-min`, and `zh-min-nan` are retained; private-use-only and irregular-grandfathered syntax is separated from eight-locale support; 5. registry-independent RFC 5646 validity rejects repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy while leaving live registry membership/prefix/preferred-value/canonicalization to a dated IANA-registry contract; @@ -92,13 +92,14 @@ Twenty-three ordinary-forward RED→repair sequences define the current policy. 12. placeholder schema is tuple/list only, validates elements before uniqueness, caps names at 64 characters and a message/schema at 32 unique names, and direct extraction enforces the same 32-name ceiling; 13. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; 14. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; -15. predecessor workflow/review receipts do not transfer. Exact `d48e9e6f...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +15. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; +16. predecessor workflow/review receipts do not transfer. Exact `97279b9d...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. -RFC 4647 §3.4 states that `*` cannot identify a best matching tag and defaulting is computed when `*` is the only effective range or no later range follows; §3.4.1 requires the application to define default behavior. The doctoring on exact #1740 records this alongside RFC 9110/5646 resource-boundary reasoning. +RFC 5646 §2.1 states that whitespace is not permitted in a language tag. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces: HTTP field OWS cannot be reused to normalize explicit persisted/session language-tag identity. RFC 4647 §3.4 also states that `*` cannot identify a best matching tag and defaulting is computed when `*` is the only effective range or no later range follows; §3.4.1 requires the application to define default behavior. The doctoring on exact #1740 records these boundaries alongside RFC 9110/5646 resource reasoning. ### Localization persistence/API/UI order -Translation persistence waits until #1503 or a verified complete successor reaches protected ancestry and #1740 exact-current-head policy acceptance. The next persistence owner must create one ordinary Alembic descendant from the then-current single head, publish immutable complete eight-locale resource versions, preserve exact placeholder/text validation and truthful wildcard/default provenance, and retain the 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts without truncation. +Translation persistence waits until #1503 or a verified complete successor reaches protected ancestry and #1740 exact-current-head policy acceptance. The next persistence owner must create one ordinary Alembic descendant from the then-current single head, publish immutable complete eight-locale resource versions, preserve exact placeholder/text validation, explicit-locale no-rewrite semantics and truthful wildcard/default provenance, and retain the 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts without truncation. The read API is screen-scoped with immutable resource version plus ETag/cache identity; no browser-wide mega-catalog, per-key network waterfall, heavy browser i18n default or cross-service SQL. Realistic k6/E2E must cover normal, exact-boundary and over-limit behavior. KO/EN/JA/ZH/VI/ES/DE/FR UI acceptance requires Storybook plus real browser E2E across normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -108,9 +109,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `d48e9e6f...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `97279b9d...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745 and #1746 are not active causal blockers; both preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. +#1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. ## 7. Delivery gates @@ -122,4 +123,4 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. From 88d16afb6eff33149a55290822bc248eebfada6e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 01:47:52 +0900 Subject: [PATCH 75/89] docs(gap): record grandfathered locale admission repair --- docs/product-technical-gap-baseline.md | 39 +++++++++++++------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 69fefe76d..56650ec35 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.57 +**Baseline version:** 2.58 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.56 remains audit-visible as blob `39341d4723d0982aa11aa7b24faf5394600bc074`; v2.55 remains blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.57 remains audit-visible as blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; v2.56 remains blob `39341d4723d0982aa11aa7b24faf5394600bc074`; v2.55 remains blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.57 preserves v2.56's owner graph and both causal repairs in Draft #1752. The durable addition is #1740's twenty-fourth RFC 5646 explicit-locale repair: persisted/session locale identity is no longer silently rewritten with ASCII-SP trimming before language-tag validation. RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` pins leading/trailing-SP inputs to `ui_locale_input_invalid`; causal fix `c94c9345008cf6e339a9f90f59afccc18adea39f` removes SP trimming only from the explicit locale path, while HTTP `Accept-Language` keeps its separate SP/HTAB OWS contract. #1740 current exact is `97279b9dfd8d47d3033007d36398ccf7aa9e6943`. +v2.58 preserves v2.57's owner graph and #1740's explicit-locale no-trim repair. The durable addition is #1740's twenty-fifth repair, which closes a RED that already existed on predecessor exact `97279b9dfd8d47d3033007d36398ccf7aa9e6943`: the focused regression required RFC 5646 grandfathered `zh-min-nan -> zh`, while production reinterpreted the spelling as two ordinary extlang positions and rejected it. Causal source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` recognizes the RFC's complete fixed regular+irregular grandfathered alternatives before applying ordinary `langtag` duplicate/extlang guards; doctoring exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2` records the standards boundary. No live-registry canonicalization or Preferred-Value rewrite is introduced. ## 1. Evidence hierarchy and release posture @@ -37,13 +37,13 @@ No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. Generated #1750 is now Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js `16.3.5` successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. Generated #1750 is Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the current broad backend update lane, has been restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its current generated four-file delta lacks #1565's `backend/uv.lock` owner delta and is therefore not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the broad backend update lane, restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its generated delta does not completely inherit #1565 and is not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. Its exact changed-file inventory proves the root `pip` stanza crossed manifest-owner boundaries: `backend/requirements-agent.txt`, `backend/requirements-hashes.txt`, `backend/requirements.txt`, `connector/requirements-hashes.txt`, `connector/requirements.txt`, `requirements-bandit-ci-hashes.txt`, `requirements-strix-ci-hashes.txt`, and `requirements-strix-ci.txt`. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. -Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head hosted acceptance, independent review and a later Dependabot-cycle operational check remain required. +Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head hosted acceptance and a later Dependabot-cycle operational check remain required; current-head independent CodeRabbit approval does not substitute for hosted execution. ### 3.2 Migration/workspace and opaque UID ownership @@ -62,27 +62,27 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the - [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. - [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. - Generated #1739 and earlier generated checksum descendants remain provenance only where their useful delta is inherited by #1361. -- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its predecessor exposed MD5/SHA-1 under security-labelled `hash_generator` and introduced an unbounded regex-only `url_extractor`. Both violate #1247/canonical-owner contracts. Ordinary two-parent convergence preserves generated history while restoring exact protected tree; fresh protected-base compare is ahead 2 / behind 0 / zero changed files. It is not a second checksum or URL owner and must not independently merge as product progress. +- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its predecessor exposed MD5/SHA-1 under security-labelled `hash_generator` and introduced an unbounded regex-only `url_extractor`. Both violate #1247/canonical-owner contracts. Ordinary two-parent convergence preserves generated history while restoring exact protected tree. It is not a second checksum or URL owner and must not independently merge as product progress. ### 3.5 Settings native-disabled accessibility -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Generated #1716, #1737 and #1744 are provenance only; #1744 ordinary convergence `e50d25580a3fa840b14855661e215a3368d8a73d` has zero effective delta. Browser/keyboard/responsive acceptance remains a separate delivery gate. +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Generated #1716, #1737 and #1744 are provenance only. Browser/keyboard/responsive acceptance remains a separate delivery gate. ### 3.6 AI Hub run-history rendering performance Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. -## 4. UI Localization Catalog — v2.57 material contract +## 4. UI Localization Catalog — v2.58 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `97279b9dfd8d47d3033007d36398ccf7aa9e6943`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. -Twenty-four ordinary-forward RED→repair sequences define the current policy. Durable invariants are: +Twenty-five ordinary-forward repairs define the current policy. The twenty-fifth closes a focused RED that was already present on the predecessor head rather than adding a duplicate regression. Durable invariants are: 1. release locales are exactly KO/EN/JA/ZH/VI/ES/DE/FR; 2. explicit persisted/session locale rejects C0/DEL and any surrounding SP before RFC 5646 acceptance, is capped at 128 characters without truncation, and is never silently trimmed into a different language-tag identity; 3. malformed terminal singleton forms such as `en-x` and `en-u` are rejected while `en-x-private` and `en-u-ca-gregory` are retained; -4. supported-primary grandfathered `en-GB-oed`, `zh-min`, and `zh-min-nan` are retained; private-use-only and irregular-grandfathered syntax is separated from eight-locale support; -5. registry-independent RFC 5646 validity rejects repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy while leaving live registry membership/prefix/preferred-value/canonicalization to a dated IANA-registry contract; +4. RFC 5646's complete fixed regular+irregular grandfathered alternatives are recognized as complete language tags before ordinary structural extlang/variant guards. Supported-primary examples `en-GB-oed`, `zh-min`, and `zh-min-nan` are retained; unsupported grandfathered tags fail at the product-support boundary as `ui_locale_unsupported` rather than being misclassified as malformed; +5. ordinary non-grandfathered `langtag` values remain subject to registry-independent validity: repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy are rejected. Live registry membership/prefix/preferred-value/canonicalization remains a separate dated IANA-registry contract; 6. `Accept-Language` is a separate RFC 4647 basic-language-range boundary, rejects C0/DEL except HTAB as HTTP OWS, uses SP/HTAB rather than Python generic whitespace, caps raw input at 8192 characters, handles at most 64 non-empty ranges and at most 32 empty list members, and treats `q=`/`Q=` equivalently while retaining strict qvalue syntax; 7. runtime `product_default` is type-validated before set membership; 8. lookup preserves later positive concrete ranges even when unsupported. `*;q=0.9, pt-BR;q=0.8` skips `*`, fails Portuguese against release resources and reaches `(ko, product_default)`; @@ -93,13 +93,14 @@ Twenty-four ordinary-forward RED→repair sequences define the current policy. D 13. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; 14. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; 15. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; -16. predecessor workflow/review receipts do not transfer. Exact `97279b9d...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +16. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, `test_explicit_locale_accepts_supported_primary_grandfathered_language_tags` required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring `ad091f7b...` records the fixed RFC list and rejection of Preferred-Value rewriting; +17. predecessor workflow/review receipts do not transfer. Exact `ad091f7b...` requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. -RFC 5646 §2.1 states that whitespace is not permitted in a language tag. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces: HTTP field OWS cannot be reused to normalize explicit persisted/session language-tag identity. RFC 4647 §3.4 also states that `*` cannot identify a best matching tag and defaulting is computed when `*` is the only effective range or no later range follows; §3.4.1 requires the application to define default behavior. The doctoring on exact #1740 records these boundaries alongside RFC 9110/5646 resource reasoning. +RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though the apparent subtags do not carry ordinary extlang/variant semantics. The same RFC states that whitespace is not permitted in a language tag. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces; HTTP field OWS cannot be reused to normalize explicit persisted/session identity. RFC 4647 wildcard/default provenance and RFC 9110 resource-bound reasoning remain documented on #1740. ### Localization persistence/API/UI order -Translation persistence waits until #1503 or a verified complete successor reaches protected ancestry and #1740 exact-current-head policy acceptance. The next persistence owner must create one ordinary Alembic descendant from the then-current single head, publish immutable complete eight-locale resource versions, preserve exact placeholder/text validation, explicit-locale no-rewrite semantics and truthful wildcard/default provenance, and retain the 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts without truncation. +Translation persistence waits until #1503 or a verified complete successor reaches protected ancestry and #1740 exact-current-head policy acceptance. The next persistence owner must create one ordinary Alembic descendant from the then-current single head, publish immutable complete eight-locale resource versions, preserve exact placeholder/text validation, explicit-locale no-rewrite semantics, fixed-grandfathered admission precedence and truthful wildcard/default provenance, and retain the 128/128 key, 128/8192/64/32 negotiation and 16,384/64/32 translation/placeholder contracts without truncation. The read API is screen-scoped with immutable resource version plus ETag/cache identity; no browser-wide mega-catalog, per-key network waterfall, heavy browser i18n default or cross-service SQL. Realistic k6/E2E must cover normal, exact-boundary and over-limit behavior. KO/EN/JA/ZH/VI/ES/DE/FR UI acceptance requires Storybook plus real browser E2E across normal/loading/empty/error/permission states, keyboard/focus/screen-reader/touch, CJK wrapping/font fallback, Vietnamese diacritics, DE/FR/ES expansion, mobile/intermediate widths and exact resource-version/source-head screenshots. @@ -109,7 +110,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `97279b9d...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → Tasks/Settings and authoritative #1738 intent through canonical owners → Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `ad091f7b...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. @@ -119,8 +120,8 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group problem and root-pip nested-manifest bleed now both have executable RED/fix pairs. #1752 itself still needs exact-head hosted/review acceptance, and a later Dependabot cycle must prove that root `ci-python` no longer changes `backend/` or `connector/` while major/minor updates remain separately visible. Current generated dependency lanes still require owner-specific reconciliation. +**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group problem and root-pip nested-manifest bleed have executable RED/fix pairs. #1752 itself still needs exact-head hosted acceptance, and a later Dependabot cycle must prove that root `ci-python` no longer changes `backend/` or `connector/` while major/minor updates remain separately visible. Current generated dependency lanes still require owner-specific reconciliation. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. From 88f2c18e1222d05feb18f75eb8de480a2d76eb0b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 01:52:15 +0900 Subject: [PATCH 76/89] docs(gap): adopt repaired central Strix owner state --- docs/product-technical-gap-baseline.md | 62 +++++++++++++------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 56650ec35..97b890937 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.58 +**Baseline version:** 2.59 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.57 remains audit-visible as blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; v2.56 remains blob `39341d4723d0982aa11aa7b24faf5394600bc074`; v2.55 remains blob `383533ef84f4abfff5d428d508b6eceeeee342a2`; v2.54 remains blob `ccf12a55634e88fb1cd52caea4f1cb4d7c645f3e`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.58 remains audit-visible as blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; v2.56 remains blob `39341d4723d0982aa11aa7b24faf5394600bc074`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.58 preserves v2.57's owner graph and #1740's explicit-locale no-trim repair. The durable addition is #1740's twenty-fifth repair, which closes a RED that already existed on predecessor exact `97279b9dfd8d47d3033007d36398ccf7aa9e6943`: the focused regression required RFC 5646 grandfathered `zh-min-nan -> zh`, while production reinterpreted the spelling as two ordinary extlang positions and rejected it. Causal source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` recognizes the RFC's complete fixed regular+irregular grandfathered alternatives before applying ordinary `langtag` duplicate/extlang guards; doctoring exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2` records the standards boundary. No live-registry canonicalization or Preferred-Value rewrite is introduced. +v2.59 preserves v2.58's #1740 twenty-fifth localization repair and updates the live central prerequisite: `.github#2291` has ordinary-forward source repair `bbe225d6559ba5ba562d06d2802d3d9687cc02e3` for the 24 specialized Strix trusted-runtime fixtures. The previous `a8d6261d...` source RED is therefore no longer the current-head source state. #2291 remains Draft and blocked on exact-head hosted Runtime Quality/Security/Python Security/SAST/CodeQL execution, unresolved-current finding disposition and qualifying independent review before protected integration. ## 1. Evidence hierarchy and release posture @@ -23,15 +23,15 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu ## 2. Central CI/security control plane -Protected `ContextualWisdomLab/.github/main` owns reusable CI/review/security/release workflows. Naruon consumes canonical owner contracts and does not copy central workflow source. +Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71` owns reusable CI/review/security/release workflows. Naruon consumes canonical owner contracts and does not copy central workflow source. -- `.github#712` owns Actions execution capacity. Queued current-head evidence remains incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. +- `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` remains source RED until every one of the 24 specialized Strix fixture families stops materializing trusted binder/runtime into the consumer root. Acceptance requires a non-consumer trusted runtime, absolute trusted-gate invocation with explicit `STRIX_REPO_ROOT`, binder-free consumer roots, preserved scenario assertions and exact-head hosted/review evidence. -- `.github#2109` is the stacked-admission successor and must ordinary/non-force adopt repaired #2291. `.github#2272` remains its separate Pages/SAST descendant. `.github#2271/#2275/#2276` retain repository-identity, GHAS analysis-capability and real target permission/canary boundaries. +- `.github#2291` is now source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. This is causal source progress, not acceptance: Agent Review Runtime Quality CI, Security Scan, Python Security, SAST Semgrep and CodeQL PR are all queued on the exact head, and the prior review thread remains unresolved until exact-head validation. +- `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume #2291 only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. -No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. +No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. ## 3. Product source-owner graph @@ -41,9 +41,9 @@ No Naruon lane may reinterpret incomplete central hosted evidence as GREEN. [#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the broad backend update lane, restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its generated delta does not completely inherit #1565 and is not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. -Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. Its exact changed-file inventory proves the root `pip` stanza crossed manifest-owner boundaries: `backend/requirements-agent.txt`, `backend/requirements-hashes.txt`, `backend/requirements.txt`, `connector/requirements-hashes.txt`, `connector/requirements.txt`, `requirements-bandit-ci-hashes.txt`, `requirements-strix-ci-hashes.txt`, and `requirements-strix-ci.txt`. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. +Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. Its exact changed-file inventory proves the root `pip` stanza crossed manifest-owner boundaries across backend, connector and root CI requirements. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. -Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head hosted acceptance and a later Dependabot-cycle operational check remain required; current-head independent CodeRabbit approval does not substitute for hosted execution. +Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head independent CodeRabbit approval exists, but hosted acceptance and a later Dependabot-cycle operational check remain required. ### 3.2 Migration/workspace and opaque UID ownership @@ -61,8 +61,7 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the - [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. - [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. -- Generated #1739 and earlier generated checksum descendants remain provenance only where their useful delta is inherited by #1361. -- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its predecessor exposed MD5/SHA-1 under security-labelled `hash_generator` and introduced an unbounded regex-only `url_extractor`. Both violate #1247/canonical-owner contracts. Ordinary two-parent convergence preserves generated history while restoring exact protected tree. It is not a second checksum or URL owner and must not independently merge as product progress. +- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`; it is not a second checksum or URL owner. ### 3.5 Settings native-disabled accessibility @@ -70,9 +69,9 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. Future performance work must start from reproduced buyer-path evidence. +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. -## 4. UI Localization Catalog — v2.58 material contract +## 4. UI Localization Catalog — v2.59 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -85,18 +84,17 @@ Twenty-five ordinary-forward repairs define the current policy. The twenty-fifth 5. ordinary non-grandfathered `langtag` values remain subject to registry-independent validity: repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy are rejected. Live registry membership/prefix/preferred-value/canonicalization remains a separate dated IANA-registry contract; 6. `Accept-Language` is a separate RFC 4647 basic-language-range boundary, rejects C0/DEL except HTAB as HTTP OWS, uses SP/HTAB rather than Python generic whitespace, caps raw input at 8192 characters, handles at most 64 non-empty ranges and at most 32 empty list members, and treats `q=`/`Q=` equivalently while retaining strict qvalue syntax; 7. runtime `product_default` is type-validated before set membership; -8. lookup preserves later positive concrete ranges even when unsupported. `*;q=0.9, pt-BR;q=0.8` skips `*`, fails Portuguese against release resources and reaches `(ko, product_default)`; -9. twenty-third RED `deaf07941cfc2b607c2148f434ce1196a3db29d9` and fix `1ce7b6ed5883beda305ea2552ae5af00509510c7` close wildcard-only provenance: `*;q=0.9` resolves `(ko, product_default)`, and with `product_default="fr"` resolves `(fr, product_default)`. Supported q=0 exclusion remains header-dependent, so `ko;q=0, *;q=0.8` may select `(en, accept_language)`; -10. `screen_key` and `message_key` are each capped at 128 characters before regex acceptance and are never truncated; -11. translated text rejects U+0000, isolated surrogates and non-string input and is capped at 16,384 Python characters; -12. placeholder schema is tuple/list only, validates elements before uniqueness, caps names at 64 characters and a message/schema at 32 unique names, and direct extraction enforces the same 32-name ceiling; -13. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; -14. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; -15. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; -16. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, `test_explicit_locale_accepts_supported_primary_grandfathered_language_tags` required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring `ad091f7b...` records the fixed RFC list and rejection of Preferred-Value rewriting; -17. predecessor workflow/review receipts do not transfer. Exact `ad091f7b...` requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. - -RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though the apparent subtags do not carry ordinary extlang/variant semantics. The same RFC states that whitespace is not permitted in a language tag. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces; HTTP field OWS cannot be reused to normalize explicit persisted/session identity. RFC 4647 wildcard/default provenance and RFC 9110 resource-bound reasoning remain documented on #1740. +8. lookup preserves later positive concrete ranges even when unsupported; wildcard-only effective input resolves through product default rather than fabricating header provenance; +9. `screen_key` and `message_key` are each capped at 128 characters before regex acceptance and are never truncated; +10. translated text rejects U+0000, isolated surrogates and non-string input and is capped at 16,384 Python characters; +11. placeholder schema is tuple/list only, validates elements before uniqueness, caps names at 64 characters and a message/schema at 32 unique names, and direct extraction enforces the same 32-name ceiling; +12. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; +13. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; +14. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; +15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring `ad091f7b...` records the fixed RFC list and rejection of Preferred-Value rewriting; +16. predecessor workflow/review receipts do not transfer. Exact `ad091f7b...` requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. + +RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though apparent subtags do not carry ordinary extlang/variant semantics. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces. ### Localization persistence/API/UI order @@ -110,18 +108,20 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 complete 24-specialized-fixture trusted-runtime repair → #2109/#2272 → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 owner reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 through their canonical owners → #1694 fresh-bootstrap Alembic repair → #1691 repository-local stacked admission → #1593 and canonical NetworkGraph descendants → canonical data-hygiene/checksum owners (#1361/#1418; generated #1746 is provenance only) → #1676 Settings native-disabled owner + generated provenance → #1503 → #1727 + generated provenance → #1740 `ad091f7b...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance contracts → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → #1727 + generated provenance → #1740 `ad091f7b...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. Wait state in one lane does not stop repair/development in independent lanes. Generated descendants remain open unless a verified successor completely inherits every valid delta/test/fixture/contract/evidence or the user explicitly authorizes closure. +#1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. +**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; its five exact-head hosted workflows are queued and its current review disposition is not yet accepted. Do not report the old `a8d6261d...` source RED as current source state, and do not report `bbe225d...` as GREEN until hosted/review evidence lands. + **UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group problem and root-pip nested-manifest bleed have executable RED/fix pairs. #1752 itself still needs exact-head hosted acceptance, and a later Dependabot cycle must prove that root `ci-python` no longer changes `backend/` or `connector/` while major/minor updates remain separately visible. Current generated dependency lanes still require owner-specific reconciliation. +**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group and root-pip nested-manifest defects have executable RED/fix pairs. #1752 still needs exact-head hosted acceptance and a later Dependabot-cycle operational check. -**Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** The generated weak-digest and regex-only duplicate surfaces are removed from effective product delta and canonical #1361/#1418 ownership is preserved. This does not make either canonical feature owner merge-ready. +**Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, weak-digest security labelling, regex-only URL evidence, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. From 42cf0e4dd949f7dc98b336ee0f41e43a997d0acd Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 02:03:01 +0900 Subject: [PATCH 77/89] docs(gap): adopt localization review repairs --- docs/product-technical-gap-baseline.md | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 97b890937..a2131e646 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.59 +**Baseline version:** 2.60 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.58 remains audit-visible as blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; v2.56 remains blob `39341d4723d0982aa11aa7b24faf5394600bc074`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.59 remains audit-visible as blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.59 preserves v2.58's #1740 twenty-fifth localization repair and updates the live central prerequisite: `.github#2291` has ordinary-forward source repair `bbe225d6559ba5ba562d06d2802d3d9687cc02e3` for the 24 specialized Strix trusted-runtime fixtures. The previous `a8d6261d...` source RED is therefore no longer the current-head source state. #2291 remains Draft and blocked on exact-head hosted Runtime Quality/Security/Python Security/SAST/CodeQL execution, unresolved-current finding disposition and qualifying independent review before protected integration. +v2.60 preserves v2.59's owner graph and localization product contract while adopting the first independent current-generation review findings on #1740. CodeRabbit reviewed predecessor exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2` and correctly found two documentation/test-description contradictions: one still said ASCII SP was benign around explicit locale identity, and another still described regular grandfathered tags as flowing through ordinary structural guards. Ordinary-forward commits `b4b8774b189abfd847fd1b6f60e8ae478d02240f`, `e76f7b074e4d32ae4ebaea53456760125f7cec04`, and `80b889fc62f8e6b7df55467df8e25147dcb23682` repair those contradictions and resolve both inline threads. #1740 current exact is therefore `80b889fc62f8e6b7df55467df8e25147dcb23682`; the predecessor CHANGES_REQUESTED review does not count as current-head acceptance. ## 1. Evidence hierarchy and release posture @@ -28,7 +28,7 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is now source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. This is causal source progress, not acceptance: Agent Review Runtime Quality CI, Security Scan, Python Security, SAST Semgrep and CodeQL PR are all queued on the exact head, and the prior review thread remains unresolved until exact-head validation. +- `.github#2291` is source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. This is causal source progress, not acceptance: Agent Review Runtime Quality CI, Security Scan, Python Security, SAST Semgrep and CodeQL PR remain nonterminal on the exact head, and the prior review thread remains unresolved until exact-head validation. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume #2291 only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. @@ -71,14 +71,14 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. -## 4. UI Localization Catalog — v2.59 material contract +## 4. UI Localization Catalog — v2.60 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `80b889fc62f8e6b7df55467df8e25147dcb23682`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. -Twenty-five ordinary-forward repairs define the current policy. The twenty-fifth closes a focused RED that was already present on the predecessor head rather than adding a duplicate regression. Durable invariants are: +Twenty-five ordinary-forward behavior repairs define the current policy. The current generation also includes three review-driven documentation/test-description corrections that do not change runtime semantics but make the evidence set code-current. Durable invariants are: 1. release locales are exactly KO/EN/JA/ZH/VI/ES/DE/FR; -2. explicit persisted/session locale rejects C0/DEL and any surrounding SP before RFC 5646 acceptance, is capped at 128 characters without truncation, and is never silently trimmed into a different language-tag identity; +2. explicit persisted/session locale accepts no surrounding whitespace, rejects C0/DEL before RFC 5646 admission, is capped at 128 characters without truncation, and is never silently trimmed into a different language-tag identity; 3. malformed terminal singleton forms such as `en-x` and `en-u` are rejected while `en-x-private` and `en-u-ca-gregory` are retained; 4. RFC 5646's complete fixed regular+irregular grandfathered alternatives are recognized as complete language tags before ordinary structural extlang/variant guards. Supported-primary examples `en-GB-oed`, `zh-min`, and `zh-min-nan` are retained; unsupported grandfathered tags fail at the product-support boundary as `ui_locale_unsupported` rather than being misclassified as malformed; 5. ordinary non-grandfathered `langtag` values remain subject to registry-independent validity: repeated extension singletons, duplicate variants and permanently reserved second/third extlang occupancy are rejected. Live registry membership/prefix/preferred-value/canonicalization remains a separate dated IANA-registry contract; @@ -91,8 +91,8 @@ Twenty-five ordinary-forward repairs define the current policy. The twenty-fifth 12. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; 13. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; 14. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; -15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring `ad091f7b...` records the fixed RFC list and rejection of Preferred-Value rewriting; -16. predecessor workflow/review receipts do not transfer. Exact `ad091f7b...` requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; current doctoring exact `80b889fc...` records the fixed RFC list, explicit-locale no-whitespace boundary and rejection of Preferred-Value rewriting; +16. CodeRabbit review on predecessor `ad091f7b...` found two valid stale-description defects. `b4b8774b...` corrects the HTTP-whitespace test description, `e76f7b07...` corrects catalog whitespace prose, and `80b889fc...` corrects complete grandfathered precedence. Both inline threads are resolved after those ordinary-forward fixes. The predecessor CHANGES_REQUESTED receipt does not transfer; exact `80b889fc...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though apparent subtags do not carry ordinary extlang/variant semantics. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces. @@ -108,7 +108,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → #1727 + generated provenance → #1740 `ad091f7b...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → #1727 + generated provenance → #1740 `80b889fc...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -116,12 +116,12 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; its five exact-head hosted workflows are queued and its current review disposition is not yet accepted. Do not report the old `a8d6261d...` source RED as current source state, and do not report `bbe225d...` as GREEN until hosted/review evidence lands. +**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; its exact-head hosted workflows are nonterminal and its current review disposition is not yet accepted. Do not report the old `a8d6261d...` source RED as current source state, and do not report `bbe225d...` as GREEN until hosted/review evidence lands. -**UI Delivery Gate: FAIL.** Localization pure-policy repairs are present, but exact-current-head acceptance and eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. +**UI Delivery Gate: FAIL.** Localization pure-policy behavior is source-repaired and the first current-generation review findings were causally corrected, but exact `80b889fc...` still lacks terminal current-head hosted evidence and qualifying post-last-push review; eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. **Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group and root-pip nested-manifest defects have executable RED/fix pairs. #1752 still needs exact-head hosted acceptance and a later Dependabot-cycle operational check. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, explicit-locale whitespace normalization, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. From d35f69f75009324ea5bcce4291fb6548bee95947 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 02:57:10 +0900 Subject: [PATCH 78/89] docs(gap): record interrupted POP3 progress repair --- docs/product-technical-gap-baseline.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a2131e646..66e924019 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.60 +**Baseline version:** 2.61 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.59 remains audit-visible as blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.60 remains audit-visible as blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.60 preserves v2.59's owner graph and localization product contract while adopting the first independent current-generation review findings on #1740. CodeRabbit reviewed predecessor exact `ad091f7bbf95f781a509e39c0f4fcf73696480f2` and correctly found two documentation/test-description contradictions: one still said ASCII SP was benign around explicit locale identity, and another still described regular grandfathered tags as flowing through ordinary structural guards. Ordinary-forward commits `b4b8774b189abfd847fd1b6f60e8ae478d02240f`, `e76f7b074e4d32ae4ebaea53456760125f7cec04`, and `80b889fc62f8e6b7df55467df8e25147dcb23682` repair those contradictions and resolve both inline threads. #1740 current exact is therefore `80b889fc62f8e6b7df55467df8e25147dcb23682`; the predecessor CHANGES_REQUESTED review does not count as current-head acceptance. +v2.61 preserves v2.60's owner graph and localization product contract while recording a second durable POP3 progress repair on canonical email/POP3 owner #1195. The prior retry model handled standards-conforming message-level negative `RETR`, but malformed protocol or transport interruption still left the currently attempted newest UIDL with no durable disposition. Because missing state is prioritized as never attempted, the same interrupted UIDL could remain first after each reconnect and starve lower fresh backlog. RED `5be27e6d11e918a37dbba3d199c4015c731e63c1`, causal fix `c6462af326721da39497666d78556ec8e31432dd`, and doctoring/current exact `52d2cc6fc136c931dda609a0129e3cd78048eebb` now mark only the interrupted current UIDL retryable before ending the untrusted session. This is source repair only; migration reconciliation, hosted execution, reconnect/restart acceptance and qualifying current-head independent review remain required. ## 1. Evidence hierarchy and release posture @@ -71,7 +71,17 @@ Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. -## 4. UI Localization Catalog — v2.60 material contract +### 3.7 Email identity and POP3 durable progress + +[#1195](https://github.com/ContextualWisdomLab/naruon/pull/1195) is the canonical email identity/deduplication and POP3 collection-progress owner at exact `52d2cc6fc136c931dda609a0129e3cd78048eebb`, stacked on #1623. Provider UIDL is durable collection identity only; Message-ID, sender-authored Date provenance and source fingerprints remain email identity evidence. + +Its branch-local `0018_email_date_provenance → 0019_pop3_observed_uidl` lineage is not merge-authoritative because canonical workspace owner #1503 has a separate `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding` lineage. #1503 must reach protected ancestry first; #1195 then ordinary/non-force adopts that lineage and rechains/renumbers its email/POP3 migrations behind the single current head. + +The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a → 7406cb63923003df2c3a5d21a0104203f78b90bc` prevents persistent standards-conforming negative `RETR` responses from monopolizing every bounded poll by persisting `retryable` state and preferring never-attempted backlog over due retries. Fresh audit found malformed protocol and `OSError` interruption still left the current attempted UIDL state-less; RED `5be27e6d11e918a37dbba3d199c4015c731e63c1` and fix `c6462af326721da39497666d78556ec8e31432dd` now record only that current attempt as retryable before ending the untrusted session, so it cannot masquerade as never attempted after reconnect. Later identities remain fresh because they were not attempted. + +This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. + +## 4. UI Localization Catalog — v2.61 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `80b889fc62f8e6b7df55467df8e25147dcb23682`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -108,7 +118,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → #1727 + generated provenance → #1740 `80b889fc...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `80b889fc...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -118,10 +128,12 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; its exact-head hosted workflows are nonterminal and its current review disposition is not yet accepted. Do not report the old `a8d6261d...` source RED as current source state, and do not report `bbe225d...` as GREEN until hosted/review evidence lands. +**POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. + **UI Delivery Gate: FAIL.** Localization pure-policy behavior is source-repaired and the first current-generation review findings were causally corrected, but exact `80b889fc...` still lacks terminal current-head hosted evidence and qualifying post-last-push review; eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. **Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group and root-pip nested-manifest defects have executable RED/fix pairs. #1752 still needs exact-head hosted acceptance and a later Dependabot-cycle operational check. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. +Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From 5dcd2ff7c8e840d9707fd1835f6759efdcf9069b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 05:50:30 +0900 Subject: [PATCH 79/89] docs(gap): record localization hosted regression repair --- docs/product-technical-gap-baseline.md | 27 +++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 66e924019..a71c18038 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.61 +**Baseline version:** 2.62 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.60 remains audit-visible as blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.61 remains audit-visible as blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.61 preserves v2.60's owner graph and localization product contract while recording a second durable POP3 progress repair on canonical email/POP3 owner #1195. The prior retry model handled standards-conforming message-level negative `RETR`, but malformed protocol or transport interruption still left the currently attempted newest UIDL with no durable disposition. Because missing state is prioritized as never attempted, the same interrupted UIDL could remain first after each reconnect and starve lower fresh backlog. RED `5be27e6d11e918a37dbba3d199c4015c731e63c1`, causal fix `c6462af326721da39497666d78556ec8e31432dd`, and doctoring/current exact `52d2cc6fc136c931dda609a0129e3cd78048eebb` now mark only the interrupted current UIDL retryable before ending the untrusted session. This is source repair only; migration reconciliation, hosted execution, reconnect/restart acceptance and qualifying current-head independent review remain required. +v2.62 preserves v2.61's product contracts while recording hosted evidence that corrected the UI Localization Catalog test boundary. Exact #1740 predecessor `80b889fc62f8e6b7df55467df8e25147dcb23682` received an independent CodeRabbit approval, then Application CI run `35629277472` actually executed and found one backend failure with 1,879 passes and 32 skips while the frontend lane passed. The failing 128-character locale fixture repeated the same eight-character variant fourteen times, so current production correctly rejected it under the already-owned RFC 5646 duplicate-variant invariant. Minimal repair `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9` changes only that fixture to fourteen distinct eight-character variants, preserving the exact 128-character resource boundary and all runtime behavior. The predecessor approval and failed CI receipt do not transfer to the new exact head; fresh exact-head hosted/security and independent post-last-push review evidence are required. ## 1. Evidence hierarchy and release posture @@ -28,7 +28,7 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. This is causal source progress, not acceptance: Agent Review Runtime Quality CI, Security Scan, Python Security, SAST Semgrep and CodeQL PR remain nonterminal on the exact head, and the prior review thread remains unresolved until exact-head validation. +- `.github#2291` is source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. Exact-head Agent Review Runtime Quality CI and SAST Semgrep are terminal SUCCESS; Security Scan, Python Security and CodeQL PR remain queued. This is causal source progress, not full acceptance. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume #2291 only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. @@ -81,11 +81,11 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.61 material contract +## 4. UI Localization Catalog — v2.62 material contract -[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `80b889fc62f8e6b7df55467df8e25147dcb23682`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. +[#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. -Twenty-five ordinary-forward behavior repairs define the current policy. The current generation also includes three review-driven documentation/test-description corrections that do not change runtime semantics but make the evidence set code-current. Durable invariants are: +Twenty-five ordinary-forward behavior repairs define the current runtime policy. The current generation also includes review-driven documentation/test-description corrections and one hosted-CI fixture repair; those evidence repairs do not change runtime semantics. Durable invariants are: 1. release locales are exactly KO/EN/JA/ZH/VI/ES/DE/FR; 2. explicit persisted/session locale accepts no surrounding whitespace, rejects C0/DEL before RFC 5646 admission, is capped at 128 characters without truncation, and is never silently trimmed into a different language-tag identity; @@ -101,8 +101,9 @@ Twenty-five ordinary-forward behavior repairs define the current policy. The cur 12. canonical source syntax accepts `{name}` only; empty/non-empty format specifiers, conversions and traversal are publication-invalid even where Python could render equivalent visible text; 13. all parser/key/content ceilings are Naruon application resource contracts layered over standards/storage boundaries; over-limit values fail closed and no identity/content truncation is permitted; 14. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; -15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; current doctoring exact `80b889fc...` records the fixed RFC list, explicit-locale no-whitespace boundary and rejection of Preferred-Value rewriting; -16. CodeRabbit review on predecessor `ad091f7b...` found two valid stale-description defects. `b4b8774b...` corrects the HTTP-whitespace test description, `e76f7b07...` corrects catalog whitespace prose, and `80b889fc...` corrects complete grandfathered precedence. Both inline threads are resolved after those ordinary-forward fixes. The predecessor CHANGES_REQUESTED receipt does not transfer; exact `80b889fc...` still requires current full-suite/coverage/security and qualifying independent post-last-push review before policy acceptance. +15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring exact `80b889fc...` records the fixed RFC list, explicit-locale no-whitespace boundary and rejection of Preferred-Value rewriting; +16. CodeRabbit review on predecessor `ad091f7b...` found two valid stale-description defects. `b4b8774b...` corrects the HTTP-whitespace test description, `e76f7b07...` corrects catalog whitespace prose, and `80b889fc...` corrects complete grandfathered precedence. Both inline threads are resolved. CodeRabbit then approved exact `80b889fc...`, but that approval is predecessor-only after the hosted-CI repair moved the branch; +17. Application CI run `35629277472` on exact `80b889fc...` was a real hosted RED: frontend passed, backend reported `1 failed, 1879 passed, 32 skipped`. The only failure was the 128-character resource-bound fixture repeating `abcdefgh` fourteen times, which violated invariant 5's duplicate-variant rule. Minimal repair `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9` uses fourteen distinct eight-character variants while keeping the input exactly 128 characters. No production parser, resource ceiling, error taxonomy or `Accept-Language` boundary changed. Fresh exact-head hosted/security evidence and qualifying independent post-last-push review are required. RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though apparent subtags do not carry ordinary extlang/variant semantics. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces. @@ -118,7 +119,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `80b889fc...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -126,14 +127,14 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; its exact-head hosted workflows are nonterminal and its current review disposition is not yet accepted. Do not report the old `a8d6261d...` source RED as current source state, and do not report `bbe225d...` as GREEN until hosted/review evidence lands. +**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; Runtime Quality and Semgrep are GREEN, while Security Scan, Python Security and CodeQL remain queued and qualifying current-head review acceptance is still required. Do not report `bbe225d...` as fully GREEN until those hosted/review gates land. **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. -**UI Delivery Gate: FAIL.** Localization pure-policy behavior is source-repaired and the first current-generation review findings were causally corrected, but exact `80b889fc...` still lacks terminal current-head hosted evidence and qualifying post-last-push review; eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. +**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. **Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group and root-pip nested-manifest defects have executable RED/fix pairs. #1752 still needs exact-head hosted acceptance and a later Dependabot-cycle operational check. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From 2a38a7b491c5b3740f4499ad3e9b26d6fa097476 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 05:59:13 +0900 Subject: [PATCH 80/89] docs(gap): route concurrent Strix owner delta --- docs/product-technical-gap-baseline.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index a71c18038..594b9389d 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.62 +**Baseline version:** 2.63 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.61 remains audit-visible as blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.62 remains audit-visible as blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.62 preserves v2.61's product contracts while recording hosted evidence that corrected the UI Localization Catalog test boundary. Exact #1740 predecessor `80b889fc62f8e6b7df55467df8e25147dcb23682` received an independent CodeRabbit approval, then Application CI run `35629277472` actually executed and found one backend failure with 1,879 passes and 32 skips while the frontend lane passed. The failing 128-character locale fixture repeated the same eight-character variant fourteen times, so current production correctly rejected it under the already-owned RFC 5646 duplicate-variant invariant. Minimal repair `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9` changes only that fixture to fourteen distinct eight-character variants, preserving the exact 128-character resource boundary and all runtime behavior. The predecessor approval and failed CI receipt do not transfer to the new exact head; fresh exact-head hosted/security and independent post-last-push review evidence are required. +v2.63 preserves v2.62's product contracts and localization hosted RED/fix while making the central Strix owner graph code-current. Concurrent `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is a direct-`main` sibling of canonical `.github#2291@bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, not its descendant: fresh compare reports diverged, ahead 1 / behind 13 from protected `main@e6334e229581a918e2f22de18733b76fa65d7e71`. Both repair production binder resolution to trusted `$SCRIPT_DIR`, but #2331 also co-locates the binder with copied gates in many consumer-root fixtures, whereas #2291 deliberately separates trusted source from the consumer root to prevent the test harness from masking the trust-boundary regression. #2331 does contain one potentially valid focused contract absent from #2291, `tests/test_strix_evidence_binder_trusted_path.py`; it must be ordinary/non-force inherited or replaced by an equivalent stronger test on the canonical #2291 stack before either lane can claim complete succession. ## 1. Evidence hierarchy and release posture @@ -28,8 +28,9 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is source-repaired at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source changes only the specialized fixture harness so affected cases materialize a sibling trusted source, invoke the trusted gate by absolute path and pass explicit `STRIX_REPO_ROOT` for the consumer. Fresh owner authority reports zero remaining occurrences of the forbidden consumer-root materialization string. Exact-head Agent Review Runtime Quality CI and SAST Semgrep are terminal SUCCESS; Security Scan, Python Security and CodeQL PR remain queued. This is causal source progress, not full acceptance. -- `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume #2291 only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. +- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Agent Review Runtime Quality CI and SAST Semgrep are terminal SUCCESS; Security Scan, Python Security and CodeQL PR remain queued. This is causal source progress, not full acceptance. +- Concurrent `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is a direct-protected-base sibling, not a second accepted owner. Its production `$SCRIPT_DIR/strix_evidence_binding.py` fix overlaps #2291. Its consumer-root binder-copy fixture strategy conflicts with #2291's stronger trust-boundary test architecture and must not replace it. Its focused `tests/test_strix_evidence_binder_trusted_path.py` is a valid-succession candidate absent from current #2291 and has been routed to #2291 for ordinary/non-force adoption or equivalent stronger coverage. Do not close #2331 as fully superseded until that valid test/evidence delta is demonstrably inherited. +- `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume the reconciled #2291 owner only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. @@ -81,7 +82,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.62 material contract +## 4. UI Localization Catalog — v2.63 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -119,7 +120,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 `bbe225d...` exact-head hosted/review acceptance of the 24-site trusted-runtime repair → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → reconcile valid #2331 focused-test delta into canonical #2291 without reintroducing consumer-root fixture colocation → #2291 `bbe225d...` successor exact-head hosted/review acceptance → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -127,7 +128,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix source-repair gate: SOURCE PASS / HOSTED ACCEPTANCE FAIL.** #2291 has a current causal 24-site source repair at `bbe225d...`; Runtime Quality and Semgrep are GREEN, while Security Scan, Python Security and CodeQL remain queued and qualifying current-head review acceptance is still required. Do not report `bbe225d...` as fully GREEN until those hosted/review gates land. +**Central Strix source-repair gate: SOURCE PASS / OWNER RECONCILIATION + HOSTED ACCEPTANCE FAIL.** #2291 contains the stronger 24-site trusted-source fixture repair and production `$SCRIPT_DIR` resolution. Concurrent #2331 contains a focused binder-path test worth inheriting but also a weaker fixture-colocation strategy; it is not a second accepted owner. Preserve every valid delta by ordinary/non-force reconciliation on the canonical owner before normal protected integration. Runtime Quality and Semgrep on current #2291 are GREEN; Security Scan, Python Security and CodeQL remain queued and qualifying current-head review acceptance is still required. **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. @@ -137,4 +138,4 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, competing central Strix siblings, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From ce5048dade0ed8c82a0b4460f2e5b36997289f05 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 06:54:18 +0900 Subject: [PATCH 81/89] docs(gap): record current dependency security lock RED --- docs/product-technical-gap-baseline.md | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 594b9389d..c49412140 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.63 +**Baseline version:** 2.64 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.62 remains audit-visible as blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.63 remains audit-visible as blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.63 preserves v2.62's product contracts and localization hosted RED/fix while making the central Strix owner graph code-current. Concurrent `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is a direct-`main` sibling of canonical `.github#2291@bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, not its descendant: fresh compare reports diverged, ahead 1 / behind 13 from protected `main@e6334e229581a918e2f22de18733b76fa65d7e71`. Both repair production binder resolution to trusted `$SCRIPT_DIR`, but #2331 also co-locates the binder with copied gates in many consumer-root fixtures, whereas #2291 deliberately separates trusted source from the consumer root to prevent the test harness from masking the trust-boundary regression. #2331 does contain one potentially valid focused contract absent from #2291, `tests/test_strix_evidence_binder_trusted_path.py`; it must be ordinary/non-force inherited or replaced by an equivalent stronger test on the canonical #2291 stack before either lane can claim complete succession. +v2.64 preserves v2.63's localization and central-Strix contracts and adds a current-database dependency-security finding that changes the dependency-owner order. Exact `#1752@0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` reached real Trivy execution: its Dependabot-policy source is not the cause, but the repository scan found three AnyIO findings in `backend/uv.lock` and three frontend Next.js/Sharp findings. Fresh source inspection shows a real backend lock split: protected `backend/requirements-hashes.txt` records AnyIO 4.14.2 while protected `backend/uv.lock` still resolves AnyIO 4.14.1; canonical backend dependency owner #1565 preserves the same split. Reviewed upstream advisories identify 4.14.2 as the fixed release for CVE-2026-63374, CVE-2026-63349 and CVE-2026-64847. The repair must therefore regenerate the canonical backend lock through #1565 or a verified complete successor, not suppress Trivy or hand-edit generated lock data. Frontend Next.js/Sharp findings remain with #1623, whose unchanged exact head already carries the intended patched floors and is undergoing current-database Trivy revalidation. Generated #1755 and #1756 have also been converged ordinary/non-force to zero-effective-delta provenance; neither is independent product progress. ## 1. Evidence hierarchy and release posture @@ -31,6 +31,7 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Agent Review Runtime Quality CI and SAST Semgrep are terminal SUCCESS; Security Scan, Python Security and CodeQL PR remain queued. This is causal source progress, not full acceptance. - Concurrent `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is a direct-protected-base sibling, not a second accepted owner. Its production `$SCRIPT_DIR/strix_evidence_binding.py` fix overlaps #2291. Its consumer-root binder-copy fixture strategy conflicts with #2291's stronger trust-boundary test architecture and must not replace it. Its focused `tests/test_strix_evidence_binder_trusted_path.py` is a valid-succession candidate absent from current #2291 and has been routed to #2291 for ordinary/non-force adoption or equivalent stronger coverage. Do not close #2331 as fully superseded until that valid test/evidence delta is demonstrably inherited. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume the reconciled #2291 owner only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. +- `.github#2278@8a5251bf409fe84b3dd0cba1e48992f5b8d9eda5` is the central repository's separate AnyIO 4.14.0→4.14.2 dependency owner. It corroborates the reviewed fixed floor but is not Naruon source authority; its own current security generation is cancelled and it must not be source-copied into Naruon. No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. @@ -38,13 +39,19 @@ No Naruon lane may reinterpret source repair, local evidence or incomplete hoste ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Current vulnerability-database revalidation belongs there rather than in feature PRs. Generated #1750 is Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Its source carries Next.js 16.3.4 and Sharp 0.35.4, at or above the currently reviewed patched floors for the three frontend findings now reproduced by #1752's Trivy run. Historical six-workflow GREEN remains generation-specific. A deliberate current-vulnerability-database rerun has been requested against this unchanged exact head without a no-op commit; `trivy-fs` job `106529390674` is currently queued. If it still reports frontend findings, inspect exact importer/lock resolution here. If it reports only backend AnyIO, keep that finding with #1565. Generated #1750 remains Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. -[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the bounded Starlette TestClient/httpx2 owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`. Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the broad backend update lane, restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its generated delta does not completely inherit #1565 and is not yet a valid reconciled descendant. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope; inherited dependency Security RED routes to #1623. +[#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the canonical bounded Starlette TestClient/httpx2 and backend lock owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`, Draft/open. Fresh current-database evidence adds a real security RED to this owner: both protected `develop` and #1565 record `anyio==4.14.2` in `backend/requirements-hashes.txt`, but `backend/uv.lock` still resolves **AnyIO 4.14.1**. Exact #1752 Security Scan run `35601386092` therefore correctly reports CVE-2026-63374, CVE-2026-63349 and CVE-2026-64847 from `backend/uv.lock`; upstream reviewed advisories identify AnyIO 4.14.2 as the fixed release for all three. The canonical repair is to regenerate `backend/uv.lock` through the dependency toolchain so the lock and reviewed hashed requirements agree, then reacquire install/TestClient/warnings-as-errors, Security/Trivy, dependency audit where applicable, CodeQL and independent review. Generated lock records must not be hand-edited. + +Auto-closed predecessor [#1685](https://github.com/ContextualWisdomLab/naruon/pull/1685) is audit lineage, not proof of complete succession. Generated #1749 is the broad backend update lane, restored to Draft and retargeted onto #1565. It must preserve #1565's direct `httpx2`, warnings-as-errors runtime proof and one coherent `pyproject.toml` / plain requirements / hashed requirements / `uv.lock` graph while retaining independent verification of security-material `aiosmtplib==5.1.3`. Its generated delta omits `backend/uv.lock`; it therefore cannot repair the new AnyIO lock RED and does not completely inherit #1565. [#1733](https://github.com/ContextualWisdomLab/naruon/pull/1733) retains provider-error confidentiality scope. Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python` mega-group. Its exact changed-file inventory proves the root `pip` stanza crossed manifest-owner boundaries across backend, connector and root CI requirements. Strix behavior remains with canonical central `.github` owners; connector runtime/version intent must route through its connector dependency/release owner; backend intent must not compete with #1565/#1749; model/provider client bumps do not alter Naruon's immutable released contextual-orchestrator authority. -Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head independent CodeRabbit approval exists, but hosted acceptance and a later Dependabot-cycle operational check remain required. +Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head CodeRabbit approval exists; Application CI, Bandit, SAST Semgrep and Docker are GREEN. + +#1752 is nevertheless not security-GREEN. Security Scan `35601386092` is a real terminal RED from six inherited dependency findings: the three backend AnyIO findings caused by the stale 4.14.1 uv lock above, plus two Next.js findings and one Sharp finding in `frontend/pnpm-lock.yaml`. The source-policy PR must not absorb either dependency repair. #1565 owns coherent backend lock regeneration; #1623 owns frontend package/lock revalidation. CodeQL remains queued. After those owners integrate normally, #1752 must reacquire current Security/CodeQL evidence and then prove the grouping policy operationally in a later Dependabot cycle. + +Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is Draft zero-effective-delta provenance at exact `d36ed687cf529cda0144cf16d988664c1613082b`. Its generated `random.SystemRandom()` → `secrets.SystemRandom()` edit was not accepted as a security fix because `secrets.SystemRandom` is the same OS-backed `random.SystemRandom` class and no predictability, bias, state-reuse, concurrency or startup-synchronization defect was reproduced. ### 3.2 Migration/workspace and opaque UID ownership @@ -54,7 +61,7 @@ Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact ### 3.3 NetworkGraph/performance -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 and #1754 are zero-effective-delta provenance after ordinary convergence; neither is independent product progress nor evidence for an end-to-end O(1) NetworkGraph path. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 and #1754 are zero-effective-delta provenance after ordinary convergence. Fresh generated #1755 has likewise been ordinary/non-force converged onto #1593 at exact `f19883c271475ae829929c4fd3f11a0f5c2667db`, with the canonical #1593 tree and zero effective delta. Its generated end-to-end `O(1)` claim is rejected: only the first-five/first-eight option subloops are bounded, while NetworkGraph still processes the complete graph elsewhere and no browser/main-thread/heap or buyer-path p95 evidence was supplied. None of #1742/#1754/#1755 is independent product progress. ### 3.4 Data-hygiene/checksum/URL ownership @@ -82,7 +89,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.63 material contract +## 4. UI Localization Catalog — v2.64 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -120,9 +127,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → reconcile valid #2331 focused-test delta into canonical #2291 without reintroducing consumer-root fixture colocation → #2291 `bbe225d...` successor exact-head hosted/review acceptance → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1752 bounded dependency-update grouping + root manifest-owner isolation acceptance → #1623 current-vulnerability revalidation + generated #1750 reconciliation → #1565 exact dependency/TestClient acceptance + generated #1749 reconciliation → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → reconcile valid #2331 focused-test delta into canonical #2291 without reintroducing consumer-root fixture colocation → #2291 hosted/review acceptance → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745, #1746 and #1754 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. +#1745, #1746, #1754, #1755 and #1756 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates @@ -134,8 +141,8 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**Dependency-update ownership gate: FAIL for generated #1749/#1750/#1751; two causal repairs present in #1752.** The wildcard mega-group and root-pip nested-manifest defects have executable RED/fix pairs. #1752 still needs exact-head hosted acceptance and a later Dependabot-cycle operational check. +**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, competing central Strix siblings, dependency mega-groups, cross-owner root manifest scanning, unmeasured performance claims, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, competing central Strix siblings, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From f48dead60b82838d8714446f010e44671f3095d1 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 07:14:22 +0900 Subject: [PATCH 82/89] docs(gap): record Strix owner succession --- docs/product-technical-gap-baseline.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index c49412140..e276e04b3 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.64 +**Baseline version:** 2.65 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.63 remains audit-visible as blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.64 remains audit-visible as blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.64 preserves v2.63's localization and central-Strix contracts and adds a current-database dependency-security finding that changes the dependency-owner order. Exact `#1752@0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` reached real Trivy execution: its Dependabot-policy source is not the cause, but the repository scan found three AnyIO findings in `backend/uv.lock` and three frontend Next.js/Sharp findings. Fresh source inspection shows a real backend lock split: protected `backend/requirements-hashes.txt` records AnyIO 4.14.2 while protected `backend/uv.lock` still resolves AnyIO 4.14.1; canonical backend dependency owner #1565 preserves the same split. Reviewed upstream advisories identify 4.14.2 as the fixed release for CVE-2026-63374, CVE-2026-63349 and CVE-2026-64847. The repair must therefore regenerate the canonical backend lock through #1565 or a verified complete successor, not suppress Trivy or hand-edit generated lock data. Frontend Next.js/Sharp findings remain with #1623, whose unchanged exact head already carries the intended patched floors and is undergoing current-database Trivy revalidation. Generated #1755 and #1756 have also been converged ordinary/non-force to zero-effective-delta provenance; neither is independent product progress. +v2.65 preserves v2.64's dependency-security and localization contracts and makes the central Strix owner graph code-current. Canonical `.github#2291` now ordinary-forward owns exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, which retains the stronger sibling trusted-source fixture architecture and additionally inherits #2331's valid focused `tests/test_strix_evidence_binder_trusted_path.py` contract. Direct-main sibling #2331 is closed unmerged only after that unique valid test intent was demonstrably inherited; its weaker consumer-root binder-copy fixture strategy was not adopted. Fresh #2291 exact-head workflows are queued/pending and a fresh independent review has been requested, so owner succession is complete but hosted/review acceptance remains fail-closed. The v2.64 AnyIO/Next.js/Sharp security-owner order remains unchanged. ## 1. Evidence hierarchy and release posture @@ -28,8 +28,8 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `bbe225d6559ba5ba562d06d2802d3d9687cc02e3`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Agent Review Runtime Quality CI and SAST Semgrep are terminal SUCCESS; Security Scan, Python Security and CodeQL PR remain queued. This is causal source progress, not full acceptance. -- Concurrent `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is a direct-protected-base sibling, not a second accepted owner. Its production `$SCRIPT_DIR/strix_evidence_binding.py` fix overlaps #2291. Its consumer-root binder-copy fixture strategy conflicts with #2291's stronger trust-boundary test architecture and must not replace it. Its focused `tests/test_strix_evidence_binder_trusted_path.py` is a valid-succession candidate absent from current #2291 and has been routed to #2291 for ordinary/non-force adoption or equivalent stronger coverage. Do not close #2331 as fully superseded until that valid test/evidence delta is demonstrably inherited. +- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Draft/open. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer; the fresh current-head Runtime Quality, Semgrep, Python Security and Security Scan generations are queued and CodeQL is pending. A current-head independent review has been requested. +- `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is closed unmerged after verified complete succession of its valid delta into #2291. Its production `$SCRIPT_DIR/strix_evidence_binding.py` change duplicated #2291, and its consumer-root binder-copy fixture strategy was weaker than the canonical sibling trusted-source boundary. Its focused binder-path regression is now owned by #2291. Closure is provenance cleanup, not evidence that #2291 is accepted; no workflow/review receipt transfers. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume the reconciled #2291 owner only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. - `.github#2278@8a5251bf409fe84b3dd0cba1e48992f5b8d9eda5` is the central repository's separate AnyIO 4.14.0→4.14.2 dependency owner. It corroborates the reviewed fixed floor but is not Naruon source authority; its own current security generation is cancelled and it must not be source-copied into Naruon. @@ -89,7 +89,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.64 material contract +## 4. UI Localization Catalog — v2.65 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -127,7 +127,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → reconcile valid #2331 focused-test delta into canonical #2291 without reintroducing consumer-root fixture colocation → #2291 hosted/review acceptance → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted/review acceptance (valid #2331 focused test already inherited; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746, #1754, #1755 and #1756 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -135,7 +135,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix source-repair gate: SOURCE PASS / OWNER RECONCILIATION + HOSTED ACCEPTANCE FAIL.** #2291 contains the stronger 24-site trusted-source fixture repair and production `$SCRIPT_DIR` resolution. Concurrent #2331 contains a focused binder-path test worth inheriting but also a weaker fixture-colocation strategy; it is not a second accepted owner. Preserve every valid delta by ordinary/non-force reconciliation on the canonical owner before normal protected integration. Runtime Quality and Semgrep on current #2291 are GREEN; Security Scan, Python Security and CodeQL remain queued and qualifying current-head review acceptance is still required. +**Central Strix owner-succession gate: SOURCE + OWNER SUCCESSION PASS / EXACT-HEAD HOSTED ACCEPTANCE FAIL.** #2291 exact `1794626a...` contains the stronger 24-site sibling trusted-source fixture repair, production `$SCRIPT_DIR` binder resolution, and #2331's valid focused trusted-path/fail-closed regression. #2331 is closed unmerged after verified complete succession; its weaker consumer-root binder-copy fixture strategy is not retained. All current #2291 hosted workflows are fresh queued/pending generations and a qualifying current-head independent review has only been requested, so predecessor Runtime Quality/Semgrep GREEN does not transfer. **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. @@ -145,4 +145,4 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, competing central Strix siblings, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From 838acef2f6d15af24a789996f35e1fe98916cca9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 07:18:28 +0900 Subject: [PATCH 83/89] docs(gap): record current Strix review evidence --- docs/product-technical-gap-baseline.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e276e04b3..debc5f0be 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.65 +**Baseline version:** 2.66 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.64 remains audit-visible as blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.65 remains audit-visible as blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.65 preserves v2.64's dependency-security and localization contracts and makes the central Strix owner graph code-current. Canonical `.github#2291` now ordinary-forward owns exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, which retains the stronger sibling trusted-source fixture architecture and additionally inherits #2331's valid focused `tests/test_strix_evidence_binder_trusted_path.py` contract. Direct-main sibling #2331 is closed unmerged only after that unique valid test intent was demonstrably inherited; its weaker consumer-root binder-copy fixture strategy was not adopted. Fresh #2291 exact-head workflows are queued/pending and a fresh independent review has been requested, so owner succession is complete but hosted/review acceptance remains fail-closed. The v2.64 AnyIO/Next.js/Sharp security-owner order remains unchanged. +v2.66 preserves v2.65's complete central-Strix owner succession and records current-head independent review evidence without promoting incomplete hosted execution. Canonical `.github#2291@1794626af3473ef23b9c2e678c3f06fd6c11636f` retains the stronger sibling trusted-source fixture architecture plus #2331's inherited focused trusted-binder-path/fail-closed regression. CodeRabbit independently re-read that exact head and reported no finding in the requested boundary, explicitly confirming the real production function, empty consumer-root success via trusted `SCRIPT_DIR`, fail-closed exit 2 when the trusted binder is absent, and preservation of the stronger fixture topology. #2331 remains closed unmerged after complete succession. Fresh #2291 hosted required workflows remain queued/pending, so this is current-head review progress, not GREEN. The v2.64 dependency-security and localization owner order remains unchanged. ## 1. Evidence hierarchy and release posture @@ -28,12 +28,12 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Draft/open. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer; the fresh current-head Runtime Quality, Semgrep, Python Security and Security Scan generations are queued and CodeQL is pending. A current-head independent review has been requested. -- `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is closed unmerged after verified complete succession of its valid delta into #2291. Its production `$SCRIPT_DIR/strix_evidence_binding.py` change duplicated #2291, and its consumer-root binder-copy fixture strategy was weaker than the canonical sibling trusted-source boundary. Its focused binder-path regression is now owned by #2291. Closure is provenance cleanup, not evidence that #2291 is accepted; no workflow/review receipt transfers. +- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. CodeRabbit independently reviewed this exact head and reported no finding in the requested trusted-binder boundary, explicitly confirming those two focused contracts and the stronger sibling fixture topology. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer; fresh current-head Runtime Quality, Semgrep, Python Security and Security Scan remain queued and CodeQL remains pending. +- `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is closed unmerged after verified complete succession of its valid delta into #2291. Its production `$SCRIPT_DIR/strix_evidence_binding.py` change duplicated #2291, and its consumer-root binder-copy fixture strategy was weaker than the canonical sibling trusted-source boundary. Its focused binder-path regression is now owned by #2291. Closure is provenance cleanup, not evidence that #2291 is hosted-accepted; no workflow/review receipt transfers. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume the reconciled #2291 owner only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. - `.github#2278@8a5251bf409fe84b3dd0cba1e48992f5b8d9eda5` is the central repository's separate AnyIO 4.14.0→4.14.2 dependency owner. It corroborates the reviewed fixed floor but is not Naruon source authority; its own current security generation is cancelled and it must not be source-copied into Naruon. -No Naruon lane may reinterpret source repair, local evidence or incomplete hosted evidence as GREEN. +No Naruon lane may reinterpret source repair, independent review, local evidence or incomplete hosted evidence as GREEN. ## 3. Product source-owner graph @@ -89,7 +89,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.65 material contract +## 4. UI Localization Catalog — v2.66 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -127,7 +127,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted/review acceptance (valid #2331 focused test already inherited; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1745, #1746, #1754, #1755 and #1756 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -135,7 +135,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix owner-succession gate: SOURCE + OWNER SUCCESSION PASS / EXACT-HEAD HOSTED ACCEPTANCE FAIL.** #2291 exact `1794626a...` contains the stronger 24-site sibling trusted-source fixture repair, production `$SCRIPT_DIR` binder resolution, and #2331's valid focused trusted-path/fail-closed regression. #2331 is closed unmerged after verified complete succession; its weaker consumer-root binder-copy fixture strategy is not retained. All current #2291 hosted workflows are fresh queued/pending generations and a qualifying current-head independent review has only been requested, so predecessor Runtime Quality/Semgrep GREEN does not transfer. +**Central Strix owner-succession gate: SOURCE + OWNER SUCCESSION + REQUESTED-SCOPE INDEPENDENT REVIEW PASS / EXACT-HEAD HOSTED ACCEPTANCE FAIL.** #2291 exact `1794626a...` contains the stronger 24-site sibling trusted-source fixture repair, production `$SCRIPT_DIR` binder resolution, and #2331's valid focused trusted-path/fail-closed regression. #2331 is closed unmerged after verified complete succession; its weaker consumer-root binder-copy fixture strategy is not retained. CodeRabbit independently re-read the exact current head and reported no finding in the requested boundary. Current Runtime Quality, Semgrep, Python Security and Security Scan are still queued and CodeQL is pending, so no predecessor GREEN transfers and normal protected integration remains blocked. **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. @@ -145,4 +145,4 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. -Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file +Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, independent-review-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From f24e7464a6dec140bddc8e0649121ed34bc7d79f Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 08:57:08 +0900 Subject: [PATCH 84/89] docs(gap): currentize generated succession and cross-owner repair --- docs/product-technical-gap-baseline.md | 30 +++++++++++++++----------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index debc5f0be..f22aa7306 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.66 +**Baseline version:** 2.67 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.65 remains audit-visible as blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.66 remains audit-visible as blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.66 preserves v2.65's complete central-Strix owner succession and records current-head independent review evidence without promoting incomplete hosted execution. Canonical `.github#2291@1794626af3473ef23b9c2e678c3f06fd6c11636f` retains the stronger sibling trusted-source fixture architecture plus #2331's inherited focused trusted-binder-path/fail-closed regression. CodeRabbit independently re-read that exact head and reported no finding in the requested boundary, explicitly confirming the real production function, empty consumer-root success via trusted `SCRIPT_DIR`, fail-closed exit 2 when the trusted binder is absent, and preservation of the stronger fixture topology. #2331 remains closed unmerged after complete succession. Fresh #2291 hosted required workflows remain queued/pending, so this is current-head review progress, not GREEN. The v2.64 dependency-security and localization owner order remains unchanged. +v2.67 preserves v2.66's central-Strix, dependency-security, localization and POP3 contracts while currentizing generated-lane lifecycle and one live owner-boundary repair. Verified zero-effective-delta/generated lanes #1755, #1754, #1753, #1746, #1745, #1744 and #1742 are now closed unmerged only after complete-succession or no-valid-delta audits. #1756 was already closed unmerged for the alias-only `SystemRandom` proposal. #1741 remains open Draft because two intervening commits crossed NetworkGraph, dependency-security and scanner-policy ownership; exact `5047d1bacd49f341183db5dd895c45162ea71cf4` ordinary/non-force preserves that history but restores the exact canonical #1628 tree with zero effective delta pending a separate complete-succession audit. No closure or zero-delta convergence is merge/release evidence for its canonical owner. ## 1. Evidence hierarchy and release posture @@ -51,7 +51,7 @@ Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact #1752 is nevertheless not security-GREEN. Security Scan `35601386092` is a real terminal RED from six inherited dependency findings: the three backend AnyIO findings caused by the stale 4.14.1 uv lock above, plus two Next.js findings and one Sharp finding in `frontend/pnpm-lock.yaml`. The source-policy PR must not absorb either dependency repair. #1565 owns coherent backend lock regeneration; #1623 owns frontend package/lock revalidation. CodeQL remains queued. After those owners integrate normally, #1752 must reacquire current Security/CodeQL evidence and then prove the grouping policy operationally in a later Dependabot cycle. -Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is Draft zero-effective-delta provenance at exact `d36ed687cf529cda0144cf16d988664c1613082b`. Its generated `random.SystemRandom()` → `secrets.SystemRandom()` edit was not accepted as a security fix because `secrets.SystemRandom` is the same OS-backed `random.SystemRandom` class and no predictability, bias, state-reuse, concurrency or startup-synchronization defect was reproduced. +Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is closed unmerged after a no-valid-delta audit at exact `d36ed687cf529cda0144cf16d988664c1613082b`. Its generated `random.SystemRandom()` → `secrets.SystemRandom()` edit was not accepted as a security fix because `secrets.SystemRandom` is the same OS-backed `random.SystemRandom` class and no predictability, bias, state-reuse, concurrency or startup-synchronization defect was reproduced. Closure preserves ancestry but creates no product or security acceptance evidence. ### 3.2 Migration/workspace and opaque UID ownership @@ -61,23 +61,27 @@ Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is Dr ### 3.3 NetworkGraph/performance -[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child; #1674 is provenance and #1675 is the memoization owner. Generated #1742 and #1754 are zero-effective-delta provenance after ordinary convergence. Fresh generated #1755 has likewise been ordinary/non-force converged onto #1593 at exact `f19883c271475ae829929c4fd3f11a0f5c2667db`, with the canonical #1593 tree and zero effective delta. Its generated end-to-end `O(1)` claim is rejected: only the first-five/first-eight option subloops are bounded, while NetworkGraph still processes the complete graph elsewhere and no browser/main-thread/heap or buyer-path p95 evidence was supplied. None of #1742/#1754/#1755 is independent product progress. +[#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child at exact `9e80151c02241a224b006ea70681a23b1a7a21d1`; #1674 is provenance and #1675 is the memoization owner. Generated #1742, #1754 and #1755 are closed unmerged after fresh complete-succession audits established zero changed files over the canonical owner and no independent valid source/test/evidence delta. Their generated end-to-end `O(1)` claims remain rejected: only the first-five/first-eight option subloops are bounded, while NetworkGraph still processes the complete graph elsewhere and no browser/main-thread/heap or buyer-path p95 evidence was supplied. + +Generated #1741 requires separate treatment. It had previously converged to #1628, then received two intervening commits that crossed owner boundaries: they deleted canonical NetworkGraph regressions, changed frontend dependency/security fixtures and manifests, added `.trivyignore`, and finally removed the backend AnyIO runtime requirement while downgrading `backend/uv.lock` from 4.15.1 to 4.14.1 under a commit message claiming to ignore AnyIO vulnerabilities. Exact repair `5047d1bacd49f341183db5dd895c45162ea71cf4` keeps those intervening commits as first-parent audit history, adopts current #1628 as an additional parent and restores the exact #1628 tree with zero effective delta. #1741 remains Draft until a fresh complete-succession audit verifies that no unique valid intervening delta remains. Dependency/security/scanner-policy changes belong to their canonical owners and are not accepted through this NetworkGraph lane. ### 3.4 Data-hygiene/checksum/URL ownership Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the auditable data-hygiene product contract. -- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. +- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. - [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. -- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is Draft zero-effective-delta provenance at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`; it is not a second checksum or URL owner. +- Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is closed unmerged after complete-succession/no-valid-delta audit at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its weak-digest and regex-only URL surfaces are absent from the effective tree; the sole predecessor closing-delimiter review finding was explicitly verified as inherited by #1418's parenthesized-URL and Markdown/smart-quote regressions before the thread was resolved. #1746 is not a second checksum or URL owner. ### 3.5 Settings native-disabled accessibility -[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Generated #1716, #1737 and #1744 are provenance only. Browser/keyboard/responsive acceptance remains a separate delivery gate. +[#1676](https://github.com/ContextualWisdomLab/naruon/pull/1676) remains the sole Settings native-disabled semantics owner at exact `8a3ac51662fbe8e49f26a317ac0afe85f853c9ac`, stacked on #1623. Generated #1716 and #1737 remain provenance only. Generated #1744 is closed unmerged after a fresh complete-succession audit confirmed exact zero diff over #1676 and full inheritance of the native `disabled`/independent `aria-busy` source contract, focused regression and standards doctoring. Browser/keyboard/responsive acceptance remains a separate #1676 delivery gate. + +Generated #1753 is also closed unmerged under the no-valid-delta condition. Protected Security permission-save interaction already disables the button while pending, exposes `aria-busy` and changes visible copy to `권한 저장 중`; the generated spinner-only predecessor added no reproduced pending-state, duplicate-activation, settlement/error-recovery, keyboard/touch/focus or assistive-technology regression. Closure is Anti-Slop/provenance cleanup, not new Security UI acceptance evidence. ### 3.6 AI Hub run-history rendering performance -Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is Draft zero-effective-delta provenance at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. +Generated [#1745](https://github.com/ContextualWisdomLab/naruon/pull/1745) is closed unmerged after a fresh no-valid-delta audit at exact `a501ca663e01a53b3c60a1264a6e014ad0228c64`. Its generated `useMemo([events])` premise was rejected because canonical `/api/ai-hub/surface` bounds primary run events to eight, fallback audit events to eight and prompt fallback to five, while no current browser profile, render/commit timing, reference-stability evidence or buyer-path p95 identifies that bounded map as causal. ### 3.7 Email identity and POP3 durable progress @@ -89,7 +93,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.66 material contract +## 4. UI Localization Catalog — v2.67 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -129,7 +133,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A `.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1745, #1746, #1754, #1755 and #1756 are not active causal blockers; they preserve rejected/generated intent as zero-effective-delta provenance. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. +#1756, #1755, #1754, #1753, #1746, #1745, #1744 and #1742 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1741 is repaired to zero effective delta but remains open Draft until its intervening cross-owner commits receive a complete-succession audit. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates @@ -141,8 +145,8 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. -**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. +**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes are not accepted through NetworkGraph and remain audit history only after ordinary convergence back to #1628. -**Data-hygiene duplicate-owner gate: PASS for #1746 convergence, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. +**Data-hygiene duplicate-owner gate: PASS for #1746 succession cleanup, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, independent-review-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From dcbb28aa3e2e7e70c50b3ed5d15f062cca90c2e4 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 09:57:14 +0900 Subject: [PATCH 85/89] docs(gap): currentize checksum owner and succession evidence --- docs/product-technical-gap-baseline.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index f22aa7306..2e8a121cb 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.67 +**Baseline version:** 2.68 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.66 remains audit-visible as blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; v2.59 remains blob `97b8909370f06365a7973a9a56150ee674c3e2af`; v2.58 remains blob `56650ec35cb57235b7566028271f589c7e6c32e5`; v2.57 remains blob `69fefe76d9eb9a17ed988f05652ec40481b2533c`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.67 remains audit-visible as blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.67 preserves v2.66's central-Strix, dependency-security, localization and POP3 contracts while currentizing generated-lane lifecycle and one live owner-boundary repair. Verified zero-effective-delta/generated lanes #1755, #1754, #1753, #1746, #1745, #1744 and #1742 are now closed unmerged only after complete-succession or no-valid-delta audits. #1756 was already closed unmerged for the alias-only `SystemRandom` proposal. #1741 remains open Draft because two intervening commits crossed NetworkGraph, dependency-security and scanner-policy ownership; exact `5047d1bacd49f341183db5dd895c45162ea71cf4` ordinary/non-force preserves that history but restores the exact canonical #1628 tree with zero effective delta pending a separate complete-succession audit. No closure or zero-delta convergence is merge/release evidence for its canonical owner. +v2.68 preserves v2.67's central-Strix, dependency-security, localization, POP3 and NetworkGraph contracts while currentizing the checksum/utility-console owner boundary and three generated provenance closures. Canonical #1361 now owns a bounded fix for the previously contradictory human-facing checksum labels: documented `SHA-256`, `SHA3-256`/`SHA-3-256` and `BLAKE2b-256` spellings normalize to the existing canonical codes without expanding the three-algorithm security surface. Generated #1739 is closed unmerged only after its six review findings were individually routed to #1361, #1505 or #1247 and the branch converged to zero effective delta over current #1361. Generated opaque-UID provenance #1743 and #1736 are also closed unmerged after verified complete succession into #1727. None of these closures or source repairs is merge/release acceptance for the canonical owner. ## 1. Evidence hierarchy and release posture @@ -57,7 +57,7 @@ Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is cl [#1503](https://github.com/ContextualWisdomLab/naruon/pull/1503) remains the sole workspace/Alembic/bootstrap owner at exact `9151c75568c582c8147cfee6757cd00a9b4d60b7`, stacked on #1565. Canonical migration lineage is `0018_workspace_registry → 0019_email_read_state_repair → 0020_workspace_organization_binding → 0021_workspace_personal_owner_binding`. Descendants must not create parallel Alembic heads from protected `develop`. -[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. Generated #1743 is zero-effective-delta provenance. Opaque identity remains defense in depth, not authorization. +[#1727](https://github.com/ContextualWisdomLab/naruon/pull/1727) remains the canonical opaque-UID backfill entropy owner on #1503 at exact `2ac48fb7e591827804ba8e7e911f211b0c134ddf`. Generated #1743 and #1736 are closed unmerged after fresh complete-succession audits established zero effective delta over #1727, full inheritance of their valid `gen_random_uuid()` source intent and no unique test/fixture/contract/evidence delta. Their task-specific security severity prose is not product authority. Opaque identity remains defense in depth, not authorization, and neither closure is merge evidence for #1727. ### 3.3 NetworkGraph/performance @@ -69,7 +69,9 @@ Generated #1741 requires separate treatment. It had previously converged to #162 Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the auditable data-hygiene product contract. -- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6bf2989d571a2aa94ce1f92997650cc450e88e9d`, stacked on #1623. Normal security-labelled algorithms are exactly SHA-256, SHA-3-256 and BLAKE2b-256. MD5/SHA-1 are outside the normal surface. #1361 also owns exact UTF-8 byte semantics, 1 MiB byte ceiling, stable invalid UTF-8 failure, known-answer/chunk-equivalence tests, ADR/doctoring and the explicit statement that an unkeyed digest is not sender authentication. +- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6eb3f28e57b5fa57c530bc7ded0d244a7a3605c2`, stacked on #1623. Normal security-labelled algorithms remain exactly SHA-256, SHA3-256 and BLAKE2b-256 with canonical output codes `sha256`, `sha3_256` and `blake2b_256`. Test-first regression `d23b6f82d61de219ceb6fc0eec7781d810a580f4` records the valid generated-review finding that the catalog advertised standard human-facing names which the canonical handler previously rejected; causal fix `e1a0d464fcfcecca7e97819978fd183b995f6b7d` now maps only documented `SHA-256`, `SHA3-256`/`SHA-3-256` and `BLAKE2b-256` spellings to those canonical codes, with authenticated API regression `d0edb517759e3aeaff115e5f449b0f23d1b90cc6`. MD5, SHA-1, SHA-512, generic BLAKE2b, unknown names and unlisted aliases remain rejected. Exact UTF-8 byte semantics, the 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, Proposed ADR-0007, APA-7 standards/research doctoring and the explicit statement that an unkeyed digest is not sender authentication remain intact. Current-head hosted/security evidence and qualifying post-last-push independent review are still required. +- [#1505](https://github.com/ContextualWisdomLab/naruon/pull/1505) is the canonical utility-console parameter-entry owner at exact `a271c1ffd3d4357c2803b6a3f6c971538ecc9e06`. It replaces the protected page's placeholder `test_value` execution with real user-entered typed parameters and owns the generic form/error UX. It is independently reviewed but not merge-ready because its required CodeQL path remains terminal-failing. #1361 must not duplicate that frontend; buyer-visible checksum browser acceptance requires both owner paths on the integrated tree. +- Generated [#1739](https://github.com/ContextualWisdomLab/naruon/pull/1739) is closed unmerged at provenance head `aa2ca56e0e960b82e1a6d92c3a0ccd1029916b01` after verified complete succession onto current #1361 with zero effective delta. Its intervening dependency/security drift remains audit history only and belongs to #1565/#1623. All six generated review findings were mapped before closure: placeholder execution to #1505; advertised-name rejection, bounded input, weak-MD5 exclusion and research grounding to #1361/#1247; the generated default fallback was rejected as a non-product requirement because canonical #1361 requires explicit algorithm input. All six threads are resolved and no review submission retains another unique valid delta. - [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. - Generated [#1746](https://github.com/ContextualWisdomLab/naruon/pull/1746) is closed unmerged after complete-succession/no-valid-delta audit at exact `167b32ec7077ff11e1d3e81c43a2205433a2bbd7`. Its weak-digest and regex-only URL surfaces are absent from the effective tree; the sole predecessor closing-delimiter review finding was explicitly verified as inherited by #1418's parenthesized-URL and Markdown/smart-quote regressions before the thread was resolved. #1746 is not a second checksum or URL owner. @@ -93,7 +95,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.67 material contract +## 4. UI Localization Catalog — v2.68 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -131,9 +133,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1361/#1418 → #1676 + generated provenance → #1503 → (#1727 + generated provenance; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1756, #1755, #1754, #1753, #1746, #1745, #1744 and #1742 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1741 is repaired to zero effective delta but remains open Draft until its intervening cross-owner commits receive a complete-succession audit. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. +#1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1741 is repaired to zero effective delta but remains open Draft until its intervening cross-owner commits receive a complete-succession audit. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates @@ -143,10 +145,10 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. -**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. +**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. **Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes are not accepted through NetworkGraph and remain audit history only after ordinary convergence back to #1628. -**Data-hygiene duplicate-owner gate: PASS for #1746 succession cleanup, not feature delivery.** Generated weak-digest and regex-only duplicate surfaces are absent from effective product delta; canonical #1361/#1418 ownership remains. +**Data-hygiene owner-succession gate: SOURCE REPAIR PASS / EXACT-HEAD ACCEPTANCE FAIL.** #1361 exact `6eb3f28e...` contains the bounded advertised-label repair plus its regression/API/ADR/doctoring evidence, while #1505 owns real parameter-entry UI and #1418 owns URL/contact hygiene. Generated #1739 and #1746 are closed unmerged only after valid review findings were inherited or rejected against those canonical contracts. #1361 still lacks current-head hosted/security completion and qualifying post-last-push independent review; closure of generated lanes is not feature delivery. Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, independent-review-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From ff53bbc4da14bd9d8108593d0d70e7708554af84 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 10:03:55 +0900 Subject: [PATCH 86/89] docs(gap): currentize central Strix admission evidence --- docs/product-technical-gap-baseline.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 2e8a121cb..50ef8aed1 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.68 +**Baseline version:** 2.69 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.67 remains audit-visible as blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.68 remains audit-visible as blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.68 preserves v2.67's central-Strix, dependency-security, localization, POP3 and NetworkGraph contracts while currentizing the checksum/utility-console owner boundary and three generated provenance closures. Canonical #1361 now owns a bounded fix for the previously contradictory human-facing checksum labels: documented `SHA-256`, `SHA3-256`/`SHA-3-256` and `BLAKE2b-256` spellings normalize to the existing canonical codes without expanding the three-algorithm security surface. Generated #1739 is closed unmerged only after its six review findings were individually routed to #1361, #1505 or #1247 and the branch converged to zero effective delta over current #1361. Generated opaque-UID provenance #1743 and #1736 are also closed unmerged after verified complete succession into #1727. None of these closures or source repairs is merge/release acceptance for the canonical owner. +v2.69 preserves v2.68's checksum/utility-console, dependency-security, localization, POP3 and NetworkGraph contracts while currentizing the live central Strix admission/evidence state. Canonical `.github#2291@1794626af3473ef23b9c2e678c3f06fd6c11636f` has moved from Draft to Ready without changing source. Its prior same-head security/CodeQL generation is now terminal-cancelled audit history, while a newer same-head generation is live and nonterminal. Ready is review admission only, not merge authorization; source repair, owner succession and requested-scope independent review remain valid, but exact-head hosted acceptance is still FAIL. No Naruon source contract changes in v2.69. ## 1. Evidence hierarchy and release posture @@ -28,7 +28,7 @@ Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d - `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. -- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Draft/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. CodeRabbit independently reviewed this exact head and reported no finding in the requested trusted-binder boundary, explicitly confirming those two focused contracts and the stronger sibling fixture topology. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer; fresh current-head Runtime Quality, Semgrep, Python Security and Security Scan remain queued and CodeQL remains pending. +- `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Ready/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. CodeRabbit independently reviewed this exact head and reported no finding in the requested trusted-binder boundary, explicitly confirming those two focused contracts and the stronger sibling fixture topology. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer. A later same-head CodeQL/SAST/Python Security/Security Scan generation became terminal-cancelled audit history. A newer exact-head generation is now live: Security Scan `35672611396`, Python Security `35672611349`, SAST Semgrep `35672611347`, and Agent Review Runtime Quality CI `35661200424` are queued; CodeQL PR `35672611353` is pending. None is GREEN. Ready is review admission only and does not weaken the terminal hosted-acceptance requirement. - `.github#2331@52a0231ef979517935c1e77b6e3728cf33a00d2b` is closed unmerged after verified complete succession of its valid delta into #2291. Its production `$SCRIPT_DIR/strix_evidence_binding.py` change duplicated #2291, and its consumer-root binder-copy fixture strategy was weaker than the canonical sibling trusted-source boundary. Its focused binder-path regression is now owned by #2291. Closure is provenance cleanup, not evidence that #2291 is hosted-accepted; no workflow/review receipt transfers. - `.github#2109` remains the stacked-admission successor and must ordinary/non-force consume the reconciled #2291 owner only after normal protected integration. `.github#2272` retains Pages/SAST scope; `.github#2271/#2275/#2276` retain repository identity, GHAS capability and real-target permission/canary boundaries. - `.github#2278@8a5251bf409fe84b3dd0cba1e48992f5b8d9eda5` is the central repository's separate AnyIO 4.14.0→4.14.2 dependency owner. It corroborates the reviewed fixed floor but is not Naruon source authority; its own current security generation is cancelled and it must not be source-copied into Naruon. @@ -69,7 +69,7 @@ Generated #1741 requires separate treatment. It had previously converged to #162 Issue [#1247](https://github.com/ContextualWisdomLab/naruon/issues/1247) is the auditable data-hygiene product contract. -- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6eb3f28e57b5fa57c530bc7ded0d244a7a3605c2`, stacked on #1623. Normal security-labelled algorithms remain exactly SHA-256, SHA3-256 and BLAKE2b-256 with canonical output codes `sha256`, `sha3_256` and `blake2b_256`. Test-first regression `d23b6f82d61de219ceb6fc0eec7781d810a580f4` records the valid generated-review finding that the catalog advertised standard human-facing names which the canonical handler previously rejected; causal fix `e1a0d464fcfcecca7e97819978fd183b995f6b7d` now maps only documented `SHA-256`, `SHA3-256`/`SHA-3-256` and `BLAKE2b-256` spellings to those canonical codes, with authenticated API regression `d0edb517759e3aeaff115e5f449b0f23d1b90cc6`. MD5, SHA-1, SHA-512, generic BLAKE2b, unknown names and unlisted aliases remain rejected. Exact UTF-8 byte semantics, the 1 MiB byte ceiling, stable invalid-UTF-8 failure, known-answer/chunk-equivalence tests, Proposed ADR-0007, APA-7 standards/research doctoring and the explicit statement that an unkeyed digest is not sender authentication remain intact. Current-head hosted/security evidence and qualifying post-last-push independent review are still required. +- [#1361](https://github.com/ContextualWisdomLab/naruon/pull/1361) is the canonical `content_checksum_generator` owner at exact `6eb3f28e57b5fa57c530bc7ded0d244a7a3605c2`, stacked on #1623. Normal security-labelled algorithms remain exactly SHA-256, SHA3-256 and BLAKE2b-256 with canonical output codes `sha256`, `sha3_256` and `blake2b_256`. Test-first regression `d23b6f82d61de219ceb6fc0eec7781d810a580f4` records the valid generated-review finding that the catalog advertised standard human-facing names which the canonical handler previously rejected; causal fix `e1a0d464fcfcecca7e97819978fd183b995f6b7d` now maps only documented `SHA-256`, `SHA3-256`/`SHA-3-256` and `BLAKE2b-256` spellings to those canonical codes, with authenticated API regression `d0edb517759e3aeaff115e5f449b0f23d1b90cc6`. MD5, SHA-1, SHA-512, generic BLAKE2b, unknown names and unlisted aliases remain rejected. Exact UTF-8 byte semantics, the 1 MiB byte ceiling, stable invalid-UTF8 failure, known-answer/chunk-equivalence tests, Proposed ADR-0007, APA-7 standards/research doctoring and the explicit statement that an unkeyed digest is not sender authentication remain intact. Current exact `6eb3f28e...` has no repository-local workflow run yet and no qualifying post-last-push independent approval; source repair is not exact-head acceptance. - [#1505](https://github.com/ContextualWisdomLab/naruon/pull/1505) is the canonical utility-console parameter-entry owner at exact `a271c1ffd3d4357c2803b6a3f6c971538ecc9e06`. It replaces the protected page's placeholder `test_value` execution with real user-entered typed parameters and owns the generic form/error UX. It is independently reviewed but not merge-ready because its required CodeQL path remains terminal-failing. #1361 must not duplicate that frontend; buyer-visible checksum browser acceptance requires both owner paths on the integrated tree. - Generated [#1739](https://github.com/ContextualWisdomLab/naruon/pull/1739) is closed unmerged at provenance head `aa2ca56e0e960b82e1a6d92c3a0ccd1029916b01` after verified complete succession onto current #1361 with zero effective delta. Its intervening dependency/security drift remains audit history only and belongs to #1565/#1623. All six generated review findings were mapped before closure: placeholder execution to #1505; advertised-name rejection, bounded input, weak-MD5 exclusion and research grounding to #1361/#1247; the generated default fallback was rejected as a non-product requirement because canonical #1361 requires explicit algorithm input. All six threads are resolved and no review submission retains another unique valid delta. - [#1418](https://github.com/ContextualWisdomLab/naruon/pull/1418) is the canonical URL/contact hygiene owner at exact `87a94a4c2b78f12a61ec699dee9ce081ea3d8578`. `url_evidence_extractor` preserves raw/normalized values, source offsets and repeated occurrences, parses bounded absolute HTTP(S) candidates, handles userinfo/IDNA/IPv6/percent encoding and carries warnings without fetching or DNS resolution. It also owns the bounded contact-data redaction slice. @@ -95,7 +95,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.68 material contract +## 4. UI Localization Catalog — v2.69 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -133,7 +133,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1741 is repaired to zero effective delta but remains open Draft until its intervening cross-owner commits receive a complete-succession audit. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -141,7 +141,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Merge/Release Gate: FAIL.** No exact protected integrated candidate currently satisfies required checks, current security evidence, qualifying independent post-last-push review and immutable release evidence. -**Central Strix owner-succession gate: SOURCE + OWNER SUCCESSION + REQUESTED-SCOPE INDEPENDENT REVIEW PASS / EXACT-HEAD HOSTED ACCEPTANCE FAIL.** #2291 exact `1794626a...` contains the stronger 24-site sibling trusted-source fixture repair, production `$SCRIPT_DIR` binder resolution, and #2331's valid focused trusted-path/fail-closed regression. #2331 is closed unmerged after verified complete succession; its weaker consumer-root binder-copy fixture strategy is not retained. CodeRabbit independently re-read the exact current head and reported no finding in the requested boundary. Current Runtime Quality, Semgrep, Python Security and Security Scan are still queued and CodeQL is pending, so no predecessor GREEN transfers and normal protected integration remains blocked. +**Central Strix owner-succession gate: SOURCE + OWNER SUCCESSION + REQUESTED-SCOPE INDEPENDENT REVIEW PASS / EXACT-HEAD HOSTED ACCEPTANCE FAIL.** #2291 exact `1794626a...` contains the stronger 24-site sibling trusted-source fixture repair, production `$SCRIPT_DIR` binder resolution, and #2331's valid focused trusted-path/fail-closed regression. #2331 is closed unmerged after verified complete succession; its weaker consumer-root binder-copy fixture strategy is not retained. CodeRabbit independently re-read the exact current head and reported no finding in the requested boundary. #2291 is now Ready, but Ready is review admission rather than merge authority. The prior same-head Security/SAST/Python Security/CodeQL generation is cancelled audit history; the newer same-head Security Scan `35672611396`, Python Security `35672611349`, SAST `35672611347` and Runtime Quality `35661200424` are queued, while CodeQL `35672611353` is pending. No predecessor or cancelled receipt transfers and normal protected integration remains blocked. **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. @@ -149,6 +149,6 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes are not accepted through NetworkGraph and remain audit history only after ordinary convergence back to #1628. -**Data-hygiene owner-succession gate: SOURCE REPAIR PASS / EXACT-HEAD ACCEPTANCE FAIL.** #1361 exact `6eb3f28e...` contains the bounded advertised-label repair plus its regression/API/ADR/doctoring evidence, while #1505 owns real parameter-entry UI and #1418 owns URL/contact hygiene. Generated #1739 and #1746 are closed unmerged only after valid review findings were inherited or rejected against those canonical contracts. #1361 still lacks current-head hosted/security completion and qualifying post-last-push independent review; closure of generated lanes is not feature delivery. +**Data-hygiene owner-succession gate: SOURCE REPAIR PASS / EXACT-HEAD ACCEPTANCE FAIL.** #1361 exact `6eb3f28e...` contains the bounded advertised-label repair plus its regression/API/ADR/doctoring evidence, while #1505 owns real parameter-entry UI and #1418 owns URL/contact hygiene. Generated #1739 and #1746 are closed unmerged only after valid review findings were inherited or rejected against those canonical contracts. #1361 currently has no repository-local workflow run for exact `6eb3f28e...` and no qualifying post-last-push independent approval, so exact-head hosted/review acceptance is absent; closure of generated lanes is not feature delivery. Do not claim completion from routine reporting, queued checks, historical GREEN or approval, mutable releases, generated-provenance branches, dependency mega-groups, cross-owner root manifest scanning, stale generated lockfiles, unmeasured performance claims, alias-only RNG refactors described as security upgrades, source-only correctness, independent-review-only correctness, interrupted-RETR source repair without reconnect evidence, explicit-locale whitespace normalization, stale doctoring/test descriptions, malformed-versus-unsupported locale collapse, wildcard provenance fabrication, grandfathered-tag reinterpretation as ordinary extlang/variant structure, repeated extension singletons, duplicate variants, reserved multi-extlang occupancy or unresolved exact-head acceptance evidence. Every run must fresh-read live authority before mutation or acceptance. \ No newline at end of file From 1bbc098caab0fa814391924d3ed8d596aa7b2177 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 10:43:24 +0900 Subject: [PATCH 87/89] docs(gap): fold completed owner succession into v2.70 --- docs/product-technical-gap-baseline.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 50ef8aed1..7f9387ebd 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.69 +**Baseline version:** 2.70 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.68 remains audit-visible as blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.69 remains audit-visible as blob `50ef8aed148aa5a484519872d7d2a731bf960fc2`; v2.68 remains blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.69 preserves v2.68's checksum/utility-console, dependency-security, localization, POP3 and NetworkGraph contracts while currentizing the live central Strix admission/evidence state. Canonical `.github#2291@1794626af3473ef23b9c2e678c3f06fd6c11636f` has moved from Draft to Ready without changing source. Its prior same-head security/CodeQL generation is now terminal-cancelled audit history, while a newer same-head generation is live and nonterminal. Ready is review admission only, not merge authorization; source repair, owner succession and requested-scope independent review remain valid, but exact-head hosted acceptance is still FAIL. No Naruon source contract changes in v2.69. +v2.70 preserves v2.69's checksum/utility-console, dependency-security, localization, POP3 and central Strix contracts while folding the completed #1741 succession audit into the durable owner graph. Generated #1741 is now closed unmerged after exact zero-delta complete succession to canonical #1593/#1628; its intervening dependency/security/scanner changes remain rejected audit history owned by #1565/#1623 rather than NetworkGraph. Localization owner #1740 remains exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`: Application CI, Bandit, SAST Semgrep and Docker are now exact-head GREEN, while Security Scan and CodeQL remain queued and no qualifying post-last-push independent approval exists. No protected Naruon source contract changes in v2.70. ## 1. Evidence hierarchy and release posture @@ -63,7 +63,7 @@ Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is cl [#1593](https://github.com/ContextualWisdomLab/naruon/pull/1593) remains the canonical bounded relationship/node option owner at exact `0eb4b6dc5264db8568fd2a54adde9a91feb3cece`, based on #1623. #1628 remains its first-five non-empty label-summary child at exact `9e80151c02241a224b006ea70681a23b1a7a21d1`; #1674 is provenance and #1675 is the memoization owner. Generated #1742, #1754 and #1755 are closed unmerged after fresh complete-succession audits established zero changed files over the canonical owner and no independent valid source/test/evidence delta. Their generated end-to-end `O(1)` claims remain rejected: only the first-five/first-eight option subloops are bounded, while NetworkGraph still processes the complete graph elsewhere and no browser/main-thread/heap or buyer-path p95 evidence was supplied. -Generated #1741 requires separate treatment. It had previously converged to #1628, then received two intervening commits that crossed owner boundaries: they deleted canonical NetworkGraph regressions, changed frontend dependency/security fixtures and manifests, added `.trivyignore`, and finally removed the backend AnyIO runtime requirement while downgrading `backend/uv.lock` from 4.15.1 to 4.14.1 under a commit message claiming to ignore AnyIO vulnerabilities. Exact repair `5047d1bacd49f341183db5dd895c45162ea71cf4` keeps those intervening commits as first-parent audit history, adopts current #1628 as an additional parent and restores the exact #1628 tree with zero effective delta. #1741 remains Draft until a fresh complete-succession audit verifies that no unique valid intervening delta remains. Dependency/security/scanner-policy changes belong to their canonical owners and are not accepted through this NetworkGraph lane. +Generated #1741 is closed unmerged after verified complete succession. It had previously converged to #1628, then received two intervening commits that crossed owner boundaries: they deleted canonical NetworkGraph regressions, changed frontend dependency/security fixtures and manifests, added `.trivyignore`, and finally removed the backend AnyIO runtime requirement while downgrading `backend/uv.lock` from 4.15.1 to 4.14.1 under a commit message claiming to ignore AnyIO vulnerabilities. Exact repair/final head `5047d1bacd49f341183db5dd895c45162ea71cf4` preserves those intervening commits as first-parent audit history, adopts current #1628 as an additional parent and restores the exact #1628 tree with zero effective delta. The predecessor CodeRabbit finding requested the five-relationship, eight-node and first-five-non-empty-label boundaries; canonical #1593/#1628 focused regressions already own those contracts, the thread was mapped to those tests and resolved. Fresh audit found no remaining unique valid source, test, fixture, contract or evidence delta. Dependency/security/scanner-policy changes remain with #1565/#1623 and are not accepted through this NetworkGraph lane. Closure is provenance cleanup, not merge/release acceptance for canonical NetworkGraph owners. ### 3.4 Data-hygiene/checksum/URL ownership @@ -95,7 +95,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.69 material contract +## 4. UI Localization Catalog — v2.70 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -117,7 +117,7 @@ Twenty-five ordinary-forward behavior repairs define the current runtime policy. 14. twenty-fourth RED `2ff28c208b8fd5a83bee3e179f4d66b31831be43` and fix `c94c9345008cf6e339a9f90f59afccc18adea39f` enforce RFC 5646's no-whitespace language-tag boundary for explicit persisted/session identity without changing HTTP `Accept-Language` OWS handling; 15. twenty-fifth repair fixes the pre-existing `zh-min-nan` contradiction. On predecessor exact `97279b9d...`, the focused test required `zh-min-nan -> zh` but production's generic multi-extlang guard raised `ui_locale_input_invalid`. Source fix `8666ef7bf2451f4e4ca8e93c69d24d5a9fb6436c` applies structural guards only to ordinary non-grandfathered `langtag`; doctoring exact `80b889fc...` records the fixed RFC list, explicit-locale no-whitespace boundary and rejection of Preferred-Value rewriting; 16. CodeRabbit review on predecessor `ad091f7b...` found two valid stale-description defects. `b4b8774b...` corrects the HTTP-whitespace test description, `e76f7b07...` corrects catalog whitespace prose, and `80b889fc...` corrects complete grandfathered precedence. Both inline threads are resolved. CodeRabbit then approved exact `80b889fc...`, but that approval is predecessor-only after the hosted-CI repair moved the branch; -17. Application CI run `35629277472` on exact `80b889fc...` was a real hosted RED: frontend passed, backend reported `1 failed, 1879 passed, 32 skipped`. The only failure was the 128-character resource-bound fixture repeating `abcdefgh` fourteen times, which violated invariant 5's duplicate-variant rule. Minimal repair `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9` uses fourteen distinct eight-character variants while keeping the input exactly 128 characters. No production parser, resource ceiling, error taxonomy or `Accept-Language` boundary changed. Fresh exact-head hosted/security evidence and qualifying independent post-last-push review are required. +17. Application CI run `35629277472` on exact `80b889fc...` was a real hosted RED: frontend passed, backend reported `1 failed, 1879 passed, 32 skipped`. The only failure was the 128-character resource-bound fixture repeating `abcdefgh` fourteen times, which violated invariant 5's duplicate-variant rule. Minimal repair `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9` uses fourteen distinct eight-character variants while keeping the input exactly 128 characters. No production parser, resource ceiling, error taxonomy or `Accept-Language` boundary changed. On exact `a2ed5869...`, Application CI `35653122516`, Bandit `35653122510`, SAST Semgrep `35653122504`, and Docker `35653122724` are terminal GREEN; Security Scan `35653122465` and CodeQL PR `35653122299` remain queued. Review history contains no qualifying post-last-push approval for `a2ed5869...`, so exact-head acceptance remains FAIL. RFC 5646 §2.1 defines `Language-Tag = langtag / privateuse / grandfathered`, lists the fixed regular and irregular grandfathered forms, and explains that regular grandfathered tags can appear to match `langtag` even though apparent subtags do not carry ordinary extlang/variant semantics. RFC 4647 lookup and HTTP `Accept-Language` remain separate parsing surfaces. @@ -135,7 +135,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A `.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1741 is repaired to zero effective delta but remains open Draft until its intervening cross-owner commits receive a complete-succession audit. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. +#1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1741, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates @@ -145,9 +145,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. -**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired, and hosted Application CI on predecessor `80b889fc...` exposed one stale boundary fixture rather than a product-source regression. Fixture repair `a2ed5869...` is current, but all evidence from `80b...` is predecessor-only; exact `a2ed...` requires fresh full-suite/security and qualifying post-last-push independent review. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. +**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired. Exact #1740 head `a2ed5869...` now has Application CI, Bandit, SAST Semgrep and Docker GREEN, so the predecessor fixture RED is demonstrably repaired in hosted execution. Security Scan and CodeQL remain queued, and no qualifying post-last-push independent approval exists for this exact head. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. -**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes are not accepted through NetworkGraph and remain audit history only after ordinary convergence back to #1628. +**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes remain rejected audit history after verified complete succession and closure; no dependency/security evidence transfers from that lane. **Data-hygiene owner-succession gate: SOURCE REPAIR PASS / EXACT-HEAD ACCEPTANCE FAIL.** #1361 exact `6eb3f28e...` contains the bounded advertised-label repair plus its regression/API/ADR/doctoring evidence, while #1505 owns real parameter-entry UI and #1418 owns URL/contact hygiene. Generated #1739 and #1746 are closed unmerged only after valid review findings were inherited or rejected against those canonical contracts. #1361 currently has no repository-local workflow run for exact `6eb3f28e...` and no qualifying post-last-push independent approval, so exact-head hosted/review acceptance is absent; closure of generated lanes is not feature delivery. From ccc0922d68ffe8c955f543bd671c25cf196dc5d9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 10:51:14 +0900 Subject: [PATCH 88/89] docs(gap): record CodeQL dispatch-pending RCA --- docs/product-technical-gap-baseline.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 7f9387ebd..da9b47203 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.70 +**Baseline version:** 2.71 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.69 remains audit-visible as blob `50ef8aed148aa5a484519872d7d2a731bf960fc2`; v2.68 remains blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.70 remains audit-visible as blob `7f9387ebd15858b82804b90c486d462ac7dad2b6`; v2.69 remains blob `50ef8aed148aa5a484519872d7d2a731bf960fc2`; v2.68 remains blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.70 preserves v2.69's checksum/utility-console, dependency-security, localization, POP3 and central Strix contracts while folding the completed #1741 succession audit into the durable owner graph. Generated #1741 is now closed unmerged after exact zero-delta complete succession to canonical #1593/#1628; its intervening dependency/security/scanner changes remain rejected audit history owned by #1565/#1623 rather than NetworkGraph. Localization owner #1740 remains exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`: Application CI, Bandit, SAST Semgrep and Docker are now exact-head GREEN, while Security Scan and CodeQL remain queued and no qualifying post-last-push independent approval exists. No protected Naruon source contract changes in v2.70. +v2.71 preserves v2.70's completed #1741 succession, checksum/utility-console, dependency-security, localization, POP3 and central Strix contracts while correcting the live #1752 CodeQL evidence classification. CodeQL PR run `35601386041` is terminal `failure` at its compatibility wrappers, but the wrapper log proves `DISPATCH_OUTCOME=success` and `VERDICT_STATE=pending`: the central current-head scan was dispatched and the wrapper intentionally fails until an authenticated terminal dispatch verdict arrives and triggers the exact-job rerun. That state is neither CodeQL GREEN nor a proved source/SARIF finding. No manual rerun or wake commit is accepted. No protected Naruon source contract changes in v2.71. ## 1. Evidence hierarchy and release posture @@ -25,7 +25,7 @@ Latest Naruon GitHub Release remains `v0.14.4`, published 2026-06-19, with `immu Protected `ContextualWisdomLab/.github/main@e6334e229581a918e2f22de18733b76fa65d7e71` owns reusable CI/review/security/release workflows. Naruon consumes canonical owner contracts and does not copy central workflow source. -- `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. +- `.github#712` owns Actions execution capacity. Hundreds of queued current-head runs remain incomplete; blind rerun, source-neutral wake commits and required-check weakening are prohibited. Naruon #1752 now contributes an explicit downstream example: its local CodeQL compatibility wrapper has dispatched successfully but remains fail-closed with a pending central verdict until the central dispatch path publishes a terminal result and reruns the exact job. - `.github#1911` owns repository-wide/full-suite Trusted-uv acceptance; legitimate terminal hosted evidence is required. - `.github#2040` consumes #1911 and retains its distinct CodeQL scheduler/credential/runtime-quality scope. - `.github#2291` is the canonical trusted Strix runtime/binder owner at exact `1794626af3473ef23b9c2e678c3f06fd6c11636f`, Ready/open/mergeable. The prior 24-site P1 was real: specialized fixtures materialized the trusted binder/runtime inside the consumer root and could mask regressions to consumer-root lookup. Current source uses a sibling trusted source, absolute trusted-gate invocation and explicit `STRIX_REPO_ROOT` for the consumer. Exact `1794626a...` also owns the focused trusted-path regression inherited from #2331: the real `sanitize_remediation_evidence_claims` function must succeed when the scanned consumer lacks central `scripts/ci`, while absence of the trusted sibling binder must still fail closed with exit 2. CodeRabbit independently reviewed this exact head and reported no finding in the requested trusted-binder boundary, explicitly confirming those two focused contracts and the stronger sibling fixture topology. Predecessor Runtime Quality/Semgrep GREEN on `bbe225d...` does not transfer. A later same-head CodeQL/SAST/Python Security/Security Scan generation became terminal-cancelled audit history. A newer exact-head generation is now live: Security Scan `35672611396`, Python Security `35672611349`, SAST Semgrep `35672611347`, and Agent Review Runtime Quality CI `35661200424` are queued; CodeQL PR `35672611353` is pending. None is GREEN. Ready is review admission only and does not weaken the terminal hosted-acceptance requirement. @@ -39,7 +39,7 @@ No Naruon lane may reinterpret source repair, independent review, local evidence ### 3.1 Dependency/security -[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Its source carries Next.js 16.3.4 and Sharp 0.35.4, at or above the currently reviewed patched floors for the three frontend findings now reproduced by #1752's Trivy run. Historical six-workflow GREEN remains generation-specific. A deliberate current-vulnerability-database rerun has been requested against this unchanged exact head without a no-op commit; `trivy-fs` job `106529390674` is currently queued. If it still reports frontend findings, inspect exact importer/lock resolution here. If it reports only backend AnyIO, keep that finding with #1565. Generated #1750 remains Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. +[#1623](https://github.com/ContextualWisdomLab/naruon/pull/1623) remains the canonical frontend dependency-security owner at exact `509be4c1d9b6c7ba239a108656e2382681a85341`, Draft/open. Its source carries Next.js 16.3.4 and Sharp 0.35.4, at or above the currently reviewed patched floors for the three frontend findings now reproduced by #1752's Trivy run. Historical six-workflow GREEN remains generation-specific. A deliberate current-vulnerability-database rerun has been requested against this unchanged exact head without a no-op commit; `trivy-fs` job `106529390674` currently exposes no executed steps. If it still reports frontend findings, inspect exact importer/lock resolution here. If it reports only backend AnyIO, keep that finding with #1565. Generated #1750 remains Draft and retargeted onto #1623 because it changes the same `frontend/package.json`/`pnpm-lock.yaml` surface; its Next.js successor intent and React/Vitest/Playwright/other compatibility migrations must be reconciled ordinary/non-force above the security owner rather than accepted as one direct-to-`develop` group. [#1565](https://github.com/ContextualWisdomLab/naruon/pull/1565) remains the canonical bounded Starlette TestClient/httpx2 and backend lock owner at exact `52dfc863d1a5d6e4e80b6366f719dd09f2aa6172`, Draft/open. Fresh current-database evidence adds a real security RED to this owner: both protected `develop` and #1565 record `anyio==4.14.2` in `backend/requirements-hashes.txt`, but `backend/uv.lock` still resolves **AnyIO 4.14.1**. Exact #1752 Security Scan run `35601386092` therefore correctly reports CVE-2026-63374, CVE-2026-63349 and CVE-2026-64847 from `backend/uv.lock`; upstream reviewed advisories identify AnyIO 4.14.2 as the fixed release for all three. The canonical repair is to regenerate `backend/uv.lock` through the dependency toolchain so the lock and reviewed hashed requirements agree, then reacquire install/TestClient/warnings-as-errors, Security/Trivy, dependency audit where applicable, CodeQL and independent review. Generated lock records must not be hand-edited. @@ -49,7 +49,11 @@ Generated #1751 is Draft provenance for the reproduced cross-boundary `ci-python Draft [#1752](https://github.com/ContextualWisdomLab/naruon/pull/1752) at exact `0b2b4386ac8a2da621602eeaa235bcff4d3b02d4` is the sole Naruon owner for the reproduced Dependabot grouping/manifest-scan defect. First RED `9935b1d6140a20cb54300810290e5769d576cf1a` asserts explicit version-update scope, patch-only wildcard groups and independent backend `aiosmtplib` treatment; fix `c27a8c0ef391845393b1a87b0fe4bed361bdf569` applies those constraints. Second RED `a689777c96a5bf6986f55252b8004915480c4416` asserts that root `pip` must not recursively absorb dedicated backend/connector manifests; fix `6a5ead0173bf9b8daaf95b364c3a819f0495de05` adds root-relative `exclude-paths: [backend/**, connector/**]` while preserving dedicated `/backend` weekly and `/connector` daily entries. Exact-head CodeRabbit approval exists; Application CI, Bandit, SAST Semgrep and Docker are GREEN. -#1752 is nevertheless not security-GREEN. Security Scan `35601386092` is a real terminal RED from six inherited dependency findings: the three backend AnyIO findings caused by the stale 4.14.1 uv lock above, plus two Next.js findings and one Sharp finding in `frontend/pnpm-lock.yaml`. The source-policy PR must not absorb either dependency repair. #1565 owns coherent backend lock regeneration; #1623 owns frontend package/lock revalidation. CodeQL remains queued. After those owners integrate normally, #1752 must reacquire current Security/CodeQL evidence and then prove the grouping policy operationally in a later Dependabot cycle. +#1752 is nevertheless not security-GREEN. Security Scan `35601386092` is a real terminal RED from six inherited dependency findings: the three backend AnyIO findings caused by the stale 4.14.1 uv lock above, plus two Next.js findings and one Sharp finding in `frontend/pnpm-lock.yaml`. The source-policy PR must not absorb either dependency repair. #1565 owns coherent backend lock regeneration; #1623 owns frontend package/lock revalidation. + +CodeQL PR run `35601386041` is now terminal `failure` at the local compatibility-wrapper jobs, but log RCA shows that this is an intentionally fail-closed dispatch-pending state rather than a terminal CodeQL source verdict. `Detect CodeQL languages` and `Dispatch current-head CodeQL scan` succeeded. Python compatibility job `106446188743` reached its enforce step with `DISPATCH_OUTCOME=success` and `VERDICT_STATE=pending`, then exited 1 with `CodeQL scan dispatched. The dispatch workflow will rerun this exact failed CodeQL job after publishing its terminal verdict.` The actions and javascript-typescript wrappers fail at the same enforcement phase. The canonical next step is central `.github` dispatch completion and authenticated current-head verdict publication, followed by the exact wrapper rerun; no manual rerun, no-op wake commit or classification as a CodeQL finding is accepted. + +After dependency owners integrate normally, #1752 must reacquire current Security acceptance; CodeQL must settle through the central dispatch path; then a later Dependabot cycle must prove the grouping policy operationally. Generated [#1756](https://github.com/ContextualWisdomLab/naruon/pull/1756) is closed unmerged after a no-valid-delta audit at exact `d36ed687cf529cda0144cf16d988664c1613082b`. Its generated `random.SystemRandom()` → `secrets.SystemRandom()` edit was not accepted as a security fix because `secrets.SystemRandom` is the same OS-backed `random.SystemRandom` class and no predictability, bias, state-reuse, concurrency or startup-synchronization defect was reproduced. Closure preserves ancestry but creates no product or security acceptance evidence. @@ -95,7 +99,7 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.70 material contract +## 4. UI Localization Catalog — v2.71 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -133,7 +137,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security/CodeQL acceptance + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security acceptance + authenticated central CodeQL terminal verdict/exact wrapper rerun + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. #1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1741, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. @@ -147,7 +151,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired. Exact #1740 head `a2ed5869...` now has Application CI, Bandit, SAST Semgrep and Docker GREEN, so the predecessor fixture RED is demonstrably repaired in hosted execution. Security Scan and CodeQL remain queued, and no qualifying post-last-push independent approval exists for this exact head. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. -**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes remain rejected audit history after verified complete succession and closure; no dependency/security evidence transfers from that lane. +**Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1752 CodeQL compatibility-wrapper run is terminal failure only because the authenticated central current-head verdict is still pending after successful dispatch; this is not CodeQL GREEN and not yet a terminal source finding. Central dispatch must publish a terminal verdict and rerun the exact wrapper normally. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes remain rejected audit history after verified complete succession and closure; no dependency/security evidence transfers from that lane. **Data-hygiene owner-succession gate: SOURCE REPAIR PASS / EXACT-HEAD ACCEPTANCE FAIL.** #1361 exact `6eb3f28e...` contains the bounded advertised-label repair plus its regression/API/ADR/doctoring evidence, while #1505 owns real parameter-entry UI and #1418 owns URL/contact hygiene. Generated #1739 and #1746 are closed unmerged only after valid review findings were inherited or rejected against those canonical contracts. #1361 currently has no repository-local workflow run for exact `6eb3f28e...` and no qualifying post-last-push independent approval, so exact-head hosted/review acceptance is absent; closure of generated lanes is not feature delivery. From 32a50da6e4bd4da7819d8da239d51753b2523888 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 22 Sep 2026 11:53:10 +0900 Subject: [PATCH 89/89] docs(gap): record Calendar owner succession --- docs/product-technical-gap-baseline.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index da9b47203..26f1d26d1 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,15 +1,15 @@ # Naruon Product and Technical Gap Baseline -**Baseline version:** 2.71 +**Baseline version:** 2.72 **Observed on:** 2026-09-22 (Asia/Seoul) **Protected product authority:** `develop@042b0c70531b229af3acbd0421a2f23098d848b3` / tree `8fde14381aaa430eeaaf61151dab6f6800127cd3` **Observed product version:** `0.14.4` **Canonical completion issue:** [#1428](https://github.com/ContextualWisdomLab/naruon/issues/1428) **Canonical Gap-ledger writer:** [#1602](https://github.com/ContextualWisdomLab/naruon/pull/1602) -v2.70 remains audit-visible as blob `7f9387ebd15858b82804b90c486d462ac7dad2b6`; v2.69 remains blob `50ef8aed148aa5a484519872d7d2a731bf960fc2`; v2.68 remains blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. +v2.71 remains audit-visible as blob `da9b47203f40f1c2545879b448451114e2d22e00`; v2.70 remains blob `7f9387ebd15858b82804b90c486d462ac7dad2b6`; v2.69 remains blob `50ef8aed148aa5a484519872d7d2a731bf960fc2`; v2.68 remains blob `2e8a121cb744fba75c59bb99dc8ba9ca05a2c0d0`; v2.67 remains blob `f22aa7306a154434545068c60132b4f1b0cde5ff`; v2.66 remains blob `debc5f0be89289dc6e302ad4e180512256a4ee58`; v2.65 remains blob `e276e04b30aab7b5b6ef1e6d35e3d9985523b026`; v2.64 remains blob `c494121408a89404997f0844949c235ba7a08d7d`; v2.63 remains blob `594b9389df77f0fdf87192f0c81618aa80e2bbba`; v2.62 remains blob `a71c180380bd860d8b47f72c845f4db58adb8ceb`; v2.61 remains blob `66e92401986952c356328f9b8d0c8062a43d9b67`; v2.60 remains blob `a2131e64636739350934d9dabf78f89438b4e6ed`; earlier snapshots remain reconstructable from Git history and `docs/product-technical-gap-history/`. Historical snapshots and predecessor workflow/review receipts are audit material, not current merge or release authority. -v2.71 preserves v2.70's completed #1741 succession, checksum/utility-console, dependency-security, localization, POP3 and central Strix contracts while correcting the live #1752 CodeQL evidence classification. CodeQL PR run `35601386041` is terminal `failure` at its compatibility wrappers, but the wrapper log proves `DISPATCH_OUTCOME=success` and `VERDICT_STATE=pending`: the central current-head scan was dispatched and the wrapper intentionally fails until an authenticated terminal dispatch verdict arrives and triggers the exact-job rerun. That state is neither CodeQL GREEN nor a proved source/SARIF finding. No manual rerun or wake commit is accepted. No protected Naruon source contract changes in v2.71. +v2.72 preserves v2.71's completed #1741 succession, checksum/utility-console, dependency-security, localization, POP3 and central Strix contracts while adding the live Calendar detail owner transition. Canonical #1682 now owns a test-first shared-Button migration that preserves native-disabled unsupported-action honesty and real `CalendarDetailEvent` facts; generated direct-to-`develop` #1757 is closed unmerged only after that valid intent was completely inherited with a stronger regression and its blanket `.Jules` rule was rejected. No protected Naruon source contract changes in v2.72. ## 1. Evidence hierarchy and release posture @@ -99,7 +99,15 @@ The first durable progress generation `5d40f83ff48e7dd9c3bf6deb93995130c5a1470a This is **source repair, not integrated acceptance**. Exact `52d2cc6f...` currently has no repository-local workflow receipt from the new generation, the 2026-09-17 CodeRabbit approval is historical, and a fresh exact-head review has only been requested. #1717 remains open until migration rechain, fresh/historical PostgreSQL upgrade, restart/reconnect progress, duplicate-count, security/coverage/warning and post-last-push independent-review evidence are all present. -## 4. UI Localization Catalog — v2.71 material contract +### 3.8 Calendar detail-sidebar ownership and design-system succession + +[#1682](https://github.com/ContextualWisdomLab/naruon/pull/1682) is the canonical Calendar detail-sidebar owner at exact `233476c07cdb5d86e8379564c86b98b791f0e5d6`, Draft/open. It keeps the honesty/accessibility contract established by its predecessor chain: rendered facts must exist in `CalendarDetailEvent`; unsupported location/delete/copy/edit actions are native-disabled and associated with visible `aria-describedby` reasons; fabricated participant/attachment/date/privacy facts and the inert close affordance stay absent. + +Generated [#1757](https://github.com/ContextualWisdomLab/naruon/pull/1757) identified one valid design-system intent—reuse the shared `@/components/ui/button` primitive—but attempted it directly from stale protected Calendar source and also wrote an over-broad `.Jules/palette.md` rule. Canonical RED `d2ad3c4efbde584c3cb658040fc27d5e13925ffe` now requires the four unsupported controls to expose the shared primitive marker while remaining disabled; causal fix `233476c07cdb5d86e8379564c86b98b791f0e5d6` applies existing `link`/`outline`/`default` variants without restoring fabricated facts or unsupported enabled actions. The blanket `.Jules` instruction is not inherited because reusable component choice remains context-sensitive rather than a self-modifying universal rule. + +#1757 is closed unmerged only after this verified complete succession; closure is not Calendar acceptance evidence. #1682's previous hosted receipts belong to predecessor `477a333...`. The current `233476c...` generation is new and queued/pending, and no qualifying post-last-push independent approval exists yet. Existing jsdom and desktop/1024px Playwright contracts, including screenshot capture, remain in the owner tree, but current-head browser execution and durable screenshot inspection are pending; no Calendar Storybook acceptance exists. UI Delivery therefore remains FAIL. + +## 4. UI Localization Catalog — v2.72 material contract [#1731](https://github.com/ContextualWisdomLab/naruon/issues/1731) remains the single buyer-visible **UI Localization Catalog** Gap. Draft [#1740](https://github.com/ContextualWisdomLab/naruon/pull/1740) is the first bounded executable owner at exact `a2ed58691b8cb98abae9ee9acb51a2e4b4877cf9`. It owns pure localization domain policy only and no persistence, Alembic migration, HTTP API, browser cache/runtime, Storybook, authoring UI, ontology-label authority or LLM translation path. @@ -137,9 +145,9 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A ## 6. Current causal order and buyer-visible gaps -`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security acceptance + authenticated central CodeQL terminal verdict/exact wrapper rerun + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 + generated provenance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. +`.github#712` stable runner acquisition → #1911/#2040 legitimate terminal acceptance → #2291 exact `1794626a...` hosted acceptance (source, owner succession and requested-scope independent review are already clean; #2291 is Ready but its new same-head hosted generation is queued/pending; #2331 closed by complete succession) → #2109/#2272 ordinary adoption → #2271/#2275/#2276 → #1623 current-vulnerability frontend revalidation + generated #1750 reconciliation → #1565 coherent AnyIO 4.14.2 uv-lock regeneration + TestClient/lock acceptance + generated #1749 reconciliation → #1752 reacquired Security acceptance + authenticated central CodeQL terminal verdict/exact wrapper rerun + later Dependabot-cycle operational verification → bounded successors of generated #1751 → #1694 → #1691 → #1593 and canonical NetworkGraph descendants → #1505/#1361/#1418 → #1676 → #1682 Calendar detail shared-Button/browser acceptance → #1503 → (#1727; #1195 migration-reconciled email/POP3 durability) → #1740 `a2ed5869...` exact-head policy acceptance → localization persistence/API/cache preserving repaired locale/no-rewrite, fixed-grandfathered admission and wildcard/default provenance → immutable contextual-orchestrator release + #1549 → #1729/eight-locale rendered UI → remaining Storybook/browser/a11y owners → exact protected integrated candidate → immutable Naruon release with SBOM/provenance/reproducibility/rollback. -#1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1741, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. +#1757, #1756, #1755, #1754, #1753, #1746, #1745, #1744, #1743, #1742, #1741, #1739 and #1736 are closed unmerged and are not active causal blockers; their valid intent is either completely inherited by canonical owners or was verified to have no remaining valid product delta. #1749/#1750/#1751 remain open generated migration/provenance lanes until bounded owner descendants completely inherit their valid version intents, lock/test/fixture/contract/evidence deltas. ## 7. Delivery gates @@ -149,7 +157,7 @@ All Naruon LLM behavior consumes an immutable released contextual-orchestrator A **POP3 durable-progress gate: SOURCE PASS / INTEGRATED ACCEPTANCE FAIL.** #1195 exact `52d2cc6f...` has causal source repairs for persistent negative `RETR` starvation and interrupted malformed/transport attempts. Its branch-local migrations still require #1503 rechain, exact-head repository workflows are absent for this generation, reconnect/restart/PostgreSQL acceptance is outstanding and no qualifying post-last-push independent review exists yet. -**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired. Exact #1740 head `a2ed5869...` now has Application CI, Bandit, SAST Semgrep and Docker GREEN, so the predecessor fixture RED is demonstrably repaired in hosted execution. Security Scan and CodeQL remain queued, and no qualifying post-last-push independent approval exists for this exact head. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. +**UI Delivery Gate: FAIL.** Localization runtime policy is source-repaired. Exact #1740 head `a2ed5869...` now has Application CI, Bandit, SAST Semgrep and Docker GREEN, so the predecessor fixture RED is demonstrably repaired in hosted execution. Security Scan and CodeQL remain queued, and no qualifying post-last-push independent approval exists for this exact head. Eight-locale persistence/API/page composition, Storybook/browser/a11y and exact resource-version evidence are not integrated. Calendar owner #1682 exact `233476c...` now adopts the shared Button primitive with a focused RED while preserving native-disabled reasons and removing fabricated facts/inert close behavior; its new hosted generation, independent review, current browser screenshots and Storybook acceptance remain incomplete. The checksum slice also remains browser-incomplete until #1505's real parameter-entry UI and #1361's current checksum contract coexist on an integrated head and are exercised in browser/E2E evidence. **Dependency-update ownership/security gate: FAIL.** #1752 contains the two causal Dependabot grouping/manifest-scan repairs and independent approval, but its current Security Scan is RED on inherited dependency debt. #1565/protected backend has a real AnyIO lock incoherence (`requirements-hashes` 4.14.2 versus `uv.lock` 4.14.1) that must be regenerated through the owner path; #1623 must prove the frontend Next.js/Sharp floors against the current vulnerability database. #1752 CodeQL compatibility-wrapper run is terminal failure only because the authenticated central current-head verdict is still pending after successful dispatch; this is not CodeQL GREEN and not yet a terminal source finding. Central dispatch must publish a terminal verdict and rerun the exact wrapper normally. #1749/#1750/#1751 remain generated migration/provenance lanes, not substitute owners. #1741's intervening `.trivyignore`/dependency/test-deletion changes remain rejected audit history after verified complete succession and closure; no dependency/security evidence transfers from that lane.