Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.

## [Unreleased]

## [1.146.0] — 2026-07-29

### docs: x-FuSa spec v1.15.2 — §1.6.1 Rule A false-positive tradeoff made explicit (SoundMatt/FuSaOps#101)

A same-day ada-FuSa self-review flagged Rule A's deny-list as occasionally
false-positiving on legitimate prose (`buffer[i]`, `"STBD"`) and asked if
that was intended. It is — confirmed and made explicit in the spec text with
both examples, so future audits hit the documented answer instead of
re-deriving it. Pure documentation addition, no behavior change.

## [1.145.0] — 2026-07-29

### docs: x-FuSa spec v1.15.1 — schemaVersion/specVersion clarified as MAJOR.MINOR.PATCH (SoundMatt/FuSaOps#99)
Expand Down
29 changes: 28 additions & 1 deletion docs/x-fusa-spec.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# x-FuSa Tool Specification

**Spec version:** 1.15.1 · **Status:** Normative · **Owner:** FuSaOps
**Spec version:** 1.15.2 · **Status:** Normative · **Owner:** FuSaOps

This is the **master contract** every x-FuSa tool (go-FuSa, c-FuSa, cpp-FuSa, and
future tools) implements. It defines the CLI surface, the machine-readable output
Expand Down Expand Up @@ -502,6 +502,15 @@ itself still belongs to the artifact's own command.
placeholder text real; a legitimate hazard/failure-mode description that
happens to contain a deny-listed string is rare enough to warrant an
explicit, individually-justified waiver rather than a blanket pass.
**This tradeoff is deliberate, not a bug to fix per-tool** — e.g. ordinary
engineering prose like `"buffer[i] causes memory corruption"` or the
abbreviation `"STBD"` (containing the `"TBD"` substring) will occasionally
false-positive against this canonical, byte-for-byte-identical-across-tools
deny-list; the fix for that specific finding is a disposition waiver
(`disposition add --reason "..."`), never a tool narrowing its own
detector's pattern to be "smarter" than the canonical one — two tools
disagreeing on what counts as a Rule A match undermines the "canonical"
guarantee this section exists to provide (filed as SoundMatt/FuSaOps#101).
- **Rule B — blanket qualitative fallback (SHOULD, a WARNING by default).**
For an artifact with **≥10 entries**, a tool SHOULD compute each
qualitative field's **distinct-value ratio** (count of distinct values ÷
Expand Down Expand Up @@ -1815,6 +1824,24 @@ tool-defined row.

## 14. Changelog

### 1.15.2 — 2026-07-29 (§1.6.1 Rule A: explicit false-positive example, filed as SoundMatt/FuSaOps#101)

A same-day ada-FuSa self-review flagged Rule A's bracket/`"TBD"`-substring
deny-list as producing occasional false positives on legitimate engineering
prose (`"buffer[i] causes memory corruption"`, the abbreviation `"STBD"`) and
asked whether this was an intended tradeoff or a spec gap. Re-reading the
existing text confirmed it's intended — the deny-list is deliberately simple
and canonical (byte-for-byte identical across tools) rather than
word-boundary-aware, with occasional false positives meant to be resolved via
an individual disposition waiver, not per-tool detector narrowing. The
reviewer correctly did not narrow ada-FuSa's own detector on exactly that
reasoning. Since the tradeoff was "evidently non-obvious enough that outside
audit tooling flags it as a bug on first read" (the reviewer's own words),
Rule A's definition now states the tradeoff explicitly with the same two
examples, so a future implementer hits the documented answer instead of
re-deriving it. Pure documentation addition, no behavior change — hence a
PATCH bump.

### 1.15.1 — 2026-07-29 (schemaVersion/specVersion format clarified to MAJOR.MINOR.PATCH, filed as SoundMatt/FuSaOps#99)

§3.2/§12's normative text said `schemaVersion` (and, by extension, `specVersion`)
Expand Down
8 changes: 4 additions & 4 deletions fmea.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"schemaVersion": "1.15.1",
"schemaVersion": "1.15.2",
"kind": "fmea-report",
"language": "go",
"generatedAt": "2026-07-29T02:45:59.121719Z",
"generatedAt": "2026-07-29T02:58:10.51284Z",
"projectRoot": ".",
"tool": "fusaops",
"toolVersion": "1.145.0",
"toolVersion": "1.146.0",
"standard": "iso26262",
"ratingScale": "custom-1-10",
"entries": [
Expand Down Expand Up @@ -210,5 +210,5 @@
"coveragePct": 19.5,
"componentInventoryMethod": "count of all packages in CLAUDE.md's core orchestration-pipeline table (11) and layered compliance/evidence/workflow table (30), 41 total; componentsAnalyzed counts distinct FMEA entries, not distinct packages named (some entries span multiple packages, e.g. \"auditpack / sign packages\")"
},
"hash": "sha256:ad57ee1c0abac5b9244b27d3df0301bd9a64f2a0089764fe526bb027a7fb9f31"
"hash": "sha256:fe07227fc6654ce31da551365e1fefc10dabd6cba5008e2f072ea5e90cb079f9"
}
4 changes: 2 additions & 2 deletions fusaops.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ import (
)

// Version is the current release of FuSaOps.
const Version = "1.145.0"
const Version = "1.146.0"

// SpecVersion is the x-FuSa specification version this release targets.
//
//fusa:req REQ-FO-CORE007
const SpecVersion = "1.15.1"
const SpecVersion = "1.15.2"

// Sentinel errors. Callers should use errors.Is for comparison.
//
Expand Down
Loading