tom_specs_clitool 0.14.1
tom_specs_clitool: ^0.14.1 copied to clipboard
CLI tools for TomSpecs model analysis, validation, and SOM code generation.
Changelog #
0.14.1 #
Fixes found by the first run of the suite on Linux and Windows hosts that had never built the model.
- Windows paths:
validate_codespecs --backlinks, its findings and the extract keys, the doc-coverage report, the documentation-build link scan and the §10.2 citation corpus write/-separated paths on every host; the analyzer is given normalized paths (doc coverage, model freshness). - The model-freshness fingerprint hashes the model sources plus the committed
model version (
tom_specs_model/pubspec.yaml), no longer the per-host, uncommittedversion.versioner.dart, so it is reproducible on a fresh checkout; its file set is sorted by the/-separated name. NewreadCommittedModelVersion;readModelVersionStamprefuses a stamp whose version differs from the pubspec (left from an earlier build). check_formatnames a package that was never resolved (no package config) instead of reporting its files as unformatted, and runs the formatter in batches under the Windows command-line limit (formatBatches).createAnalysisDriverrefuses a package that declares dependencies but was never resolved (UnresolvedPackageException): analysing it resolved none of its imports, so the generators emitted facades with no document roots without saying why.
0.14.0 #
bin/spec_checks.dart: the TomSpecs process checks on any project's document, one subcommand each —validate,import-answers,accept-marks,required-fields,question-register,feature-register,project-idea-coverage,authorization,coverage— over the runtime's newspec_checks.dartlibrary. A project's data is read from<spec-root>/checks/; the model is the embedded one oftom_som_dart_v0. Seedoc/process_checks.md.tom_som_dart_runtime: ^1.8.1,tom_som_dart_v0: ^1.8.0.
0.13.0 #
tom_analyzer_shared: ^0.13.0(from ^0.12.0): a cached bundle is named by its dependency closure, so no run deletes a bundle another run links against. The CLI uses onlyGroupedPackageBundleBuilderand the embedder lookups, which 0.13.0 leaves as they are.tool/dartdoc_build_set.yamlliststom_som_dart_v0; the README anddoc/gates.mdsay so.analyzer: ^14.7.0(from ^14.1.0), with the embedded SDK summary rebuilt on Dart 3.13 / analyzer 14.7 (analyzer 14.5 and 14.7 cannot read each other's summaries; Flutter 3.47.9). A host still on an older SDK now fails at resolution rather than reading a summary it cannot decode.tom_analyzer_shared0.12.0 (from ^0.8.0): summaries are built with Flutter'sdart:ui, the summary cache is keyed by the analyzer's data version, and a bundle is cached only when it is complete (0.12.0 fixes bundles missing types when two processes filled one cache partition).
0.12.0 #
- On analyzer 14:
analyzer: ^14.1.0andtom_analyzer_shared: ^0.8.0(from ^10 and ^0.7.2). The model reader, the API-signature and doc-coverage gates and the CodeSpecs reader follow analyzer 14's AST (one node per formal parameter with its default clause,NamedArgument, declaration bodies and name parts); the embedded SDK summary is regenerated, since an analyzer-10 summary cannot be read by analyzer 14. Outlines, the spec-ops registry and the SOM generation are byte-identical to the analyzer-10 build.
0.11.0 #
extract_answers: a review round's answers, comments and, optionally, open questions and inline marks, written as a step folder'sanswers.md(SOM §11.9.7). It takes one or more documents (fragments of one root are assembled; roots are grouped in the order given) and options--path,--open,--marks,--countsand-o. It fails on a malformed annotation.resolveSpecDocumentRootis public.
0.10.1 #
- The section-citation gate also reads
tom_doc_specs/libandtom_doc_scanner/test, which now cite SOM §11.9 (review annotations).
0.10.0 #
generate_registry_tests: generates the registry part of an application's test suite from its specification — operations by role, custom handler, error code and control, screens by role with refused actions hidden — as committed, formatted Dart test files over an application-ownedRegistryTestHarness; cross-checks the registries in both directions;--checkreports a removed case or a stale suite.
0.9.0 #
- Requires
tom_specs_core0.4.0. The model reader and meta export carryField.multiple; the static tier rejectsmultiplewithoutrefersTo.
0.8.2 #
validate_codespecscheck 8 knows@CsJob'sintervalarm:intervalandintervalAnchorare its slots and no other arm's.
0.8.1 #
- The static tier rejects a form that declares one field name twice; the generated accessors of every runtime would otherwise collide.
0.8.0 #
- Requires
tom_specs_core0.3.0 and the 1.6.7 model chain. - The model reader and meta export carry
Field.productOf/Field.rankOf; the static tier (invariantREFERS-TO) checks that every operand and rank key is a numeric or enum field of its form or a sibling form, and accepts./-scopedcountOftargets.
0.7.0 #
- Requires the 1.6.1 model chain (
tom_som_dart_runtime,tom_som_dart_v0) andtom_specs_core0.2.3. validate_codespecschecks 38–41: protocol bindings resolve (@CsOperationBinding), and framework protocol-feature hooks are complete and never re-declared as endpoints (csFeatureHooks/csFeatureReservedPaths, read from--cs-vocabulary).Field.codeflows into the exported meta (code: trueon aformFields[]entry, omitted when false) and into every language's generated form-field meta, so each runtime's markdown codec can write the value as a code span (SOM §11.4 rule 8). Requirestom_specs_core0.2.3 and the 1.6.1 Dart chain.
0.6.0 #
- Requires the 1.5.0 model chain (
tom_som_dart_runtime,tom_som_dart_v0). - The exported spec-model meta carries
modelHash, the sha256 of its canonical content without the build keys (specModelContentHash), so a consumer can tell a changed model under an unchanged version.validateSpecModelMetarefuses amodelHashthat does not match the content. A canonicalgenerate_somrun records hash and version intool/model_surface.stamp.jsonand warns when the hash moved but thetom_specs_modelversion did not (modelChangeWithoutVersionBump). validate_specreports a schema finding's document path and section id.tool/verify_published_tests.sh --preflightruns every release member's own suite on the local tree before a publish; the README carries the release procedure.- The schema generator lets a
@Referencelist's container admit the item types its element class is owned under elsewhere. - The default suite gained the archive-ignore gate
(
lib/src/pub_archive_ignores.dart): every release member is dry-run published, and no tracked file may be dropped from its archive. - The README records the package as the exception to the
tom_build_baseCLI rule.
0.5.0 #
-
The model reader and JSON export carry
Field.countOfinto the meta, and the static validator checks its targets under invariantREFERS-TO(a list-element class; a filter field the class declares, an enum value it has). -
validate_spectakes several fragments of one document: each is decoded, they are assembled (SpecDocument.assemble; an overlap is a decode-tier finding and stops the other tiers), and the schema and instance tiers judge the assembly, so cross-fragment references are no longer reported dangling.--assembled-outwrites the assembled document. -
validate_specvalidates any project's TomSpecs document — a*.docspecs.yamlor a SOM-rendered*.md, any of the fourteen roots, detected or named with--root— on three tiers that all run: decode, the DocSpecs schema over the rendition, andvalidateDocument.--markdown-outwrites the rendition;--jsongives the report invalidate_codespecs' shape. Depends ontom_som_dart_v0for the embedded model and schemas. Documented indoc/validating_a_document.md. -
validate_codespecs --jsonwrites one versioned JSON report (formatcodespecs-validation): inputs, unrun checks, excluded areas, and per violation its check, title, defining section, severity, file, line, token, area and message.CodeSpecsViolationgainstokenandarea, set by checks 34–36. The text report is unchanged. -
validate_codespecs --backlinkswrites the trio's back-link index (formatcodespecs-backlinks): every declaration with its@CodeSpecid and source tokens, its@DocSpectokens, locus, file and line. -
The command moved into
lib(runValidateCodespecs) and compiles withdart compile exeinto a standalone binary; a test compiles it and runs it with no SDK onPATH. -
bin/codespecs_areas.dartalso transcribes the Stage-A gate tables ofcodespecs_prompt.md§4.4.2 (A4's required arguments, with their Resolves to and Applies when columns) and §4.5 (A5's carriers) into the catalogue'sgateblock (--promptnames the document). A test holds every row to the generated model. -
validate_codespecsreads extracts and the gate record through the SOM runtime'sCodeSpecsExtractSetinstead of a reader of its own. The gate-record entry may carry anote:; an unknown key in it is now an error. -
bin/codespecs_areas.darttranscribes thecodespecs_mapping.md§4.4.6 step table into the catalogue'sstepsarray, cells verbatim, and checks the step ↔ area relation in both directions;--checkcovers it. -
The TypeScript and JavaScript facades carry a DocSpecs schema accessor (
SomScriptSchemasEmitter):somDocSpecsSchema(id)in<package>_schemas.ts/.js, embedded like Dart's, exported as<package>/schemas, with<package>/schemas/*opening the shipped files. -
The TypeScript facade takes its runtime as a peer dependency, linked for its own build by a
file:devDependency. Afile:dependency travelled into thenpm packtarball and left a symlink in a consumer's installed tree; the two tarballs now install side by side with none. -
The model JSON export honours a class-level
@Form. A class'scontentmember is exported as a form carrying the class's form fields, astom_specs_model_rules.md§5.3 states and the DocSpecs schema generator already did. All 73 such classes reached the nine runtimes as plain text, so a document could satisfy the schema tier or the instance tier, never both. -
@ContentType('description', …)is prose. The schema generator givestextanddescriptionnoformat(proseContentTypes);descriptionused to become a format, which made the validator demand a fenced code block around a sentence.
0.4.0 #
bin/check_som_parity.dart— asks whether a capability reached all nine SOM planes, not only whether the planes agree, with deliberate asymmetries recorded intool/som_parity_exceptions.yaml.- Documentation-generator provisioning:
tool/provision_doc_generators.shreports (and on--installperforms) the toolchains the eight API-reference generators need, sharing its PATH rules with the reference driver throughtool/lib/doc_toolchain_path.sh. pdoc is required on Python >= 3.13. check_release_drift.darthonours.pubignore: a path that never reaches pub.dev is not unpublished change. It also reads apublished_from:record (version + commit) and measures from the commit a version was actually published from, so a change that landed between the bump and the publish is not reported as unpublished for the life of the version.tool/release_set.yamlis no longer shipped: it records this workspace's releases, and shipping it made every recorded acknowledgement drift the package that holds it.- Section-citation, doc-coverage and invariant-correspondence gates refined;
tool/doccov.py, the documentation campaign's Python counter, is retired.
0.3.2 #
tool/verify_published_tests.sh— run every release member's shipped tests from its pub.dev archive, against hosted dependencies, in a directory with no workspace siblings. It downloads the archive rather than rebuilding one fromgit ls-filesminus.pubignore: a reconstruction re-implements pub's packaging rules and would hide the case that motivated it — fixtures untracked in git, so absent from the archive while present in the workspace.- A release step, not a standing gate, and it refuses to start while
check_release_drift.dartis red. The archive's tests are only meaningful against the archive's dependencies; a local tree run against published siblings reports stale-publish drift as a test failure, which teaches a reader to ignore the check. - Its first run found
tom_specs_modelshipping three test groups that read a workspace sibling and crashed for a consumer.
0.3.1 #
bin/check_release_drift.dartgains the option surface every entrypoint in this package carries (--manifest,--container-root,--verbose,--help), and the README row documents it. Caught by this package's ownentrypoint_options_test, which requires every entrypoint to declare--helpand every README row to cite only options the entrypoint really has — 0.3.0 shipped the tool with noArgParserat all.- The first thing the new gate reported was this package: 0.3.0 was published and then two files changed. That is the loop it exists to close.
0.3.0 #
240 files, +34,604 lines since 0.2.0 — the largest drift in the release set, and it is mostly gates and generators rather than new surface.
- Two new generated accessors (SOM §10.3):
SomDartSchemasEmitterwrites the fourteen embedded DocSpecs schemas assomDocSpecsSchema(id), andbin/codespecs_areas.dartnow writes a Dart accessor beside the area catalogue JSON. Both close the same defect the whole-model accessor closed: a package-relative read returns nothing in an AOT binary and does not say so. - The model's value enums are bound, and the generators carry them through:
enums:andmodelLabel:reachDocSpecsSchemaGeneratorfrom all nine language generators, Go emits a defined type over string and Rust a realenumwithas_str/from_token. somReachableEnumsandsomEmittedSurfaceconsolidate rules that had been written out once per emitter — nine byte-identical copies of the reachability walk, eighteen of the root filter — and eight of the nine enum copies were collecting a field kind the model never declares, so eight facades emitted no enum at all.- New standing gates, all in the default
dart testrun: three citation gates plus the scan-set coverage check that keeps their subject closed, the formatting gate, the release-closure walk, the release-drift report added in this release, the model-freshness stamp, invariant correspondence, the doc-coverage ratchet, thespec_opscoverage checks, the spec-tree duplication ratchet and the shipped-script path gate. spec_ops.g.dartgains theconnect:binding for all thirteen projection roots, so a projection re-points onto the live document instead of serializing default-constructed sections.- The package is documented, formatted under the tall style, and its README is the CLI reference.
0.2.0 #
- SOM generators emit the format-3 CodeSpecs extractor across all nine
runtimes (headlines + instance ids); the areas catalogue gains CE-EN, the
domainEnummember kind's extract home (27 areas). - CodeSpecs validator: extract-reading checks extended (
cs_extract,cs_checks); packaging updates for the Python, Go, Java and Rust targets. - Depends on
tom_som_dart_runtime^1.1.0.
0.1.0 #
- Initial development release (pub.dev 0.x channel, BSD-3-Clause).