CRUDUI

kit 표준 체크리스트

ID Task Deliverables Verification State
C16.1 저장소가 kit 표준 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는 존재하는 target을 PHP 8.4로 호출하고, 어떤 test도 skip하지 않는다 .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 config/parity.json의 모든 unit은 모든 구현에서 성립하고, test가 이름으로 적은 spec requirement를 인용한다 (kit K273, K275, K276) config/parity.json, docs/spec, the tests of every implementation make parity-declarations-check [o]
C16.4 kit-standard plan의 한국어 checklist가 원문과 일치한다 docs/plans/kit-standard/checklist.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.5 docs/는 K245가 허용한 폴더만 담는다 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 PHP generator에 빈 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 repository의 모든 도구가 config/rebuild.json에 class를 가진다 config/rebuild.json, docs/rebuild make rebuild-check [o]
C16.7-1 config/rebuild.json과 config/duplication.json은 config/owner-checks.json에 owner를 가진다 config/owner-checks.json make owner-validate [o]
C16.7-2 AGENTS.md는 전체 suite가 CI에서만 실행된다는 kit 규칙을 적는다 (make ci, full-run guard, 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 Makefile에 kit의 제거된 full-run 도구가 필요한 target(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 한국어 testing guide는 검토한 영어 원문의 hash를 담는다 docs/operations/testing.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.7-5 ci-local test는 crudui-install target을 준비 step으로 인식한다 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 ci-local test는 kit의 gates.yml workflow를 trigger와 함께 나열한다 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 ci-local test는 kit의 release.yml 사본의 trigger를 기대한다 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 offline-checks test는 kit 0.0.54가 정의한 대로 online target을 나열한다 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 offline-checks test는 설치된 kit가 정의하는 online target을 나열하므로, 새 kit(K348)의 worktree-setup도 포함된다 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은 모든 도구 source를 다룬다. Go와 Rust generator, fixture와 benchmark generator, example의 build script config/rebuild.json make rebuild-check [o]
C16.7-10 config/rebuild.json은 kit이 layout으로 찾는 모든 도구 source를 paths 없이 분류한다 config/rebuild.json make rebuild-check [o]
C16.7-11 kit에 local 전체 실행이 없으므로 config/owner-checks.json은 fullSuite target을 적지 않는다 config/owner-checks.json make owner-validate [o]
C16.7-12 make kit-check가 통과한다. Makefile은 kit의 모든 gate를 CHECK_TARGETS에 나열하고 PRINCIPLES.md는 kit과 같다 Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.7-13 package-names test는 path를 Composer package 이름으로 보지 않는다 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 문서 site는 VitePress로 빌드하고 docs/.vitepress/dist를 제거한다 (scripts/docs-web과 scripts/documentation-links.mts를 대체) package.json, docs/.vitepress, scripts/docs-web, scripts/documentation-links.mts, config/rebuild.json make rebuild-check, make layout-check [-] 원인: 검토한 VitePress distribution은 GHSA-gfr2-rv44-r23c 수정이 없는 reference parser를 내장한다. C18.2는 현재 candidate 검토를 완료하고 직접 관리하는 최신 수정 parser를 유지하며 rebuild record는 향후 유지보수 검토 조건을 설명한다.
C16.8-1 P1: 검토한 VitePress release를 기록하고 내장 parser에 보안 수정이 없으면 검사된 문서 renderer를 유지한다 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 PHP extension을 phpize로 빌드한다 (scripts/php-extension-builder.mts, build-crudui-php-extension.mts, build-ordered-json-php-extension.mts, tool-resolution.mts를 대체). kit이 component 저장소의 S10을 정할 때까지 보류 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 scripts의 명령은 kit이 export하는 process-group runner로 실행한다 (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 scripts는 JSON을 scripts/values.mts가 아니라 ajv schema로 읽는다 (21개 파일이 호출) scripts, tests/build, config/rebuild.json make rebuild-check [o]
C16.11-1 install lock은 형태를 scripts/values.mts가 아니라 ajv schema(scripts/json-schema.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 package와 repository reader(check-packages, package-install-pack, repository-files, check-contract-manifest, features-manifest)는 JSON을 ajv 형태로 읽는다 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 schema, conformance, test-command, doc-coverage script는 JSON을 ajv 형태로 읽는다 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 남은 script는 scripts/values.mts 없이 JSON과 오류를 읽으며, values.mts는 rebuild와 owner-check 항목과 함께 제거된다 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 Tailwind stylesheet는 crudui.css를 components layer로 가져오는 CSS 기본 import이다 (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은 @unicode/unicode-16.0.0에서 얻는다 (scripts/generate-unicode-properties.mts와 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 [-] 원인: UCD parser 대체는 C16.13-1에서 진행하며 버전 정렬은 이 대체의 판단 근거가 아니다.
C16.13-1 P1: 지원 property를 바꾸지 않고 Unicode contract 범위를 Unicode 16.0.0 package에서 얻는다 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은 생성된 Unicode table과 test를 각각의 이유와 함께 제외한다 config/duplication.json make duplication-check [o]
C16.15 PHP validator는 ef와 atch member를 하나의 module로 조합한다 (Compose clone) 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 CHANGELOG는 C16.15가 제거한 src/Compose의 clone 7건을 기록한다 CHANGELOG.md, CHANGELOG.ko.md node node_modules/@polyspec/kit/dist/check-documents.mjs [o]
C16.16 PHP expression parser는 literal을 하나의 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 PHP validator는 list와 detail composition을 하나의 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 PHP validator는 range parameter의 pair를 하나의 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 PHP data validator는 rule 적용과 field 순회를 공유 method로 수행한다 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 PHP의 string rule과 field 참조 rule은 두 base class로 guard를 공유한다 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은 생성된 Go와 TypeScript Unicode table도 제외한다 config/duplication.json make duplication-check [o]
C16.22 Go validator는 path segment의 값을 하나의 함수로 읽는다 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 Go validator model은 순서가 있는 object를 두 generic helper로 읽고 쓴다 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 Go validate package는 field 순회, rule 해제, composition 입력을 공유한다 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 Rust validator는 composition member layering, 허용된 file 판별, list와 detail 입력 읽기를 공유 함수로 수행한다 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 TypeScript validator는 composition layering, literal reader, rule의 형태를 공유한다 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 React, Vue, Svelte adapter는 raw control markup을 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 form comparison은 step을 kit의 process-group runner인 runCommand로 실행하고, kit에 없는 진행 줄, heartbeat와 process tree 중지만 유지한다 (examples/form-comparison/src/step-runner.mjs의 process 코드를 대체; kit K430, K430-1). unit pool은 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 form comparison의 unit pool은 unit을 node:test test로 실행한다: check.mjs와 check-pipeline.mjs의 각 unit은 자기 제한 시간을 가진 node:test test(src/unit-pool.mjs의 unitTest)이고, src/unit-pool.mjs는 장기 작업(runOperation)과 unit 제한 시간(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 form comparison의 public server는 http-proxy package로 request를 전달한다 (examples/form-comparison/src/forward.mjs를 대체) examples/form-comparison, config/rebuild.json make rebuild-check [-] 원인: 교체해도 필수 application 규칙을 모두 유지하며 event 조정을 추가한다. C16.29-1은 대안을 측정하고 Node.js HTTP adapter를 유지한다.
C16.29-1 HTTP 전달을 검토하고 양방향 연결 헤더를 제거한다 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 parameter를 받는 PHP validator rule은 검사 종류마다 하나의 base class를 공유한다 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 Go validator는 slot의 shape marshal과 list, detail 검증을 공유 함수로 수행한다 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 PHP validator는 쌍을 이루는 method마다 자기 계약을 문서화하고 list와 detail을 map 이름으로 검증한다 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 Rust validator는 ef 해석, JSON type 이름, structure text 읽기를 공유 함수로 수행한다 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 Python validator는 composition member를 하나의 함수로 layering하고 모든 진입점에서 null atch를 거부한다 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 TypeScript generator core는 action click handler, declaration 검사, path suffix, file widget, choice option, 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 Go generator는 binding 검사, image preload, row suffix, declaration 오류, number 읽기를 공유한다 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 PHP generator는 image preload link와 object 판별을 공유한다 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 Rust generator는 저장소 root의 contract를 찾는다 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 rust-generators test는 test:runtimes에서 실행된다 package.json node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/test-commands.test.mts [o]
C16.39 Rust generator는 binding language, fixture 결과 정리, message table을 공유하고 Rust test는 사본 없이 순서 있는 object를 만든다 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 PHP library가 둘인 저장소의 PHP extension은 S10의 layout과 이름을 따른다. polyspec_crudui, src/의 하나뿐인 stub, composer.json, 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는 mise shim이 pin한 cargo를 쓰고 scripts/tool-resolution.mts는 제거한다 scripts/run-rust-command.mts, scripts/tool-resolution.mts, config/rebuild.json make rebuild-check [o]
C16.42 kit의 link-check gate를 CHECK_TARGETS에 두고 kit의 principle file과 같게 하여 make kit-check가 통과한다 Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.43 kit의 link-metadata-check gate를 CHECK_TARGETS에 두어 make kit-check가 통과한다 Makefile, PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.44 AGENTS.md는 각 규칙을 Own 또는 principle의 Refines로 적고 principle을 반복하지 않는다 AGENTS.md, AGENTS.ko.md make rules-check [o]
C16.45 dependency policy는 PHP extension의 Composer manifest와 그 lock을 다룬다 config/dependency-policy.json, packages/php-ext/composer.lock make dependency-policy-check [-] 원인: C17.52는 PHP extension manifest와 lock의 policy 및 review coverage를 확인한다. C18.1은 candidate CI 전에 현재 native source 의존성을 준비하고 검증한다.
C16.46 config/parity.json은 crudui의 implementation, tooling root, comparator를 선언한다 config/parity.json make parity-declarations-check [o]
C16.46-1 config/parity.json은 TypeScript 전용 package와 tooling test를 implementation root 밖에 둔다 config/parity.json make parity-declarations-check [o]
C16.47 C engine test는 php-ext test folder에 있고 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 옮겨진 C engine test는 새 folder에서 green으로 실행된다 CHANGELOG.md node node_modules/@polyspec/kit/dist/run-tests.mjs node -- packages/php-ext/tests/engine/engine.test.mjs [o]
C16.48 저장소는 kit의 divergence-check, link-state-check, bypass-check와 internal test를 채택하고 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 C engine test는 자체 implementation 없이 php-extension implementation의 internal test이다 config/parity.json make parity-declarations-check [o]
C16.49 buildOutline은 php, go, rust, php-native, 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 공유 구조 지도 사례는 expected_outline_rows를 가지며, Rust 생성기의 build_outline은 bind_form의 node에 대해 이를 재현합니다 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 native generator protocol은 form-outline 사례를 쓰는 buildOutline operation을 가지며, Go 생성기는 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 native generator protocol의 Rust program은 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 PHP 생성기는 Generator::buildOutline을 가지며, native generator protocol의 PHP program은 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 php-native 확장은 C 엔진이 만드는 Polyspec\Crudui\Generator::buildOutline을 가집니다 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 Python 생성기는 Generator.buildOutline과 공유 form-outline fixture 테스트를 가집니다 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 기능 계약은 buildOutline이 모든 구현에서 통과한다고 선언하고, divergence-check는 buildOutline 차이를 찾지 않습니다 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은 php, go, rust, php-native, 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 Go generator는 resolveAction과 runAction을 공유 form-actions session과 함께 가진다 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 Rust generator는 resolveAction과 runAction을 공유 form-actions session과 함께 가진다 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 native generator protocol의 Rust program은 Form::move_row의 i64 row index로 빌드된다 tests/native-generators/programs/rust/src/main.rs cargo build --locked --manifest-path tests/native-generators/programs/rust/Cargo.toml [o]
C16.50-2 Python generator는 resolveAction과 runAction을 공유 form-actions session과 함께 가진다 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 PHP generator는 resolveAction과 runAction을 공유 form-actions session과 함께 가진다 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 PHP extension은 resolveAction과 runAction을 가지며 공유 form-actions session을 통과한다 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는 php, go, rust, php-native, 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 뷰 상태, 이력, 작업의 중립 규칙과 공유 case 를 쓴다: docs/spec/form-runtime.md 의 CURT-061 부터 CURT-090, TypeScript reference 가 생성하는 고정 데이터 family form-view, form-history, form-actions, view-functions, history-functions, 그리고 중립 입력을 받는 TypeScript resolveAction 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 form-view 세션에서 canUndo 와 canRedo 를 뺀다. 이력이 없는 구현도 실행할 수 있게 한다 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 Go generator 가 뷰 상태를 가진다: ViewState 와 뷰 함수, bindForm 옵션 Collapsed, Form.ToggleRow 와 Form.SetAllExpanded 이며 뷰는 removeRow, rekeyRow, 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 Python generator 가 뷰 상태를 가진다: Generator 의 뷰 함수, bindForm 옵션 collapsed, Form.toggleRow 와 Form.setAllExpanded 이며 뷰는 removeRow, rekeyRow, 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 Rust generator 가 뷰 상태를 가진다: ViewState 와 뷰 함수, BindOptions 의 collapsed, Form::toggle_row 와 Form::set_all_expanded 이며 뷰는 remove_row, rekey_row, 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 BindOptions에 collapsed가 생긴 뒤에도 form comparison의 Rust record server가 빌드된다: 그 form 렌더링은 초기 뷰를 명시한다 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 PHP generator 가 뷰 상태를 가진다: Generator 의 뷰 함수, bindForm 옵션 collapsed, Form::toggleRow 와 Form::setAllExpanded 이며 뷰는 removeRow, rekeyRow, 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 PHP extension은 PHP library의 view state와 history 함수를 등록한다: Generator의 view와 history method, Form::toggleRow와 Form::setAllExpanded, form instance의 view, bindForm 옵션 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는 php, go, rust, php-native, 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 Python generator는 history 함수 emptyHistory, recordChange, canUndo, canRedo, undoChange, 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 history-functions의 TypeScript test는 case마다 test 하나를 둔 unit의 binding이다 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 Go generator는 history 함수 EmptyHistory, RecordChange, CanUndo, CanRedo, UndoChange, 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 Rust generator는 history 함수 empty_history, record_change, can_undo, can_redo, undo_change, 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 PHP generator는 history 함수 emptyHistory, recordChange, canUndo, canRedo, undoChange, 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 Go form instance는 undo 이력을 가진다: undo, redo, canUndo, canRedo와 공유 form-history session 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 Python form instance는 undo 이력을 가진다: undo, redo, canUndo, canRedo와 공유 form-history session 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 Rust form instance는 undo 이력을 가진다: undo, redo, canUndo, canRedo와 공유 form-history session 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 PHP form instance는 undo 이력을 가진다: undo, redo, canUndo, canRedo와 공유 form-history session 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 PHP extension Form은 undo history를 가진다: undo, redo, canUndo, 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은 다른 implementation과 같게 python에 구현된다 contracts/features.json, packages/generator/python make divergence-check reports no partial entry of createForm [o]
C16.54 contracts/features.json에는 partial과 unsupported support 값이 없다 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 어떤 script도 --exclude-group으로 implementation의 실행을 줄이지 않고, php-ext 실행은 php 실행의 모든 test를 실행한다 examples/form-comparison/check-verification.test.mjs, examples/form-comparison/local-verification.mjs make divergence-check reports no --exclude-group [o]
C16.56 docs/spec의 모든 규칙은 접두사 CU의 requirement id를 가지며, 규칙과 표의 행마다 bullet 하나이다 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 docs/spec의 모든 requirement id는 test가 그 id를 이름으로 가진 unit이 인용하고, test가 없는 id는 여섯 implementation 모두에 test를 갖는다 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 빈 collection: validate suite가 CUEC-003, CUEC-005, CUEC-006을 인용하고 여섯 binding을 선언한다 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 form-state suite(form-view, form-history, form-actions, view-functions)와 history-functions의 php-extension binding은 test가 요구사항을 이름으로 밝히는 unit이 인용한다 (CURT-009~012, CURT-061~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 검증 규칙: validate suite가 그 case가 시험하는 docs/spec/validation-rules.md의 CUVR requirement를 인용한다 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 입력 텍스트: validator text-validity suite가 그 case가 시험하는 docs/spec/input-text.md의 CUIT requirement를 인용한다 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: runtime-packages.md의 CURP 요구 중 공유 suite가 test하는 것은 그 unit이 인용한다: validate 연산과 검증, form instance의 생성, 읽기, 교체, 행 연산, 참조 합성 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: spec, list, detail, validate suite가 그 case가 시험하는 docs/spec/schema.md의 CUSC requirement를 인용한다 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 list-validity와 detail-validity suite가 test하는 CUDF 요구는 그 unit이 인용한다: list와 detail 명세의 member, format과 action 값, root key 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 form-markup.md의 CUMK requirement는 test가 이름을 밝히는 unit이 인용한다: 렌더링 case가 시험하는 design 규칙과 markup 규칙 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 form-runtime.md의 CURT requirement 중 state와 render case가 시험하는 것은 unit이 인용한다; TypeScript 전용은 목록으로 남긴다 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 빈 컬렉션과 display 명세의 CUEC, CUDF requirement 중 렌더링 suite의 case가 시험하는 것은 unit이 인용한다; 나머지는 이유와 함께 나열한다 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 display 규칙 CUDF-001..005, 020, 023, 036..039, 검증 날짜 규칙 CUVR-012, keyed 편집 세션 CUEC-007의 case를 작성하고, 확장된 suite의 runner가 모두 통과한다 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 Rust validator는 date 규칙(CUVR-012)에서 reference가 거부하는 text를 거부한다: is_valid_date는 JavaScript Date parser가 거부하는 모든 문자열을 받아들인다 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 date와 dateISO 규칙은 CUVR-058과 CUVR-059가 나열한 text(calendar 유효성을 갖는 layout, offset이 있는 datetime, 문자열만, trim)만 받아들인다: 여섯 구현 모두 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 form-state 세션이 setData의 바인딩 데이터 오류 메시지(CURT-001, CURT-002, CURT-003)를 case로 시험하고, form-actions unit이 이를 인용한다 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 PHP library의 Form::setData는 객체가 아닌 값을 받아 CURT-001의 root 메시지(INVALID_FORM_INPUT, Form data must be an object)로 실패해야 하며, 타입이 지정된 매개변수 array|stdClass에서 나오는 PHP TypeError가 아니어야 한다 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 제품군이 시험하는 런타임 요구사항을 case가 인용한다. CURP-006, CURP-007, CURP-013, CURP-015, CURP-017, CURP-020, CURP-021을 인용하고, 나머지의 이유를 기록한다 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 input-text 요구 CUIT-021, CUIT-022, CUIT-030 ~ CUIT-033, CUIT-035를 시험하는 case가 인용한다 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 Python validator는 text-validity의 value-graph case를 실행하고 parity unit이 그것을 binding한다 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 text-validity build case와 form state root case가 시험하는 런타임 요구사항을 인용한다. CURP-014는 buildList case가, CURP-016은 buildDetail case가, CURP-026은 form state의 PHP root case가 인용한다 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 TypeScript empty collection 테스트가 단언하는 명시적 빈 collection case를 form-render case가 인용한다. 중첩 형제 identity와 순서 case(CUEC-001, CURP-027)와 scalar 명시적 빈 case(CUEC-001, CUEC-004)를 추가하며, 모든 단언이 인용된 case로 덮이면 파일을 internal로 선언한다 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 expr suite는 docs/spec/expressions.md의 CUXP 요구사항을 test가 이름으로 밝히는 unit이 인용한다 (여섯 implementation) 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 PHP extension의 C engine이 expression suite tests/fixtures/expr/cases.json을 평가하며, K422에 따라 node runner로 php-extension에 binding된다 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 composition suite tests/fixtures/compose/cases.json을 suite unit compose로 선언하고 여섯 implementation에 binding한다 (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 남은 compose와 expression test(TypeScript, PHP, Go validator)에 자리를 준다: 각 파일은 그 implementation의 internal test이다 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 중복은 0이다: generator script, adapter, example, php-ext C code는 각 조각의 사본을 하나만 둔다 scripts, packages/*/adapters, examples, packages/php-ext/src make duplication-check [o]
C16.58-1 두 문서 link 재작성기는 markdown-it 속성 재작성기 하나를 공유한다 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 목록과 상세의 Rust text validator는 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 React form render case의 scenario는 반복되는 specification을 공유한다 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 PHP와 Go table generator는 contract reader와 생성 source writer를 하나씩 공유한다 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 교차 검사 콘솔은 JSON parser, download, matrix column, 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 React, Vue, Svelte adapter는 list와 detail renderer, action markup, 정렬 방향, widget root markup을 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 PHP table generator들이 contract reader와 source writer를 공유한다 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 form-comparison stage page들이 form의 binding 평가를 공유한다 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 form-comparison script와 frame이 entry guard, native form field, 결과 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 form-comparison Rust server가 lock 열기와 test fixture를 공유한다 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 validator가 JSON object의 member를 하나의 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 Rust generator와 validator가 embed된 contract를 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 C extension이 값의 member를 하나의 helper 집합으로 읽는다 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 C extension이 typed member를 읽고 설정하는 helper를 하나의 집합으로 공유한다 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 C extension이 정확한 decimal 수를 하나의 word helper 집합으로 비교하고 곱한다 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 C extension이 공유 PHP method의 인수를 한 번에 파싱하고 operation을 하나의 tail로 실행한다 packages/php-ext/src/crudui.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-19 C extension이 row 작업의 collection 열기, unknown row 보고, change commit을 하나의 helper 집합으로 수행한다 packages/php-ext/src/form.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-20 C widget builder들이 source와 options를 model에 하나의 helper로 넘긴다 packages/php-ext/src/widget.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-21 C list 렌더링과 생성이 input을 하나의 함수로 검사한다 packages/php-ext/src/list.c make test-php-ext CASES='RenderingConformanceTest|FormCompleteConformanceTest|ListRenderConformanceTest|DetailRenderConformanceTest|OutlineTest|DisplayRulesTest|FormStateTest|HistoryFunctionsTest' [o]
C16.58-22 C composition, expression, row view entry가 단계를 공유한다 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 C list와 number text가 숫자의 scientific mantissa를 공유한다 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 C form row 작업이 collection을 하나의 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 Go form-comparison 서버가 자체 복사본 대신 validator의 canonical number 함수로 number text를 쓴다 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 PHP form-comparison record store가 자체 복사본 대신 validator의 NumberValue로 number text를 파싱한다 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 TypeScript form-comparison adapter가 mountView와 hydrateView를 하나의 공유 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 C expression value 함수들이 parse와 free 단계를 공유한다 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 C row view 연산이 하나의 list 복사로 row를 toggle하고 remove한다 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 React form render scenario 두 collection case가 spec을 공유한다 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은 여섯 implementation의 규칙만 담는다: tooling 문서는 docs/operations로 옮기고 runtime-packages와 php-extension은 나눈다 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 record server 준비는 OrderedJSON extension source의 내용을 복사하므로 phpize가 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 중립 규칙은 각 implementation이 폼 값 모델을 네이티브 타입으로 옮기는 방식을 서술한다 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 php-ext record server는 module을 빌드한 PHP의 php-fpm으로 실행된다 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 make link가 Go module 옆에 쓰는 go.work와 go.work.sum file은 Git이 무시한다 .gitignore node node_modules/@polyspec/kit/dist/link.mjs link ../ordered-json writes the Go links without refusing [o]
C16.63-1 make link가 Go 모듈 scripts/go 옆에 쓰는 go.work는 Git이 무시한다 .gitignore node node_modules/@polyspec/kit/dist/link.mjs link . ../kit ../ordered-json writes the Go links without refusing [o]
C16.64 계약 manifest는 @polyspec/crudui-generator-core의 internal export를 선언하거나, 해당 entry가 export하지 않도록 하여 make manifest-check가 통과합니다 contracts/, packages/generator/ts/src/internal.ts make manifest-check [o]
C16.65 관리하는 문서와 changelog는 합격 검사를 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 [-] 원인: gate는 kit가 자기 검사를 부르는 용어이며(PRINCIPLES P31, make kit-gates, gates.yml), 저장소의 기록 단어 금지는 그 저장소가 채택한 규칙의 용어를 금지할 수 없습니다(link-owner 결정, 2026-10-20); C16.65-1이 테스트를 고칩니다
C16.65-1 repository-writing test는 kit가 자기 검사를 부르는 용어 gate를 허용한다(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는 CHANGELOG.md의 모든 항목을 같은 순서로 한 번씩 담고 revision marker를 하나만 가진다 CHANGELOG.ko.md node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/docs/changelog.test.mts [o]
C16.67 kit 사본은 2026-10-20의 kit-sync를 따른다(golangci, ruff, clippy 설정, 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은 숨은 오류를 보고하지 않는다: kit lint의 errcheck, errorlint, nilerr finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 clippy disallowed_methods와 map_err_ignore finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 날짜 파서 ruff S112 finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 design appearance ruff S110(try-except-pass) finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 errcheck, errorlint finding을 처리한다(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는 숨은 오류를 보고하지 않는다: kit lint의 clippy finding을 처리한다(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는 숨은 오류를 보고하지 않는다: kit lint의 clippy finding을 처리한다(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)는 숨은 오류를 보고하지 않는다: kit lint의 Go generator(errcheck, errorlint) finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 errcheck finding을 처리한다(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은 숨은 오류를 보고하지 않는다: kit lint의 errcheck finding을 처리한다(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는 숨은 오류를 보고하지 않는다: kit lint의 clippy finding을 처리한다(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는 숨은 오류를 보고하지 않는다: Result::ok, Result::unwrap_or, Result::unwrap_or_else clippy finding을 처리한다(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는 숨은 오류를 보고하지 않는다: kit lint의 clippy finding을 처리한다(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는 숨은 오류를 보고하지 않는다: kit lint의 errcheck, errorlint finding을 처리한다(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은 crudui의 생성 경로를 선언하고, kit의 pre-commit hook이 생성 파일 검사를 실행한다(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는 f9eb43dd의 kit 사본을 받는다(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은 npm, Go, Rust에서 버전 0.0.9로 소비되고 kit link로 checkout에 연결된다; .form-comparison/sources의 자체 clone은 제거된다 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 Go generator는 appearance ternary의 평가 오류를 버리지 않고 반환한다(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가 통과한다: 두 test의 미사용 import와 form-comparison local server, React server entry의 미사용 export를 제거하거나 선언한다 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 ruff format이 보고하는 Python 파일을 포맷한다 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 PHP 소스와 예제는 phpcs 줄 길이 규칙(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 Rust generator는 appearance ternary나 condition expression을 조용한 값으로 바꾸지 않는다(P8, Python과 Go처럼) 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은 모든 generator에서 INVALID_FORM_INPUT으로 실패한다 (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 Go native program은 잘못된 타입의 member를 Rust program처럼 거부한다(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는 f7c1f10c의 kit 사본을 받는다(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 PHP text validity conformance test는 fixture를 읽고 내부 text helper를 검사하되, library source를 읽지 않아 extension 실행이 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 Go generator는 공유 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 crudui-test-native test는 node_modules를 가리키는 대신 Makefile의 KIT 디렉터리를 도출한다 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 Rust generator는 공유 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 Rust generator는 공유 form-render, list-render, detail-render suite를 실행한다 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 Go generator는 공유 form-complete, list-render, detail-render suite를 실행한다 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 PHP generator와 PHP extension은 공유 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 PHP generator와 PHP extension은 공유 list-render와 detail-render suite를 실행한다 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 TypeScript 구현은 generator core, validator와 HTML renderer packages/html로 구성된다(CURP-028); 그 html test는 binding되거나 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 PHP extension은 유한하지 않은 page 또는 total 옵션을 라이브러리와 같이 읽는다 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 PHP extension은 부호가 붙은 radix 숫자 text를 라이브러리와 같이 읽는다 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 ci-local test는 PHP engine 명령의 engine과 comparison 경로를 기대한다 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 PHP extension은 public API만으로 rendering conformance suite를 실행한다 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 공유 suite를 시험하지 않는 Rust test 파일은 이유와 함께 internal로, 공용 test 도우미는 support 파일로 선언한다 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 Rust JsonText 단위 test는 internal이다: 반복 member 규칙은 TypeScript 명세 parser와 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 repository의 PHP file은 phpcs 줄 길이 규칙을 통과한다 the PHP files that phpcs reports PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-php [o]
C16.107-1 repository의 TypeScript file은 oxlint를 통과한다 the TypeScript files that oxlint reports PATH=/opt/homebrew/opt/php@8.4/bin:$PATH make lint-ts [o]
C16.94 docs-check는 prerequisite가 아니라 kit K419의 DOCS_CHECKS hook을 통해 저장소의 doc-coverage gate를 실행한다 Makefile node node_modules/@polyspec/kit/dist/run-tests.mjs node -- tests/build/test-commands.test.mts [o]
C16.100 모든 implementation이 담은 interface message는 contracts/interface-messages.json과 같다: CUMK-065를 인용하는 여섯 binding의 feature unit 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 확장이 폼 메시지와 목록 메시지를 내장하며, php-extension 바인딩의 node 계약 테스트가 interface_messages.c를 컴파일해 두 메시지를 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 kit copy는 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 layout check는 native program의 Go test와 Composer vendor folder를 받아들인다 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 공유 suite를 시험하지 않는 Go test 파일은 이유와 함께 internal로 선언한다 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 공유 suite를 시험하지 않는 PHP test 파일은 이유와 함께 internal로 선언한다 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 공유 스위트가 다루는 TypeScript 및 Python 테스트 파일과 구현 내부 테스트 파일을 이유와 함께 config/parity.json에서 internal로 선언한다 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 TypeScript list-validity와 detail-validity unit을 engine test에 묶고, TypeScript meta-schema test와 명세 parser unit test를 config/parity.json에서 internal로 선언한다 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 Unicode data contract contracts/unicode-properties.json(CUVR-018)를 각 구현에서 검사하는 feature unit을 둔다: Go, Rust, TypeScript, Python과 PHP library test, 그리고 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 확장 API 테스트가 make build-php-ext가 모듈을 쓰는 위치(var/php-ext)에서 모듈을 찾고, API 보고서는 renderDetail과 renderList가 타입을 지정한 옵션에 배열을 전달하며, 빈 상세 specification은 객체가 아니고 목록의 빈 data 옵션은 실패해야 한다고 기대한다 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 fresh make install-packages는 설치만 하고, svelte 도구는 설치 뒤에 link한다 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 Go generator test가 tests/fixtures/text-validity의 generator fixture 다섯 개의 모든 case를 public API로 실행하며, unpaired surrogate를 보존하는 order 유지 reader로 case를 읽는다 packages/generator/go/input_text_test.go cd packages/generator/go && go test -count=1 -run TestInputTextCases . [o]
C16.108-1 Go input text runner는 fixture를 읽는 모든 type assertion을 처리한다. 예상과 다른 type은 case 이름과 함께 실패하고, error나 ok 값은 버리지 않는다 packages/generator/go/input_text_test.go cd packages/generator/go && go test -count=1 -run TestInputTextCases . [o]
C16.109 PHP generator test가 tests/fixtures/text-validity의 generator fixture 다섯 개의 모든 case를 public API로 실행하며, unpaired surrogate를 보존하는 reader로 case를 읽고 PHP extension 아래에서도 통과한다 packages/generator/php/tests/InputTextTest.php make test-php-ext CASES=InputTextTest [o]
C16.110 Rust generator test가 tests/fixtures/text-validity의 generator fixture 다섯 개의 모든 case를 public API로 trial 하나씩 실행하며, 각 operation은 generator text 검사와 validator JsonText로 JSON text를 먼저 검사한다 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 text-validity generator case에 검사하는 requirement id를 적고, case 파일 다섯 개를 suite unit 다섯 개로 묶어 TypeScript, Python, Go, PHP, PHP extension, Rust의 여섯 구현에 binding한다 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 form 버튼 case를 TypeScript reference가 쓴다. bindButtons는 선언된, 기본, 지역화된, 잘못된 버튼을, formButtonsHtml은 마크업과 그 거부를 시험한다 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 TypeScript generator가 모든 form 버튼 case를 실행한다. bindButtons와 formButtonsHtml의 관찰은 속성 순서를 포함해 case가 기록한 값과 같다 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 Go generator가 모든 form 버튼 case를 실행한다. BindButtons와 FormButtonsHTML의 관찰은 case가 기록한 값과 같고, FormButtonsHTML은 목록이 아닌 값을 case가 기록한 거부로 처리한다 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 Python generator가 모든 form 버튼 case를 실행한다. bindButtons와 formButtonsHtml의 관찰은 case가 기록한 값과 같고, bindButtons는 알 수 없는 타입의 버튼을 reference처럼 거부한다 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 Rust generator가 모든 form 버튼 case를 실행한다. bind_buttons와 form_buttons_html의 관찰은 case가 기록한 값과 같고, bind_buttons는 알 수 없는 타입의 버튼을 거부하며, form_buttons_html은 목록이 아닌 값을 case가 기록한 거부로 처리한다 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 PHP library와 PHP extension이 form 버튼 case를 실행한다. bindButtons는 알 수 없는 타입의 버튼을 거부하고, formButtonsHtml은 목록이 아닌 값을 spec 메시지로 거부하며, 둘 다 case가 기록한 값을 관찰한다 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 form 버튼 case는 parity manifest의 suite다. buttons unit은 CURP-008과 CURP-009를 여섯 runner와 함께 인용하고, bindButtons와 formButtonsHtml의 feature 계약은 case와 runner를 적는다 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 TypeScript validator의 choice groups와 hidden paths unit test는 각 assertion을 validate suite의 fixture로 덮으므로 TypeScript의 internal로 선언한다 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는 npm ci 뒤 INSTALL_PACKAGES_EXTRA로 svelte 도구를 실행하고 link를 실행하지 않는다 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가 저장소의 Python 환경으로 link하므로 make install은 손으로 준 환경 없이 link한다 Makefile make install-link, make link-state-check [o]
C16.127 폼 템플릿 형태는 form-runtime.md의 requirement CURT-092이며, TypeScript 기준 구현으로 생성한 템플릿 문서 fixture가 세 operation에서 각 형태 위반을 거부한다 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 TypeScript generator는 inline shape table 대신 template-shape fixture의 모든 case를 bindForm, bindButtons, createForm으로 실행한다 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 Go generator는 inline table 대신 template shape fixture의 모든 case를 template decoder와 bindForm, bindButtons, createForm operation으로 실행한다 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 Rust generator는 inline table 대신 template shape fixture의 모든 case를 decoder로 template을 decode한 뒤 bindForm, bindButtons, createForm operation으로 실행한다 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 PHP generator와 그 extension은 template shape fixture의 모든 case를 bindForm, bindButtons, createForm으로 실행하며, fixture case마다 PHPUnit 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 Python generator는 template shape fixture의 모든 case를 bindForm, bindButtons, createForm으로 실행하며 case마다 subtest 하나를 두고, case 42개를 확인한다 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 form template shape CURT-092는 tests/fixtures/template-shape를 읽는 suite unit이며 TypeScript, Go, Rust, PHP, PHP extension, Python generator에 binding한다. TypeScript decodeFormTemplate test는 TypeScript의 internal이다 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 Go validator의 benchmark driver는 구현이 아닌 harness이므로, parity 검사의 tools root에 선언한다 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 PHP extension의 API test는 php-extension의 internal이다. API와 value-limit test는 PHP만 가진 것을 검사하고, fixture 비교는 validate와 text-validity unit이 덮는다 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 interface message와 Unicode data의 생성된 Go table을 Go module이 배포하므로 생성 파일 예외로 선언한다 config/generated.json make layout-check [o]
C16.139 kit copy는 kit에만 있는 check를 이름으로 대지 않는다(K359-2): PRINCIPLES는 tests/kit 파일을 이름으로 대지 않는다 PRINCIPLES.md, PRINCIPLES.ko.md make rules-check, make kit-check, make layout-check, make link-state-check [o]
C16.137 template-shape fixture의 compiled case는 reference가 compile하고 직렬화한 template이며, CURP-024(한 runtime이 compile한 template을 다른 runtime이 bind)와 CURP-019(compile된 template은 직렬화된다)를 검사하고 unit은 두 id를 인용한다 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 PHP와 Go generator는 text-validity generation 실패마다 error type을 검사한다. load 실패는 ComposeLoadError이고, 입력 실패는 PHP에서 FormError(CUIT-034), Go에서 load가 아닌 error(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 form markup의 stylesheet custom property, outline과 data 블록, 스크롤 동기화는 계약이 아니라 그것을 가진 package의 문서에 둔다 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 미추적 CURT 요구사항 중 브라우저 런타임 본문은 명세에서 런타임을 가진 패키지 문서(form 바인딩, HTML, React, Vue, Svelte)로 옮기고, 모든 구현의 계약인 요구사항은 보고한다 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~036이 각 언어의 오류 타입을 적던 항목을 하나의 중립 요구사항 CUIT-041(로드 실패와 입력 실패는 구현의 서로 다른 오류 타입)로 다시 쓰고, 언어별 타입은 설명으로 남기며, text-validity runner는 각자의 native 타입을 검사한다 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은 CUIT-032부터 CUIT-036의 뜻을 유지한다. 각 구현은 로드 실패와 입력 실패를 표의 항목이 정한 오류 타입으로 보고하며, 표는 요구사항의 내용이다. Rust generator는 둘 다 FormError로 보고한다 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의 표에 Python 항목을 더한다. Python 패키지가 던지는 클래스를 적는다. 검증은 ComposeLoadError와 FormInputError, 생성은 로드 실패가 ComposeLoadError, 입력 실패가 FormError다 docs/spec/input-text.md, docs/spec/input-text.ko.md grep -q "Python: in validation" docs/spec/input-text.md [o]
C16.143 테스트로 확인할 수 없는 두 요구사항(CUSC-037, CUSC-040)을 id 없는 평문으로 바꿉니다 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 클래스 이름 짓기, 뷰 상태, 기록 요구사항(CUMK-001~003, 057, 061)을 이를 검증하는 form-render, form-view, form-history 사례가 인용하도록 합니다 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 추적되지 않은 CUSC 요구사항(CUSC-005, 016, 022, 038, 039, 043, 044, 046)에 공유 사례를 줍니다. 검증하는 기존 사례는 인용하고, 나머지는 form-render와 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 모든 구현이 지키는 미추적 CURT 요구사항을 form state 세션이 인용한다(CURT-053 행 편집·정렬·제거·추가, CURT-054 행과 멤버 rekey와 규칙 경로, CURT-055 잘못된 작업의 원자적 거부와 이후 추가). CURT-052 복사 규칙은 form 비교 예제 README로 옮기고, CURT-056은 id 없는 설명이 된다 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는 최소 행 수가 없는 collection에서 잘못된 제거를 거부하고 모든 행을 지운 뒤 한 행을 추가하는 세션이 인용한다. 형식이 규칙 경로를 관찰하지 않으므로 CURT-054의 인용은 철회한다 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(중첩 필드를 미리 준비하고 템플릿을 직렬화하며, 구성 파일을 다시 읽지 않고 독립된 레코드를 바인드한다)을 직렬화된 한 템플릿에서 둘 이상의 레코드를 바인드하는 case가 인용하며, 각 결과는 자기 레코드에만 의존한다 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를 전부 인용한다. form state 세션이 검증 오류를 데이터 경로와 함께 관찰하고, rekey 세션이 여섯 runner에서 오류가 새 키를 따르는지 보인다 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 form state harness에 검증 단계가 있어 검증기의 오류를 데이터 경로와 함께 관찰하며, 팀과 멤버를 rekey한 뒤 새 경로의 오류를 관찰하는 세션이 있다(기준과 case) 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 Go form state runner가 검증 단계를 구현한다. 세션 명세와 현재 데이터로 검증기를 실행하고 유효성과 각 오류의 경로, 필드, 규칙, 메시지를 관찰한다 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 Python form state runner가 검증 단계를 구현한다. 세션 명세와 현재 record로 검증기를 실행하고 유효성과 각 오류의 경로, 필드, 규칙, 메시지를 관찰한다 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 Rust form state runner가 검증 단계를 구현한다. 세션 명세와 현재 record로 검증기를 실행하고 유효성과 각 오류의 경로, 필드, 규칙, 메시지를 관찰한다 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 PHP form state 테스트(PHP library와 PHP extension이 모두 실행)가 검증 단계를 구현한다. 세션 명세와 현재 record로 검증기를 실행하고 유효성과 각 오류의 경로, 필드, 규칙, 메시지를 관찰한다 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 form-actions unit이 CURT-054를 전부 인용한다. 새 경로의 검증 오류를 관찰하는 rekey 세션을 통해서다 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 새 worktree의 make install이 끝까지 실행된다: kit link가 Python과 Composer 설치 뒤, PHP를 처음 실행하는 phpDocumentor 앞에서 실행된다 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 어떤 바인딩도 실행하지 않는 generator 테스트는 검증하는 계약의 unit에 바인딩되거나, 이유와 함께 자신의 구현의 internal 테스트가 된다 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 form-view와 form-history의 cases가 생성기와 같다: form-state 생성기가 세션의 requirements에 main과 같이 CUMK-057을 인용하여, 재생성이 main의 파일을 그대로 만든다 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(순서 보존 JSON 전송: 멤버 순서, 배열, 없는 값, null, 빈 객체와 빈 배열의 구분, identity나 순서 필드를 더하지 않음)를 form-actions의 case가 전부 인용하고, 여섯 runner가 그 case를 통과한다 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(렌더러는 display만으로 마크업을 쓴다)을 list-render의 format-number case가 전부 인용한다. 그 마크업은 레코드의 원시 값이 아니라 display 텍스트를 보이며, 여섯 runner가 그 case를 통과한다 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 docs/spec/runtime-packages.md의 구현별 런타임 능력 항목 다섯 개를 여섯 구현이 모두 충족하는 중립 항목 CURP-001 하나로 바꾸고, 컴파일·바인딩·렌더링·검증 스위트 단위가 이를 인용 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 CURP-001의 합성과 표현식 부분을 compose와 expr unit이 각각 그것을 명명하는 case 하나로 인용한다 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 docs/spec/runtime-packages.md의 브라우저 바인딩 항목 CURP-023을 TypeScript 폼 바인딩 패키지 README로 옮기고, 그 동작을 시험하는 테스트를 내부 테스트로 선언 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이 C16.57-3-1과 C16.57-3-2가 어느 프로젝트 명령에도 넣지 않은 packages/php-ext/tests/contract의 PHP 확장 계약 테스트를 실행한다 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 tests/build/runtime-version-policy.test.mts의 CI 도구 규칙이 확장의 phpize 빌드(C16.9)가 필요로 하는 setup-php의 phpize와 php-config를 허용한다; setup-php는 여전히 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 tests/build/runtime-version-policy.test.mts의 설치 검사가 링크된 checkout의 kit를 받아들인다: make install은 KIT의 install-tools를 실행하며, kit가 형제 checkout에 링크되면 KIT는 ../kit/dist이다 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 여덟 개 text-validity 단위의 PHP 바인딩(라이브러리와 확장)이 각 단위의 고유 메서드 아래에서 짧은 케이스 이름으로 모든 케이스를 실행하여, make parity-check가 각 케이스를 실행된 것으로 보고한다 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 모든 python 바인딩이 자기 단위의 각 케이스를 make parity-check에 이름으로 보고한다 (R3): 테스트 메서드 하나가 케이스 하나이고, 바인딩은 자기 단위의 테스트 클래스만 venv 인터프리터 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 text-validity-validate, text-validity-validate-list, text-validity-validate-detail, text-validity-value-graphs의 python 바인딩은 각각 자체 테스트 클래스를 가지며, 테스트 메서드는 그 단위의 케이스 이름이다. 픽스처 개수 검사는 별도 클래스가 맡는다 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 list-validity, detail-validity, spec-validity 단위의 python 바인딩은 각각 자체 테스트 클래스를 가지며, 테스트 메서드는 그 단위의 케이스 이름이다. 케이스마다 engine 기대값의 같은 검증 경로를 실행하고, 픽스처 개수 검사는 별도 클래스가 맡는다 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 compose 단위의 python 바인딩은 자체 테스트 클래스를 가지며, 테스트 메서드는 그 픽스처의 케이스 이름이다. 케이스마다 기대값(합성된 map 또는 기록된 code)의 같은 검증 경로를 실행하고, 픽스처 개수 검사는 별도 클래스가 맡는다 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 form-outline 단위의 python 바인딩은 자체 테스트 클래스를 가지며, 테스트 메서드는 그 픽스처의 케이스 이름이다. 케이스마다 기록된 행과 같은 outline을 만들고, 픽스처 개수 검사는 별도 클래스가 맡는다 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 form-complete, list-render, detail-render 단위의 python 바인딩은 각각 자체 테스트 클래스를 가지며, 테스트 메서드는 그 단위의 케이스 이름이다. 케이스마다 출력을 바이트 단위로 렌더링하거나 기록된 실패를 내며, 픽스처 개수 검사는 별도 클래스가 맡는다 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 text-compile-form, text-bind-form, text-create-form, text-build-list, text-build-detail 단위의 python 바인딩은 각각 자체 테스트 클래스를 가지며, 테스트 메서드는 그 단위의 케이스 이름이다. 픽스처 개수 검사는 별도 클래스가 맡는다 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 template-shape 단위의 python 바인딩은 자체 테스트 클래스를 가지며, 테스트 메서드는 그 픽스처의 케이스 이름이다. 케이스마다 템플릿에 연산을 실행해 기록된 거부 또는 통과를 재현하며, 픽스처 개수 검사는 별도 클래스가 맡는다 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 case 보고 행에서 바뀐 python 테스트 파일, 생성기의 test_outline.py와 검증기의 test_text_validity.py가 ruff format이 쓰는 형식이 되어 make lint-python이 통과한다 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이 C16.58-27이 추가한 examples/form-comparison/src/adapters/view-entries.ts를 form comparison 예제의 policy 모듈로 분류한다 config/rebuild.json make rebuild-check [o]
C16.164 사본 PRINCIPLES.md와 PRINCIPLES.ko.md가 K431 뒤 링크된 kit의 것과 같아(make kit-sync) make kit-check가 통과한다 PRINCIPLES.md, PRINCIPLES.ko.md make kit-check [o]
C16.158 buttons, validate, form-render, form-view, expr 단위의 ts 바인딩이 각 케이스를 이름으로 make parity-check (R3)에 보고한다: 케이스마다 이름이 붙은 최상위 vitest 테스트 하나 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 form-view, form-history, form-actions, view-functions 단위의 ts 바인딩이 각자 테스트 파일을 가지며, 최상위 테스트는 그 단위의 사례 이름이다. 공유 등록은 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 text-validity-validate, text-validity-validate-list, text-validity-validate-detail, text-validity-value-graphs 단위의 ts 바인딩이 각자 테스트 파일을 가지며, 최상위 테스트는 그 단위의 사례 이름이다. 공유 사례 코드는 validator text 폴더의 모듈 하나다 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 text-compile-form, text-bind-form, text-create-form, text-build-list, text-build-detail 단위의 ts 바인딩이 각자 테스트 파일을 가지며, 최상위 테스트는 그 단위의 사례 이름이다. 공유 사례 코드는 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 list-validity, detail-validity, spec-validity 단위의 ts 바인딩이 각 사례를 이름으로 보고한다: 세 validator 파일의 사례 묶음이 사례 이름의 최상위 테스트다 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 form-outline, form-complete, list-render, detail-render 단위의 ts 바인딩이 각 사례를 이름으로 보고한다: 네 html conformance 파일의 사례 묶음이 사례 이름의 최상위 테스트다 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 template-shape 단위의 ts 바인딩이 각 사례를 이름으로 보고한다: form template shape의 사례가 사례 이름의 최상위 테스트다 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 validator 입력 text 도우미의 internal 테스트가 요구사항을 명명하지 않고(R16), 공유 text-validity 도우미 모듈이 타입 인식 lint를 통과한다: 도우미의 import가 .ts 파일을 명명한다 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 buttons, validate, form-render, form-view, expr 단위의 Rust 바인딩이 단위의 각 케이스를 이름으로 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 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 단위 18개의 Rust 바인딩이 단위의 각 케이스를 이름으로 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 list-validity, detail-validity, spec-validity, compose, form-complete, list-render, detail-render 단위 7개의 Rust 바인딩이 단위의 각 케이스를 이름으로 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 Rust의 text unit 여덟 개가 unit마다 자기 libtest symbol을 가져, 각 바인딩이 자기 unit의 test만 이름으로 실행한다 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 Rust outline fixture 검사가 통합 test에서 실행되어, form-outline fixture의 사례마다 trial 하나로 parity 검사가 이름을 읽는다 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 interface-messages의 Rust feature 바인딩이 실행하는 native test 이름을 명시하여 parity 검사가 그것을 찾는다 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 value-graph unit의 Rust 바인딩이 fixture의 사례 열두 개를 모두 이름으로 실행하며, fixture가 기술한 공유 컨테이너(두 번 놓인 값, 자기를 포함하는 값)를 다룬다 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 R3 를 보고하는 go 바인딩의 모든 케이스가 기본 케이스 이름의 직접 하위 테스트로 실행된다 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 text-compile-form, text-bind-form, text-create-form, text-build-list, text-build-detail 의 go 바인딩이 각자의 테스트 함수로 실행되고, 그 직접 하위 테스트가 기본 케이스 이름이다 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 validator 의 text-validity 세 단위와 expr 의 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-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 form-outline의 go binding이 각 case를 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 공유 validate fixture tests/fixtures/validate/cases.json이 생성기의 출력과 같다: 생성기가 손으로 쓰인 CUSC-038 expression 두 case를 쓴다 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 list와 detail validity fixture가 모든 generator에 묶인다: 각 generator는 spec이 요구하는 선언 case(CUDF-036~062)를 INVALID_FORM_INPUT으로 거부하고 나머지 case는 기록대로 받거나 거부한다 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 검증 기록은 실제 실행한 PHP 버전을 보존하고 PHP >=8.4 지원 범위를 선택한 CI toolchain과 구분하며, 과거 측정이 현재 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 sprintf-js 1.0.3의 npm advisory 1241202(GHSA-hp3w-g68c-fv3c, medium: 무제한 precision 지정자로 인한 서비스 거부)가 package-lock.json에서 사라진다; sprintf-js는 직접 개발 의존성 @microsoft/api-documenter 7.30.18과 @polyspec/kit의 @microsoft/api-extractor 7.59.4가 요구하는 @rushstack/ts-command-line 5.3.17의 argparse 1.0.10을 거치는 전이 의존성이다; 수정된 sprintf-js가 없으므로(취약 범위 <= 1.1.3, 최신) 공동 의존성 일괄 갱신에서 사라진다 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' [-] 원인: GHSA-hp3w-g68c-fv3c는 2026-10-22에 철회되었다. C17.52가 오래된 advisory exception을 제거하고 검토를 갱신한다.
C16.169-1 config/dependency-policy.json의 sprintf-js advisory 예외가 sprintf-js를 들여오는 두 경로를 모두 적는다: scripts/gen-api-docs.mts가 고정 인자로 실행하는 직접 개발 의존성 @microsoft/api-documenter 7.30.18과 @polyspec/kit의 @microsoft/api-extractor 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 루트 package.json의 npm devDependencies가 @polyspec/kit과 @polyspec/ordered-json을 GitHub release tarball에서 가져와 npm ci가 로컬에 설치한다; 대신 make link로 형제 checkout에서 오고 release URL은 없어진다; 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' [-] 원인: C17.56이 현재 sibling source의 native npm 링크를 검증한다. 추적 manifest와 lock은 archive URL을 유지하며 개발 링크는 해당 archive version과 독립적으로 source 코드를 선택한다.
C16.171 composer 루트가 polyspec/ordered-json을 release-assets-fetch가 받는 release zip(var/composer-artifacts)에서 가져오고 로컬 경로가 release-assets-fetch를 먼저 실행한다; 대신 make link로 형제 checkout에서 오고 release-assets-fetch는 로컬 경로에서 없어진다; 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' [-] 원인: Native Composer path repository는 root 선언과 lock을 통해 현재 sibling source를 해석한다. C18.1은 그 source 준비를 통합하며 두 번째 archive compatibility profile이나 과거 공개 OrderedJSON 검증은 요구하지 않는다.
C16.172 Composer 루트는 검토된 목표 버전 13.4.3을 phpunit/phpunit으로 요구하며, hyper와 ordered-json이 선언하는 방식대로 정확한 버전으로 선언하고 13.4.3으로 잠근다 (K435) composer.json, composer.lock, config/dependency-review.json make dependency-policy-check [-] 원인: S4는 version 선택을 Composer에 맡긴다. Native Composer는 선언한 제약 내에서 현재 PHPUnit release를 선택하며 다른 저장소와 일치시키기 위한 정확한 제약은 필요하지 않다.
C16.173 crudui가 react와 react-dom을 19.3.1, vitest를 5.0.5로 올리고 리뷰 기록을 다시 쓴다. 원인: 기록의 최신 버전이 19.2.8과 5.0.4로 뒤처져 있다. package.json, package-lock.json, config/dependency-review.json make dependency-policy-check [-] 원인: S4는 저장소 간 버전 정렬을 요구하지 않는다. C18.3은 별도 변경으로 React와 React DOM을 19.3.1로 갱신하고 client widget-script rendering을 수정하며 의존성 예외를 제거한다.
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 및 load 검사는 submission budget을 선언하고 PHP는 모든 sibling을 보관하지 않고 검사된 tree를 측정하며 PHP와 Go field model은 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 PHP와 Go FieldSpec 직렬화 test는 validation 요구사항 coverage를 주장하지 않고 구현 표현을 설명한다. packages/validator/php/tests/FieldSpecTest.php, packages/validator/go/validator/types_test.go make parity-declarations-check [o]
C17.11 kit-sync가 kit에서 바뀐 사본을 가져오고 K514 이후 kit이 자기 패키지에서 읽는 lint 설정을 지우며, crudui의 owner 규칙은 lint가 kit-gates의 gate인 언어의 각 source 경로를 그 lint와 duplication-check로 보낸다. 원인: crudui의 kit-bootstrap.mk, install-mise.mts, tool-wrappers.mts, principles, gates.yml 사본은 kit과 다르고, ruff.toml 외 일곱 lint 설정은 kit이 더 이상 쓰지 않는 사본이며(K514), K534 이후 kit-check는 owner가 각 언어의 lint를 선택하는지 확인하는데 crudui의 규칙은 그렇지 않다. 인수 조건: make kit-check, make owner-validate와 lint가 통과한다. red fixture: 지금 make kit-check가 실패한다. 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는 각 api-extractor.json이 kit 패키지의 설정을 extends하기를 요구하고, gen-api-docs와 Makefile의 도구는 main checkout의 도구에서 오므로, linked worktree에서 docs-check가 통과한다(C17.11 후속). 원인: C17.11은 각 api-extractor.json이 @polyspec/kit/config/api-extractor.kit.json을 extends하게 했는데(kit K514) check-doc-coverage.test는 여전히 지워진 사본을 요구하고, gen-api-docs는 checkout의 var/tools에서 phpDocumentor를 읽으며 UV, GO, COMPOSER는 linked worktree가 가지지 않는 $(CURDIR)/var/tools를 이름 붙인다(kit K519). 인수 조건: check-doc-coverage.test와 gen-api-docs.test가 통과하고, phar는 main checkout의 도구에서 오며, phpDocumentor의 cache는 checkout 자신의 것이고, UV, GO, COMPOSER는 $(KIT_TOOLS)를 이름 붙인다. red fixture: 지금 check-doc-coverage.test가 실패한다. 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 form-render의 expectError 케이스는 여섯 바인딩 모두에서 code뿐 아니라 message도 비교한다 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 빈 select의 placeholder는 규칙이다: spec이 placeholder 옵션의 텍스트와 값을 정하고 각 구현은 정확히 그것을 쓴다 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 반복 그룹에서 가져온 선택지는 원본 그룹 행이 바뀌면 브라우저에서 새로 고쳐진다: spec이 새로 고침 규칙을 정하고 각 브라우저 바인딩이 구현한다. 남은 발견: 개발 의존성으로만 선언된 런타임 import는 어떤 검사도 잡지 않으며, 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 import는 runtime dependency를 요구하며 devDependencies로만 제공되는 package는 dependency 검사에서 실패한다(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 crudui의 모든 catch 절은 바인딩을 가진다: 결과를 뜻하는 오류로 좁히고 나머지는 다시 던지거나, 모든 실패가 결과를 뜻하면 // catch-any -- <이유>로 이유를 밝힌다 (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가 main에서 widgets, rules, slots, grammar tokens를 돌려준다: 기대값이 아니라 원인을 고친다 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 php-ext 엔진 테스트는 공유 검증 케이스 수를 하드코딩한 318이 아니라 tests/fixtures cases.json에서 도출하며, 케이스가 빠지면 실패한다 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 조건 트리를 편집하는 form 컨트롤: 생성기가 여섯 구현 모두에서 렌더링하고, 브라우저 바인딩이 편집하며, 객체를 conditionTree 규칙에 제출한다 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 choice group의 boolean 행 값에는 명시된 규칙이 있고 모든 구현이 따른다 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 run.mts와 php-ext 테스트의 커버리지 개수 단언은 오래된 하드코딩 합계가 아니라 공유 cases.json 파일에서 개수를 도출한다 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 Go form-render 테스트는 오류 코드를 오류 자체에서 읽는다: 인식되지 않는 오류에 INVALID_FORM_INPUT을 기본으로 붙이지 않으며, 그 케이스는 실패한다 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 검증은 boolean, only, object가 아닌 multiple을 load에서 거부한다: 여섯 검증기 모두 INVALID_RULE_PARAMETER로, 공유 케이스와 함께 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 Go, Rust, Python form-render 테스트와 Python validate 테스트의 수동 입력 케이스 합계는 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 php-ext 런타임 작성기는 data-source-relations의 실수를 JSON.stringify와 같은 ECMAScript 수 표기로 쓴다 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 조건 트리 구조화 편집기: 생성기가 모든 렌더러에 트리 뷰를 그리고, connectForm이 그 동작으로 트리를 다시 쓴다 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 Python generator는 data-source-relations를 값의 JSON 텍스트로 쓰고, 없거나 null인 값만 []로 씁니다. 지금은 값을 or []로 보내 {}와 ""가 []가 됩니다(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 PHP 확장은 float control 값을 정규 텍스트, 즉 같은 double로 다시 읽히는 가장 짧은 텍스트로 씁니다. 지금은 ps_scalar_string이 %.15g로 써서 0.30000000000000004가 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는 kit K614를 따른다: kit-sync 복사본을 지우고, 공유 파일은 kit checkout으로 가는 symlink가 되며, bootstrap은 kit에서 include한다 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 Makefile은 kit 도구를 하드코딩된 .mjs가 아니라 $(KIT)/<도구>.$(KIT_EXT)로 실행한다 (K613) Makefile (the 10 recipe lines that run $(KIT)/.mjs) make kit-check; make lint-ts [o]
C17.30 crudui의 config/rebuild.json에는 더 이상 없는 파일의 항목과 class 없는 도구가 없다 (rebuild-check 통과) config/rebuild.json (the four entries of K614 and the tool without a class) make rebuild-check [o]
C17.31 choice 필드의 items는 group source와 리터럴 항목 목록을 하나의 집합으로 묶어 검사한다. 여섯 구현 모두 (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 group source 행들 사이의 값 중복은 행 경로와 값을 밝힌 코드 있는 입력 오류로 검증에 실패한다. 여섯 구현 모두 (조용한 버림 금지) 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 widget.c를 컴파일하는 php-ext 테스트 소스 목록은 ps_condition_scalar를 정의하는 rule_condition_tree.c도 컴파일하여, comparison과 contract 테스트가 링크된다 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는 kit의 dist(dist/<tool>.mjs, dist/kit.mk)를 가리키던 모든 곳에서 kit의 소스(node_modules/@polyspec/kit/scripts/kit/<tool>.mts)를 가리킨다: npm script, contracts/features.json과 config/dependency-policy.json의 검증 명령, composer.json, README, build test. 원인: kit은 K613부터 소스를 실행하고 kit K646은 dist 빌드를 멈추므로, dist를 가리키는 명령은 낡거나 없는 파일을 실행하며, tests/build/ci-local.test.mts는 $(KIT)/<tool>.$(KIT_EXT)를 실행하는 Makefile에서 kit 도구를 찾지 못한다. 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 php-ext C 엔진은 C17.25 조건 편집기 트리를 기대 HTML과 같게 렌더링한다 (comparison 테스트, 세 케이스 모두) 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 구조화된 condition wrapper는 apostrophe를 포함한 idPrefix에 raw attribute escaping을 적용하여 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 HTML renderer가 structured condition widget에 공유 raw serializer를 사용하여 React renderer와 모든 byte가 일치한다. 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, Python은 structured condition editor를 shared renderer와 같은 raw HTML text, attribute, void element 직렬화로 렌더링한다. 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 tests/build의 실패하는 열 개 테스트가 main에서 통과한다: ci-local, dependency-health, runtime-version-policy, 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 완료된 checklist 수정을 통합하고 전체 suite를 반복하지 않으면서 통합 기록과 변경 owner를 검증한다. 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 검사가 선언된 kit source 경로를 읽고 make database 출력을 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 Root TypeScript 검사는 설치된 package declaration을 읽고 package 구현 source를 import하지 않고 fixture generator를 검사한다. 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 reader는 fixture 경로와 실제 I/O 또는 JSON parsing 오류를 명시한다. 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 reader는 경로와 실제 오류를 보존하면서 명시적 result match로 읽기와 parse 실패를 처리한다. 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 Cross-check console test는 선언된 PHP extension build를 읽고 validation fixture export는 명시적으로 제공된 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 모든 display renderer는 Vue와 Svelte source rendering을 포함하여 CUDF-023에 따라 JavaScript link URL을 대체한다. 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 Contract manifest와 생성된 feature 문서는 generator core internal entry의 sanitizeUrl export를 포함한다. 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 CLI manifest markdown test가 오래된 export 목록 없이 현재 contract의 전체 package export 표를 정확히 검증한다. 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 Go button 계약 명령은 TestButtonsSuite를 소유한 generator package를 선택하고 일치하는 test가 없는 package를 선택하지 않으며 모든 shared button case를 실행한다. 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 textarea가 독립된 border를 유지하고 Chromium, Firefox, WebKit의 좁고 넓은 viewport 안에 배치된다. 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 fixture는 module에 선언된 php-config와 PHP-FPM 경로를 제공하고 모든 결과에서 launcher cleanup 완료를 기다린다. 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 Python native generator program이 buildOutline 요청을 설치된 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 PHP record server는 검증된 score text를 PHP numeric conversion으로 변환하며 native extension process에서 PHP 구현 class를 읽지 않는다. 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 PHP API parity report가 mixed button 입력의 code가 있는 generation 오류를 검사하고 choice source 실패가 library와 extension에서 generator FormError type을 유지한다. 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 컴파일은 반복 array allocation을 펼치지 않고 모든 case를 보존하며 validator test program은 reference rule 구현을 link한다. 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 PHP extension의 공개 form message가 interface-message contract의 모든 condition-editor key와 value를 포함한다. 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 문서와 provenance 검사는 기존 source 및 docblock 검사를 유지하며 extension runtime 계약 test 밖의 문서 도구 unit으로 실행한다. 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 종결 예외를 재검토하고 release 선행 조건을 준비한다 (우선순위: 높음). 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 수용한 철회와 candidate 단계 재검토를 구분한다 (우선순위: 높음). 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 Go workspace와 toolchain을 linked module의 최소 버전에 맞춘다 (우선순위: 높음). 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 취약한 npm 의존성과 Tokio를 수정 버전으로 갱신한다 (우선순위: 높음). 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 Native 개발 설치로 현재 sibling source package를 사용하고 철회 작업을 재평가한다 (우선순위: 높음). 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 Native source 설치 입력을 안정화하고 lint 도구를 선언한다 (우선순위: 높음). 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 현재 kit 공유 파일을 추적 일반 파일로 동기화한다 (우선순위: 높음). 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 composer.json에는 저장소 밖의 polyspec 패키지를 잇는 path repository가 없고, vendor/polyspec/ordered-json은 make link가 만든 평범한 symlink다 (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는 kit이 삭제하는 네 대상(dependency-policy-check, dependency-policy-mutation-check, dependency-review, composer-provider-entries)에 대한 실행 참조와 그것만을 위한 파일을 제거한다 (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 reference-transaction 훅 제거 (K801) .githooks/reference-transaction removed sh -c '! git grep -q reference-transaction -- .githooks Makefile scripts config .github' [o]
C17.60 K788/K789 python backend와 정책 선언 제거 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 K798 release-consumer와 release-proof 채택 제거 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 offline downloads 정규식에서 python-lock 대안 제거 (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 K805 commit 규칙의 소비자 상태 제거 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 crudui의 make release-versions 단계 제거 (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 C17.61과 C17.63이 삭제한 파일을 가리키는 owner-check glob을 제거한다 config/owner-checks.json make owner-validate [o]
C17.66 kit가 삭제한 target과 hook을 원칙과 에이전트 문서의 강제 참조에서 제거한다 PRINCIPLES.md, PRINCIPLES.ko.md, AGENTS.md, AGENTS.ko.md make rules-check [o]
C17.67 kit 0.0.72를 채택한다: release asset을 pin하고 lock을 갱신하고 kit를 동기화하며 CI에서 link와 link-state-check를 제거한다 package.json, package-lock.json, .github/workflows/ci.yml, .gitignore make kit-sync; make owner-validate; make rules-check [o]
C17.68 dependency-health 테스트가 workflow 밖에서 설정하는 CI 신원을 제거한다 tests/build/dependency-health.test.mts make bypass-check [o]
C17.69 FormTest가 반복된 literal choice의 generation error를 전달하도록 맞춘다 packages/generator/php/tests/FormTest.php make test-php-ext CASES=testRepeatedLiteralChoiceUsesGenerationError [o]
C17.70 RuleParametersTest가 잘못된 pattern의 이전 원인 사슬 전체를 보존하도록 맞춘다 packages/validator/php/tests/Validate/RuleParametersTest.php make test-php-ext CASES=testInvalidPatternPreservesCompletePreviousCauseChain [o]
C17.71 form-comparison Rust 서버가 CI에서 ordered-json 태그를 오프라인으로 해석하게 한다 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 kit 0.0.75를 채택한다: release asset을 pin하고 lock을 갱신하고 kit를 동기화한다 package.json, package-lock.json make kit-sync; make owner-validate; make rules-check [o]
C17.73 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 kit 0.0.77 2차 묶음을 채택한다: 링크 선언 파일(K869)과 ci-local의 --siblings 단언, Makefile:173의 raw uv sync를 make uv-install로 옮기기(K850), toolchain-check 제거(K854), ci.yml의 공유 gate 중복 제거(K870), 런타임이 필요로 하면 deps-node(K859), release-assets-fetch 제거(K865), cargo-downloads-check 제거(K864: Makefile:238~452의 cargo 타깃 24곳 선행, Makefile:28과 :186 주석, package-build.md:321과 ko :282의 경로는 fetch-cargo-downloads.mjs로, offline-checks.test.mts:4, :34, :134(내려받는 명령 정규식이 fetch-cargo-downloads를 가리키도록), :144-146; make install의 fetch 단언은 install-kit 출력에 맞춘다), link-state-check를 link-check로 바꾸고 .links 파일과 .gitignore 항목, prepare-commit-msg 훅 삭제 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 dependency-health의 canonical Composer 테스트를 C17.57의 packages.json 저장소 설계로 옮긴다 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 Rust form 서버의 ordered-json git 의존을 잠긴 커밋으로 고정해, 오프라인 cargo 단계가 태그 참조 없이 해석하게 한다(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' [-] 원인: kit K856(8d1eea1d, kit main에 있음)이 원인이다. kit v0.0.76 link.mts:731의 cargo update --offline이 sibling patch로 cargo update --offline -p polyspec-ordered-json을 실행해 failed to find tag v0.0.13(exit 101)으로 실패했다. git db에 tag 참조가 없었기 때문이다. K856이 그 줄을 지웠고, 0.0.77은 cargo metadata에 --config patch를 붙여 tag를 다시 풀지 않는다. crudui 선언은 릴리스 상태에서 통과한다(clippy --offline --locked exit 0)
C17.78 kit K892가 타깃을 지워 고아가 된 prepare-commit-msg 훅을 제거해 crudui main의 모든 커밋이 다시 돌게 한다 .githooks/prepare-commit-msg (removed in 29ca676f) sh -c '! test -e .githooks/prepare-commit-msg' [o]
C17.77 main에서 이미 실패하는 ci-local의 낡은 단언을 정리한다: kit 내부 단언은 삭제하고, crudui 동작 단언은 현재 workflow에 맞춘다(push-gate.yml, Kit CI 계획 스키마, TypeScript link 형태, native unit 묶음, generator 동등성, tag push, workflow trigger) 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 form-comparison 브라우저 검사는 각 서버마다 자기 job에서 돌고, 나머지 검사는 그 뒤에 한 번 돈다(form-comparison-ci.test.mts:131 이하 단언) tests/build/form-comparison-ci.test.mts node scripts/run-tests.mts node -- tests/build/form-comparison-ci.test.mts [-] 원인: C17.74에 합친다: 빨간 원인은 kit K864가 지운 crudui-test-form-comparison-browser의 cargo-downloads-check 선행이며, C17.74가 그 선행을 제거하므로 form-comparison-ci.test.mts의 browser jobs 단언이 함께 통과한다
C17.80 CI provider 레시피(Makefile:136)가 packages.json URL에서 OrderedJSON 버전을 맞는 정규식으로 읽게 한다 Makefile node --test --test-name-pattern "CI provider step reads the OrderedJSON version" tests/build/ci-local.test.mts [o]
C17.81 crudui가 쓰는 OrderedJSON 릴리스를 0.0.14로 통일한다: composer.json의 packages.json 저장소, Rust form 서버의 tag와 lock, 릴리스 문서와 composer lock(0.0.9 릴리스 전) 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 dependency-health의 CI 설치 분기를 읽기 전에 정의되었음을 단언해, make typecheck가 통과하게 한다(dependency-health.test.mts:572-573) tests/build/dependency-health.test.mts make typecheck [o]
C17.83 kit이 더 이상 가지지 않는 --without-library 옵션을 crudui-test-php-api(Makefile:415)의 generator PHP 검사에서 뺀다. PHPUnit이 실행되고 적합성 증거가 생긴다 Makefile node tests/conformance/run-suite.mts phpunit --cwd packages/generator/php -- tests/FormStateTest.php [o]
C17.84 릴리스 OrderedJSON php-ext를 var/ordered-json-php-ext 대신 packages.json 저장소에서 Composer가 설치한 vendor/polyspec/ordered-json-php-ext에서 읽는다(local-servers.mjs:23, CI record stores와 browser 검사) 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는 var/pie를 읽는 form-comparison 대상 전에 OrderedJSON php-ext를 빌드(make ordered-json-ext)하여 새 CI 체크아웃이 실패하지 않게 한다 (실행 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는 test-php 레시피(Makefile:574)를 crudui-test-php-source로 바꿔 kit의 test-php가 그대로 실행되게 하고, CI가 그 대상으로 source-internal PHP suite에 도달하게 한다 (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는 C17.86이 손으로 바꾼 vendored PRINCIPLES.md와 PRINCIPLES.ko.md를 make kit-sync로 kit 0.0.77 문구로 되돌려 kit-inject-check가 통과하게 한다 (실행 41044985845) PRINCIPLES.md, PRINCIPLES.ko.md make kit-inject-check exit 0; make rules-check exit 0 [o]
C17.88 crudui는 @polyspec/kit 0.0.78(K909, K916, K918)을 채택한다: 핀과 lock을 npm으로 갱신하고, make kit-sync로 0.0.78 사본을 쓰고, 채택을 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는 Python CI job을 다른 validator job과 같은 형식의 validator · Python으로 이름 짓는다 (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는 @polyspec/kit 0.0.79를 채택한다. 0.0.79는 자체 release에서 PHP arginfo 생성기를 설치하고 CI run id로 릴리스한다(release.yml workflow_dispatch의 run과 version, release-tag가 태그를 만든다). 0.0.79가 릴리스되면 시작한다 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는 Svelte ESLint만 남기고, kit의 pipeline이 ts runtime의 kit-gates-runtime-ts로 lint-ts를 한 번 실행하므로 중복을 제거한다 (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 tests/build/ci-local.test.mts의 K870 test를 C17.91 규칙으로 바꾼다: make lint는 lint-ts를 실행하지 않고, kit pipeline이 TypeScript gate를 한 번 실행한다 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 tests/build의 lint-coverage test를 C17.91 규칙으로 다시 쓴다: make lint는 Svelte ESLint를 실행하고, TypeScript gate는 CI pipeline의 kit lint-ts다 (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는 ci.yml의 자체 검사 대상을 S12가 허용하는 대로 config/ci.json targets(shared, parity, runtimes)에 선언하여 kit pipeline이 gate 뒤에 실행하게 한다 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 OrderedJSON php-ext를 빌드하는 form-comparison job 세 개가 install-tools TOOLS에 pie를 선택하여 pie-build의 pie shim이 있게 한다 (C17.90, 실행 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 CI 형태 테스트가 C17.90의 kit job을 받아들인다: runtime-version-policy는 이 저장소의 재사용 워크플로를 부르는 job을 runs-on 검사에서, 로컬 ./ uses를 commit SHA 고정 검사에서 제외하고, form-comparison-checks는 kit에 닿는 form-comparison-browser만 needs로 둔다 (C17.90, 실행 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는 ordered-json-ext에서 kit의 pie-build 대신 PIE 명령을 직접 실행한다. kit main이 pie-build를 제거하고(K931) 0.0.81에 포함될 예정이므로, 설치된 installed.json의 한 항목 install-path를 기록한다 (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는 릴리스된 0.0.9 변경 기록의 두 항목(CHANGELOG.md:14, :27과 KO 쌍)을 origin 문구로 되돌리고, pie-build 제거(K931)를 0.0.81 예정으로 적으며, KO source-sha256을 다시 찍는다 (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는 0.0.9 게시를 CHANGELOG.md와 CHANGELOG.ko.md의 ## Unreleased에 기록한다 (release run 41090852507, CI run 41086677097, tag v0.0.9 on db740a10, asset 12개) 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는 kit main이 요구하는(K933) packageManager npm@12.2.0의 sha512 다이제스트를 package.json:96에 적는다. kit 핀은 바꾸지 않는다 package.json make kit-check exit 0; the bootstrap of the worktree passes [o]
C17.98-1 crudui는 읽히지 않는 RecordedToolchain의 npm 필드(감사가 찾은 두 번째 packageManager 파서)를 지우고, CHANGELOG.ko.md를 make documents-stamp로 다시 찍는다 (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는 추적되는 생성 테이블 세 개를 config/generated.json tracked에 생성기 사유와 함께 선언하고 duplication.json 항목을 지운다 (kit 예외 감사, 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는 config/toolchain.json의 TypeScript 6.0.3 예외를 지운다. kit 버전 장치가 더 이상 읽지 않으므로 이 파일은 rust nightly 예외만 받는다. packages/svelte의 package.json 고정값은 그대로 둔다. 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는 tests/build/ordered-json-pie.test.mts를 런타임 테스트 명령에 등록한다. 그래서 tests/build의 모든 node:test 파일이 프로젝트 명령으로 실행된다 (CI 실행 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는 ordered-json-ext가 PIE 패키지 폴더를 기록하는 스크립트를 scripts/ordered-json-package.mts로 옮긴다. 그래서 오프라인 테스트가 그 레시피 줄을 다운로드 명령으로 읽지 않는다 (CI 실행 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는 scripts/ordered-json-package.mts를 config/rebuild.json에 policy로 분류한다. PIE가 패키지 폴더 기록을 정의하지 않기 때문이다. 그래서 kit 작업의 rebuild-check가 통과한다 (CI 실행 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는 scripts/ordered-json-package.mts의 두 인자를 쓰기 전에 검사한다. 그래서 build 작업의 루트 타입 검사가 통과한다 (CI 실행 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는 kit 0.0.84를 채택한다. kit 고정값과 lock은 v0.0.84 asset을 가리키고, package.json은 devEngines에 npm 12.2.0을, mise.toml은 npm:npm과 그 mise.lock 항목, 보조 lock을 선언한다. kit-sync는 0.0.84 workflow를 복사하고, config/generated.json은 Go 표 두 개를 tracked 형식으로 적으며, CI 단계는 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 build 테스트는 kit 0.0.84에서 복사한 workflow를 읽는다. 하위 셸에 &&가 있는 bootstrap 줄은 통째로 맞추고, devEngines.packageManager를 읽는 단계의 npm@$version은 기록된 npm으로 본다. .mise/locks 아래의 보조 manifest는 crudui 패키지가 아니며, 릴리스는 run 하나만 받고 버전은 변경 기록에서 읽는다(K924). 원인: main CI run 41200932267의 runtime shard 1과 2가 ci-local, runtime-version-policy, 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 Go 모듈이나 Rust crate 밖의 생성 표(packages/php-ext/src/unicode_data.c와 interface_messages.c, PHP·Python·TypeScript의 interface message 표와 unicode 표)는 P34에 따라 추적하지 않는 빌드 결과다. 각 파일은 make 대상이 쓰고, 그 파일을 읽는 대상과 릴리스 빌드는 그 대상에 의존하며, config/release.json이 그 파일을 선언한다. 원인: P34는 생성 소스를 태그된 Go나 Rust 트리에서만 추적하는데, C17.105에서 unicode_data.c가 선언 없이 추적되고 있음을 찾았다 Makefile, config/generated.json, config/release.json, .gitignore, the generated tables, CHANGELOG.md, CHANGELOG.ko.md make layout-check kit-check [ ]
C17.107 crudui의 workflow 테스트는 crudui 자신의 workflow(ci.yml, pages.yml)만 읽는다. kit-check가 설치된 kit과 같음을 보장하는 kit 복사본(ci-pipeline.yml, release.yml)은 isVendored로 trigger, 릴리스 입력, 태그 push, 기록된 npm 테스트에서 뺀다. 그래서 kit 릴리스가 crudui 테스트를 바꾸지 않는다. 원인: C17.105-1에서 0.0.84 복사본의 내용 때문에 crudui 테스트 세 개를 고쳐야 했다 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는 kit 0.0.86과 ordered-json 0.0.16를 쓴다: 루트 package.json과 composer.json은 릴리스 파일을 패커의 이름으로 부르고(P39), config/release.json은 모든 패키지의 product와 runtime을 선언하며, ci.yml의 이름은 kit 릴리스 workflow를 위해 ci이고, 패키지 이름 테스트는 release.json의 product를 옛 crate 이름으로 읽지 않는다 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는 kit 0.0.87과 ordered-json 0.0.17을 쓴다: ci.yml과 pages.yml의 모든 job은 자기 복사본 대신 kit이 넣어 주는 bootstrap action을 돌리고(kit K992), CI 테스트는 옛 단계 문구 대신 그 action 단계를 읽는다 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 Go와 Rust form-comparison 서버는 옛 0.0.10 Go 모듈과 0.0.14 Rust 태그 대신, 루트 package.json과 composer.json이 고정한 ordered-json 0.0.17을 요구한다 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 ci.yml의 job form-comparison-checks가 needs: kit로 job kit을 따르게 한다(kit 0.0.88 S12). form-comparison-checks has needs: [kit, form-comparison-browser]. make kit-check [o]
C17.112 kit 0.0.88을 채택한다: release를 pin하고 kit-sync가 쓰는 사본을 commit한다. 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]