CRUDUI

The kit standard checklist

ID Task Deliverables Verification State
C16.1 The repository follows the kit standard 0.0.54 The files that follow PRINCIPLES.md of kit 0.0.54: the plan layout, the rules of AGENTS, the layout and the checks of the repository make kit-check [o]
C16.2 CI calls existing targets on PHP 8.4, and no test is skipped .github/workflows/ci.yml, tests/build/make-tool-path.test.mts, packages/php-ext/tests/engine.test.mjs node --test tests/build/make-tool-path.test.mts [o]
C16.3 Every unit of config/parity.json holds in every implementation and cites the spec requirements its tests name (kit K273, K275, K276) config/parity.json, docs/spec, the tests of every implementation make parity-declarations-check [o]
C16.4 The Korean checklist of the kit-standard plan matches its source docs/plans/kit-standard/checklist.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.5 docs/ holds only the folders K245 allows docs/.site, scripts/docs-web/build.mts, scripts/docs-web/watch.mts, docs/operations/documentation.md, docs/operations/documentation.ko.md make layout-check, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/docs/development-server.test.mts tests/docs/web-build.test.mts [o]
C16.6 The PHP generator has no empty catch packages/generator/php/src/Internal/Design.php, packages/generator/php/tests/FormTest.php make lint-php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormTest.php [o]
C16.7 Every tool of the repository has its class in config/rebuild.json config/rebuild.json, docs/rebuild make rebuild-check [o]
C16.7-1 config/rebuild.json and config/duplication.json have an owner in config/owner-checks.json config/owner-checks.json make owner-validate [o]
C16.7-2 AGENTS.md states the kit rule that the full suite runs only in CI (no make ci, full-run guard or rerun-failed) AGENTS.md, AGENTS.ko.md, docs/operations/testing.md, docs/operations/testing.ko.md make rules-check, node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.7-3 The Makefile has no target that needs the removed full-run tool of kit (ci, check, crudui-check, rerun-failed) Makefile, tests/build/ci-local.test.mts, CHECK_TARGETS node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="every tool of kit|CI_TARGETS lists|a CI job runs every lint target|a workflow command missing from CI_TARGETS|a dry run under a parent make" tests/build/ci-local.test.mts tests/build/make-dry-run.test.mts [o]
C16.7-4 The Korean testing guide carries the hash of its reviewed English source docs/operations/testing.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.7-5 The ci-local test recognizes the crudui-install targets as preparation steps tests/build/ci-local.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="make ci runs every checking command|every job runs its checks through|every checking step of the CI|a workflow command missing" tests/build/ci-local.test.mts [o]
C16.7-6 The ci-local test lists the gates.yml workflow of kit with its triggers tests/build/ci-local.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="each workflow declares exactly its triggers" tests/build/ci-local.test.mts [o]
C16.7-7 The ci-local test expects the triggers of the release.yml copy of kit tests/build/ci-local.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/ci-local.test.mts [o]
C16.7-8 The offline-checks test lists the online targets as kit 0.0.54 defines them tests/build/offline-checks.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/offline-checks.test.mts [o]
C16.7-8-1 The offline-checks test lists the online targets that the installed kit defines, so worktree-setup of a newer kit (K348) is listed too tests/build/offline-checks.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/offline-checks.test.mts [o]
C16.7-9 config/rebuild.json covers every tool source: the Go and Rust generators, the fixture and benchmark generators and the build scripts of the examples config/rebuild.json make rebuild-check [o]
C16.7-10 config/rebuild.json classes every tool source that kit finds by layout (K286), without paths config/rebuild.json make rebuild-check [o]
C16.7-11 config/owner-checks.json names no fullSuite target, since kit has no local full run config/owner-checks.json make owner-validate [o]
C16.7-12 make kit-check passes: the Makefile lists every gate of kit in CHECK_TARGETS and PRINCIPLES.md matches kit Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.7-13 The package-names test does not take a path as a Composer package name tests/build/package-names.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/package-names.test.mts [o]
C16.8 The documentation site builds with VitePress, and docs/.vitepress/dist is removed (replaces scripts/docs-web and scripts/documentation-links.mts) package.json, docs/.vitepress, scripts/docs-web, scripts/documentation-links.mts, config/rebuild.json make rebuild-check, make layout-check [-] cause: The evaluated VitePress distributions embed a reference parser without the GHSA-gfr2-rv44-r23c fix. C18.2 completes the current candidate review and retains the latest patched directly managed parser; the rebuild record states a future maintenance trigger.
C16.8-1 P1: Record the evaluated VitePress releases and preserve the checked documentation renderer when their bundled parser lacks the security fix docs/rebuild/documentation-web.md, config/rebuild.json, checklist decisions node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/docs/web-build.test.mts tests/docs/development-server.test.mts scripts/documentation-links.test.mts, make rebuild-check [o]
C16.9 The PHP extension builds with phpize (replaces scripts/php-extension-builder.mts, build-crudui-php-extension.mts, build-ordered-json-php-extension.mts and tool-resolution.mts); held until kit settles S10 for component repositories packages/php-ext, scripts, config/rebuild.json make lint-php-ext, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="builds with phpize" packages/php-ext/tests/engine.test.mjs [o]
C16.10 The commands of scripts run through the process-group runner that kit exports (replaces scripts/run-command.mts) scripts, config/rebuild.json sh -c 'test ! -e scripts/run-command.mts && ! git grep -qE "run-command\.mts" -- scripts benchmarks tests config package.json && make rebuild-check' [o]
C16.11 The scripts read JSON through ajv schemas, not through scripts/values.mts (21 files call it) scripts, tests/build, config/rebuild.json make rebuild-check [o]
C16.11-1 the install lock reads its shapes through ajv schemas (scripts/json-schema.mts), not through scripts/values.mts scripts/json-schema.mts scripts/json-schema.test.mts scripts/install-lock.mts config/rebuild.json node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/install-lock.test.mts scripts/json-schema.test.mts, make rebuild-check [o]
C16.11-2 the package and repository readers (check-packages, package-install-pack, repository-files, check-contract-manifest, features-manifest) read their JSON through ajv shapes scripts/check-packages.mts scripts/package-install-pack.mts scripts/repository-files.mts scripts/check-contract-manifest.mts scripts/features-manifest.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/package-install-pack.test.mts tests/build/repository-files.test.mts tests/build/contract-manifest.test.mts tests/build/install-lock.test.mts scripts/json-schema.test.mts [o]
C16.11-3 the schema, conformance, test-command and doc-coverage scripts read their JSON through ajv shapes scripts/check-schema.mts scripts/check-conformance.mts scripts/test-commands.mts scripts/check-doc-coverage.test.mts scripts/php-doc-coverage.test.mts Makefile node node_modules/@polyspec/kit/dist/run-tests.mjs node -- scripts/check-doc-coverage.test.mts scripts/php-doc-coverage.test.mts scripts/json-schema.test.mts, node scripts/check-schema.mts [o]
C16.11-4 the remaining scripts read their JSON and errors without scripts/values.mts, which is removed with its rebuild and owner-check entries scripts/check-ci-browser.mts scripts/docs-web/cli.mts scripts/docs-web/server.mts scripts/install-browsers.mts tests/build/ci-local.test.mts tests/build/public-packages.test.mts scripts/values.mts config/rebuild.json config/owner-checks.json make rebuild-check [o]
C16.12 The Tailwind stylesheet is the native CSS import of crudui.css into the layer components (replaces write-tailwind-styles.mjs) packages/generator/ts/styles, packages/generator/ts/scripts, docs, config/rebuild.json make rebuild-check [o]
C16.13 contracts/unicode-properties.json is derived from @unicode/unicode-16.0.0 (replaces scripts/generate-unicode-properties.mts and contracts/unicode) contracts, scripts, config/rebuild.json node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/unicode-properties.test.mts, make rebuild-check [-] cause: The UCD parser replacement proceeds as C16.13-1; version alignment does not determine this replacement.
C16.13-1 P1: Unicode contract ranges come from the Unicode 16.0.0 package without changing supported properties package.json, package-lock.json, scripts/generate-unicode-properties.mts, contracts/unicode-properties.json, contracts/unicode, tests/build/unicode-properties.test.mts, config/rebuild.json, config/owner-checks.json, docs/spec/validation-rules.md node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/unicode-properties.test.mts, make rebuild-check [o]
C16.14 config/duplication.json excludes the generated Unicode tables and the tests, each with its reason config/duplication.json make duplication-check [o]
C16.15 The PHP validator composes ef and atch members through one module (Compose clones) packages/validator/php/src/Compose/Members.php, Compose.php, Ref.php, Patch.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Compose/ComposeConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Compose/PatchTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Compose/RefTest.php, make lint-php [o]
C16.15-1 The CHANGELOG records the 7 clones of src/Compose that C16.15 removed CHANGELOG.md, CHANGELOG.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.16 The PHP expression parser reads a literal through one method packages/validator/php/src/Expr/Parser.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Expr/ExprConformanceTest.php, make lint-php [o]
C16.17 The PHP validator validates a list and a detail composition through one method packages/validator/php/src/Public/Validator.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ListValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/DetailValidateConformanceTest.php, make lint-php [o]
C16.18 The PHP validator reads the pair of a range parameter through one method packages/validator/php/src/Values/Numeric.php, packages/validator/php/src/Values/LengthLimit.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Values/NumericTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/RuleParametersTest.php, make lint-php [o]
C16.19 The PHP data validator applies rules and walks fields through shared methods packages/validator/php/src/Validate/Validator.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/PublicApiTest.php, make lint-php [o]
C16.20 The PHP string and field-reference rules share their guard through two base classes packages/validator/php/src/Rules/StringRule.php, ReferenceRule.php, Email.php, Url.php, DateISO.php, EndDate.php, EqualTo.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/DocCoverageTest.php, make lint-php [o]
C16.21 config/duplication.json also excludes the generated Go and TypeScript Unicode tables config/duplication.json make duplication-check [o]
C16.22 The Go validator reads a value at path segments through one function packages/validator/go/validator/expr/evaluator.go, packages/validator/go/validator/validate/helpers.go, rules.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestValidateMatchesFixture|TestValueSemanticsMatchJsReference|TestUniqueManyValues' ./validator/expr/... ./validator/validate/..., make lint-go [o]
C16.23 The Go validator model reads and writes ordered objects through two generic helpers packages/validator/go/validator/ordered.go, types.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'Fixture|TestValidate|TestParameterChecks|TestDecodeOrderedKeepsText' ./..., make lint-go [o]
C16.24 The Go validate package shares the field walk, the rule switch-off and the composition input packages/validator/go/validator/validate/helpers.go, list.go, detail.go, index.go, params.go, validator.go, rules.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'Fixture|TestValidate|TestParameterChecks|TestUnique' ./..., make lint-go [o]
C16.25 The Rust validator layers composition members, matches accepted files and reads list and detail input through shared functions packages/validator/rust/src/compose/members.rs, compose.rs, ref_.rs, patch.rs, expr/evaluator.rs, validate/rules.rs, validate/validator.rs, text.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml compose, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml validate, make lint-rust [o]
C16.26 The TypeScript validator shares the composition layering, the literal reader and the shapes of its rules packages/validator/ts/src/compose/layer.ts, rules/factories.ts, compose-root.ts, parser/ConditionParser.ts and the rules node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/validate.conformance.test.ts src/compose.conformance.test.ts src/expr.conformance.test.ts src/validate/parameters.unit.test.ts src/values/values.unit.test.ts, make lint-ts [o]
C16.27 The React, Vue and Svelte adapters take the raw control markup from the core packages/generator/ts/src/raw-markup.ts, internal.ts, packages/react, packages/vue, packages/svelte (raw.ts, Widget, widget.ts) node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/vue -- tests/form-render.conformance.test.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/svelte -- tests/form-render.conformance.test.mjs, make lint-ts [o]
C16.28 The form comparison runs its steps through runCommand of kit, the process-group runner, and keeps only the progress lines, the heartbeat and the process-tree stop that kit lacks (replaces the process code of examples/form-comparison/src/step-runner.mjs; kit K430, K430-1); the unit pool is C16.28-1 examples/form-comparison/src/step-runner.mjs, examples/form-comparison/local-verification.mjs, config/rebuild.json make text-absent FILE=examples/form-comparison/src/step-runner.mjs TEXT="spawn(step.command", grep -q "@polyspec/kit/run-command" examples/form-comparison/src/step-runner.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/step-runner.test.mjs, make rebuild-check [o]
C16.28-1 The unit pool of the form comparison runs its units as node:test tests: each unit of check.mjs and check-pipeline.mjs is a node:test test with its own timeout (unitTest of src/unit-pool.mjs), and src/unit-pool.mjs keeps only the long operations (runOperation) and the unit limit (measuredLimitMs) examples/form-comparison/check.mjs, examples/form-comparison/check-pipeline.mjs, examples/form-comparison/local-verification.mjs, examples/form-comparison/src/unit-pool.mjs, examples/form-comparison/src/unit-pool.test.mjs, examples/form-comparison/src/pipeline-flow.mjs, examples/form-comparison/check-verification.test.mjs, config/rebuild.json, docs/operations/form-comparison.md, docs/operations/form-comparison.ko.md make text-absent FILE=examples/form-comparison/check.mjs TEXT="runUnit(", make text-absent FILE=examples/form-comparison/check-pipeline.mjs TEXT="runUnits(", grep -q "from 'node:test'" examples/form-comparison/check.mjs, grep -q "from 'node:test'" examples/form-comparison/check-pipeline.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/unit-pool.test.mjs examples/form-comparison/check-verification.test.mjs, make rebuild-check [o]
C16.29 The public server of the form comparison forwards requests through the http-proxy package (replaces examples/form-comparison/src/forward.mjs) examples/form-comparison, config/rebuild.json make rebuild-check [-] cause: The replacement adds event coordination while retaining every required application rule; C16.29-1 measures the alternatives and retains the Node.js HTTP adapter.
C16.29-1 Review HTTP forwarding and remove connection headers in both directions examples/form-comparison/src/forward.mjs, examples/form-comparison/src/forward.test.mjs, docs/rebuild/http-forward.md, config/rebuild.json node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- examples/form-comparison/src/forward.test.mjs, make rebuild-check [o]
C16.30 The PHP validator rules with a parameter share one base class per kind of check packages/validator/php/src/Rules (ParameterRule, FlagRule, MeasuredRule, NumericRule, LengthRule, CountRule and the eleven rules) node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/RuleParametersTest.php, make lint-php [o]
C16.31 The Go validator marshals its slot shapes and validates a list and a detail through shared functions packages/validator/go/validator/ordered.go, types.go, validate/list.go, validate/detail.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'Fixture|TestValidate|TestForbidden|TestParameterChecks' ./..., make lint-go [o]
C16.32 The PHP validator documents each twin method for its own contract and validates a list and a detail from their map names packages/validator/php/src/Expr/Expression.php, Patterns/WholeMatchPattern.php, Public/Validator.php, Compose/Patch.php, Validate/Validator.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ListValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/DetailValidateConformanceTest.php, make lint-php [o]
C16.33 The Rust validator resolves ef, names JSON types and reads structure text through shared functions packages/validator/rust/src (compose/compose.rs, compose/members.rs, expr/evaluator.rs, json_type.rs, text.rs, lib.rs) node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml compose, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml text, make lint-rust [o]
C16.34 The Python validator layers composition members in one function and rejects a null atch at every entry packages/validator/python/src/polyspec/crudui/validator/compose.py, validator.py, tests/test_compose.py node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_compose, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_structure_validity, make lint-python [o]
C16.35 The TypeScript generator core shares its action click handler, declaration checks, path suffix, file widgets, choice options and registry probe packages/generator/ts/src (dom.ts, form.ts, util.ts, widget.ts) node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src, make lint-ts [o]
C16.36 The Go generator shares its binding checks, image preloads, row suffix, declaration errors and number reading packages/generator/go (bind.go, buttons.go, detail.go, list.go, image_preloads.go, value.go, template.go, display_declaration.go) node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run Test ., make lint-go [o]
C16.37 The PHP generator shares its image preload link and its object test packages/generator/php/src/Internal (Rendering.php, Value.php, Details.php, Lists.php, DisplayDeclaration.php, Template.php) node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/RenderingConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/DocCoverageTest.php, make lint-php [o]
C16.38 The Rust generators find their contracts at the root of the repository packages/generator/rust/tools/generate-interface-messages.mjs, packages/validator/rust/tools/generate-unicode-properties.mjs, tests/build/rust-generators.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/rust-generators.test.mts [o]
C16.38-1 The rust-generators test runs in test:runtimes package.json node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/test-commands.test.mts [o]
C16.39 The Rust generator shares its binding language, its fixture settlement and its message tables; the Rust tests build ordered objects without a copy packages/generator/rust/src/binding.rs, tests.rs, tools/generate-interface-messages.mjs, packages/validator/rust/src/compose/compose.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml native_fixture_records, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/rust-generators.test.mts, make lint-rust [o]
C16.40 The PHP extension has the layout and the names of S10 for a repository of two PHP libraries: polyspec_crudui, one stub in src/, composer.json and config.m4 packages/php-ext (composer.json, src/config.m4, src/polyspec_crudui.stub.php, src/polyspec_crudui_arginfo.h, src/crudui.c), config/layout.yml, the module name in the Makefile, the examples, the tests and the documents make lint-php-ext, make layout-check, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/php-ext -- tests/ApiTest.php [o]
C16.41 run-rust-command.mts uses the cargo that the shims of mise pin, and scripts/tool-resolution.mts is removed scripts/run-rust-command.mts, scripts/tool-resolution.mts, config/rebuild.json make rebuild-check [o]
C16.42 make kit-check passes with the link-check gate of kit in CHECK_TARGETS and the principle files of kit Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.43 make kit-check passes with the link-metadata-check gate of kit in CHECK_TARGETS Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.44 AGENTS.md states each rule as Own or as Refines a principle, and repeats no principle AGENTS.md, AGENTS.ko.md make rules-check [o]
C16.45 The dependency policy covers the Composer manifest of the PHP extension and its lock config/dependency-policy.json, packages/php-ext/composer.lock make dependency-policy-check [-] cause: C17.52 verifies policy and review coverage of the PHP extension manifest and lock. C18.1 prepares and verifies the current native source dependencies before candidate CI.
C16.46 config/parity.json declares the implementations, the tooling roots and the comparators of crudui config/parity.json make parity-declarations-check [o]
C16.46-1 config/parity.json keeps the TypeScript-only packages and the tooling tests outside the implementation roots config/parity.json make parity-declarations-check [o]
C16.47 The C engine test lives in the php-ext test folder and is declared in config/parity.json packages/php-ext/tests/engine/engine.test.mjs, config/parity.json, config/owner-checks.json make parity-declarations-check [o]
C16.47-1 The moved C engine test runs green from its new folder CHANGELOG.md node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/engine/engine.test.mjs [o]
C16.48 The repository adopts divergence-check, link-state-check, bypass-check and the internal tests of kit, and splits the engine test Makefile, config/parity.json, config/duplication.json, packages/php-ext/tests/engine, packages/php-ext/tests/comparison make kit-check, make parity-declarations-check, and the two engine test files [o]
C16.48-1 The C engine tests are the internal tests of the php-extension implementation, with no implementation of their own config/parity.json make parity-declarations-check [o]
C16.49 buildOutline is implemented in php, go, rust, php-native and python contracts/features.json, the five implementations node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/contract-manifest.test.mts; make divergence-check names no unsupported entry of buildOutline [o]
C16.49-1 The shared outline cases carry expected_outline_rows, and the Rust generator has build_outline, which reproduces them for the nodes of bind_form tests/fixtures/form-outline/, packages/generator/rust/src/outline.rs, packages/generator/rust/src/lib.rs, packages/generator/rust/src/tests.rs, CHANGELOG.md(.ko) node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml native_outline_fixture [o]
C16.49-2 The native generator protocol has the operation buildOutline with the form-outline cases, and the Go generator has BuildOutline tests/native-generators/, packages/generator/go/outline.go, packages/generator/go/outline_test.go, CHANGELOG.md(.ko) node tests/native-generators/run.mts --extension "WD/var/php-ext/polyspec_crudui.so" --target go --check outline and node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestOutlineFixture [o]
C16.49-3 The Rust program of the native generator protocol answers buildOutline tests/native-generators/programs/rust/src/main.rs, CHANGELOG.md(.ko) node tests/native-generators/run.mts --extension "WD/var/php-ext/polyspec_crudui.so" --target rust --check outline [o]
C16.49-4 The PHP generator has Generator::buildOutline, and the PHP program of the native generator protocol answers buildOutline packages/generator/php/src/Generator.php, packages/generator/php/src/Internal/Outline.php, packages/generator/php/tests/OutlineTest.php, tests/native-generators/programs/php/generate.php, CHANGELOG.md(.ko) node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/OutlineTest.php and node tests/native-generators/run.mts --extension "WD/var/php-ext/polyspec_crudui.so" --target php --check outline [o]
C16.49-5 The php-native extension has Polyspec\Crudui\Generator::buildOutline, built by the C engine packages/php-ext/src/outline.c, packages/php-ext/src/crudui.c, packages/php-ext/src/crudui_engine.h, packages/php-ext/src/config.m4, packages/php-ext/src/polyspec_crudui.stub.php, packages/php-ext/src/polyspec_crudui_arginfo.h, CHANGELOG.md(.ko) node tests/native-generators/run.mts --extension "$PWD/var/php-ext/polyspec_crudui.so" --target php-native --check outline [o]
C16.49-6 The Python generator has Generator.buildOutline with the shared form-outline fixture test packages/generator/python/src/polyspec/crudui/generator/, packages/generator/python/tests/, CHANGELOG.md(.ko) node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_outline [o]
C16.49-7 The feature contract declares buildOutline passing in every implementation, and divergence-check finds no buildOutline divergence contracts/features.json, docs/operations/feature-contracts.md(.ko), tests/fixtures/form-outline/README.md(.ko), packages/generator/php/README.md(.ko), packages/generator/python/README.md(.ko), CHANGELOG.md(.ko) make manifest-docs-check [o]
C16.50 runAction is implemented in php, go, rust, php-native and python contracts/features.json, the five implementations node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/contract-manifest.test.mts, make manifest-docs-check; make divergence-check names no unsupported entry of runAction [o]
C16.50-1 The Go generator has resolveAction and runAction with the shared form-actions sessions packages/generator/go/actions.go packages/generator/go/form_state_test.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormActions|TestFormHistory|TestFormView' . [o]
C16.50-3 The Rust generator has resolveAction and runAction with the shared form-actions sessions packages/generator/rust/src/actions.rs packages/generator/rust/src/lib.rs packages/generator/rust/src/instance.rs packages/generator/rust/tests/form_state.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state [o]
C16.50-3-1 The Rust program of the native generator protocol builds with the i64 row index of Form::move_row tests/native-generators/programs/rust/src/main.rs cargo build --locked --manifest-path tests/native-generators/programs/rust/Cargo.toml [o]
C16.50-2 The Python generator has resolveAction and runAction with the shared form-actions sessions packages/generator/python/src/polyspec/crudui/generator (actions.py, init.py, form.py), packages/generator/python/tests/test_form_state.py node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state tests.test_form_history, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_render tests.test_render tests.test_outline [o]
C16.50-4 The PHP generator has resolveAction and runAction with the shared form-actions sessions packages/generator/php/src/Generator.php packages/generator/php/tests/FormStateTest.php PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormStateTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/DocCoverageTest.php [o]
C16.50-5 The PHP extension has resolveAction and runAction with the shared form-actions sessions packages/php-ext/src (actions.c, crudui.c, crudui_engine.h, config.m4, polyspec_crudui.stub.php, polyspec_crudui_arginfo.h) make lint-php-ext, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='FormStateTest' [o]
C16.51 viewState is implemented in php, go, rust, php-native and python contracts/features.json, the five implementations node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/contract-manifest.test.mts, make manifest-docs-check; make divergence-check names no unsupported entry of viewState [o]
C16.51-1 The neutral rules and shared cases of view state, history and actions are written: CURT-061 to CURT-090 in docs/spec/form-runtime.md, the fixture families form-view, form-history, form-actions, view-functions and history-functions generated by the TypeScript reference, and resolveAction in TypeScript accepts the neutral input docs/spec/form-runtime.md, tests/fixtures/form-state, form-view, form-history, form-actions, view-functions, history-functions, packages/generator/ts/src/actions.ts, form-state.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts [o]
C16.51-2 The form-view sessions omit canUndo and canRedo, so that an implementation without history runs them tests/fixtures/form-state, tests/fixtures/form-view, packages/generator/ts/src/form-state.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts [o]
C16.51-3 The Go generator has view state: ViewState and the view functions, the bindForm option Collapsed, Form.ToggleRow and Form.SetAllExpanded, and the view follows removeRow, rekeyRow and setData packages/generator/go (view.go, instance.go, bind.go, template.go, form_state_test.go), contracts/features.json node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormView|TestViewFunctions' [o]
C16.51-4 The Python generator has view state: the view functions of Generator, the bindForm option collapsed, Form.toggleRow and Form.setAllExpanded, and the view follows removeRow, rekeyRow and setData packages/generator/python (view.py, form.py, binding.py, init.py, tests/test_form_state.py), contracts/features.json node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state [o]
C16.51-5 The Rust generator has view state: ViewState and the view functions, the BindOptions member collapsed, Form::toggle_row and Form::set_all_expanded, and the view follows remove_row, rekey_row and set_data packages/generator/rust (src/view.rs, instance.rs, binding.rs, lib.rs, tests/form_state.rs), contracts/features.json node node_modules/@polyspec/kit/dist/run-tests.mjs cargo --cwd packages/generator/rust -- --test form_state [o]
C16.51-5-1 The Rust record server of the form comparison builds after BindOptions gained collapsed: its form rendering states the initial view examples/form-comparison/servers/rust/src/generation.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path examples/form-comparison/servers/rust/Cargo.toml compilation_and_cached_rendering [o]
C16.51-6 The PHP generator has view state: View and the view functions of Generator, the bindForm option collapsed, Form::toggleRow and Form::setAllExpanded, and the view follows removeRow, rekeyRow and setData packages/generator/php (src/Internal/View.php, Form.php, Generator.php, Internal/Binding.php, tests/FormStateTest.php, tests/FixtureNamer.php), contracts/features.json node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormStateTest.php [o]
C16.51-7 The PHP extension registers the view state and the history functions of the PHP library: the view and history methods of Generator, Form::toggleRow and Form::setAllExpanded, the view of a form instance and the bindForm option collapsed packages/php-ext/src (crudui.c, form.c, binding.c, view.c, history.c, crudui_engine.h, config.m4, polyspec_crudui.stub.php, polyspec_crudui_arginfo.h) make lint-php-ext, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='FormStateTest|HistoryFunctionsTest' [o]
C16.52 formHistory is implemented in php, go, rust, php-native and python contracts/features.json, the five implementations node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/contract-manifest.test.mts, make manifest-docs-check; make divergence-check names no unsupported entry of formHistory [o]
C16.52-2 The Python generator has the history functions emptyHistory, recordChange, canUndo, canRedo, undoChange and redoChange packages/generator/python/src/polyspec/crudui/generator/history.py, init.py, tests/test_form_history.py, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_history [o]
C16.52-3 The TypeScript test of history-functions is a binding of the unit, with one test per case packages/generator/ts/src/history-functions.test.ts, packages/generator/ts/src/form-state.test.ts, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/history-functions.test.ts [o]
C16.52-4 The Go generator has the history functions EmptyHistory, RecordChange, CanUndo, CanRedo, UndoChange and RedoChange packages/generator/go/history.go, packages/generator/go/history_test.go, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestHistoryFunctions . [o]
C16.52-5 The Rust generator has the history functions empty_history, record_change, can_undo, can_redo, undo_change and redo_change packages/generator/rust/src/history.rs, packages/generator/rust/tests/history_functions.rs, Cargo.toml, Cargo.lock, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test history_functions [o]
C16.52-6 The PHP generator has the history functions emptyHistory, recordChange, canUndo, canRedo, undoChange and redoChange packages/generator/php/src/Internal/History.php, Generator.php, tests/HistoryFunctionsTest.php, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/HistoryFunctionsTest.php [o]
C16.52-7 The Go form instance keeps its undo history: undo, redo, canUndo and canRedo, with the shared form-history sessions packages/generator/go/instance.go packages/generator/go/form_state_test.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormHistory|TestFormView|TestHistoryFunctions' . [o]
C16.52-8 The Python form instance keeps its undo history: undo, redo, canUndo and canRedo, with the shared form-history sessions packages/generator/python/src/polyspec/crudui/generator/form.py packages/generator/python/tests/test_form_state.py node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state tests.test_form_history [o]
C16.52-9 The Rust form instance keeps its undo history: undo, redo, canUndo and canRedo, with the shared form-history sessions packages/generator/rust/src/instance.rs packages/generator/rust/tests/form_state.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state --test history_functions [o]
C16.52-10 The PHP form instance keeps its undo history: undo, redo, canUndo and canRedo, with the shared form-history sessions packages/generator/php/src/Form.php packages/generator/php/tests/FormStateTest.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormStateTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/DocCoverageTest.php [o]
C16.52-11 The PHP extension Form keeps its undo history: undo, redo, canUndo and canRedo packages/php-ext/src (form.c, crudui.c, polyspec_crudui.stub.php, polyspec_crudui_arginfo.h) make lint-php-ext, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='FormStateTest|HistoryFunctionsTest' [o]
C16.53 createForm is implemented in python as in the other implementations contracts/features.json, packages/generator/python make divergence-check reports no partial entry of createForm [o]
C16.54 contracts/features.json has no partial and unsupported support values contracts/features.json, its schema and readers make divergence-check reports no supportValues entry; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/contract-manifest.test.mts; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/conformance-evidence.test.mts [o]
C16.55 No script narrows the run of an implementation with --exclude-group; the php-ext run executes every test of the php run examples/form-comparison/check-verification.test.mjs, examples/form-comparison/local-verification.mjs make divergence-check reports no --exclude-group [o]
C16.56 Every rule of docs/spec carries a requirement id with the prefix CU, one bullet per rule and per table row docs/spec, docs/spec/*.ko.md, config/parity.json make parity-declarations-check reports no R13 or R14 finding and the pattern matches the spec [o]
C16.57 Every requirement id of docs/spec is cited by a unit whose tests name it, and an id with no test has the test in all six implementations config/parity.json, tests/fixtures case.json files, the tests of the six implementations make parity-declarations-check reports no R4, R13, R14 or R15 finding [o]
C16.57-2 empty collections: the validate suite cites CUEC-003, CUEC-005 and CUEC-006 and declares six bindings config/parity.json tests/fixtures/validate/generate.mts tests/fixtures/validate/cases.json tests/fixtures/validate/README.md tests/fixtures/validate/README.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/validate.conformance.test.ts, PATH=$PWD/var/tools/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml validate_matches_fixture, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_validate, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php [o]
C16.57-1 The form-state suites form-view, form-history, form-actions and view-functions and the php-extension binding of history-functions are cited by units whose tests name their requirements (CURT-009 to CURT-012, CURT-061 to CURT-091) config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormActions|TestFormHistory|TestFormView|TestViewFunctions' . node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormStateTest.php tests/HistoryFunctionsTest.php [o]
C16.57-4 validation rules: the validate suite cites the CUVR requirements of docs/spec/validation-rules.md that its cases test config/parity.json tests/fixtures/validate/generate.mts tests/fixtures/validate/cases.json tests/fixtures/validate/README.md tests/fixtures/validate/README.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/validate.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml validate_matches_fixture, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_validate, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php [o]
C16.57-5 input text: the validator text-validity suites cite the CUIT requirements of docs/spec/input-text.md that their cases test config/parity.json tests/fixtures/text-validity/validate/cases.json tests/fixtures/text-validity/validateList/cases.json tests/fixtures/text-validity/validateDetail/cases.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/text/text-validity.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml input_text_matches_fixture, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_text_validity, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/TextValidityConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='TextValidityConformanceTest', (cd packages/validator/go && ../../../var/tools/bin/mise exec -- go test -run TestInputTextMatchesFixture ./validator/validate/) [o]
C16.57-6 runtime packages: the CURP requirements of runtime-packages.md that a shared suite tests are cited by its units: the validate operation and the validation, the form instance create, read and replace data, the row operations and the composition of references config/parity.json, tests/fixtures/validate/cases.json, tests/fixtures/validate/generate.mts, tests/fixtures/form-state/generate.mts, tests/fixtures/form-view/cases.json, tests/fixtures/form-history/cases.json, tests/fixtures/form-actions/cases.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/validate.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestValidateMatchesFixture' ./validator/validate/..., node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml validate_matches_fixture, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_validate, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ValidateConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormView|TestFormHistory|TestFormActions' ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs cargo --cwd packages/generator/rust -- --test form_state, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='FormStateTest|ValidateConformanceTest' [o]
C16.57-7 schema: the spec, list, detail and validate suites cite the CUSC requirements of docs/spec/schema.md that their cases test config/parity.json tests/fixtures/spec-validity/cases.json tests/fixtures/list-validity/cases.json tests/fixtures/detail-validity/cases.json tests/fixtures/validate/cases.json tests/fixtures/validate/generate.mts node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/forbidden-scan.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml spec_validity_matches_fixture, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_structure_validity, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='ForbiddenScanConformanceTest' [o]
C16.57-8 the CUDF requirements that the list-validity and detail-validity suites test are cited by their units: the list and detail specification members, the format and action values, the root keys config/parity.json, tests/fixtures/list-validity/cases.json, tests/fixtures/detail-validity/cases.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/list-metaschema.conformance.test.ts src/detail-metaschema.conformance.test.ts, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/ListValidateConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/DetailValidateConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='ListValidateConformanceTest|DetailValidateConformanceTest', node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestValidateListMatchesFixture|TestValidateDetailMatchesFixture' ./validator/validate/..., node node_modules/@polyspec/kit/dist/run-tests.mjs cargo --cwd packages/validator/rust -- --test list_validity_conformance --test detail_validity_conformance, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_structure_validity [o]
C16.57-9 the CUMK requirements of docs/spec/form-markup.md are cited by units whose tests name them: the design rules and the markup rules that the rendering cases test tests/fixtures/form-render/cases.json, packages/react/scripts/scenario-form-render-cases.ts, packages/react/scripts/generate-form-render-cases.mts, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormRenderSuite, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_render [o]
C16.57-10 the CURT requirements of docs/spec/form-runtime.md that the state and render cases test are cited by their units; the TypeScript-only ones are listed tests/fixtures/form-state/generate.mts, tests/fixtures/form-state/cases, packages/react/scripts/scenario-form-render-cases.ts, packages/react/scripts/generate-form-render-cases.mts, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormRenderSuite [o]
C16.57-11 the CUEC, CUDF requirements of the empty-collection and display specs that the cases of the rendering suites test are cited by their units; the others are listed with their reason tests/fixtures/form-render/cases.json, tests/fixtures/list-render/cases.json, tests/fixtures/detail-render/cases.json, packages/react/scripts/generate-form-render-cases.mts, tests/fixtures/list-render/generate.mts, tests/fixtures/detail-render/generate.mts, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/conformance.test.ts src/list-conformance.test.ts src/detail-conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormRenderSuite [o]
C16.57-12 the cases of the display rules CUDF-001..005, 020, 023, 036..039, the validation date rule CUVR-012 and the keyed editable session CUEC-007 are written, and each runner of the extended suites passes them tests/fixtures/list-render, tests/fixtures/detail-render, tests/fixtures/validate, tests/fixtures/form-state (generators and cases.json) node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/list-conformance.test.ts src/detail-conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestListRenderSuite [o]
C16.57-12-1 the Rust validator rejects a text that the reference rejects under the date rule (CUVR-012): is_valid_date accepts every string the JavaScript Date parser rejects packages/validator/rust/src/validate/rules.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --test validate_conformance [o]
C16.57-12-2 the date and dateISO rules accept the text the spec lists in CUVR-058 and CUVR-059 (layouts with calendar validity, a datetime with an offset, strings only, trimmed) in all six implementations docs/spec/validation-rules.md, docs/spec/validation-rules.ko.md, tests/fixtures/validate/generate.mts, tests/fixtures/validate/cases.json, packages/validator/ts/src/rules/date.ts, packages/validator/go/validator/validate/rules.go, packages/validator/python/src/polyspec/crudui/validator/rules.py, packages/validator/php/src/Rules/Date.php, packages/validator/rust/src/validate/rules.rs node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/validate.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run TestValidateMatchesFixture ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --test validate_conformance [o]
C16.57-13 the form-state sessions cite the binding data errors CURT-001, CURT-002 and CURT-003 (the root, group row and repeated value messages of setData) through their cases, and the form-actions unit cites them tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, packages/php-ext/tests/engine/engine.test.mjs, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormActions ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests/test_form_state.py, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter FormStateTest, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern='updates form state atomically' packages/php-ext/tests/engine/engine.test.mjs [o]
C16.57-13-1 the PHP library Form::setData accepts a value that is not an object and fails with the root message of CURT-001 (INVALID_FORM_INPUT, Form data must be an object), instead of a PHP TypeError from its typed parameter array|stdClass packages/generator/php/src/Form.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter FormStateTest [o]
C16.57-14 the runtime requirements that the suites test are cited by their cases: CURP-006, CURP-007, CURP-013, CURP-015, CURP-017, CURP-020 and CURP-021, and the reasons for the others are recorded tests/fixtures/form-complete/generate.mts, tests/fixtures/form-complete/cases.json, tests/fixtures/list-render/generate.mts, tests/fixtures/list-render/cases.json, tests/fixtures/detail-render/generate.mts, tests/fixtures/detail-render/cases.json, tests/fixtures/form-outline/generate.mts, tests/fixtures/form-outline/cases.json, tests/fixtures/form-state/generate.mts, tests/fixtures/form-view/cases.json, tests/fixtures/form-history/cases.json, tests/fixtures/form-actions/cases.json, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.57-14.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-(006|007|013|015|017|020|021)," var/pd-C16.57-14.log' [o]
C16.57-15 The input-text requirements CUIT-021, CUIT-022, CUIT-030 to CUIT-033 and CUIT-035 are cited by the cases that test them tests/fixtures/text-validity/value-graphs.json, tests/fixtures/text-validity/validate/cases.json, tests/fixtures/text-validity/validateList/cases.json, tests/fixtures/text-validity/validateDetail/cases.json sh -c 'make -s parity-declarations-check > var/pd-C16.57-15.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines (CUIT-021|CUIT-022|CUIT-030|CUIT-031|CUIT-032|CUIT-033|CUIT-035)," var/pd-C16.57-15.log' [o]
C16.57-15-1 The Python validator runs the value-graph cases of the text-validity fixtures and the parity unit binds it config/parity.json, packages/validator/python/tests/test_text_validity.py sh -c 'make -s parity-declarations-check > var/pd-C16.57-15-1.log 2>&1; ! grep -E "R2 missing-binding text-validity-value-graphs python" var/pd-C16.57-15-1.log' [o]
C16.57-16 the runtime requirements that the text-validity build cases and the form state root case test are cited: CURP-014 by the buildList cases, CURP-016 by the buildDetail cases and CURP-026 by the PHP root case of the form state sessions tests/fixtures/text-validity/buildList/cases.json, tests/fixtures/text-validity/buildDetail/cases.json, tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.57-16.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-(014|016|026)," var/pd-C16.57-16.log' [o]
C16.57-17 the explicit empty collection cases the TypeScript test of empty collections asserts are cited by the form-render cases: a nested sibling identity and order case (CUEC-001, CURP-027) and a scalar explicit empty case (CUEC-001, CUEC-004); the file is declared internal once every assertion is covered by a cited case packages/react/scripts/scenario-form-render-cases.ts, packages/react/scripts/generate-form-render-cases.mts, tests/fixtures/form-render/cases.json, packages/generator/go/form_render_suite_test.go, packages/generator/python/tests/test_form_render.py, packages/generator/rust/tests/form_render.rs, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.57-17.log 2>&1; ! grep -E "R5 undeclared-test ts packages/generator/ts/src/empty-collections.test.ts" var/pd-C16.57-17.log' [o]
C16.57-3 The expression suite expr is cited by a unit whose tests name the CUXP requirements of docs/spec/expressions.md, in six implementations config/parity.json, packages/validator/ts/scripts/generate-expr-cases.mts, tests/fixtures/expr/cases.json, tests/fixtures/expr/README.md, tests/fixtures/expr/README.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/expr.conformance.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestExpressionMatchesFixture' ./validator/expr node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_expr node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --test expr_conformance node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Expr/ExprConformanceTest.php [o]
C16.57-3-1 The C engine of the PHP extension evaluates the expression suite tests/fixtures/expr/cases.json, bound for php-extension with the node runner (K422) packages/php-ext/tests/contract/expr.test.mjs, packages/php-ext/tests/engine/engine.test.mjs, packages/php-ext/src/expression.c, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.57-3-1.log 2>&1; ! grep -E "R2 missing-binding.*expr" var/pd-C16.57-3-1.log', node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/contract/expr.test.mjs [o]
C16.57-3-2 The composition suite tests/fixtures/compose/cases.json is a suite unit compose, bound in the six implementations (CUSC-007) config/parity.json, tests/fixtures/compose/cases.json, packages/validator/ts/scripts/generate-compose-cases.mts, packages/validator/ts/src/compose.conformance.test.ts, packages/php-ext/tests/contract/compose.test.mjs, tests/fixtures/compose/README.md sh -c 'make -s parity-declarations-check > var/pd-C16.57-3-2.log 2>&1; ! grep -E "R4 undeclared-suite tests/fixtures/compose/cases.json" var/pd-C16.57-3-2.log', node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/compose.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Compose/ComposeConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run TestComposeMatchesFixture ./validator/compose, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --test compose_conformance, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_compose, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/contract/compose.test.mjs [o]
C16.57-3-3 The remaining compose and expression tests of the TypeScript, PHP and Go validators have a place: each is an internal test of its implementation, or the test of a binding config/parity.json, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.57-3-3.log 2>&1; ! grep -E "R5 undeclared-test (ts packages/validator/ts/src/compose/|php packages/validator/php/tests/Compose/|go packages/validator/go/validator/(compose|expr)/)" var/pd-C16.57-3-3.log', node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/compose/patch.test.ts src/compose/ref.test.ts, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Compose/PatchTest.php tests/Compose/RefTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestArrayIndexBoundaries|TestOrderMembers|TestComposeUsesMemberOrder|TestComposeOrdersCustomLoaderDocuments|TestConditionMap|TestValueSemanticsMatchJsReference|TestTernaryValueReturn|TestCacheBoundedCapacity|TestIsConditionExpression|TestExpressionRecognitionUsesSharedWhitespace' ./validator/compose ./validator/expr [o]
C16.58 Duplication is 0: the generator scripts, the adapters, the examples and the php-ext C code share one copy of each piece scripts, packages/*/adapters, examples, packages/php-ext/src make duplication-check [o]
C16.58-1 The documentation link rewriters share one markdown-it attribute rewriter scripts/documentation-links.mts, scripts/docs-web/build.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- scripts/documentation-links.test.mts tests/docs/web-build.test.mts [o]
C16.58-2 The Rust text validators of a list and a detail are defined by one macro packages/validator/rust/src/text.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --lib text [o]
C16.58-3 The scenarios of the React form render cases share their repeated specifications packages/react/scripts/scenario-form-render-cases.ts node node_modules/tsx/dist/cli.mjs packages/react/scripts/generate-form-render-cases.mts leaves tests/fixtures/form-render/cases.json unchanged [o]
C16.58-5 The PHP and Go table generators share one reader of a contract and one writer of a generated source scripts/generator-contract.php, scripts/go, the generators of packages/generator and packages/validator go build ./scripts/go/... ./packages/generator/go/... ./packages/validator/go/... and the generated tables are byte for byte as before except the Go header comment [o]
C16.58-6 The cross-check console shares its JSON parser, its download, its matrix column and its request reader examples/cross-check-console/client/app.js, examples/cross-check-console/server/server.mjs node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd examples/cross-check-console -- server/server.test.mjs [o]
C16.58-4 The React, Vue and Svelte adapters take the list and detail renderers, the action markup, the sort direction and the widget root markup from the core packages/generator/ts/src (detail.ts, list.ts, raw-markup.ts, index.ts, internal.ts), packages/react/src/server.ts, packages/vue/src/components (List.ts, Widget.ts), packages/svelte/src (index.ts, components/list.ts, components/widget.ts), contracts/features.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/react -- src/tests/list-render.conformance.test.ts src/tests/detail-render.conformance.test.ts src/tests/form-render.conformance.test.ts, node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/vue -- tests/list-render.conformance.test.mjs src/tests/detail-render.conformance.test.ts tests/form-render.conformance.test.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/svelte -- tests/list-render.conformance.test.mjs tests/detail-render.conformance.test.mjs tests/form-render.conformance.test.mjs, make manifest-check [o]
C16.58-7 The PHP table generators share the reader of their contract and the writer of their source scripts/generator-contract.php, packages/generator/php/scripts/generate-interface-messages.php, packages/validator/php/scripts/generate-unicode-data.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/Internal/InterfaceMessagesTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Values/UnicodeDataTest.php [o]
C16.58-8 The form-comparison stage pages share the binding evaluation of their form examples/form-comparison/src/form-views.ts, examples/form-comparison/src/pages/stage-svelte.svelte.ts, examples/form-comparison/src/pages/stage-vue.ts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/public/pipeline.test.mjs [o]
C16.58-9 The form-comparison scripts and frame share the entry guard, the native form fields and the result payload examples/form-comparison/src/entry-point.mjs, examples/form-comparison/src/native-fields.mjs, examples/form-comparison/src/unit-pool.mjs, examples/form-comparison/src/frame.mjs, examples/form-comparison/check-servers.mjs, examples/form-comparison/check-pipeline.mjs, examples/form-comparison/local-verification.mjs node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/unit-pool.test.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/check-servers.test.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/check-verification.test.mjs [o]
C16.58-10 The form-comparison Rust server shares its lock opener and its test fixtures examples/form-comparison/servers/rust/src/repository.rs, examples/form-comparison/servers/rust/src/records.rs, examples/form-comparison/servers/rust/src/tests.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path examples/form-comparison/servers/rust/Cargo.toml tests:: [o]
C16.58-12 The validator decodes the members of a JSON object with one walker packages/validator/go/validator/types.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestRoundTrip|TestForbidden|TestXComment|TestNonCanonical|TestClosed|TestDesign|TestValidateExtra|TestNested|TestRule|TestTopLevel|TestOptions' ./validator [o]
C16.58-13 The Rust generator and validator check their embedded contracts with include_str packages/generator/rust/src/messages/mod.rs, packages/validator/rust/src/validate/unicode/mod.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml embedded_data_matches_the_contract, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml embedded_messages_match_the_contract [o]
C16.58-15 The C extension reads the members of its values through one set of helpers packages/php-ext/src/engine_internal.h, packages/php-ext/src/actions.c, packages/php-ext/src/binding.c, packages/php-ext/src/list.c, packages/php-ext/src/form.c, packages/php-ext/src/outline.c, packages/php-ext/src/render.c, packages/php-ext/src/view.c, packages/php-ext/src/widget.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-16 The C extension reads typed members and sets members through one set of helpers packages/php-ext/src/engine_internal.h, packages/php-ext/src/binding.c, packages/php-ext/src/widget.c, packages/php-ext/src/list.c, packages/php-ext/src/render.c, packages/php-ext/src/design.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-17 The C extension compares and multiplies its exact decimal numbers through one set of word helpers packages/php-ext/src/bignum_internal.h, packages/php-ext/src/canonical.c, packages/php-ext/src/number_text.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-18 The C extension parses the arguments of its shared PHP methods and runs their operations through one tail packages/php-ext/src/crudui.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-19 The C extension opens the collection of a row operation, reports an unknown row and commits a change through one set of helpers packages/php-ext/src/form.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-20 The C widget builders hand their source and options to their model through one helper packages/php-ext/src/widget.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-21 The C list rendering and building check their input through one function packages/php-ext/src/list.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-22 The C composition, expression and row view entries share their steps packages/php-ext/src/compose.c, packages/php-ext/src/expression.c, packages/php-ext/src/view.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-23 The C list and number text share the scientific mantissa of a number packages/php-ext/src/engine_internal.h, packages/php-ext/src/list.c, packages/php-ext/src/number_text.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-24 The C form row operations read their collection from one scope struct packages/php-ext/src/form.c, CHANGELOG.md, CHANGELOG.ko.md make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-25 The Go form-comparison server writes its canonical number text with the validator function instead of its own copy packages/validator/go/validator/validate/value_text.go, packages/validator/go/validator/validate/value_test.go, packages/validator/go/validator/validate/value_number.go, packages/validator/go/validator/validate/rules.go, packages/validator/go/validator/validate/rule_length.go, examples/form-comparison/servers/go/json.go, examples/form-comparison/servers/go/records.go, examples/form-comparison/servers/go/records_test.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run 'TestCanonicalNumber|TestCanonicalText' ./validator/validate, node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd examples/form-comparison/servers/go -- -run 'TestJSON|TestNumberTextMatchesECMAScript|TestRecordStore|TestRecordViews|TestShaped|TestStoredCompanies|TestBenchmarkUses' . [o]
C16.58-26 The PHP form-comparison record store parses number text with the validator NumberValue instead of its own copy examples/form-comparison/servers/php/src/RecordStore.php, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s duplication-check > var/dup-C16.58-26.log 2>&1; ! grep -F "RecordStore.php" var/dup-C16.58-26.log', node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd examples/form-comparison/servers/php -- tests/FormShapeTest.php tests/FormJsonTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Expr/NumberValueTest.php [o]
C16.58-27 The TypeScript form-comparison adapters take their mountView and hydrateView from one shared module examples/form-comparison/src/adapters/view-entries.ts, examples/form-comparison/src/adapters/bind-form-html.ts, examples/form-comparison/src/adapters/bind-form-svelte.svelte.ts, examples/form-comparison/src/adapters/bind-form-vue.ts, examples/form-comparison/src/adapters/bind-form-react.tsx, examples/form-comparison/src/adapters/create-form-html.ts, examples/form-comparison/src/adapters/create-form-svelte.svelte.ts, examples/form-comparison/src/adapters/create-form-vue.ts, examples/form-comparison/src/adapters/create-form-react.tsx, examples/form-comparison/src/adapter-completion.test.mjs, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s duplication-check > var/dup-C16.58-27.log 2>&1; ! grep -E "adapters/(bind|create)-form-" var/dup-C16.58-27.log', node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/adapter-completion.test.mjs, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/svelte-dispose.test.mjs [o]
C16.58-28 The C expression values share the parse and free steps of their evaluation packages/php-ext/src/expression.c, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s duplication-check > var/dup-C16.58-28.log 2>&1; ! grep -F "src/expression.c [750:" var/dup-C16.58-28.log && ! grep -F "src/expression.c [761:" var/dup-C16.58-28.log', make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-29 The C row view operations toggle and remove rows through one list copy packages/php-ext/src/view.c, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s duplication-check > var/dup-C16.58-29.log 2>&1; ! grep -F "src/view.c [144:" var/dup-C16.58-29.log && ! grep -F "src/view.c [177:" var/dup-C16.58-29.log', make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-30 The React form render scenarios share the spec of the two collection cases packages/react/scripts/scenario-form-render-cases.ts, CHANGELOG.md, CHANGELOG.ko.md sh -c 'make -s duplication-check > var/dup-C16.58-30.log 2>&1; ! grep -F "scenario-form-render-cases.ts" var/dup-C16.58-30.log', sh -c 'node node_modules/tsx/dist/cli.mjs packages/react/scripts/generate-form-render-cases.mts && git diff --exit-code -- tests/fixtures/form-render/cases.json' [o]
C16.59 docs/spec holds only the rules of the six implementations: the tooling documents move to docs/operations and runtime-packages and php-extension are split docs/operations, docs/spec, the links to the moved documents make docs-check link check, make check-documents, and no document of docs/spec without a requirement id [o]
C16.60 The record server preparation copies the contents of the OrderedJSON extension source, so phpize finds config.m4 examples/form-comparison/src/local-servers.mjs, examples/form-comparison/src/local-servers.test.mjs node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/local-servers.test.mjs [o]
C16.61 A neutral rule states how each implementation maps the form value model to its native types docs/spec/runtime-packages.md, docs/spec/runtime-packages.ko.md make parity-declarations-check defines CURP-026 and check-documents passes [o]
C16.62 The php-ext record server runs the php-fpm of the PHP that built its modules examples/form-comparison/servers/php/main.mjs, examples/form-comparison/src/local-servers.mjs node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/record-stores.test.mjs passes the php-ext record store [o]
C16.63 The go.work and go.work.sum files that make link writes beside each Go module are ignored by Git .gitignore node node_modules/@polyspec/kit/dist/link.mjs link ../ordered-json writes the Go links without refusing [o]
C16.63-1 The go.work that make link writes beside the Go module scripts/go is ignored by Git .gitignore node node_modules/@polyspec/kit/dist/link.mjs link . ../kit ../ordered-json writes the Go links without refusing [o]
C16.64 The contract manifest declares the internal exports of @polyspec/crudui-generator-core, or the entry stops exporting them, so make manifest-check passes contracts/, packages/generator/ts/src/internal.ts make manifest-check [o]
C16.65 The maintained prose and the changelogs name no acceptance check with the word gate (records-check) CHANGELOG.md, CHANGELOG.ko.md, the documents of docs/ node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/docs/repository-writing.test.mts [-] cause: gate is the term of kit for its checks (PRINCIPLES P31, make kit-gates, gates.yml), and the record-word ban of a repository cannot forbid the vocabulary of the rules it adopts (ruling of link-owner, 2026-10-20); C16.65-1 corrects the test
C16.65-1 The repository-writing test accepts gate, the term of kit for its checks (PRINCIPLES P31, kit-gates) tests/docs/repository-writing.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/docs/repository-writing.test.mts [o]
C16.66 CHANGELOG.ko.md lists every entry of CHANGELOG.md once, in the same order, with one revision marker CHANGELOG.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/docs/changelog.test.mts [o]
C16.67 The copies of kit follow the kit-sync of 2026-10-20 (golangci, ruff, clippy configuration, principles, bootstrap) .golangci.yml, ruff.toml, clippy.toml, PRINCIPLES.md, PRINCIPLES.ko.md, scripts/kit/kit-bootstrap.mk make kit-check [o]
C16.67-1 packages/validator/go reports no hidden error: errcheck, errorlint, nilerr findings of the kit lint are handled (K334, P8) packages/validator/go (the changed files) cd packages/validator/go && ../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../.golangci.yml ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/validator/go -- -run Test ./... [o]
C16.67-6 packages/validator/rust reports no hidden error: clippy disallowed_methods and map_err_ignore findings of the kit lint are handled (K334, P8) packages/validator/rust (the changed files of the crate) cd packages/validator/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml expr, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml text, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml compose, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml validate, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml types [o]
C16.67-10 validator reports no hidden error: kit lint of the date parser (ruff S112 try-except-continue) findings are handled (K334, P8) packages/validator/python (validator/rules.py) var/tools/bin/mise exec -- ruff check --config ruff.toml packages/validator/python/src/polyspec/crudui/validator/rules.py, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_validate, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/validator/python -- tests.test_text_validity [o]
C16.67-11 generator reports no hidden error: kit lint of the design appearance (ruff S110 try-except-pass) finding is handled (K334, P8) packages/generator/python (generator/design.py, tests/test_form_render.py) var/tools/bin/mise exec -- ruff check --config ruff.toml packages/generator/python/src/polyspec/crudui/generator/design.py, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_render, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_render [o]
C16.67-2 examples/form-comparison/servers/go reports no hidden error: errcheck, errorlint findings of the kit lint are handled (K334, P8) examples/form-comparison/servers/go (the changed files) cd examples/form-comparison/servers/go && ../../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../../.golangci.yml ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd examples/form-comparison/servers/go -- -run Test ./... [o]
C16.67-7 benchmarks validators rust reports no hidden error: clippy findings of the kit lint are handled (K334, P8) benchmarks/validators/rust (the changed files) cd benchmarks/validators/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, cargo build --locked --manifest-path benchmarks/validators/rust/Cargo.toml [o]
C16.67-8 examples/cross-check-console/validators/rust reports no hidden error: clippy finding of the kit lint is handled (K334, P8) examples/cross-check-console/validators/rust (the changed files) cd examples/cross-check-console/validators/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, cargo build --locked --manifest-path examples/cross-check-console/validators/rust/Cargo.toml [o]
C16.67-12 generator (Go) reports no hidden error: kit lint of the Go generator (errcheck, errorlint) findings are handled (K334, P8) packages/generator/go (the changed files) cd packages/generator/go && ../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../.golangci.yml ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run Test ./... [o]
C16.67-3 benchmarks/validators/go reports no hidden error: errcheck findings of the kit lint are handled (K334, P8) benchmarks/validators/go (main.go, main_test.go) cd benchmarks/validators/go && ../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../.golangci.yml ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd benchmarks/validators/go -- -run Test ./... [o]
C16.67-4 examples/cross-check-console/validators/go reports no hidden error: errcheck findings of the kit lint are handled (K334, P8) examples/cross-check-console/validators/go (main.go) cd examples/cross-check-console/validators/go && ../../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../../.golangci.yml ./..., cd examples/cross-check-console/validators/go && ../../../../var/tools/bin/mise exec -- go build -o /dev/null ./... [o]
C16.67-9 tests/native-generators/programs/rust reports no hidden error: clippy finding of the kit lint is handled (K334, P8) tests/native-generators/programs/rust (the changed files) cd tests/native-generators/programs/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, cargo build --locked --manifest-path tests/native-generators/programs/rust/Cargo.toml [o]
C16.67-13 packages/generator/rust reports no hidden error: the clippy findings of Result::ok, Result::unwrap_or and Result::unwrap_or_else are handled (K334, P8) packages/generator/rust/src/date.rs packages/generator/rust/src/design.rs packages/generator/rust/src/instance.rs packages/generator/rust/src/list.rs packages/generator/rust/src/messages/mod.rs packages/generator/rust/src/number.rs packages/generator/rust/src/tests.rs packages/generator/rust/src/util.rs cd packages/generator/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml tests [o]
C16.67-14 examples/form-comparison/servers/rust reports no hidden error: clippy findings of the kit lint are handled (K334, P8) examples/form-comparison/servers/rust (the changed files) cd examples/form-comparison/servers/rust && cargo clippy --workspace --all-targets --locked -- -D warnings -D unused_must_use -D clippy::let_underscore_must_use -D clippy::let_underscore_untyped -D clippy::map_err_ignore -D clippy::allow_attributes_without_reason, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path examples/form-comparison/servers/rust/Cargo.toml tests:: [o]
C16.67-5 tests/native-generators/programs/go reports no hidden error: errcheck and errorlint findings of the kit lint are handled (K334, P8) tests/native-generators/programs/go (main.go) cd tests/native-generators/programs/go && ../../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../../.golangci.yml ./..., cd tests/native-generators/programs/go && ../../../../var/tools/bin/mise exec -- go build -o /dev/null ./... [o]
C16.68 config/generated.json declares the generated paths of crudui, and the pre-commit hook of kit runs its generated-file check (kit K362) config/generated.json, config/owner-checks.json, .githooks/pre-commit, AGENTS.md, AGENTS.ko.md make hooks-check, make owner-validate [o]
C16.71 crudui takes the copies of kit at f9eb43dd (K348 K385 K384 K360-1 K383 K380 K382 K375) scripts/kit/kit-bootstrap.mk, config/layout.kit.yml, .githooks/commit-msg and the other copies that make kit-sync writes make kit-check [o]
C16.69 ordered-json is consumed by version 0.0.9 in npm, Go and Rust and linked to its checkout by kit link; the self-made clone of .form-comparison/sources is removed package.json, package-lock.json, the Go and Rust manifests that named the clone, examples/form-comparison, Makefile, config, docs/operations node ../kit/dist/link.mjs check ../crudui ../kit ../ordered-json; node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd examples/form-comparison/servers/go -- -run Test ./...; node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path examples/form-comparison/servers/rust/Cargo.toml ordered_json; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/local-servers.test.mjs; make rebuild-check; make owner-validate [o]
C16.72 generator (Go) returns an appearance ternary evaluation error instead of dropping it (P8) packages/generator/go (design.go, the callers, display_design_test.go) cd packages/generator/go && ../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../.golangci.yml ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestAppearanceErrorsAreNotHidden ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run Test ./... [o]
C16.73 make lint-ts passes: the unused imports of two tests and the unused exports of the form-comparison local servers and the React server entry are removed or declared tests/build/offline-checks.test.mts, packages/php-ext/tests/engine/support.mjs, examples/form-comparison/src/local-servers.mjs, config/knip-entries.json make lint-ts; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/offline-checks.test.mts; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/engine/engine.test.mjs; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- examples/form-comparison/src/local-servers.test.mjs; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/react -- src/tests/entry-boundary.test.ts src/tests/list-render.conformance.test.ts [o]
C16.74 The Python files that ruff format reports are formatted packages/generator/python/src/polyspec/crudui/generator/form.py, packages/generator/python/tests/test_form_state.py make lint-python, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_form_state [o]
C16.75 The PHP sources and examples pass the phpcs line length rule (Generic.Files.LineLength.TooLong) packages/generator/php/src/Internal/History.php examples/form-comparison/servers/php/api.php examples/form-comparison/servers/php/src/ApiServer.php examples/form-comparison/servers/php/tests/FormGenerationTest.php PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/HistoryFunctionsTest.php [o]
C16.77 The Rust generator does not turn an appearance ternary or condition expression into a silent value (P8, as the Python and Go generators) packages/generator/rust/src/design.rs packages/generator/rust/src/tests.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml appearance, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state [o]
C16.78 runAction of a name that is none of the eleven actions fails with INVALID_FORM_INPUT in every generator (CURT-091) docs/spec/form-runtime.md, docs/spec/form-runtime.ko.md, packages/generator/ts/src/actions.ts, packages/generator/rust/src/actions.rs, packages/generator/rust/tests/form_state.rs, tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts [o]
C16.79 The Go native program rejects a member of the wrong type as the Rust program does (P8) tests/native-generators/programs/go (main.go, main_test.go) cd tests/native-generators/programs/go && ../../../../var/tools/bin/mise exec -- golangci-lint run --config=../../../../.golangci.yml ./..., cd tests/native-generators/programs/go && ../../../../var/tools/bin/mise exec -- go build -o /dev/null ./..., node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd tests/native-generators/programs/go -- -run Test ./... [o]
C16.80 crudui takes the copies of kit at f7c1f10c (K354 K394 K386 K348-1 K360-2 K349-2 K390-1 K392-1 K393) scripts/kit/kit-bootstrap.mk, .gitattributes and the other copies that make kit-sync and make hooks write make kit-check [o]
C16.70 The PHP conformance test of the text validity cases reads its fixtures and checks the internal text helpers without loading a source of the library, so the extension run tests the extension packages/validator/php/tests/Validate/TextValidityConformanceTest.php, packages/validator/php/tests/Validate/TextInternalsTest.php, packages/validator/php/tests/Validate/UniqueValuesTest.php, CHANGELOG.md, CHANGELOG.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/validator/php -- tests/Validate/TextValidityConformanceTest.php tests/Validate/TextInternalsTest.php tests/Validate/UniqueValuesTest.php tests/Validate/ValidateConformanceTest.php tests/Validate/ListValidateConformanceTest.php tests/Validate/DetailValidateConformanceTest.php tests/Validate/ForbiddenScanConformanceTest.php tests/Validate/PublicApiTest.php; PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='ValidateConformanceTest|ListValidateConformanceTest|DetailValidateConformanceTest|ForbiddenScanConformanceTest|MessagePlaceholderTest|UniqueValuesTest|TextValidityConformanceTest' [o]
C16.82 The Go generator runs the shared form-render suite packages/generator/go/form_render_suite_test.go, packages/generator/go/instance.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormRenderSuite [o]
C16.91 the crudui-test-native test derives the kit directory of the Makefile KIT instead of naming node_modules tests/build/make-tool-path.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/make-tool-path.test.mts [o]
C16.84 The Rust generator runs the shared form-complete suite packages/generator/rust/tests/form_complete.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml form_complete [o]
C16.88 The Rust generator runs the shared form-render, list-render and detail-render suites packages/generator/rust/tests/form_render.rs packages/generator/rust/tests/list_render.rs packages/generator/rust/tests/detail_render.rs packages/generator/rust/tests/support/mod.rs packages/generator/rust/src/instance.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml form_render, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml list_render, node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml detail_render [o]
C16.86 The Go generator runs the shared form-complete, list-render and detail-render suites packages/generator/go/form_complete_suite_test.go, packages/generator/go/list_render_suite_test.go, packages/generator/go/detail_render_suite_test.go, packages/generator/go/form_render_suite_test.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormCompleteSuite|TestListRenderSuite|TestDetailRenderSuite' [o]
C16.85 The PHP generator and the PHP extension run the shared form-complete suite packages/generator/php/tests/FormCompleteConformanceTest.php PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/FormCompleteConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES=FormCompleteConformanceTest [o]
C16.87 The PHP generator and the PHP extension run the shared list-render and detail-render suites packages/generator/php/tests/ListRenderConformanceTest.php, packages/generator/php/tests/DetailRenderConformanceTest.php PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/ListRenderConformanceTest.php tests/DetailRenderConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='ListRenderConformanceTest|DetailRenderConformanceTest' [o]
C16.83 the TypeScript implementation consists of the generator core, the validator and the HTML renderer packages/html (CURP-028); its html tests are bound or declared internal docs/spec/runtime-packages.md, docs/spec/runtime-packages.ko.md, config/parity.json node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/conformance.test.ts src/form-complete.conformance.test.ts src/outline.conformance.test.ts src/list-conformance.test.ts src/detail-conformance.test.ts [o]
C16.89 The PHP extension reads a non-finite page or total option as the library does packages/php-ext/src/crudui.c PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/DisplayRulesTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES=DisplayRulesTest [o]
C16.90 The PHP extension reads a signed radix number text as the library does packages/generator/php/tests/DisplayRulesTest.php, packages/php-ext/src/list.c PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/DisplayRulesTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES=DisplayRulesTest [o]
C16.95 the ci-local test expects the engine and comparison paths of the PHP engine command tests/build/ci-local.test.mts node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/ci-local.test.mts [o]
C16.97 The PHP extension runs the rendering conformance suites through the public API packages/generator/php/tests/RenderingConformanceTest.php, packages/generator/php/tests/LayoutTree.php, packages/generator/php/tests/ListRenderConformanceTest.php, packages/generator/php/tests/DetailRenderConformanceTest.php PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/RenderingConformanceTest.php tests/OutlineTest.php tests/FormCompleteConformanceTest.php tests/ListRenderConformanceTest.php tests/DetailRenderConformanceTest.php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES='RenderingConformanceTest|OutlineTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest' [o]
C16.98 the Rust test files that test no shared suite are declared internal with a reason, and the common test helper a support file config/parity.json test "$(make parity-declarations-check > var/parity-gate.log 2>&1; grep -c "R5 undeclared-test rust" var/parity-gate.log)" -le 4 [o]
C16.99 the Rust JsonText unit tests are internal: the repeated-member rule binds only the TypeScript specification parser and the Rust JsonText parser config/parity.json test "$(make parity-declarations-check > var/parity-gate.log 2>&1; grep -c "R5 undeclared-test rust" var/parity-gate.log)" -eq 3, node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/validator/ts -- src/text/json.test.ts [o]
C16.107 The PHP files of the repository pass the phpcs line-length rule the PHP files that phpcs reports PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-php [o]
C16.107-1 The TypeScript files of the repository pass oxlint the TypeScript files that oxlint reports PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-ts [o]
C16.94 docs-check runs the doc-coverage gate of the repository through the DOCS_CHECKS hook of kit K419, not as a prerequisite Makefile node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/test-commands.test.mts [o]
C16.100 the interface messages that every implementation embeds equal contracts/interface-messages.json: a feature unit with six bindings citing CUMK-065 config/parity.json docs/spec/form-markup.md docs/spec/form-markup.ko.md packages/generator/php/tests/InterfaceMessagesConformanceTest.php packages/generator/python/tests/test_interface_messages.py PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/InterfaceMessagesConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests.test_interface_messages [o]
C16.100-2 the extension embeds the form and the list messages, and a node contract test of its php-extension binding compiles interface_messages.c and compares both with contracts/interface-messages.json (CUMK-065) packages/php-ext/tests/contract/interface-messages.test.mjs, packages/php-ext/tools/generate-interface-messages.mjs, config/parity.json PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- tests/InterfaceMessagesConformanceTest.php, node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/contract/interface-messages.test.mjs [o]
C16.112 The copies of kit follow kit 0.0.54 (9b8b4444) .oxlintrc.json, phpcs.xml.dist, PRINCIPLES.md, scripts/kit/bootstrap/install-mise.mts, config/commit-identity.json, .githooks/prepare-commit-msg, Makefile PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make kit-check, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make suppression-check, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-php, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-ts [o]
C16.115 The layout check accepts the Go test of the native program and the Composer vendor folders config/layout.yml, config/php-lint/.gitignore, packages/generator/php/.gitignore, packages/php-ext/.gitignore, packages/validator/php/.gitignore, tests/release-install/composer/.gitignore PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make layout-check [o]
C16.102 the Go test files that test no shared suite are declared internal with a reason config/parity.json test "$(make parity-declarations-check > var/parity-gate.log 2>&1; grep -E -c 'R5 undeclared-test go (packages/generator/go/buttons_test\.go|packages/generator/go/date_test\.go|packages/generator/go/detail_test\.go|packages/generator/go/display_design_test\.go|packages/generator/go/display_rules_test\.go|packages/generator/go/form_test\.go|packages/generator/go/member_order_test\.go|packages/generator/go/number_test\.go|packages/generator/go/render_test\.go|packages/generator/go/style_test\.go|packages/validator/go/validator/validate/order_test\.go|packages/validator/go/validator/validate/params_test\.go|packages/validator/go/validator/validate/pattern_test\.go|packages/validator/go/validator/validate/unique_test\.go|packages/validator/go/validator/validate/value_number_test\.go|packages/validator/go/validator/validate/value_test\.go|packages/generator/go/examples/server/main_test\.go|packages/generator/go/doc_coverage_test\.go|packages/generator/go/template_shape_test\.go|packages/validator/go/validator/compose/omap_decode_test\.go|packages/validator/go/validator/doc_coverage_test\.go|packages/validator/go/validator/text/checked_loader_test\.go|packages/validator/go/validator/types_test\.go):' var/parity-gate.log)" -eq 0 [o]
C16.104 the PHP test files that test no shared suite are declared internal with a reason config/parity.json test "$(make parity-declarations-check > var/parity-gate.log 2>&1; grep -E -c 'R5 undeclared-test php (packages/generator/php/tests/ButtonsTest\.php|packages/generator/php/tests/DatesTest\.php|packages/generator/php/tests/DetailTest\.php|packages/generator/php/tests/DisplayRulesTest\.php|packages/generator/php/tests/FormTest\.php|packages/generator/php/tests/NumbersTest\.php|packages/generator/php/tests/RenderingTest\.php|packages/generator/php/tests/DocCoverageTest\.php|packages/validator/php/tests/Validate/MessagePlaceholderTest\.php|packages/validator/php/tests/Validate/UniqueManyValuesTest\.php|packages/validator/php/tests/Validate/UniqueValuesTest\.php|packages/validator/php/tests/Expr/VisibilityTest\.php|packages/validator/php/tests/Patterns/PatternLanguageTest\.php|packages/validator/php/tests/Validate/PublicApiTest\.php|packages/validator/php/tests/Validate/RuleParametersTest\.php|packages/validator/php/tests/Values/NumericTest\.php|packages/validator/php/tests/Values/ValuesTest\.php|packages/validator/php/tests/Expr/ExpressionCacheTest\.php|packages/validator/php/tests/Expr/NumberValueTest\.php|packages/validator/php/tests/FieldSpecTest\.php|packages/validator/php/tests/Support/JsonValueTest\.php|packages/validator/php/tests/Validate/TextInternalsTest\.php|packages/validator/php/tests/Values/NumberTextTest\.php|packages/validator/php/tests/DocCoverageTest\.php):' var/parity-gate.log)" -eq 0 [o]
C16.105 Declare the TypeScript and Python test files that a shared suite covers, and the TypeScript and Python internal test files, internal in config/parity.json with a reason that names the suite (test-internal files of the generator and validator, pattern states) config/parity.json (23 internal entries: ts 22, python 1) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16105-pd.log 2>&1; ! grep -E 'R5 undeclared-test (ts|python) (packages/generator/ts/src/button-control\.test\.ts|packages/generator/ts/src/choice-appearance\.test\.ts|packages/generator/ts/src/choice-groups\.test\.ts|packages/generator/ts/src/css\.test\.ts|packages/generator/ts/src/date\.test\.ts|packages/generator/ts/src/declared-attributes\.test\.ts|packages/generator/ts/src/detail\.test\.ts|packages/generator/ts/src/form-render\.test\.ts|packages/generator/ts/src/inline-layout\.test\.ts|packages/generator/ts/src/list\.test\.ts|packages/generator/ts/src/node\.test\.ts|packages/generator/ts/src/range-control\.test\.ts|packages/generator/ts/src/switch-control\.test\.ts|packages/generator/ts/src/widget-controls\.test\.ts|packages/validator/ts/src/pattern/pattern\.unit\.test\.ts|packages/validator/ts/src/range-field\.test\.ts|packages/validator/ts/src/rules/accept\.test\.ts|packages/validator/ts/src/rules/unique\.reads\.test\.ts|packages/validator/ts/src/ternary-validation\.test\.ts|packages/validator/ts/src/types\.roundtrip\.test\.ts|packages/validator/ts/src/validate/parameters\.unit\.test\.ts|packages/validator/ts/src/validate/unknown-input\.test\.ts|packages/validator/python/tests/test_pattern_states\.py):' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16105-pd.log [o]
C16.106 Bind the TypeScript list-validity and detail-validity units to their engine tests, and declare the TypeScript meta-schema tests and the TypeScript specification parser unit tests internal in config/parity.json config/parity.json (two rebindings, four internal entries in ts); CHANGELOG.md and CHANGELOG.ko.md make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16106-pd.log 2>&1; ! grep -E 'R5 undeclared-test ts (packages/validator/ts/src/list-metaschema\.conformance\.test\.ts|packages/validator/ts/src/detail-metaschema\.conformance\.test\.ts|packages/validator/ts/src/form-metaschema\.conformance\.test\.ts|packages/validator/ts/src/text/json\.test\.ts|packages/validator/ts/src/validate-list/validate-list\.conformance\.test\.ts|packages/validator/ts/src/validate-detail/validate-detail\.conformance\.test\.ts):' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16106-pd.log [o]
C16.113 A feature unit checks the Unicode data contract contracts/unicode-properties.json (CUVR-018) in each implementation: the Go, Rust, TypeScript, Python and PHP library tests, and the PHP extension config/parity.json (feature unit unicode-data), the Unicode tests of five implementations sh -c 'make -s parity-declarations-check > var/pd-C16.113.log 2>&1; ! grep -E "R5 undeclared-test" var/pd-C16.113.log', node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/contract/unicode-data.test.mjs [o]
C16.116 the extension API test finds the built module where make build-php-ext writes it (var/php-ext), and the API report passes arrays where renderDetail and renderList type their options, expects an empty detail specification to be no object, and expects an empty data option of a list to fail packages/php-ext/tests/ApiTest.php, packages/php-ext/tests/ApiReport.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/php-ext -- --filter ApiTest [o]
C16.117 A fresh make install-packages only installs, and the svelte tools link after their install Makefile, .github/workflows/ci.yml, .github/workflows/dependency-review.yml, .github/workflows/pages.yml, .github/workflows/push-gate.yml, .github/workflows/release.yml, tests/build/ci-local.test.mts make link-state-check, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/ci-local.test.mts [o]
C16.108 The Go generator tests run every case of the five generator fixtures of tests/fixtures/text-validity through the public API, reading the cases with the order-preserving reader that keeps unpaired surrogates packages/generator/go/input_text_test.go cd packages/generator/go && go test -count=1 -run TestInputTextCases . [o]
C16.108-1 The Go input text runner handles every type assertion of its fixture reads: an unexpected type fails the case by name, and no error or ok value is dropped packages/generator/go/input_text_test.go cd packages/generator/go && go test -count=1 -run TestInputTextCases . [o]
C16.109 The PHP generator test runs every case of the five generator fixtures of tests/fixtures/text-validity through the public API, reading the cases with the reader that keeps unpaired surrogates, and passes under the PHP extension packages/generator/php/tests/InputTextTest.php make test-php-ext CASES=InputTextTest [o]
C16.110 The Rust generator tests run every case of the five generator fixtures of tests/fixtures/text-validity through the public API, one trial per case, each operation checking its JSON text first with the generator text checks and the validator JsonText packages/generator/rust/tests/input_text.rs, packages/generator/rust/Cargo.toml cd packages/generator/rust && cargo test --locked --test input_text [o]
C16.111 The text-validity generator cases name the requirement ids that they test, and five suite units bind each case file to six implementations: the TypeScript and Python tests, the Go, PHP, PHP extension and Rust runners tests/fixtures/text-validity (five generator case files), config/parity.json (five suite units) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16111-pd.log 2>&1; ! grep -E 'R4 undeclared-suite tests/fixtures/text-validity/(compileForm|bindForm|createForm|buildList|buildDetail)/cases\.json|R5 undeclared-test (ts|python|go|rust|php) packages/generator/(ts/src/input-text\.test\.ts|python/tests/test_text_validity\.py|go/input_text_test\.go|rust/tests/input_text\.rs|php/tests/InputTextTest\.php)|R13 untraced-requirement: docs/spec/input-text\.md defines CUIT-0(1[0-9]|20),' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16111-pd.log [o]
C16.118 the form button cases are written by the TypeScript reference: bindButtons for declared, default, localized and invalid buttons, and formButtonsHtml for the markup and its refusals tests/fixtures/buttons/generate.mts, tests/fixtures/buttons/cases.json, tests/fixtures/buttons/README.md, tests/fixtures/buttons/README.ko.md, config/rebuild.json, config/knip-entries.json sh -c 'node tests/fixtures/buttons/generate.mts && git diff --exit-code -- tests/fixtures/buttons/cases.json' [o]
C16.119 the TypeScript generator runs every form button case: bindButtons and formButtonsHtml observe what the cases record, the attribute order included packages/generator/ts/src/buttons.conformance.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/buttons.conformance.test.ts [o]
C16.120 the Go generator runs every form button case: BindButtons and FormButtonsHTML observe what the cases record, and FormButtonsHTML takes a value that is no list as the refusal the cases record packages/generator/go/buttons_conformance_test.go, packages/generator/go/buttons.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestButtonsSuite ./... [o]
C16.121 the Python generator runs every form button case: bindButtons and formButtonsHtml observe what the cases record, and bindButtons refuses a button of an unknown type as the reference does packages/generator/python/tests/test_buttons.py, packages/generator/python/src/polyspec/crudui/generator/buttons.py node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests/test_buttons.py [o]
C16.122 the Rust generator runs every form button case: bind_buttons and form_buttons_html observe what the cases record, bind_buttons refuses a button of an unknown type, and form_buttons_html takes a value that is no list as the refusal the cases record packages/generator/rust/tests/buttons.rs, packages/generator/rust/src/binding.rs, packages/generator/rust/src/tests.rs, tests/native-generators/programs/rust/src/main.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test buttons [o]
C16.123 the PHP library and the PHP extension run the form button cases: bindButtons refuses a button of an unknown type, formButtonsHtml refuses a value that is no list with the spec message, and both observe what the cases record packages/generator/php/tests/ButtonsConformanceTest.php, packages/generator/php/src/Generator.php, packages/generator/php/src/Internal/Buttons.php, packages/php-ext/src/crudui.c, packages/php-ext/src/binding.c, packages/php-ext/src/polyspec_crudui.stub.php, packages/php-ext/src/polyspec_crudui_arginfo.h node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter ButtonsConformanceTest, make test-php-ext CASES='ButtonsConformanceTest' [o]
C16.124 the form button cases are a suite of the parity manifest: the buttons unit cites CURP-008 and CURP-009 with its six runners, and the feature contracts of bindButtons and formButtonsHtml name the cases and the runners config/parity.json, contracts/features.json, docs/operations/feature-contracts.md, docs/operations/feature-contracts.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.124.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-(008|009)," var/pd-C16.124.log' [o]
C16.114 The TypeScript validator's unit tests of choice groups and of hidden paths are internal to TypeScript, since the validate suite covers each of their assertions through its fixture config/parity.json (two ts internal entries) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16114-pd.log 2>&1; ! grep -E 'R5 undeclared-test ts packages/validator/ts/src/(choice-groups|hidden-paths)\.test\.ts:' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16114-pd.log [o]
C16.134 make install-packages runs the svelte tools after its npm ci through INSTALL_PACKAGES_EXTRA and links nothing Makefile, scripts/kit/kit-bootstrap.mk, scripts/kit/bootstrap/install-npm.mts, .github/workflows/ci.yml, .github/workflows/dependency-review.yml, .github/workflows/pages.yml, .github/workflows/push-gate.yml, tests/build/ci-local.test.mts make link-state-check, PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/ci-local.test.mts [o]
C16.135 make install-link links the Python packages in the environment of the repository, so make install links without a hand-set environment Makefile make install-link, make link-state-check [o]
C16.127 The form template shape is requirement CURT-092 of form-runtime.md, and a fixture of template documents generated from the TypeScript reference refuses each shape violation through bindForm, bindButtons and createForm docs/spec/form-runtime.md, docs/spec/form-runtime.ko.md, tests/fixtures/template-shape (cases.json, generate.mts, README) node tests/fixtures/template-shape/generate.mts [o]
C16.128 The TypeScript generator runs every case of the template-shape fixture through bindForm, bindButtons and createForm, instead of its inline shape table packages/generator/ts/src/template-shape.test.ts cd packages/generator/ts && npx vitest run src/template-shape.test.ts -t "createForm-missing-fields" --reporter=json --outputFile=/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16128.json && node -e "if (JSON.parse(require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16128.json','utf8')).numPassedTests !== 1) process.exit(1)" [o]
C16.129 The Go generator runs every case of the template shape fixture through its template decoder and its bindForm, bindButtons and createForm operations, instead of its inline table packages/generator/go/template_shape_test.go cd packages/generator/go && go test -count=1 -run TestTemplateShapeCases -v . > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16129-go.log 2>&1 && node -e "const n = require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16129-go.log', 'utf8').split('\\n').filter(line => line.includes('--- PASS: TestTemplateShapeCases/')).length; if (n !== 42) process.exit(1)" [o]
C16.130 The Rust generator runs every case of the template shape fixture, decoding each template with its decoder before its bindForm, bindButtons or createForm operation, instead of its inline table packages/generator/rust/tests/template_shape.rs, packages/generator/rust/src/tests.rs, packages/generator/rust/Cargo.toml cd packages/generator/rust && cargo test --locked --test template_shape > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16130-rust.log 2>&1 && node -e "if (!require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16130-rust.log', 'utf8').includes('test result: ok. 42 passed')) process.exit(1)" [o]
C16.131 The PHP generator and its extension run every case of the template shape fixture through bindForm, bindButtons and createForm, one PHPUnit case per fixture case packages/generator/php/tests/TemplateShapeTest.php make test-php-ext CASES=TemplateShapeTest > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16131-ext-v.log 2>&1 && node -e "if (!require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16131-ext-v.log', 'utf8').includes('42 passed, 0 failed')) process.exit(1)" [o]
C16.132 The Python generator runs every case of the template shape fixture through bindForm, bindButtons and createForm, one subtest per case, and asserts the 42 cases packages/generator/python/tests/test_template_shape.py cd packages/generator/python && PYTHONPATH=src ../../../var/python/bin/python -m unittest tests.test_template_shape [o]
C16.133 The form template shape CURT-092 is a suite unit over tests/fixtures/template-shape, bound in the TypeScript, Go, Rust, PHP, PHP extension and Python generators; the TypeScript decodeFormTemplate test is internal to TypeScript config/parity.json (suite unit template-shape, decode-template.test.ts internal of ts, go internal entry removed) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16133-pd.log 2>&1; grep -q 'check the units against the tree' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16133-pd.log && ! grep -E 'R13 untraced-requirement: docs/spec/form-runtime.md defines CURT-092|R5 undeclared-test ts packages/generator/ts/src/decode-template\\.test\\.ts:|R16 internal-contract go packages/generator/go/template_shape_test\\.go' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16133-pd.log [o]
C16.126 The benchmark driver of the Go validator is a harness outside the implementations, declared in the tools roots of the parity check config/parity.json (tools root benchmarks) sh -c 'make -s parity-declarations-check > var/c16126-pd.log 2>&1; ! grep -E "R6 misplaced-test benchmarks/validators/go/main_test\.go:" var/c16126-pd.log' [o]
C16.126-1 The PHP extension's API test is internal to php-extension: its API and value-limit tests check what only PHP has, and its fixture comparison is covered by the validate and text-validity units config/parity.json (php-extension internal entry) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16126-1-pd.log 2>&1; ! grep -E 'R5 undeclared-test php-extension packages/php-ext/tests/ApiTest\.php:' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16126-1-pd.log [o]
C16.136 The generated Go tables of the interface messages and the Unicode data are declared as generated-file exceptions, since a Go module ships them config/generated.json make layout-check [o]
C16.139 The copies of kit name no check that only kit has (K359-2): PRINCIPLES names no tests/kit file PRINCIPLES.md, PRINCIPLES.ko.md make rules-check, make kit-check, make layout-check, make link-state-check [o]
C16.137 The compiled cases of the template-shape fixture, which the reference compiled and serialized, test CURP-024 (a template compiled by one runtime is bound by another) and CURP-019 (a compiled template serializes), and the unit cites both tests/fixtures/template-shape (compiled cases), config/parity.json (unit template-shape cites CURP-019 and CURP-024), six runner files make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16137-pd.log 2>&1; grep -q 'check the units against the tree' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16137-pd.log && ! grep -E 'defines CURP-019|defines CURP-024' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16137-pd.log [o]
C16.138 The PHP and Go generators assert the error type of each text-validity generation failure: a load failure is a ComposeLoadError and an input failure is a FormError (PHP, CUIT-034) or a non-load error (Go, CUIT-035) packages/generator/php/tests/InputTextTest.php, packages/generator/go/input_text_test.go cd packages/generator/php && php ../../../vendor/bin/phpunit --filter testGenerationFailuresHaveTheRuleTypes > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16138-php.log 2>&1 && node -e "if (!require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16138-php.log', 'utf8').includes('OK (1 test')) process.exit(1)" && cd ../go && go test -count=1 -run TestInputTextFailureTypes -v . > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16138-go.log 2>&1 && node -e "if (!require('fs').readFileSync('/private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16138-go.log', 'utf8').includes('--- PASS: TestInputTextFailureTypes')) process.exit(1)" [o]
C16.142 The stylesheet custom properties, the outline and data blocks and the scroll synchronization of the form markup are documented in the package that has them, not in the contract of every implementation docs/spec/form-markup.md, docs/spec/form-markup.ko.md, packages/generator/ts/README.md, packages/generator/ts/README.ko.md, packages/html/README.md, packages/html/README.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.142.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines (CUMK-039|CUMK-040|CUMK-041|CUMK-042|CUMK-043|CUMK-044|CUMK-045|CUMK-046|CUMK-047|CUMK-048|CUMK-049|CUMK-050|CUMK-051|CUMK-052|CUMK-053|CUMK-054|CUMK-055|CUMK-056|CUMK-008|CUMK-009)," var/pd-C16.142.log' [o]
C16.141 the browser runtime text of the untraced CURT requirements leaves the spec for the documentation of the packages that have the runtime (form binding, HTML, React, Vue, Svelte), and the requirements that are a contract of every implementation are reported docs/spec/form-runtime.md, docs/spec/form-runtime.ko.md, packages/form-binding/README.md, packages/form-binding/README.ko.md, packages/html/README.md, packages/html/README.ko.md, packages/react/README.md, packages/react/README.ko.md, packages/vue/README.md, packages/vue/README.ko.md, packages/svelte/README.md, packages/svelte/README.ko.md, config/parity.json, docs/features.md, docs/features.ko.md, docs/operations/validation.md, docs/operations/validation.ko.md, docs/spec/validation-rules.md, docs/spec/validation-rules.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.141.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURT-(026|027|028|029|030|031|032|033|034|035|036|037|038|039|040|041|042|043|044|045|046|047|048|049|051|057|058|059|060)," var/pd-C16.141.log' [o]
C16.140 CUIT-032 to CUIT-036 name each language's error types: rewritten once as the neutral CUIT-041 (a load failure and an input failure are distinct error types of the implementation), with each language's types as a description, and every text-validity runner asserts its native types docs/spec/input-text.md, docs/spec/input-text.ko.md, tests/fixtures/text-validity (validate, validateList, validateDetail, value-graphs), config/parity.json, validator and generator runners (TS, PHP, Go, Rust, Python) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16140-pd.log 2>&1; grep -q 'check the units against the tree' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16140-pd.log && ! grep -E 'defines CUIT-03[2-6]' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16140-pd.log [o]
C16.140-1 CUIT-041 keeps the meaning of CUIT-032 to CUIT-036: each implementation reports a load failure and an input failure with the error types that its table entry lists, the table being the content of the requirement; the Rust generator reports FormError for both docs/spec/input-text.md, docs/spec/input-text.ko.md, packages/generator/rust/tests/input_text.rs (comment naming CUIT-041) ! grep -q "distinct error types" docs/spec/input-text.md [o]
C16.140-2 CUIT-041's table gets a Python entry naming the classes that the Python packages raise: validation ComposeLoadError and FormInputError, generation ComposeLoadError for a load failure and FormError for an input failure docs/spec/input-text.md, docs/spec/input-text.ko.md grep -q "Python: in validation" docs/spec/input-text.md [o]
C16.143 Make the two requirements that state no check (CUSC-037 and CUSC-040) plain prose in the schema spec, without ids docs/spec/schema.md, docs/spec/schema.ko.md, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.143.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines (CUSC-037|CUSC-040)," var/pd-C16.143.log' [o]
C16.145 Cite the class naming, view-state and history requirements (CUMK-001 to 003, 057, 061) by the form-render, form-view and form-history cases that test them packages/react/scripts/generate-form-render-cases.mts, tests/fixtures/form-render/cases.json, tests/fixtures/form-view/cases.json, tests/fixtures/form-history/cases.json, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.145.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines (CUMK-001|CUMK-002|CUMK-003|CUMK-057|CUMK-061)," var/pd-C16.145.log' [o]
C16.144 Give the untraced CUSC requirements shared cases: cite CUSC-005, 022, 043 and 044 by cases that test them, and add cases for CUSC-016, 038, 039 and 046 in form-render and validate packages/react/scripts/generate-form-render-cases.mts, packages/react/scripts/scenario-form-render-cases.ts, tests/fixtures/form-render/cases.json, tests/fixtures/validate/cases.json, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.144.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines (CUSC-005|CUSC-016|CUSC-022|CUSC-038|CUSC-039|CUSC-043|CUSC-044|CUSC-046)," var/pd-C16.144.log' [o]
C16.146 the untraced CURT requirements that every implementation keeps are cited by form state sessions (CURT-053 edits, reorders, removes and adds rows, CURT-054 rekeys rows and members under rule paths, CURT-055 rejects invalid operations atomically and adds afterwards); the copy rule of the form comparison example moves to its README (CURT-052); the verification prose has no id (CURT-056) tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, config/parity.json, docs/spec/form-runtime.md, docs/spec/form-runtime.ko.md, examples/form-comparison/README.md, examples/form-comparison/README.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.146.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURT-(053|055)," var/pd-C16.146.log' [o]
C16.146-1 CURT-055 is cited by a session that rejects an invalid removal and then deletes every row of a collection with no minimum and adds one; CURT-054 is withdrawn from the citation, since the form state format observes no rule path tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, config/parity.json sh -c 'grep -q delete-every-row-then-add-one-with-min-zero tests/fixtures/form-actions/cases.json' [o]
C16.147 CURT-050 (prepare the nested fields, serialize the template, bind independent records without reloading composition files) is cited by cases that bind two or more records from one serialized template, each result depending only on its own record tests/fixtures/template-shape (generate.mts, cases.json: two record cases), the six runners, config/parity.json (CURT-050 in the template-shape unit) make -s parity-declarations-check > /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16147-pd.log 2>&1; grep -q 'check the units against the tree' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16147-pd.log && ! grep -q 'defines CURT-050' /private/tmp/claude-501/-Users-maxkwon-ai-test-test/a1dd914b-7b06-4490-b00e-b3a7acb21990/scratchpad/c16147-pd.log [o]
C16.148 CURT-054 is cited whole: the form state sessions observe the validation errors with their data paths, and a rekey session shows that the errors follow the new keys in the six runners tests/fixtures/form-state/harness.mts, tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.148.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURT-054," var/pd-C16.148.log' [o]
C16.148-1 the form state harness has a validate step that observes the validator's errors with their data paths, and a session rekeys a team and a member and observes the errors at the new paths (reference and cases) tests/fixtures/form-state/harness.mts, tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json sh -c 'grep -q rekey-moves-validation-errors-to-the-new-paths tests/fixtures/form-actions/cases.json' [o]
C16.148-2 the Go form state runner implements the validate step: it runs the validator on the session specification and the current data, and observes the validity and each error's path, field, rule and message packages/generator/go/form_state_test.go node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run 'TestFormView|TestFormHistory|TestFormActions' ./... [o]
C16.148-3 the Python form state runner implements the validate step: it runs the validator on the session specification and the current record, and observes the validity and each error's path, field, rule and message packages/generator/python/tests/test_form_state.py node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests/test_form_state.py [o]
C16.148-4 the Rust form state runner implements the validate step: it runs the validator on the session specification and the current record, and observes the validity and each error's path, field, rule and message packages/generator/rust/tests/form_state.rs node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state [o]
C16.148-5 the PHP form state test, which the PHP library and the PHP extension both run, implements the validate step: it runs the validator on the session specification and the current record, and observes the validity and each error's path, field, rule and message packages/generator/php/tests/FormStateTest.php node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter FormStateTest, make test-php-ext CASES='FormStateTest' [o]
C16.148-6 the form-actions unit cites CURT-054 whole, through the rekey session that observes the validation errors at the new paths config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.148-6.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURT-054," var/pd-C16.148-6.log' [o]
C16.149 make install of a fresh worktree runs to its end: the kit link runs after the Python and Composer installs and before phpDocumentor, the first step that runs PHP Makefile sh -c 'make -n crudui-install > var/c149.log 2>&1; awk "/composer install/&&!c{c=NR} /link.mjs link/&&c&&!l{l=NR} /install-phpdocumentor.mts/{p=NR} END{exit !(c&&l&&p&&c<l&&l<p)}" var/c149.log' [o]
C16.155 The generator tests that no binding runs are bound to the unit of the contract they test or are internal tests of their implementation with the reason config/parity.json, packages/generator/ts/src/display-validity.test.ts, packages/generator/ts/src/dom-sync.test.ts, packages/generator/ts/src/expr.test.ts, packages/generator/ts/src/form.test.ts, packages/generator/ts/src/patch.test.ts, packages/generator/php/tests/Internal/InterfaceMessagesTest.php, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.155.log 2>&1; ! grep -E "R5 undeclared-test (ts packages/generator/ts/src/(display-validity|dom-sync|expr|form|patch)\.test\.ts|php packages/generator/php/tests/Internal/InterfaceMessagesTest\.php):" var/pd-C16.155.log' [o]
C16.154 The form-view and form-history cases equal their generator: the form-state generator cites CUMK-057 as the sessions requirements, in the order main has, so a regeneration reproduces main files tests/fixtures/form-state/generate.mts, tests/fixtures/form-view/cases.json, tests/fixtures/form-history/cases.json sh -c 'node tests/fixtures/form-state/generate.mts && git diff --exit-code -- tests/fixtures/form-view/cases.json tests/fixtures/form-history/cases.json tests/fixtures/form-actions/cases.json' [o]
C16.152 CURP-025 (the ordered JSON transport: member order, arrays, absent, null, empty object and empty array kept apart, no identity or order field added) is cited whole by a form-actions case that the six runners pass tests/fixtures/form-state/generate.mts, tests/fixtures/form-actions/cases.json, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.152.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-025," var/pd-C16.152.log && node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/form-state.test.ts && node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run "TestFormActions" && node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests/test_form_state.py && node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_state && PATH=/opt/homebrew/opt/php@8.4/bin:$PATH var/tools/bin/node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter FormStateTest && PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES="FormStateTest"' [o]
C16.153 CUDF-003 (a renderer writes markup from display only) is cited whole by the list-render case format-number, whose markup shows the display text, not the raw record value, and the six runners pass it tests/fixtures/list-render/generate.mts, tests/fixtures/list-render/cases.json, config/parity.json sh -c 'make -s parity-declarations-check > var/pd-C16.153.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CUDF-003," var/pd-C16.153.log && node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/list-conformance.test.ts && node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run "TestListRenderSuite" && node node_modules/@polyspec/kit/dist/run-tests.mjs python --venv var/python --cwd packages/generator/python -- tests/test_render.py && node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test list_render && PATH=/opt/homebrew/opt/php@8.4/bin:$PATH node node_modules/@polyspec/kit/dist/run-tests.mjs phpunit --cwd packages/generator/php -- --filter ListRenderConformanceTest && PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make test-php-ext CASES="ListRenderConformanceTest"' [o]
C16.150 The five per-implementation runtime capability items of docs/spec/runtime-packages.md become one neutral item CURP-001 that all six implementations fulfil; the suite units of compilation, binding, rendering and validation cite it docs/spec/runtime-packages.md, docs/spec/runtime-packages.ko.md, config/parity.json, tests/fixtures/text-validity/compileForm/cases.json, tests/fixtures/text-validity/bindForm/cases.json, tests/fixtures/validate/generate.mts, tests/fixtures/validate/cases.json, tests/fixtures/form-render/cases.json, tests/fixtures/list-render/generate.mts, tests/fixtures/list-render/cases.json, tests/fixtures/detail-render/generate.mts, tests/fixtures/detail-render/cases.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.150.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-00[1-5]," var/pd-C16.150.log', node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.150-1 The composition and expression part of CURP-001 is cited by the units compose and expr, each through one case that names it packages/validator/ts/scripts/generate-compose-cases.mts, packages/validator/ts/scripts/generate-expr-cases.mts, tests/fixtures/compose/cases.json, tests/fixtures/expr/cases.json, config/parity.json sh -c 'var/tools/bin/node packages/validator/ts/scripts/generate-compose-cases.mts > tests/fixtures/compose/cases.json && var/tools/bin/node packages/validator/ts/scripts/generate-expr-cases.mts > tests/fixtures/expr/cases.json && git diff --exit-code -- tests/fixtures/compose/cases.json tests/fixtures/expr/cases.json && var/tools/bin/node -e "const p = require(\"./config/parity.json\"); for (const id of [\"compose\", \"expr\"]) { const u = p.units.find(x => x.id === id); const c = require(\"./\" + u.file); if (!u.requirements.includes(\"CURP-001\") || !c.some(x => (x.requirements ?? []).includes(\"CURP-001\"))) process.exit(1); }"' [o]
C16.151 The browser binding item CURP-023 moves from docs/spec/runtime-packages.md to the README of the TypeScript form binding package, and its tests become internal docs/spec/runtime-packages.md, docs/spec/runtime-packages.ko.md, packages/form-binding/README.md, packages/form-binding/README.ko.md, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.151.log 2>&1; ! grep -E "R13 untraced-requirement: .* defines CURP-023," var/pd-C16.151.log', node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.160 make crudui-test-php-engine runs the contract tests of the PHP extension in packages/php-ext/tests/contract, which C16.57-3-1 and C16.57-3-2 added outside every project command Makefile var/tools/bin/node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="every node:test file runs in a project command" tests/build/test-commands.test.mts [o]
C16.161 The CI toolchain rule of tests/build/runtime-version-policy.test.mts admits the phpize and php-config of setup-php, which the phpize build of the extension (C16.9) needs; setup-php still installs no Composer tests/build/runtime-version-policy.test.mts var/tools/bin/node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern="every CI job sets up the recorded toolchains" tests/build/runtime-version-policy.test.mts [o]
C16.162 The install check of tests/build/runtime-version-policy.test.mts accepts the kit of a linked checkout: make install runs the install-tools of KIT, which is ../kit/dist when kit is linked to its sibling checkout tests/build/runtime-version-policy.test.mts var/tools/bin/node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/runtime-version-policy.test.mts [o]
C16.159 Each PHP binding of the eight text-validity units (the library and the extension) runs its cases under a method of its own unit, keyed by the bare case names, so make parity-check reports every case as executed packages/validator/php/tests/Validate/TextValidityConformanceTest.php, packages/generator/php/tests/InputTextTest.php, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.159.log 2>&1; ! grep -E "R3 not-executed [^ ]+ php(-extension)? " var/pc-C16.159.log' [o]
C16.157 Every python binding reports each case of its units by name to make parity-check (R3): each test method is one case, and a binding runs only the test class of its units, with the venv interpreter var/python/bin/python config/parity.json, packages/generator/python/tests/conformance.py, packages/generator/python/tests/test_buttons.py, packages/generator/python/tests/test_form_render.py, packages/generator/python/tests/test_form_state.py, packages/validator/python/tests/conformance.py, packages/validator/python/tests/test_expr.py, packages/validator/python/tests/test_validate.py, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="buttons validate form-render form-view expr form-history form-actions view-functions" > var/pc-C16.157.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157.log' [o]
C16.157-1 The python bindings of the units text-validity-validate, text-validity-validate-list, text-validity-validate-detail and text-validity-value-graphs each have their own test class, whose test methods are that unit's case names; the counts of the fixtures are checked by a class of their own packages/validator/python/tests/test_text_validity.py, packages/validator/python/tests/conformance.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail text-validity-value-graphs" > var/pc-C16.157-1.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-1.log' [o]
C16.157-2 The python bindings of the units list-validity, detail-validity and spec-validity each have their own test class, whose test methods are that unit's case names; each case runs the one assertion path of its engine expectation, and the counts of the fixtures are checked by a class of their own packages/validator/python/tests/test_structure_validity.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="list-validity detail-validity spec-validity" > var/pc-C16.157-2.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-2.log' [o]
C16.157-3 The python binding of the unit compose has its own test class, whose test methods are the case names of its fixture; each case runs the one assertion path of its expectation (a composed map or a recorded code), and the fixture counts are checked by a class of their own packages/validator/python/tests/test_compose.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="compose" > var/pc-C16.157-3.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-3.log' [o]
C16.157-4 The python binding of the unit form-outline has its own test class, whose test methods are the case names of its fixture; each case compiles, binds and builds its outline with the recorded rows, and the fixture count is checked by a class of its own packages/generator/python/tests/test_outline.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="form-outline" > var/pc-C16.157-4.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-4.log' [o]
C16.157-5 The python bindings of the units form-complete, list-render and detail-render each have their own test class, whose test methods are that unit's case names; each case renders its output byte for byte or raises its recorded failure, and the counts of the fixtures are checked by a class of their own packages/generator/python/tests/test_render.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="form-complete list-render detail-render" > var/pc-C16.157-5.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-5.log' [o]
C16.157-6 The python bindings of the units text-compile-form, text-bind-form, text-create-form, text-build-list and text-build-detail each have their own test class, whose test methods are that unit's case names; the counts of the fixtures are checked by a class of their own packages/generator/python/tests/test_text_validity.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.157-6.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-6.log' [o]
C16.157-7 The python binding of the unit template-shape has its own test class, whose test methods are the case names of its fixture; each case runs its operation on the template and reproduces its recorded refusal or pass, and the fixture count is checked by a class of its own packages/generator/python/tests/test_template_shape.py, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="template-shape" > var/pc-C16.157-7.log 2>&1; ! grep -E "R3 not-executed [^ ]+ python " var/pc-C16.157-7.log' [o]
C16.157-8 The python test files that the case-reporting rows changed, test_outline.py of the generator and test_text_validity.py of the validator, are formatted as ruff format writes them, so make lint-python passes packages/generator/python/tests/test_outline.py, packages/validator/python/tests/test_text_validity.py, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md make lint-python [o]
C16.163 config/rebuild.json classes examples/form-comparison/src/adapters/view-entries.ts, which C16.58-27 added, as a policy module of the form comparison example config/rebuild.json make rebuild-check [o]
C16.164 The copies PRINCIPLES.md and PRINCIPLES.ko.md equal those of the linked kit after K431 (make kit-sync), so make kit-check passes PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.158 The ts bindings of the units buttons, validate, form-render, form-view and expr report each case of their unit by its name to make parity-check (R3): each case is a top-level vitest test named by the case packages/generator/ts/src/buttons.conformance.test.ts, packages/validator/ts/src/validate.conformance.test.ts, packages/html/src/conformance.test.ts, packages/generator/ts/src/form-state.test.ts, packages/validator/ts/src/expr.conformance.test.ts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="buttons validate form-render form-view expr" > var/pc-C16.158.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158.log' [o]
C16.158-1 The ts bindings of the units form-view, form-history, form-actions and view-functions each have their own test file, whose top-level tests are that unit's case names; the shared registration is one helper module of tests/fixtures/form-state packages/generator/ts/src/form-state.test.ts, packages/generator/ts/src/form-history.test.ts, packages/generator/ts/src/form-actions.test.ts, packages/generator/ts/src/view-functions.test.ts, tests/fixtures/form-state/units.mts, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="form-view form-history form-actions view-functions" > var/pc-C16.158-1.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-1.log' [o]
C16.158-2 The ts bindings of the units text-validity-validate, text-validity-validate-list, text-validity-validate-detail and text-validity-value-graphs each have their own test file, whose top-level tests are that unit's case names; the shared case code is one module of the validator text folder packages/validator/ts/src/text/text-validity-cases.ts, packages/validator/ts/src/text/text-validity-validate.conformance.test.ts, packages/validator/ts/src/text/text-validity-validate-list.conformance.test.ts, packages/validator/ts/src/text/text-validity-validate-detail.conformance.test.ts, packages/validator/ts/src/text/text-validity-value-graphs.conformance.test.ts, packages/validator/ts/src/text/text-validity.conformance.test.ts, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail text-validity-value-graphs" > var/pc-C16.158-2.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-2.log' [o]
C16.158-3 The ts bindings of the units text-compile-form, text-bind-form, text-create-form, text-build-list and text-build-detail each have their own test file, whose top-level tests are that unit's case names; the shared case code is one module of tests/fixtures/text-validity tests/fixtures/text-validity/input-text.mts, packages/generator/ts/src/text-compile-form.test.ts, packages/generator/ts/src/text-bind-form.test.ts, packages/generator/ts/src/text-create-form.test.ts, packages/generator/ts/src/text-build-list.test.ts, packages/generator/ts/src/text-build-detail.test.ts, packages/generator/ts/src/input-text.test.ts, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.158-3.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-3.log' [o]
C16.158-4 The ts bindings of the units list-validity, detail-validity and spec-validity report each case of their unit by its name: the case groups of the three validator files are top-level tests named by the case packages/validator/ts/src/validate-list/validate-list.conformance.test.ts, packages/validator/ts/src/validate-detail/validate-detail.conformance.test.ts, packages/validator/ts/src/forbidden-scan.conformance.test.ts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="list-validity detail-validity spec-validity" > var/pc-C16.158-4.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-4.log' [o]
C16.158-5 The ts bindings of the units form-outline, form-complete, list-render and detail-render report each case of their unit by its name: the case groups of the four html conformance files are top-level tests named by the case packages/html/src/outline.conformance.test.ts, packages/html/src/form-complete.conformance.test.ts, packages/html/src/list-conformance.test.ts, packages/html/src/detail-conformance.test.ts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="form-outline form-complete list-render detail-render" > var/pc-C16.158-5.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-5.log' [o]
C16.158-6 The ts binding of the unit template-shape reports each case of the unit by its name: the cases of the form template shape are top-level tests named by the case packages/generator/ts/src/template-shape.test.ts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="template-shape" > var/pc-C16.158-6.log 2>&1; ! grep -E "R3 not-executed [^ ]+ ts " var/pc-C16.158-6.log' [o]
C16.158-7 The internal test of the input text helpers of the validator names no requirement (R16), and the shared text-validity helper modules pass the type-aware lint: the helper imports name their .ts files tests/fixtures/text-validity/cases.mts, tests/fixtures/text-validity/input-text.mts, packages/validator/ts/src/text/text-validity.conformance.test.ts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-declarations-check > var/pd-C16.158-7.log 2>&1; ! grep -E "R16 internal-contract ts packages/validator/ts/src/text/text-validity.conformance.test.ts" var/pd-C16.158-7.log' [o]
C16.156 The Rust bindings of the units buttons, validate, form-render, form-view and expr report each case of their unit by name to make parity-check (R3) packages/validator/rust/Cargo.toml, packages/validator/rust/Cargo.lock, packages/validator/rust/tests/validate_conformance.rs, packages/validator/rust/tests/expr_conformance.rs, packages/generator/rust/Cargo.toml, packages/generator/rust/tests/form_state.rs, packages/generator/rust/tests/form_render.rs, packages/generator/rust/tests/buttons.rs, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="buttons validate form-render form-view expr" > var/pc-C16.156.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156.log' [o]
C16.156-1 The Rust bindings of the eighteen units text-validity-validate, text-validity-validate-list, text-validity-validate-detail, text-validity-value-graphs, list-validity, detail-validity, spec-validity, compose, form-complete, list-render, detail-render, form-outline, interface-messages, text-compile-form, text-bind-form, text-create-form, text-build-list and text-build-detail report each fixture case of their unit by name to make parity-check (R3) packages/validator/rust/Cargo.toml, packages/validator/rust/tests/text_validity_conformance.rs, packages/validator/rust/tests/list_validity_conformance.rs, packages/validator/rust/tests/detail_validity_conformance.rs, packages/validator/rust/tests/spec_validity_conformance.rs, packages/validator/rust/tests/compose_conformance.rs, packages/generator/rust/Cargo.toml, packages/generator/rust/tests/form_complete.rs, packages/generator/rust/tests/list_render.rs, packages/generator/rust/tests/detail_render.rs, packages/generator/rust/tests/input_text.rs, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail text-validity-value-graphs list-validity detail-validity spec-validity compose form-complete list-render detail-render form-outline interface-messages text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.156-1.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1.log' [o]
C16.156-1-1 The Rust bindings of the seven units list-validity, detail-validity, spec-validity, compose, form-complete, list-render and detail-render report each fixture case by name to make parity-check (R3) packages/validator/rust/Cargo.toml, packages/validator/rust/tests/list_validity_conformance.rs, packages/validator/rust/tests/detail_validity_conformance.rs, packages/validator/rust/tests/spec_validity_conformance.rs, packages/validator/rust/tests/compose_conformance.rs, packages/generator/rust/Cargo.toml, packages/generator/rust/tests/form_complete.rs, packages/generator/rust/tests/list_render.rs, packages/generator/rust/tests/detail_render.rs, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="list-validity detail-validity spec-validity compose form-complete list-render detail-render" > var/pc-C16.156-1-1.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1-1.log' [o]
C16.156-1-2 The eight Rust text units give each unit its own libtest symbol, so that each binding runs only its unit's trials by name config/parity.json, packages/validator/rust/Cargo.toml, packages/validator/rust/tests/text_validity_conformance.rs, packages/generator/rust/tests/input_text.rs, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.156-1-2.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1-2.log' [o]
C16.156-1-4 The Rust outline fixture test runs from an integration test, one trial per case of the form-outline fixture, so the parity check reads its cases by name config/parity.json, packages/generator/rust/Cargo.toml, packages/generator/rust/src/tests.rs, packages/generator/rust/tests/form_outline.rs, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="form-outline" > var/pc-C16.156-1-4.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1-4.log' [o]
C16.156-1-5 The Rust feature binding of interface-messages names the native test that it runs, so that the parity check finds it config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="interface-messages" > var/pc-C16.156-1-5.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1-5.log' [o]
C16.156-1-3 The Rust binding of the value-graph unit runs all twelve cases of its fixture by name, with the shared containers that the fixture describes (a value placed twice, a value that contains itself) packages/validator/rust/src/text.rs, packages/validator/rust/tests/text_validity_conformance.rs, packages/validator/rust/README.md, packages/validator/rust/README.ko.md, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-value-graphs" > var/pc-C16.156-1-3.log 2>&1; ! grep -E "R3 not-executed [^ ]+ rust " var/pc-C16.156-1-3.log' [o]
C16.165 Every go binding of the units that report a case by name to make parity-check (R3) runs each case as a direct subtest named by the bare case name: the input text units of the generator and the validator, and the expression fixture packages/generator/go/input_text_test.go, packages/validator/go/validator/validate/text_conformance_test.go, packages/validator/go/validator/expr/conformance_test.go, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-compile-form text-bind-form text-create-form text-build-list text-build-detail text-validity-validate text-validity-validate-list text-validity-validate-detail expr" > var/pc-C16.165.log 2>&1; ! grep -E "R3 not-executed [^ ]+ go " var/pc-C16.165.log' [o]
C16.165-1 The go bindings of the units text-compile-form, text-bind-form, text-create-form, text-build-list and text-build-detail each run as a test function of their own, whose direct subtests are the bare case names, so make parity-check reports every case as executed packages/generator/go/input_text_test.go, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-compile-form text-bind-form text-create-form text-build-list text-build-detail" > var/pc-C16.165-1.log 2>&1; ! grep -E "R3 not-executed [^ ]+ go " var/pc-C16.165-1.log' [o]
C16.165-2 The go bindings of the units text-validity-validate, text-validity-validate-list and text-validity-validate-detail each run as a test function of their own, and the expression fixture reports its stages as the case itself, so make parity-check reports every case as executed packages/validator/go/validator/validate/text_conformance_test.go, packages/validator/go/validator/expr/conformance_test.go, config/parity.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md sh -c 'make -s parity-check UNITS="text-validity-validate text-validity-validate-list text-validity-validate-detail expr" > var/pc-C16.165-2.log 2>&1; ! grep -E "R3 not-executed [^ ]+ go " var/pc-C16.165-2.log' [o]
C16.165-3 The go binding of form-outline reports each case as a subtest TestOutlineFixture/<case> packages/generator/go/outline_test.go sh -c 'make -s parity-check UNITS=form-outline > var/pc-C16.165-3.log 2>&1; ! grep -E "R3 not-executed [^ ]+ go " var/pc-C16.165-3.log' [o]
C16.166 The shared validate fixture tests/fixtures/validate/cases.json equals the output of its generator: the generator writes the two CUSC-038 expression cases that the file held by hand tests/fixtures/validate/generate.mts, tests/fixtures/validate/cases.json sh -c 'var/tools/bin/node tests/fixtures/validate/generate.mts > var/validate-cases.json && cmp -s var/validate-cases.json tests/fixtures/validate/cases.json' [o]
C16.167 The list and detail validity fixtures are bound to every generator: each generator refuses with INVALID_FORM_INPUT the declaration cases that the spec requires (CUDF-036 to CUDF-062) and accepts or refuses the other cases as recorded config/parity.json, packages/generator/ts/src/display-validity.test.ts, packages/generator/go/validity_render_test.go, packages/generator/python/tests/test_render_validity.py, packages/generator/rust/tests/list_render_validity.rs, packages/generator/rust/tests/detail_render_validity.rs, packages/generator/php/tests/ListRenderValidityTest.php, packages/generator/php/tests/DetailRenderValidityTest.php sh -c 'make -s parity-check UNITS="list-render-validity detail-render-validity" > var/pc-C16.167.log 2>&1' [o]
C16.168 The verification records preserve the PHP versions that actually ran and distinguish the PHP >=8.4 support range from the selected CI toolchain; historical measurements do not claim verification of the current tree. docs/features.md, docs/features.ko.md, AGENTS.md, AGENTS.ko.md node node_modules/@polyspec/kit/scripts/kit/check-documents.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/docs/repository-writing.test.mts tests/docs/changelog.test.mts [o]
C16.169 The npm advisory 1241202 (GHSA-hp3w-g68c-fv3c, medium: denial of service through unbounded precision specifiers) of sprintf-js 1.0.3 leaves package-lock.json; sprintf-js is transitive, through argparse 1.0.10 of @rushstack/ts-command-line 5.3.17, which the direct development dependency @microsoft/api-documenter 7.30.18 and @microsoft/api-extractor 7.59.4 of @polyspec/kit require; no fixed sprintf-js exists (vulnerable <= 1.1.3, the latest), so it leaves in the coordinated dependency batch package-lock.json, config/dependency-policy.json sh -c 'make -s dependency-policy-check > var/dp-C16.169.log 2>&1; ! grep -q sprintf-js var/dp-C16.169.log' [-] cause: GHSA-hp3w-g68c-fv3c was withdrawn on 2026-10-22. C17.52 removes the obsolete advisory exception and refreshes the review.
C16.169-1 The advisory exception of sprintf-js in config/dependency-policy.json names both paths that bring sprintf-js in: @microsoft/api-documenter 7.30.18, a direct development dependency that scripts/gen-api-docs.mts runs with fixed arguments, and @microsoft/api-extractor of @polyspec/kit config/dependency-policy.json make text-absent FILE=config/dependency-policy.json TEXT="pulls sprintf-js 1.0.3 in only through @polyspec/kit" [o]
C16.170 The npm devDependencies of the root package.json take @polyspec/kit and @polyspec/ordered-json from their GitHub release tarballs, which npm ci installs locally; they come from the sibling checkouts through make link instead, and the release URLs go; waits on K448-2 package.json, package-lock.json sh -c '! grep -q "releases/download" package.json && make -s link-state-check > var/lsc-C16.170.log 2>&1' [-] cause: C17.56 verifies native npm links to current sibling sources. Tracked manifests and locks retain archive URLs; the development links select source code independently of those archive versions.
C16.171 The composer root takes polyspec/ordered-json from var/composer-artifacts, the release zip fetched by release-assets-fetch, and the local paths run release-assets-fetch first; they come from the sibling checkouts through make link instead; waits on K448-1 composer.json, composer.lock, Makefile sh -c '! grep -q "var/composer-artifacts" composer.json && ! grep -q "release-assets-fetch" Makefile && make -s link-state-check > var/lsc-C16.171.log 2>&1' [-] cause: Native Composer path repositories resolve current sibling sources through the root declaration and lock. C18.1 consolidates that source preparation; a second archive-compatibility profile and old public OrderedJSON validation are not required.
C16.172 The Composer root requires phpunit/phpunit at the reviewed target 13.4.3, declared exact as hyper and ordered-json declare it, and locked at 13.4.3 (K435) composer.json, composer.lock, config/dependency-review.json make dependency-policy-check [-] cause: S4 leaves version selection to Composer. Native Composer selects the current PHPUnit release within the declared constraint; an exact constraint solely to match another repository is unnecessary.
C16.173 crudui bumps react and react-dom to 19.3.1 and vitest to 5.0.5, the latest stable releases, and re-records their reviews in config/dependency-review.json, so that the sibling rule of dependency-policy-check no longer reports template's reviewed targets 19.3.1 and 5.0.5 as disagreeing with crudui's reviewed targets 19.2.8 and 5.0.4. Cause: crudui locks react and react-dom at 19.2.8 and vitest at 5.0.4, its review record names those as the latest, and the registry has 19.3.1 and 5.0.5; the sibling rule reports each pair from both sides because both checkouts are at their own targets. package.json, package-lock.json, config/dependency-review.json make dependency-policy-check [-] cause: S4 requires no cross-repository version alignment. C18.3 independently updates React and React DOM to 19.3.1, fixes client widget-script rendering and removes their dependency exceptions.
C17.1 A condition that holds conditions at any depth: {all:[...]}, {any:[...]}, {field,op,value}, {judge:text}. Needed by drama's episode pass and opens_when, clue and branch available_when, voice trigger (drama story form, reported by the drama session; citation docs/spec/schema.md:319-331 to be verified in the spec step). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" (red before the implementation: the fixture cases fail) [o]
C17.2 Choices taken from another repeated group of the same form: player_roles.character in the character ids, clues.reveals in the fact ids, tests.secrets.fact_id in the fact ids, condition field targets (drama story form; citation docs/spec/schema.md:210-213 to be verified). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render" (red before the implementation: the fixture cases fail) [o]
C17.3 A keyed map whose keys must be the ids of another group: facts.holders {character id: stance}, characters.relation_notes {other id: text}. Today multiple: only takes any keys (drama story form; citation docs/spec/schema.md:412-414 to be verified). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render spec-validity" (red before the implementation: the fixture cases fail) [o]
C17.4 A reference rule: the value names an id declared at path X, for every id reference. validation-rules.md has only equalTo and notEqual (drama story form; citation docs/spec/validation-rules.md:12-36 to be verified). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" (red before the implementation: the fixture cases fail) [o]
C17.5 A substring rule: a value must be contained in another field; tests.secrets.canary must occur in its fact's truth (drama story form). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" [o]
C17.6 A field whose type follows a sibling: vars.initial and condition value take bool, int or enum per the declared type (drama story form). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" [o]
C17.7 Range bounds read from data, not literals: int vars and relationship dimensions with author-declared min and max (drama story form; citation docs/spec/schema.md:83-85 to be verified). The rule in docs/spec (schema.md and validation-rules.md), the shared fixture cases of tests/fixtures for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and its unit ids in config/parity.json, each unit citing the requirement. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" [o]
C17.10 A bound on the size of the submitted data, which no crudui spec states (drama story form, correctness). The rule in docs/spec (schema.md and validation-rules.md), the dataLimits member in contracts/schema/crudui.schema.json, the shared fixture cases of tests/fixtures/validate for it, its implementation in all six implementations (go, php, php-ext, typescript, python, rust), and the parity unit validate in config/parity.json citing the requirements; the failure reuses the declared input failure code INVALID_FORM_INPUT, so no binding gains an error constant. make docs-check; make parity-declarations-check; make parity-check UNITS="validate" [o]
C17.10-1 Native graph and load checks declare their submission budgets, PHP measures a checked tree without retaining all siblings, and the PHP and Go field models expose dataLimits. tests/fixtures/text-validity/value-graphs.json, tests/fixtures/text-validity/README.md and its Korean twin, packages/validator/go/validator/types.go and its tests, packages/validator/go/validator/validate/unique_test.go, packages/validator/php/src/FieldSpec.php and its tests, packages/validator/php/src/Support/Text.php node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/validator/ts -- src/text/text-validity-value-graphs.conformance.test.ts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts go --cwd packages/validator/go -- -run "TestTopLevelKeysAreTheSchemaFieldKeys|TestFormDataLimitsRoundTrip|TestValueGraphsMatchFixture|TestUniqueManyRows" ./validator ./validator/validate; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd packages/validator/php -- --filter "testTopLevelKeysAreTheSchemaFieldKeys|testFormDataLimitsRoundTrip|testValueGraphMatchesFixture|data-limits-"; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts cargo -- --locked --manifest-path packages/validator/rust/Cargo.toml --test text_validity_conformance value_graph_limits; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts python --cwd packages/validator/python --venv var/python -- tests.test_text_validity.TestTextValidityValueGraphsConformance [o]
C17.10-2 The PHP and Go FieldSpec serialization tests describe implementation representation without claiming validation requirement coverage. packages/validator/php/tests/FieldSpecTest.php, packages/validator/go/validator/types_test.go make parity-declarations-check [o]
C17.11 kit-sync brings the copies that changed in kit, removes the lint configurations that kit reads from its package since K514, and the owner rules of crudui route each source path of a language whose lint is a gate of kit-gates to that lint and to duplication-check. Cause: crudui's copies of kit-bootstrap.mk, install-mise.mts, tool-wrappers.mts, the principles and gates.yml differ from kit, its ruff.toml and seven other lint configurations are copies that kit no longer writes (K514), and since K534 kit-check verifies that the owners select the lint of each language, which crudui's rules do not. Acceptance: make kit-check, make owner-validate and the lints pass. Red fixture: make kit-check fails today. config/owner-checks.json, the copies of kit make kit-check owner-validate lint-ts lint-python lint-php lint-go lint-rust [o]
C17.11-1 check-doc-coverage.test requires each api-extractor.json to extend the configuration of the kit package, and gen-api-docs and the tools of the Makefile come from the tools of the main checkout, so docs-check passes in a linked worktree (follows C17.11). Cause: C17.11 made each api-extractor.json extend @polyspec/kit/config/api-extractor.kit.json (kit K514), while check-doc-coverage.test still requires the removed copy; and gen-api-docs reads phpDocumentor from var/tools of the checkout, and UV, GO and COMPOSER name $(CURDIR)/var/tools, which a linked worktree does not hold (kit K519). Acceptance: check-doc-coverage.test and gen-api-docs.test pass, the phar comes from the tools of the main checkout, the cache of phpDocumentor is the checkout's own, and UV, GO and COMPOSER name $(KIT_TOOLS). Red fixture: check-doc-coverage.test fails today. scripts/check-doc-coverage.test.mts, scripts/gen-api-docs.mts, Makefile node --test scripts/check-doc-coverage.test.mts scripts/gen-api-docs.test.mts [o]
C17.12 the form-render expectError cases compare the message as well as the code, in all six bindings the message rule of UNSUPPORTED_FIELD_TYPE in docs/spec/form-runtime.md (with KO); the expectError comparison of packages/html/src/conformance.test.ts, packages/generator/php/tests/RenderingConformanceTest.php (which the php-extension binding runs), packages/generator/go/form_render_suite_test.go, packages/generator/rust/tests/form_render.rs and packages/generator/python/tests/test_form_render.py; the message of every expectError case of tests/fixtures/form-render/cases.json, written and checked by packages/react/scripts/generate-form-render-cases.mts make text-absent FILE=packages/html/src/conformance.test.ts TEXT="toHaveProperty('code', item.expectError"; make text-absent FILE=packages/generator/php/tests/RenderingConformanceTest.php TEXT='$case->expectError->code, $error->getErrorCode()'; make text-absent FILE=packages/generator/go/form_render_suite_test.go TEXT='stringAt(object(read(c, "expectError")), "code")'; make text-absent FILE=packages/generator/rust/tests/form_render.rs TEXT='case["expectError"]["code"].as_str()'; make text-absent FILE=packages/generator/python/tests/test_form_render.py TEXT='self.assertEqual(record["code"], case["expectError"]["code"])'; make parity-check UNITS="form-render" [o]
C17.14 the empty select placeholder is a rule: the spec names the placeholder option text and value, and each implementation writes exactly that the placeholder rule in docs/spec (schema.md and validation-rules.md, with their .ko), its shared fixture cases, and its implementation in all six implementations with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render" [o]
C17.15 a choice list from a repeated group refreshes in the browser when the source group rows change: the spec states the refresh rule and each browser binding implements it. Open finding: a runtime import that is only a dev dependency is not caught by any check, to be decided at the end of the checklist the refresh rule in docs/spec (schema.md and validation-rules.md, with their .ko), its shared fixture cases, and its implementation in every browser binding with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="form-choices"; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/form-binding -- tests/choices.test.ts; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/html -- src/form-session.test.ts; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/react -- src/tests/Form.test.tsx; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/vue -- tests/form-session.test.mjs; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/svelte -- --config vitest.client.config.ts tests/form-session.client.mjs; make dependency-policy-check [o]
C17.15-1 Production imports require runtime dependencies; a package available only through devDependencies fails the dependency check (the open finding of C17.15). config/knip-production.json, tests/build/dependency-health.test.mts, Makefile, config/owner-checks.json, packages/cli/package.json and package-lock.json node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern=production.dependency tests/build/dependency-health.test.mts; make production-dependencies-check [o]
C17.13 every catch clause of crudui has a binding: each narrows to the error that means its outcome and rethrows the rest, or states why every failure means the outcome with // catch-any -- <reason> (K561) the 33 catch clauses listed by K561 (examples/cross-check-console, examples/form-comparison, packages/cli, packages/form-binding, packages/generator/ts, packages/php-ext, packages/validator/ts, scripts, tests/build, tests/native-generators), each narrowed or annotated make lint-ts [o]
C17.17 cli list-describe returns the widgets, rules, slots and grammar tokens on main: the cause is fixed, not the test expectation the cause in packages/cli or the describe data source, with its test in packages/cli/tests/list-describe.test.ts node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/cli -- tests/list-describe.test.ts [o]
C17.16 the php-ext engine test derives the shared validation case count from tests/fixtures cases.json instead of a hardcoded 318, and fails when a case is dropped packages/php-ext/tests/engine/engine.test.mjs node node_modules/@polyspec/kit/dist/run-tests.mjs node -- --test-name-pattern=validates.all.shared packages/php-ext/tests/engine/engine.test.mjs [o]
C17.18 a form control edits a condition tree: the generator renders it in all six implementations, the browser binding edits it, and it submits the object to the conditionTree rule the control rule in docs/spec (with KO), its shared fixture cases, its implementation in all six implementations and the browser binding, with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="form-render spec-validity validate" (red before the implementation: the fixture cases fail) [o]
C17.19 a boolean row value in a choice group has a stated rule, and every implementation follows it the rule in docs/spec (with KO), its shared fixture cases, and its implementation in all six implementations, with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render" [o]
C17.20 the coverage-count assertions in run.mts and the php-ext tests derive their counts from the shared cases.json files, not from stale hardcoded totals tests/native-generators/run.mts and the php-ext count assertions that C17.2 listed node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/comparison/comparison.test.mjs; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/contract/expr.test.mjs packages/php-ext/tests/contract/compose.test.mjs; node tests/native-generators/run.mts --target javascript --check form-fixture:*,list:*,outline:*,detail:*; make docs-check; make parity-declarations-check [o]
C17.21 the Go form-render test reads the error code from the error itself: no default INVALID_FORM_INPUT label for an unrecognised error, which fails the case packages/generator/go: a FormInputError (Code INVALID_FORM_INPUT) returned at each input-error site of the generator, and the Go form-render test (failureCode and its callers, and the other Go suites that name INVALID_FORM_INPUT by default) reads the code from ComposeLoadError, UnsupportedFieldTypeError or FormInputError and fails on anything else make parity-check UNITS="form-render" [o]
C17.22 validation refuses at load a multiple that is not a boolean, only or an object, with INVALID_RULE_PARAMETER in all six validators, with a shared case docs/spec (CUSC-041 and its KO twin, with the new refusal sentence and its id from CUSC-081), its shared cases, and the load check in all six validators, with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="validate" [o]
C17.23 the hand-typed case totals of the Go, Rust and Python form-render tests and the Python validate test are derived from tests/fixtures cases.json packages/generator/go/form_render_suite_test.go, packages/generator/rust/tests/form_render.rs, packages/generator/python/tests/test_form_render.py, packages/validator/python/tests/test_validate.py make docs-check; make parity-declarations-check; make text-absent FILE=packages/generator/go/form_render_suite_test.go TEXT="want 153 and 56"; make text-absent FILE=packages/generator/rust/tests/form_render.rs TEXT="holds 153 result cases"; make text-absent FILE=packages/generator/python/tests/test_form_render.py TEXT="len(self.results), 153"; make text-absent FILE=packages/validator/python/tests/test_validate.py TEXT="len(self.cases), 357"; node node_modules/@polyspec/kit/dist/run-tests.mjs go --cwd packages/generator/go -- -run TestFormRenderSuite .; node node_modules/@polyspec/kit/dist/run-tests.mjs cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test form_render; node node_modules/@polyspec/kit/dist/run-tests.mjs python --cwd packages/generator/python --venv var/python -- tests.test_form_render; node node_modules/@polyspec/kit/dist/run-tests.mjs python --cwd packages/validator/python --venv var/python -- tests.test_validate [o]
C17.24 the php-ext runtime writer formats floats as ECMAScript number text, as JSON.stringify does, for data-source-relations the number text rule of data-source-relations in docs/spec/schema.md (with KO); the shared form-render case search-dynamic-relations-numbers written by packages/react/scripts/generate-form-render-cases.mts; the relations writer of each implementation through its own Number.prototype.toString writer: packages/php-ext/src/runtime.c (append_json with ps_number_text, and list.c without its second writer shortest_number), packages/generator/php/src/Internal/Widget.php (Numbers::string), packages/generator/python/src/polyspec/crudui/generator/widget.py (number_string), packages/generator/go/widget.go (numberString) and packages/generator/rust/src/widget.rs (util number_string); packages/generator/ts already writes JSON.stringify make parity-check UNITS="form-render"; node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/comparison/comparison.test.mjs; make docs-check; make parity-declarations-check [o]
C17.25 a structured condition editor: the generator renders a view of the condition tree in every renderer, and connectForm rewrites the tree through its actions the editor rule in docs/spec (with KO, its ids from CUSC-083..086 and CUMK-067..068), its shared cases, the generator in all renderers, and the browser binding make docs-check; make parity-declarations-check; make parity-check UNITS="form-render spec-validity"; node node_modules/@polyspec/kit/dist/run-tests.mjs vitest --cwd packages/generator/ts -- src/condition-editor.test.ts [o]
C17.26 The Python generator writes data-source-relations as the JSON text of its value, [] only for a missing or null value, as the other bindings do; it sends the value through or [], so {} and "" become [] (packages/generator/python/src/polyspec/crudui/generator/widget.py:392). The line CUSC-088 in docs/spec/schema.md and its Korean twin, shared form-render cases for a relations value of {} and "" generated by packages/react/scripts/generate-form-render-cases.mts, the fix in packages/generator/python/src/polyspec/crudui/generator/widget.py, and CUSC-088 cited by the parity unit form-render in config/parity.json. make docs-check; make parity-declarations-check; make parity-check UNITS="form-render" [o]
C17.27 The PHP extension writes a float control value as its canonical text, the shortest text that reads back as the same double, as the other bindings do; ps_scalar_string writes it with %.15g, so 0.30000000000000004 becomes 0.3 (packages/php-ext/src/value_path.c:64). The line CUMK-069 in docs/spec/form-markup.md and its Korean twin, a shared form-render case for a float control value generated by packages/react/scripts/generate-form-render-cases.mts with the case counts of the Go and Rust suites, the fix in packages/php-ext/src/value_path.c through ps_number_text, and CUMK-069 cited by the parity unit form-render in config/parity.json. make docs-check; make parity-declarations-check; make parity-check UNITS="form-render" [o]
C17.28 crudui follows kit K614: the kit-sync copies are deleted, the shared files are symlinks into the kit checkout, and the bootstrap is included from kit Makefile (the include of kit-bootstrap), config/layout.kit.yml and its three schemas kept by make kit-sync, config/php-lint (deleted), PRINCIPLES.md, PRINCIPLES.ko.md, .editorconfig and .claude/settings.json as symlinks, config/owner-checks.json (the globs of the deleted paths) make kit-check; make owner-validate; make layout-check; make rules-check; make docs-check; make toolchain-check; make lint-php [o]
C17.29 crudui's Makefile runs kit's tools as $(KIT)/<tool>.$(KIT_EXT) (K613), not as hard-coded .mjs Makefile (the 10 recipe lines that run $(KIT)/.mjs) make kit-check; make lint-ts [o]
C17.30 crudui's config/rebuild.json has no entry for a file that no longer exists and no tool without a class (rebuild-check passes) config/rebuild.json (the four entries of K614 and the tool without a class) make rebuild-check [o]
C17.31 a choice field's items combine a group source with a list of literal items, checked as one set, in all six implementations (drama U-2) docs/spec: CUSC-089 (items combining a group source with literal items) in schema.md and its KO twin, CUVR-085 (the combined-set check) and CUVR-086 (its refusal) in validation-rules.md and its KO twin; the shared cases; the six implementations with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render" [o]
C17.32 a repeated value among a group source's rows fails validation with a coded input error naming the row path and the value, in all six implementations (no silent drop) docs/spec: CUSC-090 (the repeated value refusal) in schema.md and its KO twin, CUVR-087 (its check) in validation-rules.md and its KO twin; the shared cases; the six implementations with parity units make docs-check; make parity-declarations-check; make parity-check UNITS="validate form-render" [o]
C17.33 the php-ext test source lists that compile widget.c also compile rule_condition_tree.c, which defines ps_condition_scalar, so the comparison and contract tests link packages/php-ext/tests/comparison/comparison.test.mjs and packages/php-ext/tests/contract/expr.test.mjs (the source lists that include widget.c) node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- packages/php-ext/tests/contract/expr.test.mjs [o]
C17.34 crudui names the sources of kit (node_modules/@polyspec/kit/scripts/kit/<tool>.mts) wherever it named kit's dist (dist/<tool>.mjs, dist/kit.mk): the npm scripts, the verification commands of contracts/features.json and config/dependency-policy.json, composer.json, the READMEs and the build tests. Cause: kit runs its sources since K613 and kit K646 stops building its dist, so a command that names dist runs a stale or missing file, and tests/build/ci-local.test.mts finds no tool of kit in the Makefile, which runs $(KIT)/<tool>.$(KIT_EXT). the 25 files that named kit dist, with tests/build/ci-local.test.mts and runtime-version-policy.test.mts matching the Makefile form node --test --test-name-pattern="every tool of kit that the Makefile starts|every node:test file runs in a project command|project commands call test tools only through the test runner|a direct test tool call is found|test:build builds the packages|the Node.js programs of a target|make lint runs the TypeScript lint" tests/build/ci-local.test.mts tests/build/test-commands.test.mts tests/build/dependency-health.test.mts tests/build/lint-coverage.test.mts [o]
C17.35 the php-ext C engine renders the C17.25 condition-editor tree as the expected HTML (comparison test, all three cases) packages/php-ext (the C engine renderer of the condition editor), not the expected HTML node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- packages/php-ext/tests/comparison/comparison.test.mjs [o]
C17.35-1 The structured condition wrapper uses raw attribute escaping for an idPrefix containing an apostrophe, matching the shared renderer. packages/php-ext/src/render.c, packages/react/scripts/condition-editor-form-render-cases.ts, tests/fixtures/form-render/cases.json node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern=exact.HTML packages/php-ext/tests/comparison/comparison.test.mjs [o]
C17.35-2 The HTML renderer writes structured condition widgets with the shared raw serializer so every byte matches the React renderer. packages/html/src/index.ts node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/react -- src/tests/byte-reference.test.ts [o]
C17.35-3 PHP, Go, Rust and Python render the structured condition editor with the raw HTML text, attribute and void-element serialization of the shared renderer. packages/generator/php/src/Internal/ConditionMarkup.php, packages/generator/php/src/Internal/Rendering.php, packages/generator/go/render.go, packages/generator/rust/src/render.rs, packages/generator/python/src/polyspec/crudui/generator/rendering.py node tests/native-generators/run.mts --target php,go,rust,python --check form-fixture:condition-editor-* [o]
C17.36 the ten failing tests of tests/build pass on main: ci-local, dependency-health, runtime-version-policy and lint-coverage the four test files and the sources or configs they check (fixed at the cause, not the expectation) node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/ci-local.test.mts tests/build/dependency-health.test.mts tests/build/runtime-version-policy.test.mts tests/build/lint-coverage.test.mts [o]
C17.47 Integrate the completed checklist fixes and verify their combined records and changed owners without repeating the full suite. AGENTS.md, AGENTS.ko.md, config/rebuild.json, config/owner-checks.json, docs/features.md, docs/features.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md and CHANGELOG.md with its Korean twin node node_modules/@polyspec/kit/scripts/kit/check-documents.mts; make records-check rules-check rebuild-check owner-validate [o]
C17.36-1 Runtime build checks read declared kit source paths and make database output through the dry-run helper. tests/build/make-dry-run.mts, tests/build/ci-local.test.mts, tests/build/make-tool-path.test.mts, tests/build/offline-checks.test.mts node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/ci-local.test.mts tests/build/make-tool-path.test.mts tests/build/offline-checks.test.mts tests/build/make-dry-run.test.mts [o]
C17.37 The root TypeScript check reads installed package declarations and checks fixture generators without importing package implementation sources. tests/fixtures/text-validity/cases.mts, tests/fixtures/text-validity/input-text.mts, tests/fixtures/buttons/generate.mts, tests/fixtures/validate/generate.mts, packages/validator/ts/src/text/text-validity.conformance.test.ts node node_modules/typescript/bin/tsc -p tsconfig.json; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/generator/ts -- src/input-text.test.ts src/text-compile-form.test.ts src/text-bind-form.test.ts src/text-create-form.test.ts src/text-build-list.test.ts src/text-build-detail.test.ts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/validator/ts -- src/text/text-validity.conformance.test.ts src/text/text-validity-validate.conformance.test.ts src/text/text-validity-validate-list.conformance.test.ts src/text/text-validity-validate-detail.conformance.test.ts [o]
C17.38 Rust generator fixture readers name the fixture path and the actual I/O or JSON parsing error. packages/generator/rust/tests/buttons.rs, packages/generator/rust/tests/form_complete.rs, packages/generator/rust/tests/form_state.rs, packages/generator/rust/tests/support/mod.rs, packages/generator/rust/tests/validity_render.rs node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/failure-messages.test.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts cargo -- --locked --manifest-path packages/generator/rust/Cargo.toml --test buttons --test form_complete --test form_state --test validity_render --test form_render --test list_render --test detail_render [o]
C17.38-1 Rust fixture readers handle read and parse failures with explicit result matching while preserving the path and actual error. packages/generator/rust/tests/buttons.rs, packages/generator/rust/tests/form_complete.rs, packages/generator/rust/tests/form_state.rs, packages/generator/rust/tests/support/mod.rs, packages/generator/rust/tests/validity_render.rs, tests/build/failure-messages.test.mts node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/failure-messages.test.mts; CLIPPY_CONF_DIR="$PWD/node_modules/@polyspec/kit" cargo clippy --locked --manifest-path packages/generator/rust/Cargo.toml --test buttons --test form_complete --test form_state --test validity_render --test form_render --test list_render --test detail_render -- -D warnings [o]
C17.39 The cross-check console tests load the declared PHP extension build and validation fixture export preserves explicitly supplied requirement metadata. examples/cross-check-console/server/validator-processes.test.mjs, examples/cross-check-console/server/fixture-export.test.mjs, examples/cross-check-console/client/fixture-export.js, examples/cross-check-console/client/app.js, examples/cross-check-console/README.md and its Korean twin node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd examples/cross-check-console/server --root . --dir . validator-processes.test.mjs fixture-export.test.mjs [o]
C17.40 Every display renderer replaces JavaScript link URLs according to CUDF-023, including Vue and Svelte source rendering. packages/generator/ts/src/util.ts, packages/generator/ts/src/internal.ts, packages/generator/ts/src/form-render.ts, packages/html/src/index.ts, packages/vue/src/components/List.ts, packages/svelte/src/components/List.svelte and packages/svelte/src/components/Detail.svelte node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/generator/ts -- src/form-render.test.ts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd examples/cross-check-console/server -- --root . --dir . render-list-runner.test.mjs render-detail-runner.test.mjs [o]
C17.40-1 The contract manifest and generated feature documents include the sanitizeUrl export of the generator core internal entry. contracts/features.json, docs/operations/feature-contracts.md, docs/operations/feature-contracts.ko.md node scripts/check-contract-manifest.mts; node scripts/generate-feature-contract-docs.mts --check [o]
C17.41 The CLI manifest markdown test verifies the complete package export table against the current contract without stale export lists. packages/cli/tests/manifest.test.ts node node_modules/@polyspec/kit/scripts/kit/run-tests.mts vitest --cwd packages/cli -- tests/manifest.test.ts [o]
C17.42 The Go button contract commands select the generator package that owns TestButtonsSuite and run every shared button case without selecting packages with no matching test. contracts/features.json node node_modules/@polyspec/kit/scripts/kit/run-tests.mts go --cwd packages/generator/go -- -run TestButtonsSuite .; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/contract-manifest.test.mts [o]
C17.43 Condition editor fallback textareas retain standalone borders and remain inside narrow and wide viewports in Chromium, Firefox and WebKit. packages/generator/ts/styles/crudui.css, tests/viewport.test.mts node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern=condition-editor tests/viewport.test.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/style-properties.test.mts [o]
C17.44 PHP server unit fixtures provide the module-declared php-config and PHP-FPM paths, and await launcher cleanup after every outcome. examples/form-comparison/src/php-server.test.mjs node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- examples/form-comparison/src/php-server.test.mjs [o]
C17.45 The Python native generator program dispatches buildOutline requests to the installed generator API. tests/native-generators/python.py node node_modules/@polyspec/kit/scripts/kit/run-tests.mts python --venv var/python --cwd packages/generator/python -- tests.test_outline; node tests/native-generators/run.mts --target python --check outline [o]
C17.46 The PHP record server converts validated score text with PHP numeric conversion and loads no PHP implementation class in the native extension process. examples/form-comparison/servers/php/src/RecordStore.php, examples/form-comparison/servers/php/tests/FormShapeTest.php, examples/form-comparison/servers/php/tests/ProcessorModeTest.php node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd examples/form-comparison/servers/php -- tests/FormShapeTest.php; FORM_CRUDUI_MODULE="$PWD/var/php-ext/polyspec_crudui.so" node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd examples/form-comparison/servers/php -- --filter testThePhpExtensionModeConvertsScoreWithoutLoadingPhpClasses tests/ProcessorModeTest.php [o]
C17.49 The PHP API parity report checks mixed button inputs as coded generation errors, and choice-source failures retain the generator FormError type in the library and extension. packages/php-ext/tests/ApiReport.php, packages/generator/php/src/Internal/ChoiceList.php, packages/generator/php/tests/FormTest.php node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd packages/generator/php -- --filter testRepeatedLiteralChoiceUsesGenerationError tests/FormTest.php; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd packages/php-ext -- --filter testTheApiOfTheExtensionEqualsTheApiOfTheLibrary tests/ApiTest.php [o]
C17.48 PHP extension engine fixture compilation preserves all cases without unrolled repeated array allocations, and validator test programs link the reference rule implementation. packages/php-ext/tests/engine/engine.test.mjs and packages/php-ext/tests/engine/support.mjs node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern="repeated scalar|validates all shared|unique rule|validation has no undefined" packages/php-ext/tests/engine/engine.test.mjs [o]
C17.50 The PHP extension public form messages include every condition-editor key and value from the interface-message contract. packages/php-ext/src/messages.c, packages/php-ext/tests/engine/engine.test.mjs node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern=interface.messages packages/php-ext/tests/engine/engine.test.mjs; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts phpunit --cwd packages/generator/php --php-extension var/php-ext/polyspec_crudui.so -- tests/InterfaceMessagesConformanceTest.php [o]
C17.51 PHP package source documentation and provenance checks run as documentation tooling units, outside the extension runtime contract tests, with all existing source and docblock checks retained. scripts/php-doc-coverage.test.mts, the two package DocCoverageTest.php files and their parity internal declarations node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- scripts/php-doc-coverage.test.mts; make parity-declarations-check [o]
C17.52 Review terminal exceptions and prepare release prerequisites (priority: high). config/dependency-policy.json, config/dependency-review.json, config/release.json, docs/features.md, docs/operations/repository.md, docs/plans/kit-standard/checklist.md node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/docs/repository-writing.test.mts tests/build/release-fixtures.test.mts; make release-coverage; make dependency-policy-check [o]
C17.52-1 Separate accepted withdrawals from candidate-stage reconsideration (priority: high). AGENTS.md, docs/features.md, docs/operations/repository.md, docs/plans/kit-standard/checklist.md node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/docs/repository-writing.test.mts; node node_modules/@polyspec/kit/scripts/kit/check-documents.mts [o]
C17.54 Match the Go workspace and toolchain to the linked module minimum (priority: high). mise.toml, mise.lock, go.work, Go toolchain unit verification node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/runtime-version-policy.test.mts [o]
C17.53 Update vulnerable npm dependencies and Tokio to patched versions (priority: high). package.json, package-lock.json, examples/form-comparison/servers/rust/Cargo.lock node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern="locked dependency graph|workspace packages use the root dependency lock file|tracked npm dependency graphs approve" tests/build/dependency-health.test.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- scripts/json-schema.test.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern="documentation build preserves page routes" tests/docs/web-build.test.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts cargo -- --locked --manifest-path examples/form-comparison/servers/rust/Cargo.toml server_html_uses_framework_storage_and_native_submission [o]
C17.56 Use current sibling source packages through native development installs and reassess withdrawn work (priority: high). composer.local.json, composer.local.lock, Makefile, config/owner-checks.json, config/layout.yml, tests/build/dependency-health.test.mts, tests/build/make-tool-path.test.mts, AGENTS.md, docs/features.md, docs/operations/repository.md, docs/operations/package-build.md node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- tests/build/dependency-health.test.mts tests/build/package-names.test.mts tests/build/make-tool-path.test.mts examples/form-comparison/src/json.test.mjs; make crudui-local-composer-check [o]
C17.56-1 Stabilize native source installation inputs and declare lint tools (priority: high). composer.local.json, composer.local.lock, package.json, package-lock.json, config/dependency-review.json, docs/features.md node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern="locked dependency graph|production dependency checks|Composer installed records" tests/build/dependency-health.test.mts; make crudui-local-composer-check; make dependency-policy-check [o]
C17.56-2 Synchronize current kit shared files as tracked regular files (priority: high). kit-managed shared files and workflows make kit-check; node node_modules/@polyspec/kit/scripts/kit/check-documents.mts; node node_modules/@polyspec/kit/scripts/kit/run-tests.mts node -- --test-name-pattern="each workflow declares|release trigger matches|only the release workflow" tests/build/ci-local.test.mts [o]
C17.57 crudui's composer.json has no path repository that links a polyspec package outside the repository; vendor/polyspec/ordered-json is a plain symlink made by make link (K773, PRINCIPLES S11) composer.json and composer.lock (the path repository of ordered-json deleted; the composer repository of its release packages.json added; the release requirement kept with no version change) make link-state-check; make worktree-setup [o]
C17.58 crudui removes its references to the four kit targets that kit deletes (dependency-policy-check, dependency-policy-mutation-check, dependency-review, composer-provider-entries) and the files that exist only for them (K784) Makefile, config/owner-checks.json, config/toolchain.json, config/dependency-review.json (deleted), .github/workflows/dependency-review.yml (deleted), their tests under tests/build make owner-validate; make rules-check; make docs-check [o]
C17.59 Remove the reference-transaction hook (K801) .githooks/reference-transaction removed sh -c '! git grep -q reference-transaction -- .githooks Makefile scripts config .github' [o]
C17.60 Remove the K788/K789 python backend and policy declarations pythonBackend, consumers.wheel.polyspec, config/dependency-policy.json and their references removed sh -c 'make owner-validate >/dev/null && ! git grep -q -e pythonBackend -e dependency-policy.json -- config tests scripts Makefile .github packages' [o]
C17.61 Remove the K798 release-consumer and release-proof adoption tests/release-install, config/release.json consumers and proof, release-fixtures cases, release.yml release-proof step removed node scripts/run-tests.mts node -- tests/build/release-fixtures.test.mts and node scripts/run-tests.mts node -- tests/build/offline-checks.test.mts pass [o]
C17.62 Remove the python-lock alternative from the offline downloads regex (K789) the python-lock alternative removed from tests/build/offline-checks.test.mts node scripts/run-tests.mts node -- tests/build/offline-checks.test.mts passes [o]
C17.63 Remove the K805 commit-rule consumer state pre-merge-commit hook, config/commit-identity.json, commits-check CI target removed; make hooks rewrites pre-commit make hooks leaves no pre-merge-commit reference, and the CI target list has no commits-check [o]
C17.64 Remove crudui's make release-versions step (K812) release.yml release-versions step, its header line and the Makefile comment name removed sh -c '! grep -q "make release-versions" .github/workflows/release.yml' [o]
C17.65 Remove the owner-check globs of files deleted by C17.61 and C17.63 config/owner-checks.json make owner-validate [o]
C17.66 Remove enforcement references to the targets and hooks that kit deleted from the principles and agents documents PRINCIPLES.md, PRINCIPLES.ko.md, AGENTS.md, AGENTS.ko.md make rules-check [o]
C17.67 Adopt kit 0.0.72: pin the release asset, refresh the lock, sync kit, and remove link and link-state-check from the CI package.json, package-lock.json, .github/workflows/ci.yml, .gitignore make kit-sync; make owner-validate; make rules-check [o]
C17.68 Remove the CI identity that dependency-health sets outside a workflow tests/build/dependency-health.test.mts make bypass-check [o]
C17.69 Make FormTest pass the generation error for a repeated literal choice packages/generator/php/tests/FormTest.php make test-php-ext CASES=testRepeatedLiteralChoiceUsesGenerationError [o]
C17.70 Make RuleParametersTest keep the complete previous cause chain of an invalid pattern packages/validator/php/tests/Validate/RuleParametersTest.php make test-php-ext CASES=testInvalidPatternPreservesCompletePreviousCauseChain [o]
C17.71 Make the form-comparison Rust server resolve the ordered-json tag offline in CI examples/form-comparison/servers/rust/Cargo.toml; examples/form-comparison/servers/rust/Cargo.lock; config/release-assets.json (ordered-json 0.0.13 declared) make lint-rust [o]
C17.72 Adopt kit 0.0.75: pin the release asset, refresh the lock, and sync kit package.json, package-lock.json make kit-sync; make owner-validate; make rules-check [o]
C17.73 Fix the bare <word> placeholders of the execution checklist documents for the documents check of kit 0.0.77 (K895) docs/plans/execution-checklist/checklist.md; docs/plans/execution-checklist/checklist.ko.md sh -c 'make docs-web >/dev/null 2>&1 && ! grep -q "<command>" docs/.web/dist/plans/execution-checklist/checklist.html' [o]
C17.74 Adopt kit 0.0.77 in the second batch: the link declaration file (K869) and the --siblings assertion of ci-local, the raw uv sync at Makefile:173 routed through make uv-install (K850), the removal of toolchain-check (K854), the removal of the shared gates that ci.yml repeats (K870), deps-node where a runtime needs it (K859), the release-assets-fetch removal (K865), the removal of cargo-downloads-check (K864): the prerequisite of 24 cargo targets at Makefile:238 to :452, the comments at Makefile:28 and :186, the paragraph of docs/operations/package-build.md:321 and its Korean twin at :282 (the dist path becomes fetch-cargo-downloads.mjs), and the assertions of tests/build/offline-checks.test.mts:4, :34, :134 (the downloading-command pattern names fetch-cargo-downloads) and :144-146 (the test of cargo-downloads-check is removed; make install fetches through install-kit), the link-state-check to link-check rename, the .links file with its .gitignore entry, and the prepare-commit-msg hook deletion tests/build/ci-local.test.mts; Makefile; .github/workflows/ci.yml; .github/workflows/pages.yml; config/owner-checks.json; AGENTS.md; AGENTS.ko.md; tests/build/runtime-version-policy.test.mts; tests/build/dependency-health.test.mts; .gitignore; .githooks/prepare-commit-msg; docs/operations (package-build, testing, tests-build README) node --test --test-name-pattern "CI_TARGETS lists|a CI job runs the lint of kit" tests/build/ci-local.test.mts (the two ci-local assertions that C17.74 changes; the other ci-local assertions belong to C17.77); ! git grep -n -w -e toolchain-check -e release-assets-fetch -e release-assets.json -e var/release-assets -e '"type": *"artifact"' -- ':!docs/plans' ':!CHANGELOG.md' ':!CHANGELOG.ko.md'; ! git grep -n -e cargo-downloads-check -e check-cargo-downloads -- ':!docs/plans' ':!CHANGELOG*'; node scripts/run-tests.mts node -- tests/build/form-comparison-ci.test.mts; gates runtime (rust) green on the commit that adopts kit 0.0.77 [o]
C17.75 Move the canonical Composer test of dependency-health to the packages.json repository of C17.57 tests/build/dependency-health.test.mts node --test --test-name-pattern "canonical Composer project resolves polyspec" tests/build/dependency-health.test.mts [o]
C17.76 Pin the ordered-json git dependency of the Rust form server by its locked commit, so the offline cargo step resolves it without a tag reference (CI runtime rust) examples/form-comparison/servers/rust/Cargo.toml; examples/form-comparison/servers/rust/Cargo.lock sh -c 'cd examples/form-comparison/servers/rust && CARGO_HOME=../../../../var/c1776-cargo-home cargo fetch --locked && CARGO_HOME=../../../../var/c1776-cargo-home cargo update --offline -p polyspec-ordered-json' [-] cause: kit K856 (8d1eea1d, on kit main): the cause is the cargo update --offline of link.mts:731 in kit v0.0.76, which runs cargo update --offline -p polyspec-ordered-json with the sibling patch and fails with failed to find tag v0.0.13 (exit 101), because the git database holds no tag reference; K856 removed that line, and kit 0.0.77 resolves the sibling through cargo metadata --config patch. crudui declares the tag correctly (cargo clippy --offline --locked exit 0 on a release state)
C17.78 Remove the prepare-commit-msg hook that kit K892 orphans, so every commit of crudui main runs again .githooks/prepare-commit-msg (removed in 29ca676f) sh -c '! test -e .githooks/prepare-commit-msg' [o]
C17.77 Delete the stale ci-local assertions that crudui main already fails (kit internals) and align the rest to the current workflow (push-gate.yml, Kit CI planner schema, TypeScript link form, native unit suites, generator equivalence, tag push, workflow triggers) tests/build/ci-local.test.mts node --test --test-name-pattern "each make job bootstraps|a job that installs the npm packages caches|a workflow step starts every tool|every job runs its checks through make ci-targets|no run of a commit of main is stopped|each workflow declares exactly its triggers|CI runs on a push to main|only the release workflow starts on a tag push|every application workflow declares a bounded" tests/build/ci-local.test.mts [o]
C17.79 The form-comparison browser checks run in a job of their own and every other check runs once after them (the assertion of form-comparison-ci.test.mts:131 onward) tests/build/form-comparison-ci.test.mts node scripts/run-tests.mts node -- tests/build/form-comparison-ci.test.mts [-] cause: Merged into C17.74: the red is the cargo-downloads-check prerequisite of crudui-test-form-comparison-browser, which kit K864 deleted; C17.74 removes that prerequisite, so the browser-jobs assertion of form-comparison-ci.test.mts passes with it
C17.80 Read the OrderedJSON version of the CI provider from the packages.json URL with a regex that matches (crudui-prepare-ci-providers, Makefile:136) Makefile node --test --test-name-pattern "CI provider step reads the OrderedJSON version" tests/build/ci-local.test.mts [o]
C17.81 Unify the OrderedJSON release that crudui uses to 0.0.14: the packages.json repository of composer.json, the Rust form server's tag and lock, the release docs and the composer lock, before the crudui 0.0.9 release composer.json; composer.lock; examples/form-comparison/servers/rust/Cargo.toml; examples/form-comparison/servers/rust/Cargo.lock; docs/operations/ordered-json.md; docs/operations/ordered-json.ko.md; docs/operations/package-build.md; docs/operations/package-build.ko.md node --test --test-name-pattern "canonical Composer project resolves polyspec" tests/build/dependency-health.test.mts [o]
C17.82 Assert the CI install branch of dependency-health defined before its group is read, so make typecheck passes (dependency-health.test.mts:572-573) tests/build/dependency-health.test.mts make typecheck [o]
C17.83 Drop the --without-library option that kit no longer has from the generator PHP suite of crudui-test-php-api (Makefile:415), so PHPUnit runs and conformance gets its evidence Makefile node tests/conformance/run-suite.mts phpunit --cwd packages/generator/php -- tests/FormStateTest.php [o]
C17.84 Read the release OrderedJSON php-ext from vendor/polyspec/ordered-json-php-ext, installed by Composer from the packages.json repository, instead of var/ordered-json-php-ext (local-servers.mjs:23; CI record stores and browser checks) examples/form-comparison/src/local-servers.mjs; examples/form-comparison/src/local-servers.test.mjs; composer.json; composer.lock node scripts/run-tests.mts node -- examples/form-comparison/src/local-servers.test.mjs [o]
C17.85 crudui builds the OrderedJSON php-ext (make ordered-json-ext) before the form-comparison targets that read it from var/pie, so a fresh CI checkout does not fail (run 41032798468) Makefile make -n crudui-test-form-comparison-browser plans ordered-json-ext before the check; make ordered-json-ext exit 0 from a checkout without var/pie [o]
C17.86 crudui renames its test-php recipe (Makefile:574) to crudui-test-php-source, so kit's test-php runs unchanged, and CI reaches the source-internal PHP suites through that target (PRINCIPLES.md:244, docs/operations/testing.md, tests/build/php-test-scope.test.mts) Makefile, CI_TARGETS of Makefile, .github/workflows/ci.yml, PRINCIPLES.md, PRINCIPLES.ko.md, docs/operations/testing.md, docs/operations/testing.ko.md, tests/build/php-test-scope.test.mts, CHANGELOG.md, CHANGELOG.ko.md make -n test-php CASES=UniqueValuesTest prints no overriding-commands warning; make test-php CASES='UniqueValuesTest|OutlineTest' exit 0 (kit test-php runs both PHP packages); node scripts/run-tests.mts node -- tests/build/php-test-scope.test.mts exit 0; make rules-check exit 0 [o]
C17.87 crudui restores the vendored PRINCIPLES.md and PRINCIPLES.ko.md to kit 0.0.77 text by make kit-sync, which C17.86 changed by hand, so kit-inject-check passes (run 41044985845) PRINCIPLES.md, PRINCIPLES.ko.md make kit-inject-check exit 0; make rules-check exit 0 [o]
C17.88 crudui adopts @polyspec/kit 0.0.78 (K909, K916, K918): the pin and its lock go through npm, make kit-sync writes 0.0.78 copies, and the adoption is recorded in the CHANGELOG package.json, package-lock.json, PRINCIPLES.md, PRINCIPLES.ko.md, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md extract polyspec-kit-npm-0.0.78.tgz in a scratch directory; its PRINCIPLES.ko.md source-sha256 equals the copy in this checkout; make kit-inject-check exit 0; make rules-check exit 0 [o]
C17.89 crudui names the Python CI job validator · Python like the other validator jobs (ci.yml:323) .github/workflows/ci.yml, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md grep -n "name: validator · Python" .github/workflows/ci.yml matches; node scripts/run-tests.mts node -- tests/build/ci-local.test.mts exit 0 [o]
C17.90 crudui adopts @polyspec/kit 0.0.79, which installs the PHP arginfo generator in its own release and releases by CI run id (release.yml workflow_dispatch with run and version; release-tag creates the tag); the row starts when 0.0.79 is released package.json, package-lock.json, PRINCIPLES.md, PRINCIPLES.ko.md, CHANGELOG.md, CHANGELOG.ko.md kit 0.0.79 tgz extracted in a scratch directory; source-sha256 of PRINCIPLES.ko.md equals the copy; make kit-inject-check exit 0; make rules-check exit 0 [o]
C17.91 crudui-lint keeps only the Svelte ESLint, since kit's pipeline runs lint-ts once as kit-gates-runtime-ts for the ts runtime (S12, ci.yml build-lint) Makefile, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md make -n lint prints no lint-ts command; make lint exit 0; make rules-check exit 0 [o]
C17.91-1 rewrite the K870 test of tests/build/ci-local.test.mts to the C17.91 rule: make lint runs no lint-ts, and the kit pipeline runs the TypeScript gate once tests/build/ci-local.test.mts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/ci-local.test.mts exit 0; make rules-check exit 0 [o]
C17.91-2 rewrite the lint-coverage test of tests/build to the C17.91 rule: make lint runs the Svelte ESLint, and the TypeScript gate is kit's lint-ts in the CI pipeline, not an assertion of make lint (CI 41079014703) tests/build/lint-coverage.test.mts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/lint-coverage.test.mts exit 0; node scripts/run-tests.mts node -- tests/build/ci-local.test.mts exit 0; node scripts/run-tests.mts node -- tests/build/test-commands.test.mts exit 0 [o]
C17.92 crudui declares its own check targets of ci.yml in config/ci.json targets, as S12 allows (targets.shared, targets.parity, targets.runtimes), so the kit pipeline runs them after its gates config/ci.json, .github/workflows/ci.yml, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md make kit-check exit 0; make rules-check exit 0; the moved targets run in the CI pipeline, since make ci-targets runs only in CI (the CI run of the pushed commit is the evidence) [ ]
C17.93 the three form-comparison jobs that build the OrderedJSON php-ext select pie in their install-tools TOOLS, so the pie shim exists for pie-build (C17.90, run 41062970946) .github/workflows/ci.yml, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md with var/tools/mise/shims/pie removed, make ordered-json-ext exit 0 installs the shim through install-pie and records var/ordered-json-package; make rules-check exit 0 [o]
C17.94 the CI shape tests accept the kit job of C17.90: runtime-version-policy skips a job that calls a reusable workflow of this repository for runs-on and a local ./ uses for the commit SHA pin, and form-comparison-checks needs only form-comparison-browser, which reaches kit (C17.90, run 41062970946) tests/build/runtime-version-policy.test.mts, .github/workflows/ci.yml, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node --test tests/build/form-comparison-ci.test.mts tests/build/runtime-version-policy.test.mts fails on the C17.90 ci.yml and exits 0 after the change [o]
C17.96 crudui builds the OrderedJSON php-ext with direct PIE commands in ordered-json-ext, not kit's pie-build, which kit main removes (K931), to be released in 0.0.81; it records the install-path of its one installed.json entry (method agreed with link-owner) Makefile, examples/form-comparison/src/local-servers.mjs, CHANGELOG.md, CHANGELOG.ko.md, tests/build/ordered-json-pie.test.mts, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/ordered-json-pie.test.mts exit 0; make ordered-json-ext exit 0; node scripts/run-tests.mts node -- examples/form-comparison/src/local-servers.test.mjs exit 0 [o]
C17.96-1 crudui restores the two released 0.0.9 changelog entries (CHANGELOG.md:14, :27 and their KO twins) to their origin text, states kit main removes pie-build (K931) for 0.0.81, and restamps the KO source-sha256 (audit of C17.96) CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md, Makefile, tests/build/ordered-json-pie.test.mts make documents-stamp PATHS=CHANGELOG.ko.md moves nothing; make test-markers-check exit 0; node scripts/run-tests.mts node -- tests/build/ordered-json-pie.test.mts exit 0 [o]
C17.97 crudui records the 0.0.9 publication in CHANGELOG.md and CHANGELOG.ko.md under ## Unreleased (release run 41090852507, CI run 41086677097, tag v0.0.9 on db740a10, 12 assets) CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md gh release view v0.0.9 --repo polyspec/crudui reports 12 assets and not a draft; gh run view 41086677097 --repo polyspec/crudui reports success on db740a10 [o]
C17.98 crudui declares the sha512 digest of its packageManager npm@12.2.0 (package.json:96), which kit main requires (K933), without a kit pin change package.json make kit-check exit 0; the bootstrap of the worktree passes [o]
C17.98-1 crudui removes the unread npm field of RecordedToolchain (the second packageManager parser of the audit, runtime-version-policy.test.mts) and restamps the KO twin of CHANGELOG.md (audit of C17.98) tests/build/runtime-version-policy.test.mts, CHANGELOG.ko.md, CHANGELOG.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/runtime-version-policy.test.mts exit 0; node scripts/run-tests.mts node -- tests/build/tool-path.test.mts exit 0; make documents-stamp PATHS=CHANGELOG.ko.md stamps the KO twin [o]
C17.99 crudui declares its three tracked generated tables in config/generated.json tracked with their generators as reasons, and removes their duplication.json entries (kit accommodations audit, P34) config/generated.json, config/duplication.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md make kit-check exit 0; duplication-check reports 0 findings [o]
C17.100 crudui removes the TypeScript 6.0.3 exception of config/toolchain.json, which the kit version machinery of kit main no longer reads (the file then accepts only rust nightly exceptions); the package.json pins of packages/svelte stay config/toolchain.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md make kit-check exit 0 on the locked kit [o]
C17.101 crudui runs tests/build/ordered-json-pie.test.mts in its runtime test command, so that every node:test file of tests/build is run by a project command (CI run 41167701052, shard 2/4) package.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/test-commands.test.mts exit 0 [o]
C17.102 crudui moves the script that records the PIE package folder of ordered-json-ext into scripts/ordered-json-package.mts, so that the offline test no longer reads that recipe line as a download (CI run 41167701052, shard 3/4) Makefile, scripts/ordered-json-package.mts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node scripts/run-tests.mts node -- tests/build/offline-checks.test.mts exit 0 [o]
C17.103 crudui classes scripts/ordered-json-package.mts in config/rebuild.json as policy, since PIE defines no record of its package folder, so that rebuild-check of the kit job passes (CI run 41176818702) config/rebuild.json, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md node node_modules/@polyspec/kit/dist/rebuild-check.mjs exit 0 [o]
C17.104 crudui checks the two arguments of scripts/ordered-json-package.mts before it uses them, so that the root typecheck of the build job passes (CI run 41177855445) scripts/ordered-json-package.mts, CHANGELOG.md, CHANGELOG.ko.md, docs/plans/kit-standard/checklist.md, docs/plans/kit-standard/checklist.ko.md ! node_modules/.bin/tsc --noEmit -p tsconfig.json 2>&1 | grep -q ordered-json-package [o]
C17.105 crudui adopts kit 0.0.84: the kit pin and lock name the v0.0.84 asset, package.json declares npm 12.2.0 in devEngines and mise.toml declares npm:npm with its mise.lock entry and sidecar lock, kit-sync copies the 0.0.84 workflows, config/generated.json uses the tracked form for the two Go tables, and the CI steps drop kit-install-php-arginfo (K930) package.json, package-lock.json, mise.toml, mise.lock, .mise/locks/npm-npm/12.2.0, .github/workflows, PRINCIPLES.md, PRINCIPLES.ko.md, Makefile, config/ci.json, config/generated.json, config/duplication.json, tests, CHANGELOG.md, CHANGELOG.ko.md make kit-check rules-check layout-check duplication-check docs-check [o]
C17.105-1 The build tests read the copied kit 0.0.84 workflows: the bootstrap line whose subshell holds an && is matched whole, the npm@$version of a step that reads devEngines.packageManager is the recorded npm, the sidecar manifests under .mise/locks are no crudui packages, and the release takes only the run, its version coming from the change log (K924). Cause: main CI run 41200932267 failed runtime shards 1 and 2 on ci-local, runtime-version-policy and package-names tests/build/npm-release.mts, tests/build/ci-local.test.mts, tests/build/runtime-version-policy.test.mts, tests/build/package-names.test.mts, CHANGELOG.md, CHANGELOG.ko.md node --test tests/build/ci-local.test.mts tests/build/package-names.test.mts tests/build/runtime-version-policy.test.mts [o]
C17.106 The generated tables outside a Go module or Rust crate (packages/php-ext/src/unicode_data.c and interface_messages.c, the PHP, Python and TypeScript interface-message and unicode tables) are untracked build output under P34: each is written by a make target that its readers and the release build depend on, and config/release.json declares it. Cause: P34 tracks a generated source only in a tagged Go or Rust tree, and C17.105 found unicode_data.c tracked and undeclared Makefile, config/generated.json, config/release.json, .gitignore, the generated tables, CHANGELOG.md, CHANGELOG.ko.md make layout-check kit-check [ ]
C17.107 The workflow tests of crudui read only the workflows of crudui (ci.yml, pages.yml): the copies of kit (ci-pipeline.yml, release.yml), which kit-check holds equal to the installed kit, are left out of the trigger, release-input, tag-push and recorded-npm tests through isVendored, so a kit release changes no crudui test. Cause: C17.105-1 had to rewrite three crudui tests for the content of the 0.0.84 copies tests/build/ci-local.test.mts, tests/build/runtime-version-policy.test.mts, CHANGELOG.md, CHANGELOG.ko.md node --test tests/build/ci-local.test.mts tests/build/runtime-version-policy.test.mts [o]
C17.108 crudui is on kit 0.0.86 and ordered-json 0.0.16: the root package.json and composer.json name their release assets by the packer's name (P39), config/release.json declares product and runtime for every package, ci.yml is named ci for the release workflow of kit, and the package-name test reads a product of release.json as no old crate name package.json, package-lock.json, composer.json, composer.lock, config/release.json, .github/workflows/ci.yml, .github/workflows/release.yml, PRINCIPLES.md, PRINCIPLES.ko.md, tests/build/dependency-health.test.mts, tests/build/package-names.test.mts, CHANGELOG.md, CHANGELOG.ko.md make kit-check rules-check docs-check, node --test tests/build/dependency-health.test.mts tests/build/package-names.test.mts tests/build/ci-local.test.mts [o]
C17.109 crudui is on kit 0.0.87 and ordered-json 0.0.17: every job of ci.yml and pages.yml runs the vendored kit bootstrap action in place of its own copy of the bootstrap steps (kit K992), and the CI tests read that action step instead of the old step text package.json, package-lock.json, composer.json, composer.lock, .github/workflows/ci.yml, .github/workflows/pages.yml, .github/workflows/ci-pipeline.yml, .github/workflows/release.yml, .github/actions/kit-bootstrap/action.yml, tests/build/ci-local.test.mts, tests/build/form-comparison-ci.test.mts, tests/build/npm-release.mts, CHANGELOG.md, CHANGELOG.ko.md make kit-check rules-check docs-check, node --test tests/build/ci-local.test.mts tests/build/form-comparison-ci.test.mts tests/build/runtime-version-policy.test.mts [o]
C17.110 The Go and Rust form-comparison servers require ordered-json 0.0.17, the version the root package.json and composer.json pin, in place of the older 0.0.10 Go module and 0.0.14 Rust tag examples/form-comparison/servers/go/go.mod, examples/form-comparison/servers/go/go.sum, examples/form-comparison/servers/rust/Cargo.toml, examples/form-comparison/servers/rust/Cargo.lock, tests/build/dependency-health.test.mts, CHANGELOG.md, CHANGELOG.ko.md node --test tests/build/dependency-health.test.mts [o]
C17.111 Make the job form-comparison-checks of ci.yml follow the job kit with needs: kit (kit 0.0.88 S12). form-comparison-checks has needs: [kit, form-comparison-browser]. make kit-check [o]
C17.112 Adopt kit 0.0.88: pin its release and commit the copies that kit-sync writes. package.json and package-lock.json pin kit 0.0.88; PRINCIPLES.md and PRINCIPLES.ko.md are its copies. make kit-check; make kit-inject-check runs on the commit [o]