Skip to content

catalogue: republish io.pilot.aegis 0.1.3 with the cli.args argv fix (go-live half of app-template#90)#397

Open
Alexgodoroja wants to merge 1 commit into
mainfrom
catalogue/io.pilot.aegis-0.1.3-argvfix
Open

catalogue: republish io.pilot.aegis 0.1.3 with the cli.args argv fix (go-live half of app-template#90)#397
Alexgodoroja wants to merge 1 commit into
mainfrom
catalogue/io.pilot.aegis-0.1.3-argvfix

Conversation

@Alexgodoroja

Copy link
Copy Markdown
Collaborator

Go-live half of pilot-protocol/app-template#90. That PR fixes the submission of record; this one is what actually reaches users.

The bug

io.pilot.aegis 0.1.3 shipped with backend.command = ["aegis"] and every curated method repeating the binary name as argv[0] (["aegis","scan","${path}"]). The scaffold builds argv as base[0] + base[1:] + cli.args, so the adapter ran aegis aegis scan <path> → unknown subcommand → usage banner, exit 1.

6 of 7 methods are dead in production today (scan, status, targets, config, version, help) — only aegis.exec works. Every other CLI app (tldr, duckdb, postgres, redis, mysql, sqlite, docker, otto, miren) omits the binary name; aegis was the sole outlier.

Why the version stays 0.1.3

The AEGIS binary is unchanged — this is a wrapper-only fix. Artifact URLs derive from app_version, so bumping to 0.1.4 would repoint sha-pinned URLs at objects that do not exist. The native artifacts under io.pilot.aegis/0.1.3/ are reused byte-for-byte. docs/UPDATING.md allows a same-version re-publish by the owner (idempotent).

Signed with the app’s original publisher key ed25519:+nt58BA0gpPYuyaeG2GwfTI79j8IHP+zra5GvRQv0N0=, which matches the publisher pin already in the catalogue, so the ownership gate passes.

Bundles go to a NEW prefix — please keep it that way

Bundles are published to bundles/io.pilot.aegis/0.1.3/rev2/, not over 0.1.3/.

The live catalogue pins the old bundle sha (ae40da40…). Overwriting the existing objects in place would make the pinned sha disagree with the bytes R2 serves, breaking sha verification for every existing aegis install for the entire window between the upload and this merge. The old objects are untouched and still serve the currently-pinned sha; this PR flips bundle_url + bundle_sha256 together, so the cutover is atomic and reverting this PR is a complete rollback.

What changed

bundle_sha256 (linux/amd64) ae40da40…c8416c11…
linux/arm64 ad2b5c81…751aee6d…
darwin/arm64 e582c8e7…bbd42e0f…
metadata_sha256 ca71da63…b3a02a65…
version / publisher unchanged

metadata.json also picks up the product_demo block from app-template#88, which had not been republished for this app yet. It carries no next_steps — that ships with app-template#89.

Verification

Built from app-template#90 at 3364651 (main + the 6-deletion fix). Rehearsed the real client path before opening: stock pilot-daemon + pilotctl, signature verified against the prod anchor iHdBWayA…, bundle fetched from prod R2 over the network:

fetching https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.aegis/0.1.3/rev2/io.pilot.aegis-0.1.3-darwin-arm64.tar.gz ...
sha256 OK (bbd42e0fc33b55d04034e3836972e011a368548685b06f72908f84db70f7b8c9)
installed io.pilot.aegis v0.1.3

Then, through pilotctl appstore call:

  • aegis.scan {"path":"/etc/hosts"}"exit": 0, [AEGIS] scan complete: 0/1 flagged (was: exit 1 + usage banner)
  • planted injection file → QUARANTINE combined=1.00 [Patterns=1.00], scan complete: 1/1 flagged — it genuinely scans, not merely exits 0
  • aegis.status / targets / config / version → all exit 0

Signature re-verified against the prod anchor after signing.

Merge order

Land app-template#90 first (submission of record), then this. Not merging either myself — this one is live for every agent the moment it lands.

io.pilot.aegis 0.1.3 shipped with every curated method repeating the binary
name as argv[0], so the adapter ran "aegis aegis scan <path>" and 6 of its 7
methods returned a usage banner with exit 1 instead of doing the work. Only
aegis.exec was usable. app-template#90 drops the duplicated name from cli.args;
this is the go-live half — the rebuilt, re-signed bundles.

Same version (0.1.3): the AEGIS binary itself is unchanged, this is a
wrapper-only fix, and the native artifacts under io.pilot.aegis/0.1.3/ are
reused byte-for-byte. Signed with the app's original publisher key, so the
update gate's ownership check passes.

The bundles are published to a NEW prefix (0.1.3/rev2/) rather than overwriting
0.1.3/. The live catalogue pins the old bundle sha, so overwriting in place
would break sha verification for every existing aegis install for the whole
window between the upload and this merge. The old objects stay untouched and
keep serving the currently-pinned sha; this commit flips url+sha together, so
the cutover is atomic and reverting this PR is a complete rollback.

metadata.json also picks up the product_demo block from app-template#88, which
had not been republished for this app yet.

Verified end-to-end before opening: stock daemon + pilotctl against this exact
catalogue.json (signature verified against the prod anchor), bundle fetched from
prod R2 (sha256 OK), then aegis.scan returns a real scan — "scan complete: 0/1
flagged" on a clean file, and QUARANTINE / "1/1 flagged" on a planted injection.
The other five repaired methods all exit 0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant