diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..b57af91 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{c,cpp,cs,h,py,ps1,sh}] +indent_style = space +indent_size = 4 + +[*.{csproj,json,jsonl,props,targets,toml,tscn,tres,xml,yaml,yml}] +indent_style = space +indent_size = 2 + +[*.{bat,cmd}] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes index 02c8bf7..0b75b0f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,73 @@ -docs/opcode-reference.md whitespace=trailing-space,space-before-tab,cr-at-eol -docs/global-reference.md whitespace=trailing-space,space-before-tab,cr-at-eol -docs/engine-ctx-reference.md whitespace=trailing-space,space-before-tab,cr-at-eol -tools/age_opcodes_himegari.py whitespace=trailing-space,space-before-tab,cr-at-eol +* text=auto +.editorconfig text eol=lf +.gitattributes text eol=lf +.gdignore text eol=lf +.gitignore text eol=lf + +*.bat text eol=crlf +*.cmd text eol=crlf + +*.c text eol=lf +*.cfg text eol=lf +*.cs text eol=lf +*.csproj text eol=lf +*.config text eol=lf +*.cpp text eol=lf +*.gd text eol=lf +*.godot text eol=lf +*.h text eol=lf +*.json text eol=lf +*.jsonl text eol=lf +*.md text eol=lf +*.props text eol=lf +*.targets text eol=lf +*.ps1 text eol=lf +*.py text eol=lf *.sh text eol=lf +*.sln text eol=lf +*.toml text eol=lf +*.tscn text eol=lf +*.tres text eol=lf +*.uid text eol=lf +*.xml text eol=lf +*.yaml text eol=lf +*.yml text eol=lf + +*.7z binary +*.a binary +*.agf binary +*.avi binary +*.bin binary +*.bmp binary +*.cur binary +*.dll binary +*.dylib binary +*.exe binary +*.gif binary +*.ico binary +*.jpeg binary +*.jpg binary +*.lib binary +*.mp3 binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.ogg binary +*.otf binary +*.pdb binary +*.png binary +*.rar binary +*.so binary +*.ttf binary +*.wav binary +*.woff binary +*.woff2 binary +*.zip binary + +# These generated files currently have CRLF committed by generator contract. +# Preserve their bytes while retaining textual diffs until the generators and +# their committed output are deliberately migrated together. +docs/opcode-reference.md -text -eol diff whitespace=trailing-space,space-before-tab,cr-at-eol +docs/global-reference.md -text -eol diff whitespace=trailing-space,space-before-tab,cr-at-eol +docs/engine-ctx-reference.md -text -eol diff whitespace=trailing-space,space-before-tab,cr-at-eol +tools/age_opcodes_himegari.py -text -eol diff whitespace=trailing-space,space-before-tab,cr-at-eol diff --git a/docs/PROJECT-STRUCTURE.md b/docs/PROJECT-STRUCTURE.md index 4f31df9..60c2cf0 100644 --- a/docs/PROJECT-STRUCTURE.md +++ b/docs/PROJECT-STRUCTURE.md @@ -29,6 +29,9 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) └── age-reimpl/ ← OUR WORK (everything we made lives here) │ ├── README.md navigation-only repository front door; canonical facts stay in docs/ + ├── global.json pins the validated .NET 8 SDK feature band + ├── .editorconfig / .gitattributes UTF-8, indentation, text/EOL, and binary-file policy; + │ generator-owned CRLF references retain their committed bytes ├── run-godot.ps1 / run-godot.cmd tracked development launcher + Windows wrapper; │ resolves Godot/game-root from parameters, environment, │ PATH, and the conventional sibling install diff --git a/docs/remake-architecture-and-roadmap.md b/docs/remake-architecture-and-roadmap.md index 4dc2ab4..47dea33 100644 --- a/docs/remake-architecture-and-roadmap.md +++ b/docs/remake-architecture-and-roadmap.md @@ -903,6 +903,15 @@ do not mix mechanical moves with semantic changes. backup. Public distribution remains blocked on item 3; destructive cleanup and compaction remain blocked on item 4 plus explicit target approval. + **Policy baseline (2026-08-03):** item 1 is complete. `global.json` pins the validated .NET 8.0.408 feature + band to stable patch releases; `.editorconfig` establishes UTF-8, final-newline, trailing-whitespace, and + indentation defaults; and `.gitattributes` classifies repository text, Windows command wrappers, and binary + assets. Generator-owned references that already commit CRLF are explicit byte-preserving exceptions with + textual diffs, so rebuilding them does not create whole-file normalization churn. No existing source or + project file was reformatted or renormalized. Both solution builds and the asset-independent core validation + gate remain green under the tracked policy. Item 2, a CI workflow calling that same core gate, is the next + safe slice. + **Not cleanup targets:** generated `build/` output, the two intentional solution files, historical `docs/superpowers/` plans/specifications, and fidelity-specific complexity that is directly covered by the native ABI. Reorganization is successful when ownership and reproduction become clearer, not when the raw @@ -1249,9 +1258,9 @@ layer's rendering diverges from ADV; save layout. --- ## 8. Immediate next step -Continue step 5 of the **codebase consolidation** maintenance slice with the first non-destructive policy change: -add a repository `global.json`, `.editorconfig`, and complete text/line-ending attributes based on the validated -.NET 8/Python 3.11 toolchain. Do not mechanically reformat existing files or change warning/runtime behavior; -verify both solutions and the core validation driver under the tracked policy. +Continue step 5 of the **codebase consolidation** maintenance slice with an asset-independent CI workflow that +invokes `py -3.11 -X utf8 tools/validate.py --level core` on Windows using the tracked .NET SDK policy. Keep the +private game corpus and Godot runtime out of the hermetic CI job, preserve the validation driver's failure and +child-process semantics, and avoid introducing a second build/test command path. Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does not replace Phase B gameplay validation or the open cross-platform gates. diff --git a/global.json b/global.json new file mode 100644 index 0000000..96fb608 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "8.0.408", + "rollForward": "latestPatch", + "allowPrerelease": false + } +}