Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
210 commits
Select commit Hold shift + click to select a range
76e88ff
wip: cache lang file paths during scanAndBuildAll to avoid redundant …
Windorain Jul 10, 2026
31ea829
Restructure DataDrivenGuideLoader: eliminate dead code, inline trivia…
Windorain Jul 10, 2026
5bd180f
chore: remove performance instrumentation
Windorain Jul 10, 2026
9867930
Merge branch 'master' of https://github.com/GTNewHorizons/GuideNH int…
Windorain Jul 10, 2026
294dde5
chore: spotless formatting
Windorain Jul 10, 2026
5e52143
chore: remove remaining instrumentation from reload service and page …
Windorain Jul 10, 2026
ec2e733
chore: remove remaining nanoTime instrumentation
Windorain Jul 10, 2026
cea3971
fix: prevent NullPointerException from buggy resource packs in readBytes
Windorain Jul 11, 2026
5a384b5
Merge branch 'master' into opt/guide-load-time
Windorain Jul 11, 2026
01df4e5
chore: spotless formatting
Windorain Jul 11, 2026
e3a77ea
chore: remove section comments flagged in review
Windorain Jul 11, 2026
e820c26
Merge branch 'master' into opt/guide-load-time
ABKQPO Jul 11, 2026
145985a
Rust layout engine + JNI bridge + GuideRenderEngine framework
Windorain Jul 12, 2026
224cfc9
Middle layer: LayoutStyleExtractor, LayoutNodeSerializer, LayoutTreeS…
Windorain Jul 12, 2026
9952705
CSS token system: TokenKey, Theme, GuideThemeManager, .cfg parser, Sy…
Windorain Jul 13, 2026
1278ea1
Delete CustomData, add PrimitiveCollector and explicit size interface
Windorain Jul 13, 2026
15ec922
Add emitPrimitives to ShapeRenderer, complete DrawText with ResolvedT…
Windorain Jul 13, 2026
4d9fd59
wip: Rust layout pipeline with synthetic root and system font loading
Windorain Jul 14, 2026
446a7dc
wip: float-wrap bands, rich spans, justify, clear-bridge + harness in…
Windorain Jul 20, 2026
8bb2b23
wip: parley text layout — measureLayout + shapeText switched, bands/c…
Windorain Jul 20, 2026
a96e75e
wip: snapshot before float-bridge refactor (P5 cosmic purge + two-pas…
Windorain Jul 21, 2026
c950f74
wip: jump-1 — Rust document-top single-pass pusher (live float table …
Windorain Jul 22, 2026
659ed42
wip: jump-5 — sink serializer special cases into node declarations: r…
Windorain Jul 22, 2026
8e984b6
wip: clear breaks now owned by the Rust pusher (architecture: Java on…
Windorain Jul 22, 2026
d9058ee
wip: fix trailing <br clear> inflating the paragraph box (the 'callou…
Windorain Jul 22, 2026
e1edbaf
wip: hard <br> line breaks now honoured by the Rust pusher (split-and…
Windorain Jul 22, 2026
dfe72c0
wip: spotless format-only on the three layout-compiler files (jump-5 …
Windorain Jul 22, 2026
6b513b8
Java: delete LineBuilder — Rust sole layout authority
Windorain Jul 24, 2026
7c78034
Rust: paragraph-level float-aligned inline support
Windorain Jul 24, 2026
e51c3f8
wip: wave-1 cleanup — heading separator via primitives, paragraph Dra…
Windorain Jul 27, 2026
65428af
wip: wave-2 — flowchart canvas on primitive pipeline, NeiRecipeBox Ru…
Windorain Jul 27, 2026
36c18cc
wip: wave-3 — mindmap canvas on primitive pipeline, PieChart Rust Mea…
Windorain Jul 27, 2026
fda9245
wip: wave-4 — generic chart MeasureFunc (BarChart wired), mermaid leg…
Windorain Jul 27, 2026
b79ba99
wip: wave-5 — Column/Line/Scatter wiring, renderIcon purge, engine ba…
Windorain Jul 27, 2026
d3e57fc
wip: T5.7 StructureView Rust MeasureFunc + explicit-pin fix
Windorain Jul 27, 2026
f21ef3e
wip: T5.8 GuidebookScene Rust MeasureFunc
Windorain Jul 27, 2026
af14d05
wip: T5.9 FunctionGraph Rust MeasureFunc + explicit-pin fix
Windorain Jul 27, 2026
17b9ab1
wip: T5.10 MediaWikiGeneratedListBlock Rust MeasureFunc
Windorain Jul 27, 2026
1eb61dc
wip: T5.11 MediaWikiSpecialGeneratedBlock Rust MeasureFunc — T5 serie…
Windorain Jul 27, 2026
701e430
wip: T6a decouple computeLayout-cached serialization inputs (intermed…
Windorain Jul 27, 2026
5325993
wip: T6b-1 chart chrome computation moved into Rust
Windorain Jul 27, 2026
82620c4
wip: T6b-2 MW-special entry heights moved into Rust + font-facts deco…
Windorain Jul 27, 2026
86e6788
wip: T6b-4 heading separator via Rust inline-window (kind=3 Decoratio…
Windorain Jul 27, 2026
6434488
wip: T6b-3 FileTree de-opaqued + alignItems honored
Windorain Jul 27, 2026
11a8385
wip: T6b-5 Java layout pre-pass removed — Rust is sole layout authority
Windorain Jul 27, 2026
f7c7bb0
wip: headless screenshot infra T2+T3 — SDL window hiding + document o…
Windorain Jul 27, 2026
c3b4839
wip: headless screenshot T4 — RenderPageService orchestration
Windorain Jul 27, 2026
c40c8a5
wip: headless screenshot T5+T6 — renderpage command + external driver…
Windorain Jul 27, 2026
d81e89a
wip: forward headless-render driver props to client JVM in run tasks
Windorain Jul 27, 2026
cc1e6c5
wip: list available page keys in Page-not-found error (T7 diagnostics)
Windorain Jul 27, 2026
a6de28a
wip: fix bounds JSON empty — LytDocument is LytNode not LytBlock, ite…
Windorain Jul 27, 2026
4eb12ed
wip: hide window at preInit (earliest GuideNH code point), idempotent…
Windorain Jul 27, 2026
aee69a3
wip: --scale N render magnification (geometry unchanged, pixel densit…
Windorain Jul 27, 2026
7c73077
wip: forward renderpage.scale prop to client JVM (missed in T10 wiring)
Windorain Jul 27, 2026
753b9bb
wip: batch render mode — allPages/list triggers, per-page fault conta…
Windorain Jul 27, 2026
d005dd2
wip: forward renderpage.allPages/list props (batch mode wiring)
Windorain Jul 27, 2026
cc66c19
wip: mount document before layout in headless render (ScenePlaceholde…
Windorain Jul 27, 2026
06f872d
wip: fix GameScene 3D offscreen rendering (skip lightmap window under…
Windorain Jul 28, 2026
4cdc229
wip: unify offscreen render coordinate systems — context zoom=scale +…
Windorain Jul 28, 2026
f0a0e4a
wip: visualtest fixture workspace scaffolding — dev resource-pack sou…
Windorain Jul 28, 2026
a28f5e4
wip: visual-inspection screener v1.1 — geometric layer (bounds JSON r…
Windorain Jul 28, 2026
b2b981d
wip: screener v1.2 — system prompt actually sent (was silently droppe…
Windorain Jul 28, 2026
58b435a
wip: .env.example model roster updated for migrated Qwen platform (se…
Windorain Jul 28, 2026
009c745
wip: SPEC v2 — full feature-coverage matrix (45 fixtures/14 folders) …
Windorain Jul 28, 2026
724a3d0
wip: restructure fixtures into scanned folder — engine only scans ass…
Windorain Jul 28, 2026
a2fb933
fix(headless): --list expects a file path, not page ids — harden pars…
Windorain Jul 28, 2026
7abe931
docs(visualtest): SPEC v3 — terminology & triage (real engine vs offl…
Windorain Jul 28, 2026
9019e50
feat(visualtest): make fixture pack valid + verified in-game loading …
Windorain Jul 28, 2026
5a6503e
docs(visualtest): mermaid placeholder confirmed as real engine issue …
Windorain Jul 28, 2026
6fc0a62
feat(visualtest): Wave 1 fixture corpus — 30 pages across text/lists/…
Windorain Jul 28, 2026
5d75f78
feat(visualtest): Wave 2 fixture corpus — 26 pages + snbt across imag…
Windorain Jul 28, 2026
251e4af
feat(visualtest): stress/mixed.md + finalize index.md & SPEC position…
Windorain Jul 28, 2026
504a783
docs+fix(visualtest): adjudication ledger round-1 + fixture fixes C1-C5
Windorain Jul 28, 2026
04693ae
docs+fix(visualtest): ledger round-2 — A14 widths meta, A15 float anc…
Windorain Jul 28, 2026
e6c3f03
fix(guide): A3 ContentTabs header height, A9 scene mutation timing, A…
Windorain Jul 28, 2026
9e00e5f
fix(guide): wave-2 — A2 table crash/align, A4 details clip, A11 fullW…
Windorain Jul 28, 2026
d83a8b8
fix(guide): wave-3 — converter crash fixes, A1 mermaid bounds (partia…
Windorain Jul 28, 2026
ad66653
fix(guide): A1 mermaid layout chain (precompute/width/headless zoom/c…
Windorain Jul 28, 2026
651eb4c
fix(guide): A6 display latex centering, A7 inline drop-line (baseline…
Windorain Jul 28, 2026
188c6ab
fix(guide): A8a inline $...$ latex shorthand (Pandoc rules + escape),…
Windorain Jul 28, 2026
2dc6566
docs(visualtest): A-class fix-round ledger closeout + new issues N1-N…
Windorain Jul 28, 2026
77d542d
docs(visualtest): formal documentation set (workflow/usage/resources/…
Windorain Jul 29, 2026
409104e
feat(visual-inspection): screener prompt v3 (font-path category, in-p…
Windorain Jul 29, 2026
f5228a4
fix(guide): round-2 layout/render fixes R2-1..R2-5
Windorain Jul 29, 2026
a7d41ce
test(visualtest): add meta/error-parse.md fixture (dedicated commit p…
Windorain Jul 29, 2026
fc72710
docs+ratchet(visualtest): close round-2 issues, harden screener/ratchet
Windorain Jul 29, 2026
f9a5b9e
fix(guide): round-3 layout/bounds fixes (width budget, align chain, b…
Windorain Jul 29, 2026
f90cfec
test(visualtest): fixture corrections (dedicated commit per PRINCIPLES)
Windorain Jul 29, 2026
d9d2693
fix(visual-inspection): geometric screener calibration round 3
Windorain Jul 29, 2026
c6a9848
docs(visualtest): round-3 registry, pitfalls PF16-19, stage-3 calibra…
Windorain Jul 29, 2026
7796ec5
docs(visualtest): round-4 VLM direct-observation sampling registry (R…
Windorain Jul 29, 2026
ebda13b
docs(visualtest): round-4 full-corpus VLM screening registry (R4-8..R…
Windorain Jul 29, 2026
b52e2ab
fix(layout): table width family R4-4/R4-18 + R4-17 alignment chain (p…
Windorain Jul 29, 2026
3fd6cd1
fix(layout): float family R4-2/R4-8/R4-9b/R4-10-partial + R4-17 align…
Windorain Jul 29, 2026
f19db7a
fix(float): CsvTable wrap/align wiring R4-9 closed + R4-17 saga resol…
Windorain Jul 29, 2026
2b54757
fix(visual): waves 3-4 — mermaid viewport/links, text family, code bl…
Windorain Jul 29, 2026
3a3910b
fix(visual): wave 5 verified — camera preset, nei fallback, charts, m…
Windorain Jul 29, 2026
a4cb71d
fix(images): R4-29 crop UV + R4-31 block-level align + float dispatch…
Windorain Jul 30, 2026
3ce75d6
fix(mermaid): recursive NodeContent subtree layout (R4-12 round 3)
Windorain Jul 30, 2026
97d8532
fix(scene): weather visibility R4-26 + annotation hardening + LytImag…
Windorain Jul 30, 2026
2c4a7b1
fix(lists): R4-30 inline image height in list items
Windorain Jul 30, 2026
9347760
fix(images): R4-35 scaleX/scaleY folded into explicit dims
Windorain Jul 30, 2026
c76ec79
fix: R4-36 code-block viewport + R4-37/38/39 mermaid polish
Windorain Jul 30, 2026
0401d08
docs(visualtest): G5 — R4 waves 3-6 closure + final full re-screen re…
Windorain Jul 30, 2026
9841345
fix(mermaid): R4-12 list containers collapsed in NodeContent manual l…
Windorain Jul 30, 2026
be1b77a
docs(visualtest): PF22-25 pitfalls + G6 STUCK re-examination closure
Windorain Jul 30, 2026
010c688
fix(scene): R4-24 overlay annotations double-scaled out of scissor at…
Windorain Jul 30, 2026
83dbf77
fixture(annotations): align DiamondAnnotation Expected prose with col…
Windorain Jul 30, 2026
b199249
fix(scene): PonderInputAnnotation zoom correction (same double-scale …
Windorain Jul 30, 2026
25235f1
docs(visualtest): PF26/27 + G6 completion (R4-24 closed, R4-25 stuck-…
Windorain Jul 30, 2026
6c0100b
docs(visualtest): Round 5 full re-screen — H registry (R5-1..5 new de…
Windorain Jul 31, 2026
784d9bd
fix: R5-2 item-grid ore-dictionary resolution + R5-5 scene supported-…
Windorain Jul 31, 2026
d6bebe6
fixture(mindmap): R5-1 document default-mode deep-chain horizontal-sp…
Windorain Jul 31, 2026
1f36e35
fix(layout): enable parley OverflowWrap::BreakWord for long-text wrap…
Windorain Jul 31, 2026
8e77e62
fixture(text): lengthen CJK/H1 wrap-test strings to exercise wrapping…
Windorain Jul 31, 2026
3598037
docs(visualtest): H7 R5 fix-wave closure + PF29 test-width-mismatch l…
Windorain Jul 31, 2026
9a684d1
fix(latex): calibrate inline formula scale to body x-height, not line…
Windorain Jul 31, 2026
1f33f1b
fix(layout): R6-2 code blocks NoWrap — read white_space, PRE=2 disabl…
Windorain Jul 31, 2026
13eecb4
fix(layout): R6-1 ItemGrid wraps at 3 columns (explicitW border-box +…
Windorain Jul 31, 2026
2e9a9ef
docs(visualtest): Round 6 + LaTeX special closure (R6-1/R6-2 fixed) +…
Windorain Jul 31, 2026
12b0b82
fix(layout): R7-1 restore display LaTeX centering — narrow FloatAware…
Windorain Aug 1, 2026
f61b571
docs(visualtest): R7 closure (R7-1 display centering regression fixed…
Windorain Aug 1, 2026
6f5050a
fix(mermaid): R8 mindmap canvas height clamp — mirror flowchart MAX_H…
Windorain Aug 1, 2026
3d65d02
fix(mermaid): R8 NodeContent inline ItemImage positioning — route sub…
Windorain Aug 1, 2026
00709a9
docs(visualtest): R8+confirmation closure (CLEAN) + PF31 ratchet-ever…
Windorain Aug 1, 2026
190cc0f
docs(visualtest): L narrow-width(480) round CLEAN + multi-width scree…
Windorain Aug 1, 2026
c6a65bd
docs(workflow): restore ratchet backtick content + add multi-width(90…
Windorain Aug 1, 2026
505d9c7
typography: font 9->11, line-height 1.11->1.45, heading hierarchy lad…
Windorain Aug 1, 2026
d5a2e01
typography: rebuild native DLL for font/line-height changes
Windorain Aug 1, 2026
f919e9e
typography round3: margins 5->14, line-height 1.45->1.55, heading gra…
Windorain Aug 1, 2026
7b1347d
typography round4: footnote full-width (LytWidthBox fullWidth), list …
Windorain Aug 1, 2026
f0bf6d2
typography round5: list marker gutter 2->5 + bullet 3, heading margin…
Windorain Aug 1, 2026
8e8d336
typography round6: consecutive-heading margin collapse (HeadingCompil…
Windorain Aug 1, 2026
dd392eb
typography round7: SoundLink gold+no-underline (de-homogenize from na…
Windorain Aug 1, 2026
3a042f5
docs(visualtest): M typography optimization arc (qwen8-night 8 rounds…
Windorain Aug 1, 2026
0924337
docs: consolidate WORKFLOW+PRINCIPLES into single authoritative workf…
Windorain Aug 2, 2026
5c73a62
docs: F4 glyph-atlas giant-glyph PENDING-IN-GAME (offline unreproduci…
Windorain Aug 2, 2026
c495e3d
fixtures: add layout/callouts.md (5 GitHub alerts, bare-keyword trap,…
Windorain Aug 2, 2026
0fc2e12
docs: Stage 6 infrastructure protocol — implementers request shared c…
Windorain Aug 2, 2026
62b0db0
fix(F8): Rust pusher margin preposed to CSS semantics (layout.rs para…
Windorain Aug 2, 2026
1a8ae48
fix(F5-1): task checkbox vertically centered on marker first-line tex…
Windorain Aug 2, 2026
02ca4d8
fix(F5-2): details summary marker marginTop=1 structural declaration …
Windorain Aug 2, 2026
240f69b
fix(F5-3): inline latex calibrated to x-height (0.625*ascent) + singl…
Windorain Aug 2, 2026
b33c406
docs(visualtest): O comfort fix round 1 (F5-1/F5-2/F5-3/F8) closed
Windorain Aug 2, 2026
deb2b19
fix(F3): table separators drawn from Rust-written-back cell bounds (w…
Windorain Aug 2, 2026
a06d7bc
docs(visualtest): P F3 table separator dual-track offset closed
Windorain Aug 2, 2026
e41dbf9
fix(F7a): migrate MediaWikiSpecialGeneratedBlock text to GuideText gl…
Windorain Aug 2, 2026
7746c7f
docs(visualtest): Q F7a Special Index pixel-font migration closed + c…
Windorain Aug 2, 2026
fa66015
docs: correct M1 milestone — Layouts.java is live fallback (Mermaid N…
Windorain Aug 2, 2026
136144b
fix(N-A1): details content viewport inset via margin declaration + dr…
Windorain Aug 2, 2026
12c2209
fixtures(N-A2): wrap bare angle brackets in TEST GOAL headers with ba…
Windorain Aug 2, 2026
06a9c4b
docs(visualtest): R aesthetic baseline 8/10 + N-A1/N-A2 closed
Windorain Aug 2, 2026
83048dd
fix(F7c): migrate MediaWikiGeneratedListBlock to GuideText glyph pipe…
Windorain Aug 2, 2026
cdc22c6
docs(visualtest): S F7c mediawiki list-page migration closed + stale-…
Windorain Aug 2, 2026
53e7686
fixtures: add meta/special.md — <Special> coverage (SpecialPages stat…
Windorain Aug 2, 2026
47c7e65
docs(visualtest): T Special fixture coverage closed — F7a visual veri…
Windorain Aug 2, 2026
fd53f05
fix(F7b-1): scene slider labels to GuideText glyph pipeline via hybri…
Windorain Aug 2, 2026
15ec7b6
docs(visualtest): U F7b-1 scene slider hybrid migration closed + foll…
Windorain Aug 2, 2026
ec4fb3b
docs(visualtest): V blocked-decision record — Scene3D primitive-izati…
Windorain Aug 2, 2026
3f9e67b
docs: architecture audit 2026-08-02 handoff — 5-audit findings (capab…
Windorain Aug 2, 2026
ab618c6
docs: untrack architecture-audit snapshot (process document, git-igno…
Windorain Aug 2, 2026
f8eccac
docs(visualtest): leaf-boundary exemption (user directive 2026-08-02)…
Windorain Aug 2, 2026
9a97091
chore(visualtest): audit actions A1+A2+A5 — A1 dead-code cleanup (orp…
Windorain Aug 2, 2026
514e785
feat(T5-1): unified clip/wrap API in GuideText (wrap/clipToWidth/clip…
Windorain Aug 2, 2026
58379ce
docs(visualtest): register SubPages top-render defect (pre-existing, …
Windorain Aug 2, 2026
791e689
feat(T5-2): G4 char-level truncation migrated to GuideText.clipToChar…
Windorain Aug 2, 2026
acc14f5
docs(visualtest): register T5-2 (G4 char-level unification + clipToCh…
Windorain Aug 2, 2026
1670539
refactor(T5-3): mermaid node wrap migrated to GuideText.wrap (A4 pipe…
Windorain Aug 2, 2026
c5b3dc5
docs(visualtest): register T5-3 (mermaid wrap unified to GuideText.wr…
Windorain Aug 2, 2026
d1c18d5
feat(T2): drop shadow capability for Rust-backed text path (DrawGlyph…
Windorain Aug 2, 2026
011c44c
docs(visualtest): register T2 (drop shadow capability, pipeline-ready…
Windorain Aug 2, 2026
e759298
feat(T4): real font x_height/cap_height from Rust (replaces Java X_HE…
Windorain Aug 2, 2026
1919b13
test(T4): add latex/inline-xheight.md aesthetic probe fixture + ratch…
Windorain Aug 2, 2026
d2ddb81
docs(visualtest): register T4 (real x_height/cap_height from Rust, ha…
Windorain Aug 2, 2026
48e8a4c
feat(T1a): Rust emits wavy/dots underline decorations (DecorationRect…
Windorain Aug 2, 2026
a7e613b
feat(T1b): render wavy/dots decorations as sine wave / dotted line (J…
Windorain Aug 2, 2026
2826d0e
docs(visualtest): register T1 (wavy/dots decorations through Rust pip…
Windorain Aug 2, 2026
ac7c80d
feat(T3-min): AlignItems::Baseline enum plumbing through 4 layers (de…
Windorain Aug 2, 2026
9c58777
docs(visualtest): register T3-min (Baseline enum plumbing, degraded b…
Windorain Aug 2, 2026
3552da3
chore(cleanup): remove dead measureText(RenderContext) + fix T2/clipT…
Windorain Aug 2, 2026
0c8759b
test(aesthetic): forced-wrap mermaid fixture (word-level + codepoint-…
Windorain Aug 2, 2026
37042f7
fix(callout): restore .trim() in trimLeadingDirectiveText — first-lin…
Windorain Aug 3, 2026
d4b941e
fix(mediawiki-special): serialize real line heights to Rust measure —…
Windorain Aug 3, 2026
fa8d262
feat(icon-metrics): alpha-ink optical advance for inline ItemImage/It…
Windorain Aug 3, 2026
66478eb
feat(font-fallback): symbol fallback font for missing glyphs — callou…
Windorain Aug 3, 2026
d246f34
fix(latex-inline): true 2px insets + perceptual scaling — small formu…
Windorain Aug 3, 2026
cbea643
fix(inline-error): reserve layout width for script error fallback text
Windorain Aug 3, 2026
a3d9cbb
feat(decorations): converged rasterizer + coverage-alpha AA for wavy/…
Windorain Aug 3, 2026
8e66d42
feat(floating-image): aspect-ratio inference for single-dimension usage
Windorain Aug 3, 2026
5f026c6
fix(scene): silent black viewports — camera geometry root cause + err…
Windorain Aug 3, 2026
2315fd3
fix(headless-render): block batch rendering until MediaWiki warmup co…
Windorain Aug 3, 2026
d82a457
fix(mermaid): deterministic layout across JVM runs — Map.copyOf salt
Windorain Aug 4, 2026
3c6d8bc
feat(navbar): migrate sidebar text to GuideText/Rust primitive pipeline
Windorain Aug 4, 2026
f58f903
feat(headless-chrome): optional navbar pass for runtime sidebar verif…
Windorain Aug 4, 2026
9638a55
test(fixtures): expand coverage — P0/P1 gaps + F-N2 error-fallback re…
Windorain Aug 4, 2026
ac02e90
fix(site-export): true 2px insets + single-dimension FloatingImage pa…
Windorain Aug 4, 2026
e61c47c
docs(issues): register round X — six-problem arc + realcorpus screeni…
Windorain Aug 4, 2026
c15907b
fix(inline-icons): remove optical pad, unify tight advance
Windorain Aug 6, 2026
5409775
fix(rust-raster): seguisym emoji-family + F4 raster size fallback
Windorain Aug 6, 2026
0f76e88
fix(navbar): sticky/scroll screen-space avoidance + headless navscrol…
Windorain Aug 6, 2026
f3605da
fix(title): toolbar page-title navbar offset
Windorain Aug 6, 2026
d57a1b9
fix(scene-text,fixture): F7b-2/3 hybrid migration + code_blocks L113 …
Windorain Aug 6, 2026
6ab3050
feat(visual-inspection): ask subcommand - targeted file+prompt VLM query
Windorain Aug 6, 2026
a944d8c
docs(issues,pitfalls,workflow): X.6/X.7/F4 registration, PF34, ask to…
Windorain Aug 6, 2026
7a6caa2
fix(mermaid): zoom/offset headless injection, interaction chain, 3 de…
Windorain Aug 7, 2026
8d2b3a7
fix(glyph-atlas): paging + LRU + failure cache + zoom quantization (m…
Windorain Aug 7, 2026
14d3818
fix(title): toolbar title left-edge placement (plain title-bar semant…
Windorain Aug 7, 2026
f6480f8
test(mermaid,stress): 9 fixture pages + stress-glyphs + X.8-X.12 regi…
Windorain Aug 7, 2026
4bef174
fix(latex): display sizing unified to inline x-height standard (red l…
Windorain Aug 7, 2026
132886b
fix(italic): synthetic-slant overhang compensation (red line)
Windorain Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
/.idea/
/.vscode/
/run/*
*.jfc
*.jfr
/build/
/eclipse/
.classpath
Expand Down Expand Up @@ -30,6 +32,7 @@ src/main/resources/mixins.*([!.]).json
*.bat
*.DS_Store
!gradlew.bat
!tools/regen_java_flatc.bat
.factorypath
addon.local.gradle
addon.local.gradle.kts
Expand Down Expand Up @@ -60,3 +63,21 @@ layout.json
/gradle-user
.claude/
CLAUDE.md

### Rust layout-engine ###
/layout-engine/target/
/layout-engine/src/guidenh_layout_generated.rs
/layout-engine/.cargo/

### Visual inspection tooling (API keys & python artifacts) ###
.env
.env.local
tools/visual-inspection/.env
__pycache__/
*.pyc
.venv/
visualtest/local/

# personal agent-ops notes (not project documentation)
visualtest/docs/EXECUTOR-CALIBRATION.md
visualtest/docs/ARCHITECTURE-AUDIT.md
91 changes: 91 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,21 @@ minecraft {
extraRunJvmArguments.addAll("-Xmx4G", "-Xms512m", "-Dgtnhlib.dumpkeys=true")
}

dependencies {
// fastutil is available at MC runtime but not in test scope
testImplementation("it.unimi.dsi:fastutil:8.5.12")
}

tasks.withType<JavaCompile>().configureEach {
options.annotationProcessorPath = configurations.annotationProcessor.get()
}

tasks.withType<Test>().configureEach {
useJUnitPlatform()
val nativeLib = System.getProperty("guide.native.lib.path")
if (nativeLib != null) {
jvmArgs("-Dguide.native.lib.path=$nativeLib")
}
}

tasks.named<ShadowJar>("shadowJar") {
Expand Down Expand Up @@ -49,5 +58,87 @@ runConfigs.forEach { (taskName, path) ->
doFirst {
workingDir.mkdirs()
}
// Forward the layout-overlay flag to the client JVM:
// ./gradlew runClient25 -Dguidenh.layoutOverlay=true
providers.systemProperty("guidenh.layoutOverlay").orNull?.let {
jvmArgs("-Dguidenh.layoutOverlay=$it")
}
providers.systemProperty("guidenh.debug.scenerender").orNull?.let {
jvmArgs("-Dguidenh.debug.scenerender=$it")
}
// Forward extra development resource-pack source (visual-test fixture pack):
// ./gradlew runClient25 -Dguidenh.guide.sources=D:/Projects/GuideNH/visualtest/resourcepack
providers.systemProperty("guidenh.guide.sources").orNull?.let {
jvmArgs("-Dguideme.resourcePack.sources=$it")
}
// Forward headless-render driver props to the client JVM:
// ./gradlew runClient25 -Dguidenh.headlessRender=true -Dguidenh.renderpage.guide=guidenh:guidenh -Dguidenh.renderpage.page=guidenh:guidenh/en_us/markdown
providers.systemProperty("guidenh.headlessRender").orNull?.let {
jvmArgs("-Dguidenh.headlessRender=$it")
}
listOf("guide", "page", "md", "width", "out", "lang", "bounds", "overlay", "world", "scale", "allPages", "list", "chrome", "navscroll", "mermaidzoom", "mermaidoffset", "guiscale", "title").forEach { key ->
providers.systemProperty("guidenh.renderpage.$key").orNull?.let {
jvmArgs("-Dguidenh.renderpage.$key=$it")
}
}
}
}


/** Standalone task: build Rust native library.
* Run manually: ./gradlew buildRustNative
* Does NOT wire into the main build pipeline.
* Requires Rust toolchain: https://rustup.rs
*/
/** Resolve the Rust DLL path eagerly (configuration-cache friendly): prefer the
* redirected target dir on E:, fall back to the in-tree target dir. */
val rustDllPath: String = run {
val eDrive = File("E:/build_out/guide_nh_rust/release/guide_layout_engine.dll")
if (eDrive.exists()) eDrive.absolutePath else "${rootDir}/layout-engine/target/release/guide_layout_engine.dll"
}

/** Run GlyphRenderTest main class. Requires Rust DLL built first. */
val runGlyphTest by tasks.registering(JavaExec::class) {
description = "Run GlyphRenderTest visual glyph verification window"
group = "verification"
classpath = sourceSets.test.get().runtimeClasspath
mainClass.set("com.hfstudio.guidenh.guide.layout.GlyphRenderTest")
jvmArgs("-Dguide.native.lib.path=$rustDllPath", "-Dsun.java2d.uiScale=1.0")
}

/** Headless diagnostic: print glyph pipeline to console. */
val runGlyphDiag by tasks.registering(JavaExec::class) {
description = "Run GlyphDiag: headless glyph data diagnostic"
group = "verification"
classpath = sourceSets.test.get().runtimeClasspath
mainClass.set("com.hfstudio.guidenh.guide.layout.GlyphDiag")
jvmArgs("-Dguide.native.lib.path=$rustDllPath", "-Dsun.java2d.uiScale=1.0")
}

/** Headless layout pipeline test bench: synthetic pages → invariants + tree dump. */
val runLayoutDump by tasks.registering(JavaExec::class) {
description = "Run LayoutPipelineHarness: headless layout pipeline verification"
group = "verification"
classpath = sourceSets.test.get().runtimeClasspath
mainClass.set("com.hfstudio.guidenh.guide.layout.LayoutPipelineHarness")
jvmArgs("-Dguide.native.lib.path=$rustDllPath", "-Dsun.java2d.uiScale=1.0")
setIgnoreExitValue(true)
}

/** Headless A/B: cosmic renderText vs parley renderTextParley. */
val runParleySmoke by tasks.registering(JavaExec::class) {
description = "Headless A/B: cosmic renderText vs parley renderTextParley"
group = "verification"
classpath = sourceSets.test.get().runtimeClasspath
mainClass.set("com.hfstudio.guidenh.guide.layout.GlyphRenderTest")
jvmArgs("-Dguide.native.lib.path=$rustDllPath", "-Dsun.java2d.uiScale=1.0")
args("--headless")
}

val buildRustNative by tasks.registering(Exec::class) {
description = "Build Rust native library (layout-engine/guide_layout_engine.dll)"
group = "build"
workingDir = file("layout-engine")
commandLine("cargo", "build", "--release")
outputs.file("layout-engine/target/release/guide_layout_engine.dll")
}
Loading