kinogaki-core
kinogaki-core — audit issues
Audited 2026-06-20 (re-audit, post-fix). Repo: libraries/kinogaki-core. Criteria: completeness · tests · separation of concerns · verb-named functions · file size (<1000 lines) · organization.
Health summary
Clean. ./build.sh builds the library + full suite and reports 158 cases, 757 checks, 0 failures. Every issue from the first pass is resolved: the C ABI has a dedicated coverage test, Serialize.cpp was split cleanly into parse (Serialize.cpp, 881) + write (SerializeTextWrite.cpp, 368) with no file over 1000 lines, the bezier "stub" comment and the dead v1-package branch are gone, the noun-named transform/document helpers are now verbs, the README line-count claim is corrected, and the compressor / AssetStore / composition all have tests. The new anonymous-elements feature (/parent/[i]) is documented and tested, including the positional-vs-label divergence after a removal.
Issues
No open issues. The criteria below were each verified clean in the re-audit.
[LOW] filesize — clean
- No source file exceeds 1000 lines. The former offender
Serialize.cpp(was 1185) is split intoSerialize.cpp(881, text parse + encoding dispatch) andSerializeTextWrite.cpp(368, text emit); the split is clean (no duplicated logic; shared byte machinery in the privateSerializeCommon.h).Serialize.cppat 881 is the largest — worth watching, but a single coherent concern.
[LOW] tests — clean
- C ABI:
tests/c_api_coverage_test.cpp(connect/rename/disconnect, connection enumeration, evaluator, count-query-then-fill arrays, string-metadata vs string-property, anonymous children, visibility inheritance). Compressor:tests/compress_coverage_test.cpp(past-window identity, overlap-safe RLE, fail-closed corrupt input).AssetStore:tests/asset_reparent_test.cpp(rename + reparent lock-step, removeSubtree). Composition:tests/compose_test.cpp. Anonymous elements:tests/anonymous_test.cppincl. the positionalchild(index)vs frozen[N]label divergence after a mid-removal + round-trip renormalization.
[LOW] completeness — clean
- No
TODO/FIXME/XXX/stubmarkers insrc/include/tests; no silently-swallowed errors. The bezier path is fully implemented (Newton + bisection, auto-tangent fallback) and the stale "falls back to linear" comment is gone. The dead v1-package version branch is removed (packages are v3-only like the binary crate). The anonymouschild(index)/[N]-label divergence is now documented atDocument.hand covered by a test.
[LOW] separation — clean
- Serialization split by concern across
Serialize.cpp(parse + dispatch) /SerializeTextWrite.cpp(text emit) /SerializeBinary.cpp/SerializePackage.cpp, sharing the privateSerializeCommon.h. C ABI isolated inC.cpp. Document is the single mutation surface; Scene/Evaluate are derived reads. No god files, no circular includes.
[LOW] naming — clean
- Public functions read as verbs: transforms are
makeIdentityAffine/affineMul/affineApply/invertAffine/computeLocalMatrix/computeWorldMatrix; the connection lookup isfindIncoming. NoworldMatrix/localMatrix/affineIdentity/affineInversesymbols remain. Bare-noun names that survive (name(),child(),children(),connections(), …) are conventional accessors.
[LOW] organization — clean
.gitignorecovers.DS_Store+build/; neither is tracked.git ls-filesshows only source/headers/tests/README/build.sh/CMakeLists.txt. README Layout and Principles now match reality (the "largest ~180 lines" boast was corrected to the under-1000 invariant).