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
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,28 @@ and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.

## [Unreleased]

## [1.147.0] — 2026-07-29

### fix: ada-FuSa ecosystem-integration gaps found by a support-surface audit

A research pass checking whether FuSaOps fully supports ada-FuSa as its 7th
language adapter found the Dockerfile/tools-monitor/scan/fleet integration was
already correct, but three real gaps:

- `conform/conform.go`'s `langFromBinary` and `writeSourceFiles` had no `ada`
case — `fusaops conform --binary adafusa --scaffold` silently omitted the
Ada source stub (no `main.adb`) instead of erroring or working. Added an
`ada` case to both, using Ada's `--` comment syntax for the `//fusa:req`
equivalent, plus a minimal GNAT project file so the scaffold is buildable.
- `CLAUDE.md` still said "six languages today," omitting ada-FuSa entirely.
- `README.md`'s PATH-tools list and bundled-tools paragraph both omitted
`adafusa`, inconsistent with the (already correct) supported-languages
table further down the same file.

(A fourth gap — ada-FuSa's own release workflow missing the `xfusa-released`
repository_dispatch step other tools have — lives in ada-FuSa's repo, not
FuSaOps; noted for a future ada-FuSa-side fix, out of scope here.)

## [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)
Expand Down
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Guidance for Claude Code (and contributors) working in this repository.
## What FuSaOps is

FuSaOps is the **multi-language orchestration layer** over the x-FuSa toolchain
(go-FuSa, c-FuSa, cpp-FuSa, rust-FuSa, py-FuSa, java-FuSa — six languages today,
with more addable via the adapter interface). It does **not** implement
(go-FuSa, c-FuSa, cpp-FuSa, rust-FuSa, py-FuSa, java-FuSa, ada-FuSa — seven
languages today, with more addable via the adapter interface). It does **not** implement
language-specific safety rules. It detects the languages in a repo, runs each
language's x-FuSa tool, normalises the machine-readable output, and aggregates
everything into one report and one web dashboard.
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ go install github.com/SoundMatt/FuSaOps/cmd/fusaops@latest
```

The adapter tools must be on `PATH` for the languages you want scanned
(`gofusa`, `cfusa`, `cpfusa`, `rsfusa`, `pyfusa`, `jfusa`). The Docker image bundles all six.
(`gofusa`, `cfusa`, `cpfusa`, `rsfusa`, `pyfusa`, `jfusa`, `adafusa`). The Docker image bundles all seven.

## Usage

Expand Down Expand Up @@ -545,9 +545,10 @@ tool — **no manual rebuild, and FuSaOps itself does not need a new release**.
weekly scheduled rebuild is the safety net. See
[`docs/extending.md`](docs/extending.md).

**Bundled tools.** The all-in-one image bundles all six x-FuSa tools: go-FuSa v0.33.4,
cpp-FuSa v0.14.3, c-FuSa v0.5.42, rust-FuSa v0.3.8, py-FuSa v0.2.6, java-FuSa v0.4.5.
All are spec v1.11 aligned and published to GHCR.
**Bundled tools.** The all-in-one image bundles all seven x-FuSa tools: go-FuSa v0.33.4,
cpp-FuSa v0.14.3, c-FuSa v0.5.42, rust-FuSa v0.3.8, py-FuSa v0.2.6, java-FuSa v0.4.5,
ada-FuSa v0.1.0 (alpha). All are published to GHCR — see each tool's own release
notes for its current spec version.

> The image is `linux/amd64` (the tool images are amd64). On Apple Silicon it
> runs under emulation; add `--platform linux/amd64` if your client needs it.
Expand Down
16 changes: 16 additions & 0 deletions conform/conform.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,8 @@
slashTest := "//" + "fusa:test"
hashReq := "#" + "fusa:req"
hashTest := "#" + "fusa:test"
dashReq := "--" + "fusa:req"
dashTest := "--" + "fusa:test"
switch lang {
case "go":
src := fmt.Sprintf("package main\n\n%s REQ-TEST-001\n%s REQ-TEST-001\n\n%s REQ-TEST-002\n\nfunc main() {}\n",
Expand Down Expand Up @@ -402,6 +404,18 @@
src := fmt.Sprintf("%s REQ-TEST-001\n%s REQ-TEST-001\n\n%s REQ-TEST-002\n\npublic class Main {\n public static void main(String[] args) {}\n}\n",
slashReq, slashTest, slashReq)
return os.WriteFile(filepath.Join(r.dir, "Main.java"), []byte(src), 0o644)
case "ada":
if err := os.WriteFile(filepath.Join(r.dir, "conform_test.gpr"), []byte(`project Conform_Test is
for Main use ("main.adb");
for Source_Dirs use (".");
for Object_Dir use "obj";
end Conform_Test;
`), 0o644); err != nil {
return err
}
src := fmt.Sprintf("%s REQ-TEST-001\n%s REQ-TEST-001\n\n%s REQ-TEST-002\n\nprocedure Main is\nbegin\n null;\nend Main;\n",
dashReq, dashTest, dashReq)
return os.WriteFile(filepath.Join(r.dir, "main.adb"), []byte(src), 0o644)
default:
return nil
}
Expand All @@ -424,6 +438,8 @@
return "python"
case "jfusa":
return "java"
case "adafusa":
return "ada"
default:
return ""
}
Expand Down
2 changes: 2 additions & 0 deletions conform/conform_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ func TestLangFromBinary(t *testing.T) {
cases := map[string]string{
"gofusa": "go", "cfusa": "c", "cpfusa": "cpp",
"rsfusa": "rust", "pyfusa": "python", "jfusa": "java",
"adafusa": "ada",
"unknown": "",
}
for bin, want := range cases {
Expand Down Expand Up @@ -686,6 +687,7 @@ func TestWriteSourceFilesLanguages(t *testing.T) {
"rust": filepath.Join("src", "main.rs"),
"python": "main.py",
"java": "Main.java",
"ada": "main.adb",
"unknown": "",
}
for lang, relPath := range cases {
Expand Down
2 changes: 1 addition & 1 deletion fusaops.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
)

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

// SpecVersion is the x-FuSa specification version this release targets.
//
Expand Down
Loading