Skip to content

Releases: Aloim/phaneslightplugin

PhanesLight v3.7.2

Choose a tag to compare

@Aloim Aloim released this 04 Sep 18:42

Full platform parity

Every script PhanesLight installs into a project now has both a Windows and a POSIX variant. The ten that were Windows-only join the day-to-day checks that were already on both:

preflight, install-templates, update-preflight, manifest-write, batch-apply, census-diff, scaffold, ledger, repo-manifest, and the hook-ledger-status hook.

Seven of the ten use Node to parse JSON, which costs nothing extra: Claude Code is itself a Node program, the plugin's hooks already dispatch through Node, and cli.js installs on every platform. The nine existing pure-shell scripts stay pure shell.

Defects fixed, none of them caused by the port

  • scaffold, both platforms. The existence pre-checks were untyped, so a file sitting where a directory belongs reported EXISTS, and a directory where a file belongs reported EXISTS. Both platforms behaved identically, which is why no differential test had ever caught it.
  • scaffold, Windows. New-Item -ItemType Directory -Force returns without error and creates nothing when an ancestor is a file, so the script announced CREATED and exited 0 for directories that did not exist.
  • update-preflight, both platforms. The spec sensor was gated differently from the other five gating sensors, so a sensor reporting a delta could still let the verdict reach quiet: true.
  • new-file, both platforms. The DOC DISCIPLINE header written into every generated documentation file now matches the canonical template.

Notes for maintainers

batch-apply and repo-manifest claimed a byte-identical stdout against their POSIX siblings. PowerShell appends CRLF on redirect, so that was never true and could not have been noticed while the siblings did not exist. The stated invariant is now: identical exit code, stdout identical after stripping CR, and every written file byte-identical.

MANIFEST.json declares all six hardcoded list caps. publish.sh gains three guards: manifest and tree agreement, every template stamp at the published version, and a shell parse plus bashism check that refuses outright when dash is absent.

Upgrading: no migration boundary. A POSIX project picks up the ten new scripts through an ordinary /phaneslight:run update.

PhanesLight v3.7.1

Choose a tag to compare

@Aloim Aloim released this 04 Sep 11:54

Why the move. This plugin was built for the Claude community marketplace. Publishing it into Aloim/phaneslight at v3.7.0 replaced the manual prompt that lived there and retired the manual install path as a side effect, which was never the intent. Both halves are corrected at v3.7.1: the plugin has its own repository here, and Aloim/phaneslight is the manual, single-file PhanesLight again.

Leaving the plugin for the manual install, if you prefer the single-file prompt: /plugin uninstall phaneslight@phaneslight and /plugin marketplace remove phaneslight, then follow "Coming from the plugin" in the Aloim/phaneslight README. Both lines are at v3.7.1 and share the same project state, so neither direction is a migration.

The plugin now lives here. The marketplace source moved from Aloim/phaneslight, which holds the manual prompt instead. Re-add it:

/plugin marketplace add Aloim/phaneslightplugin
/plugin install phaneslight@phaneslight

The plugin and the marketplace both keep the name phaneslight, so /phaneslight:run and /phaneslight:upgrade are unchanged. Only the source repository moved.

The haiku tier never writes code

<slug>-mechanic may no longer write code of any kind. Its dispatched scope is mechanical non-code work only: formatting, documentation indexing, archive condensation, and retrieval-and-digest. A task that turns out to need authored code comes back to its spawner unwritten. It is also no longer named as an agent that may create files under tests/, because a test file is code.

Its escalation threshold drops from MED to LOW, and that follows from the write restriction rather than from any reassessment of severity. A mechanic that could write was able to fix a LOW in passing. One that cannot has nowhere to put a LOW except upward, and a LOW it keeps to itself is a LOW nobody else will ever see. What travels is a report, not a work item. INFO never travels.

The worker is untouched: it still writes code in scope and still escalates at MED.

The reviewer plans first, and writes plan files

On a planned launch the orchestrator's first act is a reviewer dispatch against the plan, before the first execution step. The reviewer returns a plan review naming what the repository contradicts, what is sequenced wrong, what acceptance checks are missing, and what the plan implies without stating. On CRIT or HIGH the orchestrator stops and takes it to you. A run handed no plan skips this entirely.

The reviewer may write the plan file, amending it in place or authoring a corrected one under documentation/plans/, naming every file it wrote. That is the only writing it does, and it is documentation: it never touches code.

The old flat claim that the reviewer "never writes" is corrected to "never writes code", which is what it always meant. The same spec required it to author fix plans while the generation checklist called any reviewer write grant a defect; the two could not both be honoured.

This costs more, deliberately. The fable tier now fires once per planned launch. A defect caught in the plan costs one review; the same defect caught at close costs every step built on top of it.

The hooks run on macOS and Linux

Every entry in the plugin's hooks/hooks.json invoked powershell -File. That is correct on Windows and unrunnable anywhere else, and since hooks.json ships to every platform identically there was nowhere left to make the choice per platform. The entries now run a Node launcher, scripts/hook-run.js, which resolves the platform's own script extension, dispatches through powershell on Windows and sh elsewhere, and passes the hook's exit code through unchanged so the blocking PreToolUse guard still blocks. A hook with no variant on this platform is a silent no-op rather than a broken command.

Two smaller corrections ride along: plugin.json now carries the SPDX identifier CC-BY-NC-4.0 where it read See LICENSE, and the run skill's opening paragraph drops an invented award title and institute for the plainer wording the v4.0 line already ships. No directive, phase, rule or threshold moved.

Upgrading

Run /phaneslight:upgrade. migrationBoundaries is unchanged, so this is a normal update run rather than a migration. Restart the session afterwards; hooks are snapshotted at session start.

Full accounting in Changelog.md.