Skip to content

Releases: apolenkov/feynman

2.1.1

Choose a tag to compare

@apolenkov apolenkov released this 08 Sep 18:49

Fixed

  • Native skill settings invoke only an already installed local CLI. They do not
    use a remote package runner, install or update code, or write state directly.
  • Manual publishing rejects a release tag that points to a different source
    commit before changing a GitHub release or publishing to npm.

2.1.0

Choose a tag to compare

@apolenkov apolenkov released this 06 Sep 09:37

Fixed

  • SessionStart bookkeeping cannot overwrite a concurrent preference change.
    The advisory injection counter is stored separately from user preferences.
  • Settings and state writes preserve the previous file when a staged write or
    rename fails. Install backs up corrupt state and rejects malformed hook shapes.
  • Install and uninstall preserve unrelated hooks with similar script names.
  • Generated hook commands treat paths with quotes, spaces and dollar signs
    literally, including after bootstrap export and repeated installation.
  • Bootstrap exports the complete CLI and core runtime. --force only replaces
    owned exports and refuses symlinks and protected directories.
  • Autofix preserves text in damaged frames instead of deleting unbordered
    content. Frames with ambiguous non-empty rows are left for manual repair,
    including when L11/L15 conversion or fenced processing is requested.
  • Invalid state commands no longer bootstrap or repair state before failing.
  • Unknown output styles cannot resolve inherited object properties.
  • SessionStart ignores malformed event shapes before creating local state.
  • ASCII explanations retain relation types, direction, conditions, explicit
    absences, uncertainty and exhaustive scope. Compact layouts preserve complete
    labels, aligned table columns and readable hierarchy branches.
  • Native skill loading uses the exact catalog path, including repeated directory
    components, without filesystem discovery or setup actions.

Changed

  • The native skill explains structures directly from its packaged instructions;
    CLI state operations apply only to explicit settings requests.
  • Core input contracts are readonly. Core lint checks use TypeScript type
    information and reject outer dependencies, dynamic loading and ambient I/O.
  • Type-aware lint now covers CLI, hooks, automation and tests as well as core
    modules; warnings fail the gate.
  • A pinned Prettier version enforces source/configuration formatting in local
    CI and GitHub Actions. Diagram strings and Markdown spacing are preserved.
  • Workflow actions use verified commit pins, release rehearsals have read-only
    permissions, and publication reuses the artifact validated by CI.
  • The complete local gate also runs in CI on Node 22, 24 and 26; it now compares
    two clean package builds and reports production files missing from LCOV.
  • ASCII evaluation records a frozen 67-call suite, including native skill,
    installed-hook and baseline arms, settings and suppression cases. Independent
    readers reconstruct diagrams before receiving hidden questions and source
    facts; tool activity and rendered alignment have separate acceptance gates.
  • The mixed-script rule no longer loads package metadata during module import;
    regression tests preserve acceptance of all published package identifiers.

2.0.0

Choose a tag to compare

@apolenkov apolenkov released this 01 Sep 11:52

Breaking changes

  • feynman is now Codex-only. Retired client adapters, hook manifests, skills,
    and target-selection commands are no longer shipped. Use feynman state or
    feynman status to manage the one supported local runtime.

Changed

  • Codex ships as a native marketplace skill; the explicit installer remains the
    supported way to register its SessionStart hook.
  • Native-plugin metadata and the skill description now cover visual
    architecture, flows, trees, comparisons, priorities, and status. The skill
    invokes the packaged CLI through npx, so it has no global-binary
    prerequisite.
  • The supported Node.js baseline is now 22.18 or newer, matching Node's stable
    built-in TypeScript support and the current ESLint runtime requirement.
  • Development tooling was refreshed to current compatible releases. TypeScript
    stays on 6.0.x until typescript-eslint officially supports TypeScript 7.
  • CI is read-only, no longer self-merges pull requests, and retains package and
    coverage artifacts instead of committing generated badge data. The coverage
    gate measures application source rather than optional test-harness probes.

Fixed

  • Package builds accept both npm 11 and npm 12 npm pack --json output.
  • Release smoke checks use an isolated npm configuration, so workstation-level
    npm policies cannot invalidate a clean-consumer verification.
  • SessionStart now increments only a valid local injection counter and
    recovers safely from malformed counter values.
  • Release bumping requires explicit --commit, --tag, and --push flags.
  • Changelog generation promotes a maintained [Unreleased] section instead of
    duplicating history when legacy git tags are incomplete.
  • npm publication now uses GitHub OIDC Trusted Publishing rather than a
    long-lived repository token.

feynman v0.2.0

Choose a tag to compare

@apolenkov apolenkov released this 07 May 04:36

feynman v0.2.0 Release Notes

Summary

v0.2.0 turns feynman from a working hook prototype into a production-ready
open-source plugin for Claude Code and Codex.

What's New

  • First-class Codex support:
    • npx @albinocrabs/feynman install --target codex
    • npx @albinocrabs/feynman uninstall --target codex
    • npx @albinocrabs/feynman doctor --target codex
  • Dual-client install:
    • --target claude
    • --target codex
    • --target both
  • Codex plugin metadata:
    • .codex-plugin/plugin.json
    • repo-root hooks.json
  • Claude Code plugin hook metadata:
    • hooks/hooks.json
  • FEYNMAN_HOME runtime selector so the same hook script can use
    ~/.claude or ~/.codex state without duplicating code.
  • Diagram linter:
    • feynman lint <file>
    • feynman-lint <file>
    • L01-L08 structural rules
    • Stop-hook correction path
  • Documentation:
    • rewritten README
    • architecture docs
    • lint rules reference
    • visual patterns guide
    • six domain examples
    • self-improvement loop design for v0.3.0

Fixed

  • Install logic is idempotent and no longer duplicates hook entries.
  • Bash installer delegates to the Node CLI so install behavior has one source
    of truth.
  • uninstall.sh removes hook entries while preserving user state.
  • Runtime state uses injections instead of the misleading legacy count.
  • Plugin manifests and npm package metadata now match the v0.2.0 release.

Breaking Changes

None expected for normal users.

The state schema now uses:

{
  "enabled": true,
  "intensity": "full",
  "injections": 0
}

The hook still reads legacy count once and migrates it to injections.

Migration From v0.1

Run the installer again:

npx @albinocrabs/feynman install --target claude

For Codex:

npx @albinocrabs/feynman install --target codex

For both:

npx @albinocrabs/feynman install --target both

Then restart Claude Code or Codex.

Verification

  • npm test: 190 tests passing
  • npm run coverage: 96.98% line coverage
  • Public docs/examples lint: passing
  • npm pack --dry-run: package includes Claude Code and Codex plugin metadata
  • Isolated tarball install: install --target both plus both doctor targets pass

Release Notes

  • npm package name: @albinocrabs/feynman
  • CLI binaries remain feynman and feynman-lint
  • Git tag and GitHub release should be cut after npm publish succeeds.