Skip to content

T-3TAJ-bump-markdown-contract-text-constraints-pin

Status: closed/done · Impact: medium · Complexity: small

The skill-prose migration needs markdown-contract’s requires / forbids text-constraint vocabulary (decision D-0011, capability C-0009) to express the constraints that the 14 invariants.yaml sidecars assert today. This task pins the dependency from the current #v0.1.0-pre.2 to a markdown-contract commit hash that includes the text predicate builders, so the rest of M-0008 can author and run the contract against a stable upstream surface. The builders are already on main (PR #71), so the pin targets a commit — no release tag is needed or waited on.

LocationRole today
package.jsonPins markdown-contract to git+ssh://...#v0.1.0-pre.2 — pre-dates the requires / forbids text-constraint vocabulary

No blocker — the builders are merged on markdown-contract main. PR #50 accepted the design (D-0011, surface (A)); PR #71 (feat(core): text predicate builders) landed the requires / forbids / textRule TS API (impl commit a8fc0c8, merge 9cc0edd); the declarative-YAML surface (T-TXYL, PR #87) has since merged too — current main is c462dfb. The contract is authored in TypeScript (T-FQFJ), so the declarative YAML surface is not required. markdown-contract is a separate vault, so these references are prose, not resolvable wikilinks; there is no internal depends_on.

A bare-commit git pin does not work with markdown-contract’s current packaging, so this is not a one-line edit:

  • The import resolves through package.json exports./dist/index.js, but dist/ is git-ignored and is not committed on main (verified: .gitignore lists dist/; git ls-tree origin/main shows only src/ + package.json). The scripts are build (tsc -p tsconfig.build.json) and prepublishOnly, with no prepare — so bun install from a raw commit fetches source with no built output and the import fails. The working #v0.1.0-pre.2 pin resolves only because it is a vendored-dist tag (the built dist/ was force-added at the tag).
  • So produce an installable artifact at a builder-bearing commit (≥ a8fc0c8 / 9cc0edd; current main c462dfb is fine), then bump the pin to it. Two routes:
    1. Vendored-dist tag (recommended — matches the proven pre-2 mechanism). In the markdown-contract repo, build dist/ at the target commit and cut a tag (e.g. v0.1.0-pre.3) with dist/ force-added; pin here to that tag.
    2. Add a prepare build script upstream so git installs build dist/ automatically, then pin to a commit SHA. Cleaner long-term, larger upstream change.
  • Bump package.json, run bun install, confirm markdown-contract and Zod still dedupe to a single v4, and smoke-import requires / forbids / textRule.
LocationKindChange
package.jsonmodifyRepoint the markdown-contract dependency from #v0.1.0-pre.2 to the new vendored-dist tag (or builder commit, route 2)
bun.lockmodifyRe-resolve via bun install; confirm a single markdown-contract and one Zod v4 (no duplicate)
  • AC-1: package.json’s markdown-contract dependency resolves to an installable artifact that (a) contains the requires / forbids / textRule builders and (b) ships a built dist/ — i.e. a vendored-dist tag at a builder-bearing commit (recommended), or a commit made installable via an upstream prepare script. No longer #v0.1.0-pre.2.
  • AC-2: bun install resolves cleanly and dedupes the lockfile — one markdown-contract and a single Zod v4.
  • AC-3: A smoke import of requires / forbids / textRule from markdown-contract resolves at runtime (the symbols T-FQFJ needs are present).
  • Authoring the skill-prose contract itself — that is the next task.
  • Any change to the gate op, the matcher, or the invariants.yaml files.
  • None blocking: the builders are already on markdown-contract main; the pin targets a commit hash. No internal depends_on.

← Back to Tasks