Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 20:31
· 33 commits to main since this release

Added

  • 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).