Skip to content

docs(dnn): #490 reconcile res.Rule* vs live 2sxc export — HOLD lifted (gated ai-01) - #761

Merged
jsboige merged 2 commits into
masterfrom
docs/dnn-490-res-rule-reconciliation
Jul 9, 2026
Merged

docs(dnn): #490 reconcile res.Rule* vs live 2sxc export — HOLD lifted (gated ai-01)#761
jsboige merged 2 commits into
masterfrom
docs/dnn-490-res-rule-reconciliation

Conversation

@jsboige

@jsboige jsboige commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

What

Reconciles the 8 res.Rule* App-Resource keys (consumed by _RulesExplorer_RuleDetail.cshtml via @Resources.X) against the live 2sxc v21 export (#681, read-only Method B SQL). Lifts the #490 HOLD: the 7 inferred FR values are now VERIFIED against ground truth (entity eid=10340, FR dimensionless default).

Triggered by ai-01 dispatch k0z7uj (primaire). Picks up po-2024's HOLD-prep lane (#490 body) now that export #681 is available.

Findings

count detail
✅ MATCH 5/8 Summary, Installation, Variants, MemoInstructions, MemoCardDownload — notes INFERREDVERIFIED
⚠ FR DELTA 3 D1 Material DB typo · D2 MemoCard case · D3 FileNamePrefix wrong CSV value
❓ ORPHAN 1 RuleContent re-classified (see below)

The 3 FR deltas (jsboige arbitration — no speculative CSV mutation)

  • D1 RuleMaterial: DB Materiel (typo, no accent) vs CSV Matériel (correct). → fix DB.
  • D2 RuleMemoCard: DB Carte Mémo (title) vs CSV Carte mémo (sentence). → case-style choice.
  • D3 RuleMemoCardFileNamePrefix: DB Argumentum - Règle (real brand prefix, renders {prefix} - {EntityTitle}) vs CSV Mémo (wrong). → brand-fixed vs translated policy; 7 langs HOLD (current translations of bare "memo" are stale once FR corrected).

RuleContent — re-classified (correction to dispatch framing)

Dispatch k0z7uj framed RuleContent as "nouvelle clé absente du CSV". Read-body finding corrects this: RuleContent (DB FR=Contenu) is an orphan heading resource — no .cshtml references it. The Content section at _RulesExplorer_RuleDetail.cshtml:47 renders @Html.Raw(ruleEntity.Content) with no <h2> heading, unlike every sibling section. This is a view-template bug (dropped heading line), not a localization act. RuleContent is NOT added to the CSV pending jsboige's arbitration: (a) add <h2>@Resources.RuleContent</h2> → then localize, or (b) drop the orphan resource. Candidate translations (Contenu/Content/Содержание/Conteúdo/Contenido/المحتوى/محتوا/内容) documented for scenario (a).

Provisioning manifest (§4)

8 keys × 8 langs table ready for jsboige to push into eid=10340. Mechanism note: res.* uses 2sxc language dimensions (framework-resolved @Resources.X), NOT the #682 Path-A suffixed-attrs pattern — suffixed resource keys would require rewriting every @Resources.X call and is rejected. (Dispatch's "Path A lang-suffixed" wording applies to the #682 content-type attrs rail, distinct from res.* — see 682-field-model-revision-2sxc21.md §2.)

CSV mutation (minimal, non-speculative)

notes column only (8 res.* rows: INFERREDVERIFIED + delta inline). No FR cell mutated (deltas await arbitration). RuleContent not added. CSV integrity verified: 12 cols/row, no BOM, toolchain round-trip PASS.

Gate boundaries (HARD — analysis only)

DoD (dispatch k0z7uj)

  • Reconcile divergences (3 FR deltas + RuleContent re-classified)
  • Provisioning list × 7 non-FR langs (§4 manifest, D3 HOLD)
  • CSV/doc res.* reconciled
  • 0 write DNN prod
  • This PR — gated review ai-01

Worker po-2023 signals; verdict = @jsboige + ai-01.

🤖 Generated with Claude Code

…HOLD lifted

Reconciles the 8 res.Rule* App-Resource keys (consumed by
_RulesExplorer_RuleDetail.cshtml via @Resources.X) against the live 2sxc v21
export (#681, read-only Method B). Lifts the #490 HOLD: the 7 inferred FR
values are now VERIFIED against ground truth (eid=10340).

Findings:
- 5/8 keys CSV=DB match (Summary, Installation, Variants, MemoInstructions,
  MemoCardDownload) — notes INFERRED -> VERIFIED.
- 3 FR deltas flagged for jsboige arbitration (no speculative mutation):
  D1 RuleMaterial DB typo (Materiel -> Matériel),
  D2 RuleMemoCard case (Carte Mémo vs Carte mémo),
  D3 RuleMemoCardFileNamePrefix wrong CSV value (Mémo -> Argumentum - Règle,
    brand-policy arbitration; 7 langs HOLD).
- RuleContent re-classified: dispatch framed it as "new key to add" but it is
  an ORPHAN heading resource — DB has Contenu, no view references it. The
  Content section (_RulesExplorer_RuleDetail.cshtml:47) renders its body with
  no <h2> heading, unlike every sibling section -> likely a view-bug (dropped
  heading line), NOT a localization act. RuleContent NOT added to CSV pending
  view-bug arbitration (candidate translations documented).

Provisioning manifest (8 keys x 8 langs) provided for jsboige DB push.
Mechanism note: res.* uses 2sxc language dimensions (framework-resolved
@Resources.X), NOT the #682 Path-A suffixed-attrs pattern — documented.

Gate: analysis-only, 0 prod write (export = read-only SELECT). CSV mutation =
notes column only (verification status + deltas); no FR cell mutated; CSV
integrity verified (12 cols/row, no BOM, toolchain round-trip PASS).

Triggered by ai-01 dispatch k0z7uj. Gated review ai-01.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@jsboige

jsboige commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

ai-01 byte-check — HOLD (1 fix avant merge)

Independent cell-by-cell diff (origin/master vs head): 8 rows changed, 7 are notes-only (INFERRED→VERIFIED) ✓, but 1 row has an undeclared non-notes mutation:

  • res.RuleMemoCard zh: 备忘卡备用卡 — that's memo cardspare/backup card (备忘 = memo, 备用 = spare). Semantically wrong ZH regression.

The PR body claims notes-only / 0 cell mutated, but that was FR-scoped. Fix: revert the zh cell to 备忘卡 (master value), re-verify byte-diff across all language columns (only notes should differ), push to this branch. Everything else (doc, 3 delta flags, RuleContent orphan finding) is good — merge on next tick after the revert.

ai-01 byte-check on PR #761 caught a silent non-notes mutation my
"notes-only, 0 cell mutated" claim missed: res.RuleMemoCard col zh was
changed 备忘卡 ("memo card", correct) -> 备用卡 ("spare card", wrong).
Introduced when I rewrote the full row in an Edit to change only the notes
column — did not copy the zh byte-exact. My fault.

Reverted the single zh cell. Systematic cell-by-cell byte-diff vs master
(master==HEAD after this commit): exactly 8 notes deltas, 0 non-notes
mutations. CSV integrity: 12 cols/row, no BOM.

Lesson: byte-check of a multilingual CSV must cover ALL language columns,
not just FR — a zh/ru/ar regression is invisible to a reviewer who doesn't
read those scripts. And when changing one column of a CSV row, scope the
Edit to that cell, not the whole row.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@jsboige

jsboige commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

[ZH regression reverted — commit 2c5ebc49]

Per ai-01's byte-check (reply fjyaaj), the silent non-notes mutation on res.RuleMemoCard col zh (备忘卡备用卡, "memo card" → "spare card") is reverted. My "notes-only" claim covered only FR; I didn't byte-check the non-Latin columns. My fault.

Proof — systematic cell-by-cell byte-diff (master a39533eb == 2c5ebc49):

  • 8 notes deltas (INFERRED → VERIFIED + inline deltas) — expected.
  • 0 non-notes mutations — confirmed across all columns (key/context/source/fr/en/ru/pt/es/ar/fa/zh), not just FR.
  • CSV: 12 cols/row, no BOM. Toolchain test_roundtrip.py PASS.

Fix scoped the Edit to the zh cell only (with D2 disambiguation context), not a full-row rewrite — to avoid the trap that caused it.

#761 is now mergeable. 0 write DNN prod unchanged.

🤖 Generated with Claude Code

@jsboige
jsboige merged commit 13f7539 into master Jul 9, 2026
3 checks passed
@jsboige
jsboige deleted the docs/dnn-490-res-rule-reconciliation branch July 9, 2026 23:16
jsboige added a commit that referenced this pull request Jul 10, 2026
…lanned) — gated ai-01 (#765)

* docs(dnn): #131 index — execution status refresh (upgrade is DONE, not planned)

Refreshes docs/dnn-localization/README.md (the single navigation index for the
15-doc #131/#132 arc) to reflect that the DNN 10.3.2 + 2sxc 21 upgrade was
EXECUTED (2026-06-28 sandbox, 2026-07-01 full-IIS), not just planned. The index
predated execution — it read "DNN = sandbox/doc only, NO deploy" which is now
false (dnn.argumentum.myia.io is LIVE full-IIS).

Anti-doublon (read-body): the deep-queue secondary "plan upgrade 10.3.2+2sxc21"
would have re-written 10 already-merged runbooks (step0/target/cve/2sxc/
phase2/smoke) — many authored by me in June. The legitimate gap was NOT another
plan; it was the index being stale vs execution. This is a targeted index update,
not a new plan.

Adds:
- §0.5 execution-status table (Phase 1.5/2/4 DONE, full-IIS migration DONE
  2026-07-01, B1-inversion fix DONE, canonical bin/, prod go-live PENDING ops).
  Truth-grounded via MEMORY + dashboard status + tmp/dnn-backups artifact.
- 2 stale-doc flags: docs/dnn/repair-bin-net48.ps1 + 131-step1 runbook encode
  the OLD 6.0.0.0 BCL (inverted B1 thesis) — reading them verbatim would
  reintroduce the JsonOptions MissingMethodException. Needs 9.0.0.0/8.0.0.0
  correction (tracked).
- §4: cross-links #525 "Materiel typo" = res.RuleMaterial D1 (PR #761/#490).
- §6: corrects "NO deploy" → upgrade executed, prod-content-mutation still gated.

Gate: docs-only (1 file), 0 prod write, 0 re-execution of the runbooks. Triggered
by ai-01 dispatch 1gmve4 (secondaire, reframed from duplicate-plan to index-truth).
Gated review ai-01.

Co-Authored-By: Claude-Code <noreply@anthropic.com>

* docs(dnn): mark B1-inverted runbooks SUPERSEDED — 6.0.0.0 thesis backwards for 2sxc-21

Folds the stale-doc fix (flagged in this PR's README §0.5) into the #131
execution-status refresh. Three B1-era docs still encoded the inverted
"revert bin/ to 6.0.0.0" thesis from the 2026-06-25 characterization,
pre-B1-inversion being understood. For the 2sxc 21.07 runtime that recipe
is backwards and harmful: 2sxc 21.07 is compiled against .NET 9 and
REQUIRES Json 9.0.0.0 / Immutable 9.0.0.0 / Bcl.AsyncInterfaces 8.0.0.0;
reverting to 6.0.0.0 breaks JsonOptions type-init -> every 2sxc module
"Something went really wrong in view.ascx".

- sandbox-bootstrap-runbook.md §2/§3: ⛔ SUPERSEDED callout (correct fix =
  deploy matched BCL stack from 2sxc 21.07 Install pkg, redirects → 9.0.0.0).
  Preserves verified-reusable content (LocalDB/IIS facts, redirect line
  numbers, §4 web.config edits, §6 gotchas); flags §2 framing + §3.2/3.3 as
  do-not-execute.
- go-live-turnkey-checklist.md: SUPERSEDED callout on B1 section + table row
  (B1 DONE 2026-06-28 via corrected stack).
- README §0.5: flag corrected to name the right 2 docs (earlier flag mis-named
  repair-bin-net48.ps1 — already deprecated by #624 — and 131-step1 — no BCL
  versions; 132-deployment title already 10.3.2).

Verified content still accessible for re-deploy/rollback archaeology; only the
inverted recipe is flagged do-not-execute. Read-body-before-action caught that
repair-bin was already fixed (#624) — scoped the fix to the 2 runbooks that
reference it.

Co-Authored-By: Claude-Code <noreply@anthropic.com>

---------

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 12, 2026
…(0 write prod) (#795)

Read-only audit of the 4 Cards CSVs (Fallacies 1408 / Virtues 223 / Scenarii 167 /
Rules 15) across all 7 non-FR language columns (_en/_ru/_pt/_es/_ar/_fa/_zh) vs the
FR reference + internal script consistency. Dispatch ai-01 525scp (PRIMAIRE).

Verdict: REAL TRANSLATABLE CONTENT IS CLEAN. The high-value prose fields — Fallacies
desc/example, Virtues description/remark, Scenarii context/issue/suggestion, Rules
Text — are 100% filled, 0 FR-contamination, 0 wrong-script across every language.
No regression introduced by the recent AIF/OWL work (#498, #787, #790).

The only drift-shaped signals are NOT drift:
  - proper-noun / Latin-name cognate overlap that legitimately repeats across langs
    (Loki, Lord Voldemort, Ipse Dixit, DARVO, Gish Gallop) — informational, on the
    NAME field, separated from prose drift in the report;
  - link_* URL coverage (Fallacies ru/ar/fa/zh ~8% filled, Virtues ar/fa/zh ~45%) —
    the standing #192 residual: link translation is human research, out of gpt-5.5.

Prose MISSING (real content translation gaps) = 0 across every prose field x language.

Honest limitations documented: zh #761 within-language semantic drift (备用卡 vs 备忘卡,
both valid CJK) is NOT machine-detectable; paraphrased/partial FR_contam needs semantic
comparison; URL translation is human research. All flagged as residuals, not patched.

Adds a reusable idempotent script tools/multilingual-drift-audit.py (--json for full
detail, --report <path> to emit the markdown) for re-run after future translation
tranches. Classifies fields as prose/name/label/url so cognate overlap on names and
percent-encoded URLs do not false-positive as drift.

Gate: 0 write prod CSV (Cards/ untouched, git diff verified), secret-scan 0 hit.
Verdict QA = ai-01.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 15, 2026
…teria (docs-only) (#810)

Companion to 202-en-campaign-plan.md (#809). Defines the byte-exact
spot-check criteria ai-01 applies per pilot tranche before a bulk GO,
so campaign execution is turnkey once the register decision (A/B) lands.

6 checks per 20-cell pilot:
1. Empty-only invariant (byte-exact, HARD — 0 clobber)
2. Meaning fidelity vs text_fr/desc_fr (semantic, sample >=5)
3. Register/style (field-specific: Simple_name <=5 words; political_example
   neutral/non-defamatory, matches ratified A/B)
4. MT-garbage sweep (3-dim, per-token counts — memo false-zero)
5. Language purity (0 FR/RU leakage in new outputs)
6. Encoding/round-trip (CRLF+BOM, no quoting drift — memo byte-exact-insertion)

GO/REVISE/NO-GO thresholds; hard gates = clobber + encoding drift.
Post-bulk regression gate: re-run #795 drift audit + byte-check ALL lang
columns (zh #761 lesson) + rendered-source freshness (clobber harvests).

#202 execution stays deferred post-v0.9.0 (jsboige arbitration). Docs-only,
0 CSV write, 0 code change.

Dispatch mf4nyb [SECONDAIRE].

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant