You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Initial implementation (feat(init): initial implementation): the
frontend-agnostic effect-analysis engine (engine/), the bash/POSIX and
PowerShell frontends (front/), the embedded YAML knowledge base
(kb/data/*.yaml), command resolution and flag/operand binding (bind/), the
composition facade (internal/analysis/) and the flowsh CLI (cmd/flowsh/).
The conformance corpus under testdata/corpus/ (GuardFall, destructive, benign
and PowerShell cases) with a no-silent-miss regression gate.
A tag-triggered release pipeline (.github/workflows/release.yml and .goreleaser.yaml): it validates the vX.Y.Z tag shape, re-runs go vet and
the test gates on the tagged commit, cross-compiles linux/amd64, linux/arm64,
darwin/arm64 and windows/amd64 with GoReleaser, emits a SHA-256 checksums.txt and publishes a GitHub Release, followed by an SLSA
build-provenance attestation verifiable with gh attestation verify. The
build is reproducible (no injected date or commit hash, mod_timestamp pinned
to the commit time) and stamps the tag into the binary through the additive main.buildVersion, so flowsh --version reports the release without
affecting the frozen report-contract versions.
Changed
Hardened the knowledge-base loader to tolerate CRLF/CR input and pinned
repository line endings with a .gitattributes (* text=auto eol=lf).
Enforced lint and dead-code gates (pinned .golangci.yml, a deadcode gate and
documentation hygiene) and dropped the unreachable exported symbols they flag;
the whole-program binder walkers and the corpus harness moved into test-only
files and the new internal/corpus package, and the CLI's terminal output is
routed through a single fprint/fprintln helper.
Refined prose and punctuation across the contributor guide, README and user
documentation.
Refreshed the README effect-report examples and CLI usage: documented the --file flag in the synopsis and options table and updated the annotated
examples (the root provenance line, the expanded score dimensions, the resolution/destructive lines and proven exfil: pairs; why, resolution and destructive fields in the JSON sample; the rm -rf $HOME
score corrected to Critical).
Fixed
Closed the silent-miss soundness gaps found in code review across the binder,
both frontends, the engine and the knowledge base. The dominant class violated
the no-silent-miss invariant: a command whose invocation matched no
effect-contributing parameter produced neither an effect nor ⊤, so the report
failed open to a benign result (bare reboot, kill -9 -1, xargs rm,
builtin eval).
Binder. Matches a leading positional operand by value before falling
back to index order, emits an intrinsic ProcSpawn for a resolved command
that matched nothing, lowers kind:self parameters unconditionally, keeps a
declared numeric flag as a flag rather than an operand, and derives the
conservative flag from a ⊤ effect.
bash frontend. Confines control-flow signals to subshells, background
jobs and speculative branches; inverts !; resets the status per statement;
runs substitutions inside arithmetic/conditional/let and C-style for;
executes array-element and subscript substitutions; unwraps builtin; treats >&word as a file redirect; and matches case patterns with a
bash-compatible glob matcher.
PowerShell frontend. Resolves aliases in source order and
case-insensitively, shadows a cmdlet by a declared alias or function,
degrades comma lists and switch to ⊤, and models no-space redirections,
data-file parameters and remote-execution cmdlets.
Engine. Made the effect key injective, kept Normalize's why-traces in
step with the merged effects, and recognized private-key paths and Windows
volume roots.
Knowledge base. Added an intrinsic self effect for the power-control
commands, the long spellings and siblings of the destructive flags, and
rejected the contradictory option+valueFrom:args combination.
Made the PowerShell per-parse wall-clock budget advisory under the race
detector (build-tagged constants disable the deadline check under -race
while termination stays guaranteed by the parser's deterministic limits;
ADR-0012).
Widened the CI load-latency budget to 50 ms after measuring the hermetic,
in-memory knowledge-base load on shared runners, superseding ADR-0004's 5 ms
threshold while leaving the embed-and-version decision intact (ADR-0011).
Skipped the sub-tick parse-budget assertions on hosts whose monotonic clock is
too coarse to observe the deadline, and widened the repeated-statement source
so the timeout-to-⊤ path stays covered everywhere (ADR-0013).