Migrating from spec_led_ex

Copy Markdown View Source

This checklist is for the Argos, Engage, Builder, and Atlas migration PRs. Do the steps in one PR so configuration, spec edits, and CI agree on the same Ancora version.

Checklist

  1. Replace the dependency with the pinned Ancora release and refresh the lock file.
  2. Run mix spec.init, then compare the generated agent guide, skill, README, and configuration with the repository's existing .spec/ files. Keep repository-specific instructions.
  3. Move authored subjects to .spec/specs/ and decisions to .spec/decisions/. Remove fields and verification kinds that Ancora no longer reads.
  4. Tag tests with each requirement ID. A tagged test must call the production function that anchors its subject.
  5. Set default_base, test_paths, and lib_paths for the repository. Copy severity choices through the code map below. Every subject override needs a reason.
  6. Replace the old CI command with mix spec.check --base origin/main, using the repository's actual trunk ref when it differs.
  7. Run mix spec.check --base HEAD once to fix corpus and tag errors. Then run against the trunk base and review every drift, growth, shrink, and uncovered file finding.
  8. Remove the compatibility shim only after the repository's CI passes with Ancora alone.

Finding code map

Ancora has 30 finding codes. The right column is the closed registry. Several old checks converge on one current code, while some current codes have no direct predecessor.

specled_ex codeAncora code
branch_guard_realization_driftderived/drift
no direct predecessorderived/growth
no direct predecessorderived/shrink
detector_unavailablederived/unresolved_calls
detector_unavailablederived/unparseable_source
branch_guard_dangling_bindingderived/unanchored_subject
branch_guard_unmapped_changechange/uncovered_file
branch_guard_missing_decision_updatechange/missing_decision
branch_guard_requirement_without_test_tagtags/new_requirement_untagged
tag_scan_parse_errortags/parse_error
tag_dynamic_value_skippedtags/dynamic_value
requirement_without_test_tagtags/requirement_untagged
verification_cover_untaggedtags/unknown_requirement
append_only/requirement_deletedappend/requirement_deleted
append_only/must_downgradedappend/must_downgraded
verification_kind_invalid, verification_unknown_kindformat/retired_construct
verification_command_*, tagged_tests_cover_not_executedspec/parse_error
duplicate_requirement_id, duplicate_scenario_id, duplicate_subject_id, duplicate_exception_id, duplicate_decision_idspec/duplicate_id
invalid_id_formatspec/invalid_id
meta_field_missing, requirement_id_missing, scenario_id_missingspec/missing_field
verification_target_missing*, surface_target_*, scenario_cover_unknown, subject_unknown_decision_referencespec/unknown_reference
requirement_missing_verificationspec/requirement_unverified
decision_* parse checksadr/parse_error
decision_* section checksadr/missing_section
cross_field/affects_emptyadr/affects_empty
cross_field/affects_unresolvedadr/affects_unresolved
overlap/duplicate_coversoverlap/duplicate_covers
overlap/must_stem_collisionoverlap/must_stem_collision
legacy configuration key checksconfig/unknown_key
legacy configuration value checksconfig/invalid_value

The old trailer and environment settings map as follows:

Old settingAncora setting
Spec-Drift:Spec-Ack: <code>=<info|warning>
SPECLED_SHOW_INFOANCORA_SHOW_INFO
SPECLED_COMMAND_OUTPUT_DIR, SPECLED_DISABLE_TRACERremoved