Skip to content

v1.0.21

Choose a tag to compare

@zanjonke zanjonke released this 02 Sep 12:54
· 38 commits to main since this release

New release πŸŽ‰

Hello everyone! We are releasing a new version of plain-forge - 1.0.21!

Run npx plain-forge update in your terminal to upgrade!

New features & improvements

  • check-forge-version β€” a new skill that finds every plain-forge install (project and global, all agent layouts), compares each against npm's latest, and reports PASS / FAIL / WARN with the exact update command. It never changes anything. --json and --offline supported.

  • Stale installs now warn loudly, at the right moment. load-plain-reference runs the check before loading any rule, and a non-current install leads with "ACTION REQUIRED" rather than a neutral aside β€” specs written against superseded rules may not match what the current codeplain renderer expects. You can still choose to continue.

  • resolve-section-ownership β€” a new skill that moves misplaced facts to the section that owns them (where the renderer will actually read them, instead of silently ignoring them). The counterpart to break-down-func-spec, which splits specs that are merely too large.

  • Conciseness rules. New concise-specs.md plus two worked BAD β†’ GOOD example banks: cut the obvious, no rationale or meta-commentary, no unverifiable adjectives or hedging. Required detail always wins.

  • module-structure.md β€” one rule for the whole file: skeleton, frontmatter, section order, module kinds, and a section-ownership table. Also documents that .plain files are processed with Liquid before parsing, so variables, filters, conditionals and loops work in any section.

  • Phase 1 now accepts technology-free implementation reqs β€” retry policy, idempotency, data-format rules. Naming a language, framework or storage engine still makes it a Phase 2 answer.

  • requires semantics documented properly. The build chain is a tree: accumulated code is copied forward, ancestors' functional specs are visible transitively, exported_concepts are not. Diamond joins are prohibited β€” all requires entries must sit on one ancestor path.

  • Bullet continuation is a convention, not a fabricated rule. One statement per line, nested - for clarifications, never a break for width β€” and the rules now say plainly what the renderer enforces versus what it merely tolerates.

  • Integrations record provider behavior instead of specifying it β€” quirks and doc divergences go in resources/-notes.md, not into a spec. Probe fixtures and doc snapshots are no longer required; the OpenAPI file is the artifact of record and conformance stays live.

  • Clearer test types β€” the table now says which tests are generated for you (unit, conformance) and which you author (acceptance).

Fixes

  • The canonical implementation-req example taught the opposite of its own rule: :Implementation: is the whole codebase, so a req about one behavior must name the component it constrains.
  • The URL/folder rule claimed enforcement that doesn't exist β€” a bare URL in prose passes validation and reaches the renderer verbatim, which is exactly why it's unsafe as a reference.
  • The stale-version report no longer breaks mid-sentence, and counts are pluralized.
  • Assorted factual corrections across the rules: what requires passes on, required-concepts.md, linked-resources.md, a typo in test-reqs.md, and Liquid-vs-import confusion throughout. Added rationale for the 200-LOC limit.

Internal improvements

  • Repo references moved to the plainlang GitHub org.
  • Node β‰₯ 22 required; CI tests on 22 and 24, on the same Node as the publish.
  • Every merge to main publishes a prerelease to npm's next tag β€” latest is untouched. Slack notified on publish.
  • New RELEASING.md; workflow actions pinned to SHAs with Dependabot.