frontmattering 0.4.2__tar.gz → 0.4.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. frontmattering-0.4.4/.github/ISSUE_TEMPLATE/config.yml +11 -0
  2. frontmattering-0.4.4/.github/ISSUE_TEMPLATE/doc_confusion.yml +18 -0
  3. frontmattering-0.4.4/.github/ISSUE_TEMPLATE/pilot_report.yml +54 -0
  4. frontmattering-0.4.4/.github/ISSUE_TEMPLATE/runtime_ci_report.yml +30 -0
  5. {frontmattering-0.4.2 → frontmattering-0.4.4}/.github/workflows/ci.yml +5 -1
  6. frontmattering-0.4.4/.github/workflows/publish.yml +45 -0
  7. {frontmattering-0.4.2 → frontmattering-0.4.4}/.github/workflows/release.yml +2 -0
  8. frontmattering-0.4.4/CHANGELOG.md +43 -0
  9. {frontmattering-0.4.2 → frontmattering-0.4.4}/MANIFEST.in +0 -3
  10. {frontmattering-0.4.2 → frontmattering-0.4.4}/PKG-INFO +20 -12
  11. frontmattering-0.4.4/README.md +63 -0
  12. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/tools/build_arms.py +1 -1
  13. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/AI_INDEX.json +8 -8
  14. {frontmattering-0.4.2/kernel/frontmattering/resources → frontmattering-0.4.4/kernel}/KERNEL_ACCEPTANCE_REPORT.md +1 -1
  15. frontmattering-0.4.4/kernel/frontmattering/__init__.py +1 -0
  16. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/__main__.py +25 -6
  17. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/promotion.py +32 -8
  18. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/AI_INDEX.json +8 -8
  19. {frontmattering-0.4.2/kernel → frontmattering-0.4.4/kernel/frontmattering/resources}/KERNEL_ACCEPTANCE_REPORT.md +1 -1
  20. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_pilot_readiness.py +10 -4
  21. {frontmattering-0.4.2/kernel → frontmattering-0.4.4/kernel/frontmattering/resources}/tools/distribution_receipt.py +2 -2
  22. {frontmattering-0.4.2/kernel → frontmattering-0.4.4/kernel/frontmattering/resources}/tools/generate_ai_index.py +26 -4
  23. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering.egg-info/PKG-INFO +20 -12
  24. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering.egg-info/SOURCES.txt +7 -4
  25. frontmattering-0.4.4/kernel/frontmattering.egg-info/requires.txt +5 -0
  26. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_pilot_readiness.py +10 -4
  27. {frontmattering-0.4.2/kernel/frontmattering/resources → frontmattering-0.4.4/kernel}/tools/distribution_receipt.py +2 -2
  28. {frontmattering-0.4.2/kernel/frontmattering/resources → frontmattering-0.4.4/kernel}/tools/generate_ai_index.py +26 -4
  29. {frontmattering-0.4.2 → frontmattering-0.4.4}/pyproject.toml +6 -1
  30. frontmattering-0.4.4/tests/test_v044_quickstart_transactional_promote.py +85 -0
  31. frontmattering-0.4.2/CHANGELOG.md +0 -22
  32. frontmattering-0.4.2/FRONTMATTERING_V0_4_2_DELIVERY_NOTE.md +0 -18
  33. frontmattering-0.4.2/FRONTMATTERING_v0_4_2_RELEASE_SUMMARY.md +0 -25
  34. frontmattering-0.4.2/README.md +0 -59
  35. frontmattering-0.4.2/RELEASE_NOTES_v0_4_2.md +0 -30
  36. frontmattering-0.4.2/kernel/frontmattering/__init__.py +0 -1
  37. frontmattering-0.4.2/kernel/frontmattering.egg-info/requires.txt +0 -2
  38. {frontmattering-0.4.2 → frontmattering-0.4.4}/.editorconfig +0 -0
  39. {frontmattering-0.4.2 → frontmattering-0.4.4}/.gitattributes +0 -0
  40. {frontmattering-0.4.2 → frontmattering-0.4.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  41. {frontmattering-0.4.2 → frontmattering-0.4.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  42. {frontmattering-0.4.2 → frontmattering-0.4.4}/.github/pull_request_template.md +0 -0
  43. {frontmattering-0.4.2 → frontmattering-0.4.4}/.gitignore +0 -0
  44. {frontmattering-0.4.2 → frontmattering-0.4.4}/CODE_OF_CONDUCT.md +0 -0
  45. {frontmattering-0.4.2 → frontmattering-0.4.4}/COMMERCIAL_LICENSE_REQUIRED.md +0 -0
  46. {frontmattering-0.4.2 → frontmattering-0.4.4}/CONTRIBUTING.md +0 -0
  47. {frontmattering-0.4.2 → frontmattering-0.4.4}/GOVERNANCE.md +0 -0
  48. {frontmattering-0.4.2 → frontmattering-0.4.4}/LICENSE.md +0 -0
  49. {frontmattering-0.4.2 → frontmattering-0.4.4}/NOTICE +0 -0
  50. {frontmattering-0.4.2 → frontmattering-0.4.4}/REPOSITORY_STATUS.md +0 -0
  51. {frontmattering-0.4.2 → frontmattering-0.4.4}/SECURITY.md +0 -0
  52. {frontmattering-0.4.2 → frontmattering-0.4.4}/SUPPORT.md +0 -0
  53. {frontmattering-0.4.2 → frontmattering-0.4.4}/THIRD_PARTY_NOTICES.md +0 -0
  54. {frontmattering-0.4.2 → frontmattering-0.4.4}/TRADEMARKS.md +0 -0
  55. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/README.md +0 -0
  56. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/benchmark_contract.yaml +0 -0
  57. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/expected_answers.yaml +0 -0
  58. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/fixtures/README.md +0 -0
  59. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/participant_receipt.schema.json +0 -0
  60. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/00_START_HERE.md +0 -0
  61. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/10_NORMATIVE_SPEC.md +0 -0
  62. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/20_IMPLEMENTATION_CONTRACT.md +0 -0
  63. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/21_LEGACY_IMPLEMENTATION_CONTRACT.md +0 -0
  64. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/30_TEST_SUFFICIENCY.md +0 -0
  65. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/40_EVIDENCE_RECORD.md +0 -0
  66. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/source_corpus/50_RELEASE_DECISION.md +0 -0
  67. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/tasks.yaml +0 -0
  68. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/tools/check_content_equivalence.py +0 -0
  69. {frontmattering-0.4.2 → frontmattering-0.4.4}/benchmarks/cold_start_v1/tools/score.py +0 -0
  70. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/AI_START_HERE.md +0 -0
  71. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/DAILY_USE_GUIDE.md +0 -0
  72. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/FRONTMATTERING_FRONTMATTER_SPEC_v0_1_5.md +0 -0
  73. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/00_AI_START_HERE.md +0 -0
  74. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/10_NORMATIVE_SPEC.md +0 -0
  75. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/20_IMPLEMENTATION_CONTRACT.md +0 -0
  76. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/30_TEST_SUFFICIENCY.md +0 -0
  77. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/40_EVIDENCE_RECORD.md +0 -0
  78. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/no_frontmatter_demo/50_RELEASE_DECISION.md +0 -0
  79. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/00_AI_START_HERE.md +0 -0
  80. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/10_NORMATIVE_SPEC.md +0 -0
  81. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/20_IMPLEMENTATION_CONTRACT.md +0 -0
  82. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/30_TEST_SUFFICIENCY.md +0 -0
  83. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/40_EVIDENCE_RECORD.md +0 -0
  84. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/examples/power_demo/50_RELEASE_DECISION.md +0 -0
  85. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/adoption_digest_mismatch_rejected/doc.md +0 -0
  86. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/adoption_record_on_wrong_role_rejected/doc.md +0 -0
  87. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/adoption_record_shape_rejected/doc.md +0 -0
  88. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/adoption_without_bootstrap_receipt_rejected/doc.md +0 -0
  89. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/authored_go_used_as_evidence_rejected/doc.md +0 -0
  90. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_body_digest_mismatch_rejected/doc.md +0 -0
  91. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_fields_mismatch_rejected/doc.md +0 -0
  92. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_malformed_rejected/doc.md +0 -0
  93. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_missing_under_trust_rejected/.frontmattering/project.yaml +0 -0
  94. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_missing_under_trust_rejected/doc.md +0 -0
  95. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_scope_selector_rejected/doc.md +0 -0
  96. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/body_tether_unknown_canonicalization_rejected/doc.md +0 -0
  97. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/bootstrap_receipt_shape_rejected/doc.md +0 -0
  98. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/bootstrap_without_validator_blocks_adoption/doc.md +0 -0
  99. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/claim_boundary_missing_does_not_verify_rejected/doc.md +0 -0
  100. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/claimed_state_overreach_rejected/doc.md +0 -0
  101. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/clause_enforcement_drift_rejected/doc.md +0 -0
  102. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/container_cardinality_rejected/doc.md +0 -0
  103. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/deepest_intention_missing_rejected/doc.md +0 -0
  104. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/downstream_phase_without_upstream_evidence_rejected/doc.md +0 -0
  105. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/duplicate_document_id_rejected/a.md +0 -0
  106. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/duplicate_document_id_rejected/b.md +0 -0
  107. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/duplicate_yaml_key_rejected/doc.md +0 -0
  108. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/evidence_edge_digest_missing_rejected/doc.md +0 -0
  109. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/evidence_reference_used_as_truth_rejected/doc.md +0 -0
  110. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/external_edge_locator_missing_rejected/doc.md +0 -0
  111. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/external_edge_set_id_missing_rejected/doc.md +0 -0
  112. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/extracted_catalog_drift_rejected/doc.md +0 -0
  113. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/fixture_reverse_reachability_drift_rejected/doc.md +0 -0
  114. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/frontmatter_only_view_incomplete_rejected/doc.md +0 -0
  115. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/frontmatter_registry_conflict_blocks/doc.md +0 -0
  116. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/frontmatter_view_body_truth_overclaim_rejected/doc.md +0 -0
  117. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/generated_state_in_frontmatter_rejected/doc.md +0 -0
  118. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/green_checks_conflation_rejected/doc.md +0 -0
  119. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/historical_digest_used_as_current_evidence_rejected/doc.md +0 -0
  120. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/implementation_start_gate_bypass_rejected/doc.md +0 -0
  121. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/intention_positive_negative_conflation_rejected/doc.md +0 -0
  122. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/legacy_string_machine_surface_requires_mapping/doc.md +0 -0
  123. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/load_order_inversion_flagged/a.md +0 -0
  124. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/load_order_inversion_flagged/b.md +0 -0
  125. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/machine_surface_identity_incomplete_rejected/doc.md +0 -0
  126. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/migration_field_drop_rejected/doc.md +0 -0
  127. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/migration_silent_coercion_rejected/doc.md +0 -0
  128. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/missing_frontmatter_rejected/doc.md +0 -0
  129. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/non_root_exception_or_silent_fallback_rejected/doc.md +0 -0
  130. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/nonowner_redefines_intention_rejected/doc.md +0 -0
  131. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/output_format_conflation_rejected/doc.md +0 -0
  132. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/parser_byte_ranges_missing_rejected/doc.md +0 -0
  133. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/parser_partial_model_on_error_rejected/doc.md +0 -0
  134. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/parser_source_locator_missing_rejected/doc.md +0 -0
  135. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/projected_field_without_origin_rejected/doc.md +0 -0
  136. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/projection_rebuild_nondeterminism_rejected/doc.md +0 -0
  137. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/projection_row_without_source_locator_rejected/doc.md +0 -0
  138. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/relationship_resolution_scope_missing_rejected/doc.md +0 -0
  139. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/relationship_resolution_scope_unknown_rejected/doc.md +0 -0
  140. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/relationship_semantics_rejected/doc.md +0 -0
  141. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/relationship_target_unresolved_rejected/doc.md +0 -0
  142. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/release_surface_digest_missing_rejected/doc.md +0 -0
  143. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/required_dependency_cycle_rejected/a.md +0 -0
  144. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/required_dependency_cycle_rejected/b.md +0 -0
  145. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/routing_tag_not_in_task_catalog_rejected/doc.md +0 -0
  146. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/routing_tag_router_not_in_scope_rejected/doc.md +0 -0
  147. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/scope_on_nonsupersedes_rejected/doc.md +0 -0
  148. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/stale_bootstrap_receipt_rejected/doc.md +0 -0
  149. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/stale_validation_result_rejected/doc.md +0 -0
  150. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/supersedes_without_scope_rejected/doc.md +0 -0
  151. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/target_section_not_found_rejected/a.md +0 -0
  152. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/target_section_not_found_rejected/b.md +0 -0
  153. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/target_sections_on_external_edge_rejected/doc.md +0 -0
  154. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/task_scoped_defects_filtering/router.md +0 -0
  155. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/task_scoped_defects_filtering/selected.md +0 -0
  156. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/task_scoped_defects_filtering/skipped.md +0 -0
  157. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/template_claims_normative_authority_rejected/doc.md +0 -0
  158. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/two_documents_own_same_intention_rejected/a.md +0 -0
  159. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/two_documents_own_same_intention_rejected/b.md +0 -0
  160. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/undefined_conditional_token_rejected/doc.md +0 -0
  161. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/undefined_type_rejected/doc.md +0 -0
  162. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unknown_authority_rejected/doc.md +0 -0
  163. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unknown_document_role_rejected/doc.md +0 -0
  164. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unknown_field_rejected/doc.md +0 -0
  165. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unknown_root_block_rejected/doc.md +0 -0
  166. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unresolved_reference_on_required_edge_rejected/doc.md +0 -0
  167. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/unsupported_schema_version_rejected/doc.md +0 -0
  168. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/untemplated_frontmatter_bypass_rejected/doc.md +0 -0
  169. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/validator_passes_conflation_rejected/doc.md +0 -0
  170. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/invalid/yaml_1_1_boolean_words_not_coerced/doc.md +0 -0
  171. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/blockquote.md +0 -0
  172. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/code_fence.md +0 -0
  173. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/dangerous_html.md +0 -0
  174. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/dangerous_uri.md +0 -0
  175. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/direct_instruction.md +0 -0
  176. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/generated_resource_limits.yaml +0 -0
  177. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/indirect_instruction.md +0 -0
  178. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/legitimate_security_discussion.md +0 -0
  179. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/link.md +0 -0
  180. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/pilot_security/table.md +0 -0
  181. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/adoption_locator_trigger_word_is_data_valid/doc.md +0 -0
  182. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/body_tether_fresh_valid/doc.md +0 -0
  183. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/bootstrap_validation_receipt_valid/doc.md +0 -0
  184. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/claim_prose_substrings_are_not_verdicts_valid/doc.md +0 -0
  185. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/companion_and_appendix_edges_valid/a.md +0 -0
  186. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/companion_and_appendix_edges_valid/b.md +0 -0
  187. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/document_binding_to_external_intention_valid/doc.md +0 -0
  188. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/document_realizing_external_intention_valid/doc.md +0 -0
  189. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/document_referencing_external_intention_valid/doc.md +0 -0
  190. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/evidence_record_valid/doc.md +0 -0
  191. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/evidence_support_substrings_are_not_proof_valid/doc.md +0 -0
  192. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/external_document_set_edge_valid/doc.md +0 -0
  193. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/frontmatter_adoption_record_valid/doc.md +0 -0
  194. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/frontmatter_projection_mapping_valid/doc.md +0 -0
  195. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/frontmatter_spec_bootstrap_valid/doc.md +0 -0
  196. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/implementation_contract_valid/doc.md +0 -0
  197. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/normative_spec_valid/doc.md +0 -0
  198. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/orientation_router_valid/doc.md +0 -0
  199. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/release_metadata_valid/doc.md +0 -0
  200. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/target_sections_resolved_valid/a.md +0 -0
  201. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/target_sections_resolved_valid/b.md +0 -0
  202. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/template_valid/doc.md +0 -0
  203. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/unresolved_reference_optional_edge_valid/doc.md +0 -0
  204. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/untemplated_document_valid/doc.md +0 -0
  205. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/fixtures/valid/yaml_1_2_plain_words_valid/doc.md +0 -0
  206. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/FRONTMATTER_INDEX_PROVENANCE.json +0 -0
  207. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/ai_instruction_risk.py +0 -0
  208. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/authoring.py +0 -0
  209. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/body_tether.py +0 -0
  210. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/common/__init__.py +0 -0
  211. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/common/errors.py +0 -0
  212. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/core.py +0 -0
  213. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/corpus_selection.py +0 -0
  214. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/frontmatter_index.py +0 -0
  215. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/harness_errors.py +0 -0
  216. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/inventory.py +0 -0
  217. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/MARKDOWN_PARSE_RESULT_schema.json +0 -0
  218. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/MARKDOWN_PROVENANCE.json +0 -0
  219. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/USER_MANUAL.md +0 -0
  220. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/__init__.py +0 -0
  221. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/api.py +0 -0
  222. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/cli/__init__.py +0 -0
  223. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/cli/__main__.py +0 -0
  224. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/cli/dump_sections.py +0 -0
  225. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/__init__.py +0 -0
  226. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/blockquotes.py +0 -0
  227. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/codeblocks.py +0 -0
  228. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/footnotes.py +0 -0
  229. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/frontmatter.py +0 -0
  230. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/headings.py +0 -0
  231. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/html.py +0 -0
  232. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/html_collector.py +0 -0
  233. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/images.py +0 -0
  234. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/inline_code.py +0 -0
  235. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/links.py +0 -0
  236. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/lists.py +0 -0
  237. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/math.py +0 -0
  238. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/paragraphs.py +0 -0
  239. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/tables.py +0 -0
  240. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/collectors_phase8/tasklists.py +0 -0
  241. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/fetchers/__init__.py +0 -0
  242. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/fetchers/preview.py +0 -0
  243. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/fetchers/url_fetcher.py +0 -0
  244. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/security/__init__.py +0 -0
  245. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/security/scanner.py +0 -0
  246. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/__init__.py +0 -0
  247. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/profiling.py +0 -0
  248. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/section.py +0 -0
  249. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/text_normalization.py +0 -0
  250. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/timeout.py +0 -0
  251. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/token_warehouse.py +0 -0
  252. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/markdown/utils/url_utils.py +0 -0
  253. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/AI_START_HERE.md +0 -0
  254. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/DAILY_USE_GUIDE.md +0 -0
  255. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/FRONTMATTERING_FRONTMATTER_SPEC_v0_1_5.md +0 -0
  256. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/__init__.py +0 -0
  257. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/00_AI_START_HERE.md +0 -0
  258. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/10_NORMATIVE_SPEC.md +0 -0
  259. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/20_IMPLEMENTATION_CONTRACT.md +0 -0
  260. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/30_TEST_SUFFICIENCY.md +0 -0
  261. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/40_EVIDENCE_RECORD.md +0 -0
  262. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/no_frontmatter_demo/50_RELEASE_DECISION.md +0 -0
  263. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/00_AI_START_HERE.md +0 -0
  264. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/10_NORMATIVE_SPEC.md +0 -0
  265. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/20_IMPLEMENTATION_CONTRACT.md +0 -0
  266. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/30_TEST_SUFFICIENCY.md +0 -0
  267. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/40_EVIDENCE_RECORD.md +0 -0
  268. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/examples/power_demo/50_RELEASE_DECISION.md +0 -0
  269. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/adoption_digest_mismatch_rejected/doc.md +0 -0
  270. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/adoption_record_on_wrong_role_rejected/doc.md +0 -0
  271. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/adoption_record_shape_rejected/doc.md +0 -0
  272. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/adoption_without_bootstrap_receipt_rejected/doc.md +0 -0
  273. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/authored_go_used_as_evidence_rejected/doc.md +0 -0
  274. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_body_digest_mismatch_rejected/doc.md +0 -0
  275. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_fields_mismatch_rejected/doc.md +0 -0
  276. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_malformed_rejected/doc.md +0 -0
  277. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_missing_under_trust_rejected/.frontmattering/project.yaml +0 -0
  278. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_missing_under_trust_rejected/doc.md +0 -0
  279. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_scope_selector_rejected/doc.md +0 -0
  280. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/body_tether_unknown_canonicalization_rejected/doc.md +0 -0
  281. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/bootstrap_receipt_shape_rejected/doc.md +0 -0
  282. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/bootstrap_without_validator_blocks_adoption/doc.md +0 -0
  283. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/claim_boundary_missing_does_not_verify_rejected/doc.md +0 -0
  284. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/claimed_state_overreach_rejected/doc.md +0 -0
  285. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/clause_enforcement_drift_rejected/doc.md +0 -0
  286. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/container_cardinality_rejected/doc.md +0 -0
  287. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/deepest_intention_missing_rejected/doc.md +0 -0
  288. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/downstream_phase_without_upstream_evidence_rejected/doc.md +0 -0
  289. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/duplicate_document_id_rejected/a.md +0 -0
  290. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/duplicate_document_id_rejected/b.md +0 -0
  291. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/duplicate_yaml_key_rejected/doc.md +0 -0
  292. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/evidence_edge_digest_missing_rejected/doc.md +0 -0
  293. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/evidence_reference_used_as_truth_rejected/doc.md +0 -0
  294. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/external_edge_locator_missing_rejected/doc.md +0 -0
  295. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/external_edge_set_id_missing_rejected/doc.md +0 -0
  296. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/extracted_catalog_drift_rejected/doc.md +0 -0
  297. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/fixture_reverse_reachability_drift_rejected/doc.md +0 -0
  298. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/frontmatter_only_view_incomplete_rejected/doc.md +0 -0
  299. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/frontmatter_registry_conflict_blocks/doc.md +0 -0
  300. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/frontmatter_view_body_truth_overclaim_rejected/doc.md +0 -0
  301. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/generated_state_in_frontmatter_rejected/doc.md +0 -0
  302. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/green_checks_conflation_rejected/doc.md +0 -0
  303. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/historical_digest_used_as_current_evidence_rejected/doc.md +0 -0
  304. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/implementation_start_gate_bypass_rejected/doc.md +0 -0
  305. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/intention_positive_negative_conflation_rejected/doc.md +0 -0
  306. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/legacy_string_machine_surface_requires_mapping/doc.md +0 -0
  307. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/load_order_inversion_flagged/a.md +0 -0
  308. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/load_order_inversion_flagged/b.md +0 -0
  309. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/machine_surface_identity_incomplete_rejected/doc.md +0 -0
  310. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/migration_field_drop_rejected/doc.md +0 -0
  311. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/migration_silent_coercion_rejected/doc.md +0 -0
  312. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/missing_frontmatter_rejected/doc.md +0 -0
  313. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/non_root_exception_or_silent_fallback_rejected/doc.md +0 -0
  314. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/nonowner_redefines_intention_rejected/doc.md +0 -0
  315. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/output_format_conflation_rejected/doc.md +0 -0
  316. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/parser_byte_ranges_missing_rejected/doc.md +0 -0
  317. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/parser_partial_model_on_error_rejected/doc.md +0 -0
  318. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/parser_source_locator_missing_rejected/doc.md +0 -0
  319. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/projected_field_without_origin_rejected/doc.md +0 -0
  320. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/projection_rebuild_nondeterminism_rejected/doc.md +0 -0
  321. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/projection_row_without_source_locator_rejected/doc.md +0 -0
  322. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/relationship_resolution_scope_missing_rejected/doc.md +0 -0
  323. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/relationship_resolution_scope_unknown_rejected/doc.md +0 -0
  324. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/relationship_semantics_rejected/doc.md +0 -0
  325. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/relationship_target_unresolved_rejected/doc.md +0 -0
  326. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/release_surface_digest_missing_rejected/doc.md +0 -0
  327. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/required_dependency_cycle_rejected/a.md +0 -0
  328. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/required_dependency_cycle_rejected/b.md +0 -0
  329. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/routing_tag_not_in_task_catalog_rejected/doc.md +0 -0
  330. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/routing_tag_router_not_in_scope_rejected/doc.md +0 -0
  331. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/scope_on_nonsupersedes_rejected/doc.md +0 -0
  332. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/stale_bootstrap_receipt_rejected/doc.md +0 -0
  333. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/stale_validation_result_rejected/doc.md +0 -0
  334. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/supersedes_without_scope_rejected/doc.md +0 -0
  335. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/target_section_not_found_rejected/a.md +0 -0
  336. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/target_section_not_found_rejected/b.md +0 -0
  337. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/target_sections_on_external_edge_rejected/doc.md +0 -0
  338. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/task_scoped_defects_filtering/router.md +0 -0
  339. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/task_scoped_defects_filtering/selected.md +0 -0
  340. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/task_scoped_defects_filtering/skipped.md +0 -0
  341. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/template_claims_normative_authority_rejected/doc.md +0 -0
  342. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/two_documents_own_same_intention_rejected/a.md +0 -0
  343. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/two_documents_own_same_intention_rejected/b.md +0 -0
  344. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/undefined_conditional_token_rejected/doc.md +0 -0
  345. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/undefined_type_rejected/doc.md +0 -0
  346. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unknown_authority_rejected/doc.md +0 -0
  347. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unknown_document_role_rejected/doc.md +0 -0
  348. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unknown_field_rejected/doc.md +0 -0
  349. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unknown_root_block_rejected/doc.md +0 -0
  350. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unresolved_reference_on_required_edge_rejected/doc.md +0 -0
  351. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/unsupported_schema_version_rejected/doc.md +0 -0
  352. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/untemplated_frontmatter_bypass_rejected/doc.md +0 -0
  353. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/validator_passes_conflation_rejected/doc.md +0 -0
  354. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/invalid/yaml_1_1_boolean_words_not_coerced/doc.md +0 -0
  355. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/blockquote.md +0 -0
  356. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/code_fence.md +0 -0
  357. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/dangerous_html.md +0 -0
  358. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/dangerous_uri.md +0 -0
  359. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/direct_instruction.md +0 -0
  360. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/generated_resource_limits.yaml +0 -0
  361. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/indirect_instruction.md +0 -0
  362. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/legitimate_security_discussion.md +0 -0
  363. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/link.md +0 -0
  364. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/pilot_security/table.md +0 -0
  365. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/adoption_locator_trigger_word_is_data_valid/doc.md +0 -0
  366. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/body_tether_fresh_valid/doc.md +0 -0
  367. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/bootstrap_validation_receipt_valid/doc.md +0 -0
  368. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/claim_prose_substrings_are_not_verdicts_valid/doc.md +0 -0
  369. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/companion_and_appendix_edges_valid/a.md +0 -0
  370. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/companion_and_appendix_edges_valid/b.md +0 -0
  371. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/document_binding_to_external_intention_valid/doc.md +0 -0
  372. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/document_realizing_external_intention_valid/doc.md +0 -0
  373. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/document_referencing_external_intention_valid/doc.md +0 -0
  374. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/evidence_record_valid/doc.md +0 -0
  375. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/evidence_support_substrings_are_not_proof_valid/doc.md +0 -0
  376. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/external_document_set_edge_valid/doc.md +0 -0
  377. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/frontmatter_adoption_record_valid/doc.md +0 -0
  378. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/frontmatter_projection_mapping_valid/doc.md +0 -0
  379. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/frontmatter_spec_bootstrap_valid/doc.md +0 -0
  380. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/implementation_contract_valid/doc.md +0 -0
  381. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/normative_spec_valid/doc.md +0 -0
  382. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/orientation_router_valid/doc.md +0 -0
  383. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/release_metadata_valid/doc.md +0 -0
  384. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/target_sections_resolved_valid/a.md +0 -0
  385. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/target_sections_resolved_valid/b.md +0 -0
  386. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/template_valid/doc.md +0 -0
  387. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/unresolved_reference_optional_edge_valid/doc.md +0 -0
  388. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/untemplated_document_valid/doc.md +0 -0
  389. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/fixtures/valid/yaml_1_2_plain_words_valid/doc.md +0 -0
  390. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/generated/FRONTMATTERING_FRONTMATTER_SCHEMA.schema.json +0 -0
  391. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/__init__.py +0 -0
  392. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_frontmatter_sqlite_index.py +0 -0
  393. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_kernel_cleanliness.py +0 -0
  394. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_kernel_exception_taxonomy.py +0 -0
  395. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_markdown_parser_adoption.py +0 -0
  396. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_projection_consistency.py +0 -0
  397. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_python_syntax.py +0 -0
  398. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/check_report_quality.py +0 -0
  399. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/finding_registry.py +0 -0
  400. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/frontmattering_cli.py +0 -0
  401. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/generate_frontmatter_schema.py +0 -0
  402. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/kernel_reporting.py +0 -0
  403. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/make_fixtures.py +0 -0
  404. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/pack_kernel_distro.py +0 -0
  405. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/test_verify_kernel.py +0 -0
  406. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/validate_frontmatters.py +0 -0
  407. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/tools/verify_kernel.py +0 -0
  408. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/resources/workflow-docs-manifest.yaml +0 -0
  409. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/schema_projection.py +0 -0
  410. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/speccompile.py +0 -0
  411. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering/validator.py +0 -0
  412. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering.egg-info/dependency_links.txt +0 -0
  413. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering.egg-info/entry_points.txt +0 -0
  414. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/frontmattering.egg-info/top_level.txt +0 -0
  415. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/generated/FRONTMATTERING_FRONTMATTER_SCHEMA.schema.json +0 -0
  416. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_frontmatter_sqlite_index.py +0 -0
  417. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_kernel_cleanliness.py +0 -0
  418. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_kernel_exception_taxonomy.py +0 -0
  419. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_markdown_parser_adoption.py +0 -0
  420. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_projection_consistency.py +0 -0
  421. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_python_syntax.py +0 -0
  422. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/check_report_quality.py +0 -0
  423. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/finding_registry.py +0 -0
  424. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/frontmattering_cli.py +0 -0
  425. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/generate_frontmatter_schema.py +0 -0
  426. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/kernel_reporting.py +0 -0
  427. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/make_fixtures.py +0 -0
  428. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/pack_kernel_distro.py +0 -0
  429. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/test_verify_kernel.py +0 -0
  430. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/validate_frontmatters.py +0 -0
  431. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/tools/verify_kernel.py +0 -0
  432. {frontmattering-0.4.2 → frontmattering-0.4.4}/kernel/workflow-docs-manifest.yaml +0 -0
  433. {frontmattering-0.4.2 → frontmattering-0.4.4}/setup.cfg +0 -0
  434. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_frontmattering_p0_regressions.py +0 -0
  435. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_red_body_tether.py +0 -0
  436. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_red_cli_trust_adoption.py +0 -0
  437. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_red_frontmattering_rt_n.py +0 -0
  438. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_red_runtime_parity.py +0 -0
  439. {frontmattering-0.4.2 → frontmattering-0.4.4}/tests/test_red_tether_scope.py +0 -0
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Security report
4
+ url: https://github.com/frontmattering/frontmattering/blob/main/SECURITY.md
5
+ about: Report a vulnerability privately per SECURITY.md (do not open a public issue).
6
+ - name: Licensing / commercial enquiry
7
+ url: mailto:hello@frontmattering.com
8
+ about: Questions about professional, organizational, or commercial licensing.
9
+ - name: Support and usage help
10
+ url: https://github.com/frontmattering/frontmattering/blob/main/SUPPORT.md
11
+ about: How to get help and what support is offered.
@@ -0,0 +1,18 @@
1
+ name: Documentation confusion
2
+ description: Something in the docs, README, or CLI output was unclear or misleading.
3
+ title: "[docs] "
4
+ labels: ["documentation"]
5
+ body:
6
+ - type: input
7
+ id: where
8
+ attributes:
9
+ label: Where (file / URL / command)
10
+ placeholder: "e.g. README.md 'First-hour path', or `frontmattering brief` output"
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: expected
15
+ attributes:
16
+ label: What you expected vs. what the docs said
17
+ validations:
18
+ required: true
@@ -0,0 +1,54 @@
1
+ name: Fresh-start pilot report
2
+ description: Report a cold-start run on your own Markdown corpus. Facts only — no fix required.
3
+ title: "[pilot] "
4
+ labels: ["pilot-report"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for piloting Frontmattering. Report only what you observed — this is evidence collection, not a support request.
10
+ - type: input
11
+ id: env
12
+ attributes:
13
+ label: OS / Python version
14
+ placeholder: "e.g. Ubuntu 24.04 / Python 3.12.3"
15
+ validations:
16
+ required: true
17
+ - type: dropdown
18
+ id: install
19
+ attributes:
20
+ label: "`pip install frontmattering` result"
21
+ options: ["Succeeded", "Failed"]
22
+ validations:
23
+ required: true
24
+ - type: dropdown
25
+ id: doctor
26
+ attributes:
27
+ label: "`frontmattering doctor` result"
28
+ options: ["PASS", "FAIL", "Did not run"]
29
+ validations:
30
+ required: true
31
+ - type: input
32
+ id: corpus
33
+ attributes:
34
+ label: Number of Markdown files in your corpus
35
+ validations:
36
+ required: true
37
+ - type: textarea
38
+ id: flow
39
+ attributes:
40
+ label: init → promote → tether → validate → brief outcome
41
+ placeholder: "What happened at each step; the validate verdict (GO/NO-GO) and brief status (FRESH/STALE/UNTETHERED)."
42
+ validations:
43
+ required: true
44
+ - type: textarea
45
+ id: first_error
46
+ attributes:
47
+ label: First confusing error message (verbatim, if any)
48
+ - type: dropdown
49
+ id: understood
50
+ attributes:
51
+ label: Did you understand FRESH / STALE / UNTETHERED?
52
+ options: ["Yes, all three", "Partly", "No"]
53
+ validations:
54
+ required: true
@@ -0,0 +1,30 @@
1
+ name: Runtime gate / CI report
2
+ description: Report using the validate-only runtime artifact or the frontmattering gate in CI.
3
+ title: "[runtime] "
4
+ labels: ["runtime-gate"]
5
+ body:
6
+ - type: input
7
+ id: env
8
+ attributes:
9
+ label: OS / Python version / CI provider
10
+ placeholder: "e.g. GitHub Actions ubuntu-latest / Python 3.11"
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: invocation
15
+ attributes:
16
+ label: How you invoked the gate
17
+ placeholder: "e.g. python frontmattering-runtime.pyz validate docs --format json"
18
+ validations:
19
+ required: true
20
+ - type: dropdown
21
+ id: outcome
22
+ attributes:
23
+ label: Gate outcome
24
+ options: ["Passed as expected", "Failed as expected", "Unexpected pass", "Unexpected fail", "Crashed / error"]
25
+ validations:
26
+ required: true
27
+ - type: textarea
28
+ id: detail
29
+ attributes:
30
+ label: Output / error (verbatim)
@@ -44,6 +44,8 @@ jobs:
44
44
  - name: Exception taxonomy
45
45
  run: python kernel/tools/check_kernel_exception_taxonomy.py
46
46
  - name: Pilot-readiness contract
47
+ env:
48
+ FRONTMATTERING_PUBLIC_SURFACE: "1"
47
49
  run: python kernel/tools/check_pilot_readiness.py
48
50
  - name: Release cleanliness
49
51
  run: python kernel/tools/check_kernel_cleanliness.py --release
@@ -59,9 +61,11 @@ jobs:
59
61
  with:
60
62
  python-version: '3.12'
61
63
  - name: Build tooling
62
- run: python -m pip install --upgrade pip build
64
+ run: python -m pip install --upgrade pip build twine
63
65
  - name: Build distributions
64
66
  run: python -m build
67
+ - name: Twine check
68
+ run: python -m twine check dist/*
65
69
  - name: Inspect and smoke-test wheel
66
70
  run: |
67
71
  python - <<'PY'
@@ -0,0 +1,45 @@
1
+ name: publish
2
+
3
+ # Trusted Publishing to PyPI via OIDC — no long-lived API tokens.
4
+ #
5
+ # ONE-TIME OWNER SETUP (required before this can succeed):
6
+ # 1. PyPI -> project "frontmattering" -> Publishing -> add a GitHub publisher:
7
+ # owner: frontmattering, repo: frontmattering,
8
+ # workflow: publish.yml, environment: pypi
9
+ # 2. GitHub -> repo Settings -> Environments -> create environment "pypi".
10
+ #
11
+ # Until that setup exists this runs on manual dispatch only, so it never fails
12
+ # spuriously. Once configured, publish from tags by adding:
13
+ # on:
14
+ # push:
15
+ # tags: ["v*"]
16
+ on:
17
+ workflow_dispatch:
18
+ inputs:
19
+ tag:
20
+ description: Tag to build and publish (e.g. v0.4.4)
21
+ required: true
22
+
23
+ permissions:
24
+ contents: read
25
+
26
+ jobs:
27
+ publish:
28
+ runs-on: ubuntu-latest
29
+ environment: pypi
30
+ permissions:
31
+ id-token: write
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ with:
35
+ ref: ${{ inputs.tag }}
36
+ - uses: actions/setup-python@v5
37
+ with:
38
+ python-version: "3.12"
39
+ - name: Build and check distributions
40
+ run: |
41
+ python -m pip install --upgrade pip build twine
42
+ python -m build
43
+ python -m twine check dist/*
44
+ - name: Publish to PyPI (OIDC Trusted Publishing)
45
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -26,6 +26,8 @@ jobs:
26
26
  - name: Install build dependencies
27
27
  run: python -m pip install --upgrade pip build
28
28
  - name: Verify release tree
29
+ env:
30
+ FRONTMATTERING_PUBLIC_SURFACE: "1"
29
31
  run: |
30
32
  python -m pip install -e .
31
33
  python kernel/tools/test_verify_kernel.py
@@ -0,0 +1,43 @@
1
+ # Changelog
2
+
3
+ ## 0.4.4
4
+
5
+ - **Fixed the published first-hour path.** The quickstart now initializes at the repository root (`frontmattering init .`); the previous `init docs` form left the promoted document outside the selected corpus, and `promote docs/*.md` passed multiple files to a single-file command.
6
+ - **`promote --in-place` is now transactional.** Promoting a file outside the selected corpus fails before any write with `FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS`, and any post-write failure restores the file to its original bytes — no command mutates an input file and then exits nonzero.
7
+ - **Validate-only runtime CLI corrected.** `validate --help` prints usage and exits 0 (previously returned a vacuous GO report over zero paths); `validate` with no path is now a usage error instead of silently validating the current directory.
8
+ - `frontmattering validate` with no paths prints an explicit "validating current working directory" notice.
9
+ - Added a `markdown-plugins` optional extra (`pip install "frontmattering[markdown-plugins]"`) so the optional markdown-it plugins are a named, opt-in capability.
10
+ - Added `Commercial` and `License` project URLs.
11
+ - Removed stale v0.4.2 release-note artifacts from the source distribution.
12
+ - Added a PyPI Trusted Publishing workflow (OIDC) and `twine check` in CI; CI is green across Python 3.10–3.13 (fixed `benchmark_harness` and the `.git`-inclusive distribution-receipt check; scoped the public-surface pilot-readiness gate).
13
+ - No frontmatter-schema, validator trust-semantics, or canonical-model (`v0.1.5`) changes.
14
+
15
+ ## 0.4.3
16
+
17
+ - README/PyPI long description: install instruction is now `pip install frontmattering` instead of a local wheel path.
18
+ - Public license summary now states the 30-day evaluation permission (LICENSE.md §2), not only the paid-commercial requirement.
19
+ - Fixed `frontmattering doctor`: the AI_INDEX currency check embedded Python- and terminal-width-sensitive argparse output (usage-line wrapping and positional `.required`), producing a spurious FAIL on any environment other than the one the index was frozen on. Index generation is now deterministic — whitespace-normalized command signatures and `required` derived from `nargs` — so `doctor` passes across supported Python versions.
20
+ - Removed the residual `-pypi-clear` publication marker from internal version strings.
21
+ - No validator, frontmatter-schema, runtime-parity, or canonical-model (`v0.1.5`) changes.
22
+ - Both wheel and sdist are published for this version.
23
+
24
+ ## 0.4.2
25
+
26
+ - Removed the mistaken MIT component license expression after confirming the package contains Frontmattering-owned source and normal runtime dependencies, not vendored third-party source.
27
+ - Replaced third-party notices with a dependency-only notice for PyYAML and markdown-it-py.
28
+ - Removed the v0.4.1 publication hold.
29
+ - Preserved clean public identity: package, import package, and CLI are all `frontmattering`.
30
+
31
+ ## 0.4.1
32
+
33
+ - Corrected public notices and added 30-day professional/organizational evaluation permission.
34
+ - Added verbatim redistribution permission for unmodified official package artifacts.
35
+ - Marked publication as held pending third-party provenance clarification; superseded by v0.4.2 after code ownership was confirmed.
36
+
37
+ ## 0.4.0
38
+
39
+ - Clean public rebrand to Frontmattering.
40
+ - Project package, import package, and CLI are now `frontmattering`.
41
+ - Removed old public CLI/import/package aliases.
42
+ - Replaced the previous permissive project license with Frontmattering Individual Use License v1.0 plus commercial-license requirement.
43
+ - Preserved validator/runtime/body-tether/trust-profile behavior from the internal v0.3.6 line.
@@ -14,9 +14,6 @@ include SUPPORT.md
14
14
  include THIRD_PARTY_NOTICES.md
15
15
  include TRADEMARKS.md
16
16
  include REPOSITORY_STATUS.md
17
- include RELEASE_NOTES_v0_*.md
18
- include FRONTMATTERING_v0_4_2_RELEASE_SUMMARY.md
19
- include FRONTMATTERING_V0_4_2_DELIVERY_NOTE.md
20
17
  recursive-include .github *.md *.yml *.yaml
21
18
  recursive-include benchmarks/cold_start_v1 *.md *.yaml *.json *.py
22
19
  recursive-include contracts *.md
@@ -1,12 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontmattering
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: Governed frontmatter, freshness tethers, and validate-only runtime gates for agent-facing Markdown
5
5
  Author: Lasse T.
6
6
  License-Expression: LicenseRef-FRONTMATTERING-Individual-Use-1.2
7
7
  Project-URL: Homepage, https://frontmattering.com
8
8
  Project-URL: Repository, https://github.com/frontmattering/frontmattering
9
9
  Project-URL: Issues, https://github.com/frontmattering/frontmattering/issues
10
+ Project-URL: Commercial, https://github.com/frontmattering/frontmattering/blob/main/COMMERCIAL_LICENSE_REQUIRED.md
11
+ Project-URL: License, https://github.com/frontmattering/frontmattering/blob/main/LICENSE.md
10
12
  Keywords: markdown,frontmatter,documentation,governance,ai-agents,validation
11
13
  Classifier: Development Status :: 3 - Alpha
12
14
  Classifier: Environment :: Console
@@ -28,6 +30,8 @@ License-File: THIRD_PARTY_NOTICES.md
28
30
  License-File: TRADEMARKS.md
29
31
  Requires-Dist: PyYAML>=6.0
30
32
  Requires-Dist: markdown-it-py>=4.0.0
33
+ Provides-Extra: markdown-plugins
34
+ Requires-Dist: mdit-py-plugins>=0.4.0; extra == "markdown-plugins"
31
35
  Dynamic: license-file
32
36
 
33
37
  # Frontmattering
@@ -36,30 +40,34 @@ Frontmattering makes Markdown safer for agents.
36
40
 
37
41
  It adds governed frontmatter, task routing, body/frontmatter freshness tethers, and a vendorable validate-only runtime gate so an agent can consume a compact brief without silently relying on stale documentation.
38
42
 
39
- ## Install from a local distribution
43
+ ## Install
40
44
 
41
45
  ```bash
42
- python -m pip install frontmattering-0.4.2-py3-none-any.whl
46
+ python -m pip install frontmattering
43
47
  frontmattering --version
44
48
  frontmattering doctor
45
49
  ```
46
50
 
47
51
  ## First-hour path
48
52
 
53
+ Initialize governance at your repository root; your Markdown lives under `docs/` (the default corpus is `docs/**/*.md`). `promote` takes one file per call, and exactly one document is the router.
54
+
49
55
  ```bash
50
- frontmattering init docs --set-id MYDOCS --title "My docs"
56
+ frontmattering init . --set-id MYDOCS --title "My docs"
51
57
  frontmattering promote docs/INDEX.md --profile router --in-place
52
- frontmattering promote docs/*.md --profile guide --in-place
53
- frontmattering tether update --add docs
54
- frontmattering validate docs
55
- frontmattering brief docs
58
+ frontmattering promote docs/GUIDE.md --profile guide --in-place
59
+ frontmattering tether update --add .
60
+ frontmattering validate .
61
+ frontmattering brief .
56
62
  ```
57
63
 
64
+ Promote each additional document with its own `frontmattering promote <file> --profile guide --in-place` call. Promoting a file that is not inside the selected corpus fails before the file is touched (`FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS`).
65
+
58
66
  For strict freshness enforcement, set `validation_profile: trust` in `.frontmattering/project.yaml`, then run:
59
67
 
60
68
  ```bash
61
- frontmattering validate docs
62
- frontmattering brief docs
69
+ frontmattering validate .
70
+ frontmattering brief .
63
71
  ```
64
72
 
65
73
  ## Runtime gate
@@ -73,7 +81,7 @@ The runtime artifact is validate-only. It does not expose init, promote, new, in
73
81
 
74
82
  ## License
75
83
 
76
- Frontmattering is source-available. It is free for individual natural persons within the scope of `LICENSE.md`. Professional, organizational, commercial, client, employer, CI/CD, hosted, managed-service, platform, consulting, or revenue-connected use requires a paid commercial license.
84
+ Frontmattering is source-available. It is free for individual personal use within the scope of `LICENSE.md`. Professional, organizational, employer, client, CI/CD, hosted, managed-service, platform, consulting, or revenue-connected use is permitted for a 30-day evaluation period under `LICENSE.md`; continued use after the evaluation requires a paid commercial license.
77
85
 
78
86
  Frontmattering is not open-source software under the Open Source Definition because professional and organizational use is restricted without a commercial license.
79
87
 
@@ -88,4 +96,4 @@ A `STALE` or `UNTETHERED` summary must not be relied on without reading the body
88
96
 
89
97
  ## Publication status
90
98
 
91
- This v0.4.2 package is a PyPI-clear technical candidate after license/notice cleanup. Custom license text should still receive legal review before paid commercial sales.
99
+ This v0.4.4 package hardens the first-hour path: the quickstart initializes at the repository root, `promote --in-place` is transactional (it fails before mutation when a target is outside the selected corpus, `FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS`), and the validate-only runtime corrects its `--help` and no-path behavior. No frontmatter-schema or canonical-model (`v0.1.5`) changes. Custom license text should still receive legal review before paid commercial sales.
@@ -0,0 +1,63 @@
1
+ # Frontmattering
2
+
3
+ Frontmattering makes Markdown safer for agents.
4
+
5
+ It adds governed frontmatter, task routing, body/frontmatter freshness tethers, and a vendorable validate-only runtime gate so an agent can consume a compact brief without silently relying on stale documentation.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ python -m pip install frontmattering
11
+ frontmattering --version
12
+ frontmattering doctor
13
+ ```
14
+
15
+ ## First-hour path
16
+
17
+ Initialize governance at your repository root; your Markdown lives under `docs/` (the default corpus is `docs/**/*.md`). `promote` takes one file per call, and exactly one document is the router.
18
+
19
+ ```bash
20
+ frontmattering init . --set-id MYDOCS --title "My docs"
21
+ frontmattering promote docs/INDEX.md --profile router --in-place
22
+ frontmattering promote docs/GUIDE.md --profile guide --in-place
23
+ frontmattering tether update --add .
24
+ frontmattering validate .
25
+ frontmattering brief .
26
+ ```
27
+
28
+ Promote each additional document with its own `frontmattering promote <file> --profile guide --in-place` call. Promoting a file that is not inside the selected corpus fails before the file is touched (`FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS`).
29
+
30
+ For strict freshness enforcement, set `validation_profile: trust` in `.frontmattering/project.yaml`, then run:
31
+
32
+ ```bash
33
+ frontmattering validate .
34
+ frontmattering brief .
35
+ ```
36
+
37
+ ## Runtime gate
38
+
39
+ ```bash
40
+ frontmattering runtime pack --out frontmattering-runtime.pyz
41
+ python frontmattering-runtime.pyz validate docs --format json
42
+ ```
43
+
44
+ The runtime artifact is validate-only. It does not expose init, promote, new, index, tether update, or authoring surfaces.
45
+
46
+ ## License
47
+
48
+ Frontmattering is source-available. It is free for individual personal use within the scope of `LICENSE.md`. Professional, organizational, employer, client, CI/CD, hosted, managed-service, platform, consulting, or revenue-connected use is permitted for a 30-day evaluation period under `LICENSE.md`; continued use after the evaluation requires a paid commercial license.
49
+
50
+ Frontmattering is not open-source software under the Open Source Definition because professional and organizational use is restricted without a commercial license.
51
+
52
+ Runtime dependency status is recorded in `THIRD_PARTY_NOTICES.md`; project notices are recorded in `NOTICE`.
53
+
54
+ ## Claim boundary
55
+
56
+ A `FRESH` brief means the current body bytes and canonical trust-bearing frontmatter fields match their mechanical tether. It does not prove semantic summary correctness, human approval, external adoption, or production suitability.
57
+
58
+ A `STALE` or `UNTETHERED` summary must not be relied on without reading the body.
59
+
60
+
61
+ ## Publication status
62
+
63
+ This v0.4.4 package hardens the first-hour path: the quickstart initializes at the repository root, `promote --in-place` is transactional (it fails before mutation when a target is outside the selected corpus, `FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS`), and the validate-only runtime corrects its `--help` and no-path behavior. No frontmatter-schema or canonical-model (`v0.1.5`) changes. Custom license text should still receive legal review before paid commercial sales.
@@ -19,7 +19,7 @@ def main()->int:
19
19
  ap=argparse.ArgumentParser(); ap.add_argument('--output',type=Path,required=True); ns=ap.parse_args()
20
20
  out=ns.output.resolve()
21
21
  if out.exists(): shutil.rmtree(out)
22
- frontmattering_arm=out/'frontmattering_brief_arm'; baseline=out/'baseline'; frontmattering_arm.mkdir(parents=True); baseline.mkdir(parents=True)
22
+ frontmattering_arm=out/'frontmattering'; baseline=out/'baseline'; frontmattering_arm.mkdir(parents=True); baseline.mkdir(parents=True)
23
23
  records=[]
24
24
  for src in sorted(SOURCE.glob('*.md')):
25
25
  raw=src.read_bytes(); _,body=split_frontmatter(raw)
@@ -62,7 +62,7 @@
62
62
  "description": "Process exit code documented by the command implementation.",
63
63
  "type": "int"
64
64
  },
65
- "signature": "frontmattering brief [-h] [--task TASK]\n [--section {summary,blocks,traps,limits,do-not,trust,reading-order,defects,claim-boundary}]\n [--include-dev] [--format {markdown,json}]\n [paths ...]",
65
+ "signature": "frontmattering brief [-h] [--task TASK] [--section {summary,blocks,traps,limits,do-not,trust,reading-order,defects,claim-boundary}] [--include-dev] [--format {markdown,json}] [paths ...]",
66
66
  "summary": "==SUPPRESS==",
67
67
  "type": "function"
68
68
  },
@@ -188,7 +188,7 @@
188
188
  "description": "Process exit code documented by the command implementation.",
189
189
  "type": "int"
190
190
  },
191
- "signature": "frontmattering index [-h]\n {build,rebuild,update,check,status,delete} ...",
191
+ "signature": "frontmattering index [-h] {build,rebuild,update,check,status,delete} ...",
192
192
  "summary": "==SUPPRESS==",
193
193
  "type": "function"
194
194
  },
@@ -232,7 +232,7 @@
232
232
  "description": "Process exit code documented by the command implementation.",
233
233
  "type": "int"
234
234
  },
235
- "signature": "frontmattering init [-h] --set-id SET_ID --title TITLE [--force]\n directory",
235
+ "signature": "frontmattering init [-h] --set-id SET_ID --title TITLE [--force] directory",
236
236
  "summary": "==SUPPRESS==",
237
237
  "type": "function"
238
238
  },
@@ -360,7 +360,7 @@
360
360
  "description": "Process exit code documented by the command implementation.",
361
361
  "type": "int"
362
362
  },
363
- "signature": "frontmattering new [-h]\n [--profile {contract,evidence,guide,registry,release,router,spec}]\n --title TITLE [--summary SUMMARY] [--force]\n path",
363
+ "signature": "frontmattering new [-h] [--profile {contract,evidence,guide,registry,release,router,spec}] --title TITLE [--summary SUMMARY] [--force] path",
364
364
  "summary": "==SUPPRESS==",
365
365
  "type": "function"
366
366
  },
@@ -416,7 +416,7 @@
416
416
  "description": "Process exit code documented by the command implementation.",
417
417
  "type": "int"
418
418
  },
419
- "signature": "frontmattering parse [-h] [--output OUTPUT] [--batch]\n [--security-profile {permissive,moderate,strict}]\n [--allows-html]\n path",
419
+ "signature": "frontmattering parse [-h] [--output OUTPUT] [--batch] [--security-profile {permissive,moderate,strict}] [--allows-html] path",
420
420
  "summary": "==SUPPRESS==",
421
421
  "type": "function"
422
422
  },
@@ -494,7 +494,7 @@
494
494
  "description": "Process exit code documented by the command implementation.",
495
495
  "type": "int"
496
496
  },
497
- "signature": "frontmattering promote [-h]\n --profile {contract,evidence,guide,registry,release,router,spec}\n [--title TITLE] [--output OUTPUT] [--in-place]\n [--check] [--format {markdown,json}]\n input",
497
+ "signature": "frontmattering promote [-h] --profile {contract,evidence,guide,registry,release,router,spec} [--title TITLE] [--output OUTPUT] [--in-place] [--check] [--format {markdown,json}] input",
498
498
  "summary": "==SUPPRESS==",
499
499
  "type": "function"
500
500
  },
@@ -545,7 +545,7 @@
545
545
  "description": "Process exit code documented by the command implementation.",
546
546
  "type": "int"
547
547
  },
548
- "signature": "frontmattering query [-h] [--index INDEX] [--task TASK]\n [--authority AUTHORITY] [--role ROLE]\n [--target TARGET]",
548
+ "signature": "frontmattering query [-h] [--index INDEX] [--task TASK] [--authority AUTHORITY] [--role ROLE] [--target TARGET]",
549
549
  "summary": "==SUPPRESS==",
550
550
  "type": "function"
551
551
  },
@@ -615,7 +615,7 @@
615
615
  "description": "Process exit code documented by the command implementation.",
616
616
  "type": "int"
617
617
  },
618
- "signature": "frontmattering schema [-h] [--output OUTPUT] [--check PATH] [--vscode]\n [paths ...]",
618
+ "signature": "frontmattering schema [-h] [--output OUTPUT] [--check PATH] [--vscode] [paths ...]",
619
619
  "summary": "==SUPPRESS==",
620
620
  "type": "function"
621
621
  },
@@ -64,7 +64,7 @@ template_contract:
64
64
 
65
65
  spec: FRONTMATTERING_FRONTMATTER_SPEC_v0_1_5.md
66
66
  spec_sha256: cb4f431d6326a04a2b30d5d1b4a99c301342b017799953b12740acf5b110b023
67
- kernel_files_sha256: 713befd933348e6ee6331c4748d2d0eab8a7650cf175832c70d8cebd7b2c55bb
67
+ kernel_files_sha256: 9b7d957b66556be1065436769851956afec7cd179cd6c8a85e9aa1e4457aa58e
68
68
 
69
69
  classes_total: 101
70
70
  ok: 101 missing_fixture: 0 wrong_finding: 0 not_rejected: 0 rejected_valid: 0
@@ -0,0 +1 @@
1
+ __version__ = "0.4.4"
@@ -138,6 +138,8 @@ def selected_format(args: argparse.Namespace) -> str:
138
138
 
139
139
 
140
140
  def command_validate(args: argparse.Namespace) -> int:
141
+ if not args.paths:
142
+ print(f"No paths supplied; validating current working directory: {Path.cwd()}", file=sys.stderr)
141
143
  try:
142
144
  report = build_report(args.paths)
143
145
  except ToolingError as exc:
@@ -719,7 +721,7 @@ def _parse_one_document(path: Path, args: argparse.Namespace) -> tuple[dict, int
719
721
  metadata.pop("security", None)
720
722
  payload = {
721
723
  "schema_version": "frontmattering_document_ir/v0_3",
722
- "distribution_version": "0.4.2",
724
+ "distribution_version": "0.4.4",
723
725
  "canonical_model_version": "0.1.5",
724
726
  "source": {
725
727
  "path": str(path),
@@ -772,7 +774,7 @@ def command_parse(args: argparse.Namespace) -> int:
772
774
  dest.parent.mkdir(parents=True, exist_ok=True)
773
775
  dest.write_text(json.dumps(_json_safe(payload), indent=2, sort_keys=True, ensure_ascii=False)+"\n", encoding="utf-8")
774
776
  records.append({"source": rel.as_posix()[:-8], "ir": rel.as_posix(), "source_sha256": payload["source"]["sha256"]})
775
- manifest = {"schema_version":"frontmattering_ir_batch_manifest/v0_3","distribution_version":"0.4.2-pypi-clear","source_root":str(path),"document_count":len(records),"records":records,"selection":selection.payload(),"claim_boundary":"Disposable deterministic projection; source Markdown remains authoritative."}
777
+ manifest = {"schema_version":"frontmattering_ir_batch_manifest/v0_3","distribution_version":"0.4.4","source_root":str(path),"document_count":len(records),"records":records,"selection":selection.payload(),"claim_boundary":"Disposable deterministic projection; source Markdown remains authoritative."}
776
778
  (out_root/"manifest.json").write_text(json.dumps(manifest,indent=2,sort_keys=True)+"\n",encoding="utf-8")
777
779
  print(f"document_ir_batch_written={out_root} documents={len(records)}")
778
780
  return terminal
@@ -936,13 +938,20 @@ def validate(targets: list[str]) -> dict[str, Any]:
936
938
  }
937
939
 
938
940
 
941
+ USAGE = "usage: frontmattering-runtime validate <path> [<path> ...] [--format json]"
942
+
943
+
939
944
  def _parse_args(argv: list[str]) -> tuple[str, list[str], str]:
945
+ if len(argv) >= 2 and argv[1] in ("-h", "--help"):
946
+ return "help", [], "json"
940
947
  if len(argv) < 2 or argv[1] != "validate":
941
948
  return "usage", [], "json"
942
949
  paths: list[str] = []
943
950
  fmt = "json"
944
951
  i = 2
945
952
  while i < len(argv):
953
+ if argv[i] in ("-h", "--help"):
954
+ return "help", [], fmt
946
955
  if argv[i] == "--format":
947
956
  if i + 1 >= len(argv) or argv[i + 1] not in {"json"}:
948
957
  return "bad_format", [], fmt
@@ -951,14 +960,24 @@ def _parse_args(argv: list[str]) -> tuple[str, list[str], str]:
951
960
  else:
952
961
  paths.append(argv[i])
953
962
  i += 1
963
+ if not paths:
964
+ return "no_paths", [], fmt
954
965
  return "validate", paths, fmt
955
966
 
956
967
 
957
968
  def main(argv: list[str] | None = None) -> int:
958
969
  argv = list(sys.argv if argv is None else argv)
959
970
  action, paths, _fmt = _parse_args(argv)
971
+ if action == "help":
972
+ print(USAGE)
973
+ print("\nValidate-only runtime surface. Requires at least one path (file or directory).", file=sys.stdout)
974
+ return 0
960
975
  if action == "usage":
961
- print("usage: frontmattering-runtime validate <path> [<path> ...] [--format json]", file=sys.stderr)
976
+ print(USAGE, file=sys.stderr)
977
+ return 2
978
+ if action == "no_paths":
979
+ print(USAGE, file=sys.stderr)
980
+ print("error: validate requires at least one path", file=sys.stderr)
962
981
  return 2
963
982
  if action == "bad_format":
964
983
  print("frontmattering-runtime only supports --format json", file=sys.stderr)
@@ -1019,7 +1038,7 @@ def _runtime_wrapper() -> str:
1019
1038
  "runtime_builder": "frontmattering.__main__.command_runtime_pack",
1020
1039
  }
1021
1040
  return RUNTIME_WRAPPER_TEMPLATE.replace(
1022
- "__KERNEL_VERSION__", "0.4.2"
1041
+ "__KERNEL_VERSION__", "0.4.4"
1023
1042
  ).replace(
1024
1043
  "__RUNTIME_BUILD_MANIFEST__", json.dumps(manifest, sort_keys=True)
1025
1044
  )
@@ -1066,7 +1085,7 @@ def command_runtime_pack(args: argparse.Namespace) -> int:
1066
1085
  "schema_version": "frontmattering_runtime_pack_report/v0_2",
1067
1086
  "runtime_artifact": str(out),
1068
1087
  "canonical_model_version": "0.1.5",
1069
- "kernel_version": "0.4.2",
1088
+ "kernel_version": "0.4.4",
1070
1089
  "artifact_format": "python_zipapp",
1071
1090
  "surface": "validate_only",
1072
1091
  "artifact_sha256": hashlib.sha256(artifact_bytes).hexdigest(),
@@ -1104,7 +1123,7 @@ def build_parser() -> argparse.ArgumentParser:
1104
1123
  prog="frontmattering",
1105
1124
  description="Govern and orient load-bearing Markdown with Frontmattering canonical model v0.1.5 frontmatter.",
1106
1125
  )
1107
- parser.add_argument("--version", action="version", version="frontmattering distribution v0.4.2; canonical model v0.1.5")
1126
+ parser.add_argument("--version", action="version", version="frontmattering distribution v0.4.4; canonical model v0.1.5")
1108
1127
  sub = parser.add_subparsers(dest="command", required=True, parser_class=StrictArgumentParser)
1109
1128
 
1110
1129
  init = sub.add_parser("init", help="Initialize a small Frontmattering document set and package router.")
@@ -9,7 +9,7 @@ from typing import Any
9
9
 
10
10
  import yaml
11
11
 
12
- from .authoring import load_project, refresh_router_task_catalog, starter_frontmatter, _remove_generated_starter_router
12
+ from .authoring import load_project, refresh_router_task_catalog, starter_frontmatter, _remove_generated_starter_router, _project_paths, _project_root
13
13
  from .harness_errors import ToolingError
14
14
  from .markdown.api import parse_markdown_text
15
15
 
@@ -158,13 +158,37 @@ def promote_document(
158
158
  "Choose another --output path or use --in-place intentionally.",
159
159
  error_id="FRONTMATTERING-PROMOTE-OUTPUT-EXISTS",
160
160
  )
161
+ in_place = destination.resolve() == input_path.resolve()
162
+ project = load_project(destination.parent)
163
+ # Preflight (fail-closed, before any mutation): an in-place promotion must
164
+ # target a file the project actually governs. Otherwise the catalog refresh
165
+ # below cannot see the promoted document and fails *after* rewriting the
166
+ # file — the non-transactional trap. Fail here, before touching the file.
167
+ if in_place and destination.resolve() not in set(_project_paths(project)):
168
+ raise ToolingError(
169
+ "Promotion target is outside the selected corpus",
170
+ str(destination),
171
+ "The project's corpus selection does not include this file, so promoting it in place would rewrite a file the project will not govern and cannot refresh.",
172
+ "Initialize the project at the repository root (`frontmattering init .`) or add this file's directory to the corpus include globs in .frontmattering/project.yaml.",
173
+ {"project_root": str(_project_root(project)), "corpus_include": (project.get("_selection") or {}).get("include") or []},
174
+ error_id="FRONTMATTERING-AUTHORING-TARGET-OUTSIDE-CORPUS",
175
+ )
176
+ original_bytes = destination.read_bytes() if in_place else None
161
177
  _atomic_write(destination, output)
162
178
  receipt["terminal_state"] = "WRITTEN"
163
- project = load_project(destination.parent)
164
- if profile == "router":
165
- removed = _remove_generated_starter_router(project, replacement_path=destination)
166
- receipt["removed_starter_router_paths"] = [str(path) for path in removed]
167
- refresh_router_task_catalog(load_project(destination.parent))
168
- else:
169
- refresh_router_task_catalog(project)
179
+ committed = False
180
+ try:
181
+ project = load_project(destination.parent)
182
+ if profile == "router":
183
+ removed = _remove_generated_starter_router(project, replacement_path=destination)
184
+ receipt["removed_starter_router_paths"] = [str(path) for path in removed]
185
+ refresh_router_task_catalog(load_project(destination.parent))
186
+ else:
187
+ refresh_router_task_catalog(project)
188
+ committed = True
189
+ finally:
190
+ # Transactional guarantee: any post-write failure must not leave the
191
+ # in-place target mutated. On success this is a no-op.
192
+ if not committed and in_place and original_bytes is not None:
193
+ _atomic_write(destination, original_bytes)
170
194
  return receipt