From ba19336468a6d314ced72af2e4b207533328ed11 Mon Sep 17 00:00:00 2001 From: rldyourmnd Date: Mon, 7 Sep 2026 09:31:26 +0500 Subject: [PATCH] feat: complete setup authoring and refreshed harness artifacts Published at 0.0.67. Propose changes through this repository's issues and pull requests. --- .github/workflows/publish-crates.yml | 2 +- CHANGELOG.md | 11 + Cargo.lock | 8 +- Cargo.toml | 8 +- README.md | 2 +- crates/codex-setup-system/src/software.rs | 78 +++---- install.ps1 | 2 +- install.sh | 2 +- references/codex-baseline.json | 88 ++++---- .../home/agents/nddev-builder.toml | 209 +++++++++++++----- .../nddev-builder/home/prompts/nddev-setup.md | 18 +- .../home/prompts/nddev-validate.md | 7 +- setups/nddev-builder/setup.json | 2 +- 13 files changed, 272 insertions(+), 165 deletions(-) diff --git a/.github/workflows/publish-crates.yml b/.github/workflows/publish-crates.yml index 19ae72d..d7455ad 100644 --- a/.github/workflows/publish-crates.yml +++ b/.github/workflows/publish-crates.yml @@ -48,7 +48,7 @@ jobs: - name: Mint a short-lived crates.io token id: crates - uses: rust-lang/crates-io-auth-action@82864bf380abd3e242c564a5ba58dd29d6265b00 + uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18 # v1.0.5 - name: Publish codex-setup-system env: diff --git a/CHANGELOG.md b/CHANGELOG.md index 7011487..008831d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,17 @@ cut and that this clone does not carry. ## [Unreleased] +## [0.0.67] - 2026-09-07 + +nddev-builder creates complete native tool collections: select and author +components, compose exact setups across declared roots, document capabilities, +and verify installation, native invocation and recovery. Provider maintenance +checks are separate from ordinary setup authoring. The toolkit includes the +consumer's exact digest-approval steps and preserves the active environment. +Product artifacts are refreshed from verified vendor bytes, with previous +pins retained for rollback. Release authentication uses the tagged upstream +action release. + ## [0.0.66] - 2026-09-07 Reset is an optional protocol operation: it empties declared native diff --git a/Cargo.lock b/Cargo.lock index 952606f..5d4bdc5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,7 +25,7 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "codex-setup-system" -version = "0.0.66" +version = "0.0.67" dependencies = [ "harness-runtime", "provider-v3", @@ -76,7 +76,7 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "harness-runtime" -version = "0.0.66" +version = "0.0.67" dependencies = [ "provider-v3", "serde", @@ -147,7 +147,7 @@ dependencies = [ [[package]] name = "provider-v3" -version = "0.0.66" +version = "0.0.67" dependencies = [ "serde", "serde_json", @@ -209,7 +209,7 @@ dependencies = [ [[package]] name = "setup-core" -version = "0.0.66" +version = "0.0.67" dependencies = [ "miniz_oxide", "serde", diff --git a/Cargo.toml b/Cargo.toml index e8ce7f9..2b079c6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ ] [workspace.package] -version = "0.0.66" +version = "0.0.67" edition = "2024" rust-version = "1.89" license = "AGPL-3.0-or-later" @@ -23,9 +23,9 @@ sha2 = "0.11" # `setup-core::archive`); an inflate loop is not, because its bugs are # memory-safety bugs and it is not improved by being hand-written here. miniz_oxide = "0.9" -setup-core = { path = "crates/setup-core", version = "0.0.66" } -provider-v3 = { path = "crates/provider-v3", version = "0.0.66" } -harness-runtime = { path = "crates/harness-runtime", version = "0.0.66" } +setup-core = { path = "crates/setup-core", version = "0.0.67" } +provider-v3 = { path = "crates/provider-v3", version = "0.0.67" } +harness-runtime = { path = "crates/harness-runtime", version = "0.0.67" } [workspace.lints.rust] unsafe_code = "forbid" diff --git a/README.md b/README.md index 139dd48..da30748 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ release is a convenience, not the authorised copy. ```bash docker run --rm -v "$HOME/.config:/config" \ - ghcr.io/nddev-opennetwork/codex-setup-system:0.0.66 \ + ghcr.io/nddev-opennetwork/codex-setup-system:0.0.67 \ status --target /config/ --json ``` diff --git a/crates/codex-setup-system/src/software.rs b/crates/codex-setup-system/src/software.rs index 6cc38b2..51384ed 100644 --- a/crates/codex-setup-system/src/software.rs +++ b/crates/codex-setup-system/src/software.rs @@ -20,103 +20,103 @@ use harness_runtime::{Artifact, Delivery, Previous, Shape, Software}; pub(crate) const ARTIFACTS: &[Artifact] = &[ Artifact { platform: "linux/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-arm64.tgz", - bytes: 121_675_259, - sha256: "sha256:df2f8f764bf86aeae51d71cc37686dcbd2c24e4bce9a9d1e8f249141fd99fac3", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-arm64.tgz", + bytes: 121_707_000, + sha256: "sha256:439c0dd0d6923f607b4e5cd1e3079c12f0b86f6e5007f07e377d6ad25e2d7bb9", shape: Shape::GzipTar, member: "package/vendor/aarch64-unknown-linux-musl/bin/codex", }, Artifact { platform: "linux/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-x64.tgz", - bytes: 129_259_793, - sha256: "sha256:1fd52113294979c9936a110cab7cb9d5e9d1e28086f112fd6748a05826a9e5a0", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-x64.tgz", + bytes: 129_272_137, + sha256: "sha256:54818cb9fce3360cc6e44cfc5a96952cd5c1243efb43cbe488e11dda84663e08", shape: Shape::GzipTar, member: "package/vendor/x86_64-unknown-linux-musl/bin/codex", }, Artifact { platform: "macos/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-arm64.tgz", - bytes: 115_669_249, - sha256: "sha256:151ecdd90b96af823a2828146bff056c8a5f42d2ab4da63a198fe8a4ad84990b", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-arm64.tgz", + bytes: 115_672_312, + sha256: "sha256:535d301b49131abfda3264f959fb0defa40bbc306976d98ddbc15c424636c55c", shape: Shape::GzipTar, member: "package/vendor/aarch64-apple-darwin/bin/codex", }, Artifact { platform: "macos/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-x64.tgz", - bytes: 123_497_670, - sha256: "sha256:ec139bb87cdd25d8038069cef7ff2bdd2d119c7fcf0ac6e26dcc1020573cd112", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-x64.tgz", + bytes: 123_544_033, + sha256: "sha256:5e468958503c60e940b1b1af3fe2064c16fd141f1607111caf99f2c0a0e80725", shape: Shape::GzipTar, member: "package/vendor/x86_64-apple-darwin/bin/codex", }, Artifact { platform: "windows/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-arm64.tgz", - bytes: 132_143_077, - sha256: "sha256:71ba906090143a310354ae5c864d5c677e05842b373cadcf84ef2872f8ddcfa1", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-arm64.tgz", + bytes: 132_173_674, + sha256: "sha256:6d0bf07e04810f0ed4ad2984f6c9f0547bb9e0e1bb1f8fe9ecce0de3376bbfef", shape: Shape::GzipTar, member: "package/vendor/aarch64-pc-windows-msvc/bin/codex.exe", }, Artifact { platform: "windows/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-x64.tgz", - bytes: 141_510_231, - sha256: "sha256:e674587ea13f7051aeae697b1425ec028a236f54fa1dd1a15661ef7c063f2874", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-x64.tgz", + bytes: 141_495_386, + sha256: "sha256:05f473573f38b3f4dc9484e6807a511a1bb0e128dfa50816dafc5f79e553cdca", shape: Shape::GzipTar, member: "package/vendor/x86_64-pc-windows-msvc/bin/codex.exe", }, ]; -/// The artifacts 0.153.1 was published as, kept so +/// The artifacts 0.153.2 was published as, kept so /// `software_update` has a version to move from and `rollback` a tree to /// return to. Measured from bytes when it was the current pin. pub(crate) const PREVIOUS_ARTIFACTS: &[Artifact] = &[ Artifact { platform: "linux/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-linux-arm64.tgz", - bytes: 121_697_093, - sha256: "sha256:3e050251b40b334e74a27c52128b86f8468fa8242d5c8205b04f4b31f85690f7", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-arm64.tgz", + bytes: 121_675_259, + sha256: "sha256:df2f8f764bf86aeae51d71cc37686dcbd2c24e4bce9a9d1e8f249141fd99fac3", shape: Shape::GzipTar, member: "package/vendor/aarch64-unknown-linux-musl/bin/codex", }, Artifact { platform: "linux/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-linux-x64.tgz", - bytes: 129_241_027, - sha256: "sha256:33b4ae16df4530361a651bc1540ae8de325ccc789622a812c94585bdf205f7f4", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-x64.tgz", + bytes: 129_259_793, + sha256: "sha256:1fd52113294979c9936a110cab7cb9d5e9d1e28086f112fd6748a05826a9e5a0", shape: Shape::GzipTar, member: "package/vendor/x86_64-unknown-linux-musl/bin/codex", }, Artifact { platform: "macos/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-darwin-arm64.tgz", - bytes: 115_673_114, - sha256: "sha256:33babfe9db041ff18100775bf34df673c1baf9a5d7b1d09fdcafefc58501aa87", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-arm64.tgz", + bytes: 115_669_249, + sha256: "sha256:151ecdd90b96af823a2828146bff056c8a5f42d2ab4da63a198fe8a4ad84990b", shape: Shape::GzipTar, member: "package/vendor/aarch64-apple-darwin/bin/codex", }, Artifact { platform: "macos/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-darwin-x64.tgz", - bytes: 123_566_510, - sha256: "sha256:bafcac30746296be53a183ff907b9ae59cef9f8e65fa511abcb7661bd247bf80", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-x64.tgz", + bytes: 123_497_670, + sha256: "sha256:ec139bb87cdd25d8038069cef7ff2bdd2d119c7fcf0ac6e26dcc1020573cd112", shape: Shape::GzipTar, member: "package/vendor/x86_64-apple-darwin/bin/codex", }, Artifact { platform: "windows/arm64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-win32-arm64.tgz", - bytes: 132_174_290, - sha256: "sha256:5ee2fab96e2ba898ea7e4c0c8f4222f4dfd08d0ea9b4c9b849323ebb1e90ef14", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-arm64.tgz", + bytes: 132_143_077, + sha256: "sha256:71ba906090143a310354ae5c864d5c677e05842b373cadcf84ef2872f8ddcfa1", shape: Shape::GzipTar, member: "package/vendor/aarch64-pc-windows-msvc/bin/codex.exe", }, Artifact { platform: "windows/x86_64", - url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-win32-x64.tgz", - bytes: 141_469_181, - sha256: "sha256:fa9e2ac23e905fdcba1fb4f396c57da65fac04c1a3ee4eebbbb85b5ad6b2dc10", + url: "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-x64.tgz", + bytes: 141_510_231, + sha256: "sha256:e674587ea13f7051aeae697b1425ec028a236f54fa1dd1a15661ef7c063f2874", shape: Shape::GzipTar, member: "package/vendor/x86_64-pc-windows-msvc/bin/codex.exe", }, @@ -124,12 +124,12 @@ pub(crate) const PREVIOUS_ARTIFACTS: &[Artifact] = &[ /// Codex's program, and where its bytes come from. pub(crate) const SOFTWARE: Software = Software { - version: "0.153.2", + version: "0.153.4", command: "codex", delivery: Delivery::Artifacts(ARTIFACTS), unsupported: &[], previous: Some(Previous { - version: "0.153.1", + version: "0.153.2", artifacts: PREVIOUS_ARTIFACTS, }), }; diff --git a/install.ps1 b/install.ps1 index 091ede4..eed8399 100644 --- a/install.ps1 +++ b/install.ps1 @@ -7,7 +7,7 @@ # powershell -ExecutionPolicy Bypass -File install.ps1 -Version 0.1.0 [CmdletBinding()] param( - [string]$Version = "0.0.66", + [string]$Version = "0.0.67", [string]$InstallDir = "$env:LOCALAPPDATA\Programs\codex-setup-system" ) $ErrorActionPreference = "Stop" diff --git a/install.sh b/install.sh index 7e1f9d9..155a056 100644 --- a/install.sh +++ b/install.sh @@ -14,7 +14,7 @@ set -eu REPO="NDDev-OpenNetwork/codex-setup-system" BINARY="codex-setup-system" -VERSION="${1:-0.0.66}" +VERSION="${1:-0.0.67}" PREFIX="${CODEX_INSTALL_DIR:-$HOME/.local/bin}" case "$(uname -s)" in diff --git a/references/codex-baseline.json b/references/codex-baseline.json index 41364d4..a006192 100644 --- a/references/codex-baseline.json +++ b/references/codex-baseline.json @@ -21,12 +21,12 @@ "desktop_documented_product": "ChatGPT", "desktop_pinned_cli_packaging": "Codex.app/Codex.dmg", "installer_asset": "install.sh", - "installer_release": "rust-v0.153.2", - "installed_version": "0.153.2", + "installer_release": "rust-v0.153.4", + "installed_version": "0.153.4", "standalone_layout": "packages/standalone" }, "verified_version_ref": "build/version.json:codex_cli_tested", - "verified_at": "2026-09-04T13:31:03+00:00", + "verified_at": "2026-09-07T03:12:33+00:00", "native_surfaces": { "verified_at": "2026-08-31", "config_home": "~/.codex", @@ -212,89 +212,89 @@ "shape": "gzip-tar", "platforms": { "linux/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-arm64.tgz", - "bytes": 121675259, - "sha256": "sha256:df2f8f764bf86aeae51d71cc37686dcbd2c24e4bce9a9d1e8f249141fd99fac3", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-arm64.tgz", + "bytes": 121707000, + "sha256": "sha256:439c0dd0d6923f607b4e5cd1e3079c12f0b86f6e5007f07e377d6ad25e2d7bb9", "member": "package/vendor/aarch64-unknown-linux-musl/bin/codex" }, "linux/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-x64.tgz", - "bytes": 129259793, - "sha256": "sha256:1fd52113294979c9936a110cab7cb9d5e9d1e28086f112fd6748a05826a9e5a0", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-x64.tgz", + "bytes": 129272137, + "sha256": "sha256:54818cb9fce3360cc6e44cfc5a96952cd5c1243efb43cbe488e11dda84663e08", "member": "package/vendor/x86_64-unknown-linux-musl/bin/codex" }, "macos/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-arm64.tgz", - "bytes": 115669249, - "sha256": "sha256:151ecdd90b96af823a2828146bff056c8a5f42d2ab4da63a198fe8a4ad84990b", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-arm64.tgz", + "bytes": 115672312, + "sha256": "sha256:535d301b49131abfda3264f959fb0defa40bbc306976d98ddbc15c424636c55c", "member": "package/vendor/aarch64-apple-darwin/bin/codex" }, "macos/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-x64.tgz", - "bytes": 123497670, - "sha256": "sha256:ec139bb87cdd25d8038069cef7ff2bdd2d119c7fcf0ac6e26dcc1020573cd112", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-x64.tgz", + "bytes": 123544033, + "sha256": "sha256:5e468958503c60e940b1b1af3fe2064c16fd141f1607111caf99f2c0a0e80725", "member": "package/vendor/x86_64-apple-darwin/bin/codex" }, "windows/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-arm64.tgz", - "bytes": 132143077, - "sha256": "sha256:71ba906090143a310354ae5c864d5c677e05842b373cadcf84ef2872f8ddcfa1", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-arm64.tgz", + "bytes": 132173674, + "sha256": "sha256:6d0bf07e04810f0ed4ad2984f6c9f0547bb9e0e1bb1f8fe9ecce0de3376bbfef", "member": "package/vendor/aarch64-pc-windows-msvc/bin/codex.exe" }, "windows/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-x64.tgz", - "bytes": 141510231, - "sha256": "sha256:e674587ea13f7051aeae697b1425ec028a236f54fa1dd1a15661ef7c063f2874", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-x64.tgz", + "bytes": 141495386, + "sha256": "sha256:05f473573f38b3f4dc9484e6807a511a1bb0e128dfa50816dafc5f79e553cdca", "member": "package/vendor/x86_64-pc-windows-msvc/bin/codex.exe" } }, - "version": "0.153.2", - "verified_at": "2026-09-04T13:31:03+00:00" + "version": "0.153.4", + "verified_at": "2026-09-07T03:12:33+00:00" }, - "setup_catalogue_digest": "sha256:0852dd75a463902a650b910fed85ce0bfe33c4fae26039f150224fb227a96bdb", + "setup_catalogue_digest": "sha256:58465e95466a2f0f5572d5807512e32445e9e40f16eb1ded9f815213cca1d6d7", "previous_software_artifacts": { "command": "codex", "shape": "gzip-tar", "platforms": { "linux/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-linux-arm64.tgz", - "bytes": 121697093, - "sha256": "sha256:3e050251b40b334e74a27c52128b86f8468fa8242d5c8205b04f4b31f85690f7", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-arm64.tgz", + "bytes": 121675259, + "sha256": "sha256:df2f8f764bf86aeae51d71cc37686dcbd2c24e4bce9a9d1e8f249141fd99fac3", "member": "package/vendor/aarch64-unknown-linux-musl/bin/codex" }, "linux/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-linux-x64.tgz", - "bytes": 129241027, - "sha256": "sha256:33b4ae16df4530361a651bc1540ae8de325ccc789622a812c94585bdf205f7f4", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-linux-x64.tgz", + "bytes": 129259793, + "sha256": "sha256:1fd52113294979c9936a110cab7cb9d5e9d1e28086f112fd6748a05826a9e5a0", "member": "package/vendor/x86_64-unknown-linux-musl/bin/codex" }, "macos/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-darwin-arm64.tgz", - "bytes": 115673114, - "sha256": "sha256:33babfe9db041ff18100775bf34df673c1baf9a5d7b1d09fdcafefc58501aa87", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-arm64.tgz", + "bytes": 115669249, + "sha256": "sha256:151ecdd90b96af823a2828146bff056c8a5f42d2ab4da63a198fe8a4ad84990b", "member": "package/vendor/aarch64-apple-darwin/bin/codex" }, "macos/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-darwin-x64.tgz", - "bytes": 123566510, - "sha256": "sha256:bafcac30746296be53a183ff907b9ae59cef9f8e65fa511abcb7661bd247bf80", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-darwin-x64.tgz", + "bytes": 123497670, + "sha256": "sha256:ec139bb87cdd25d8038069cef7ff2bdd2d119c7fcf0ac6e26dcc1020573cd112", "member": "package/vendor/x86_64-apple-darwin/bin/codex" }, "windows/arm64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-win32-arm64.tgz", - "bytes": 132174290, - "sha256": "sha256:5ee2fab96e2ba898ea7e4c0c8f4222f4dfd08d0ea9b4c9b849323ebb1e90ef14", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-arm64.tgz", + "bytes": 132143077, + "sha256": "sha256:71ba906090143a310354ae5c864d5c677e05842b373cadcf84ef2872f8ddcfa1", "member": "package/vendor/aarch64-pc-windows-msvc/bin/codex.exe" }, "windows/x86_64": { - "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.1-win32-x64.tgz", - "bytes": 141469181, - "sha256": "sha256:fa9e2ac23e905fdcba1fb4f396c57da65fac04c1a3ee4eebbbb85b5ad6b2dc10", + "url": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.2-win32-x64.tgz", + "bytes": 141510231, + "sha256": "sha256:e674587ea13f7051aeae697b1425ec028a236f54fa1dd1a15661ef7c063f2874", "member": "package/vendor/x86_64-pc-windows-msvc/bin/codex.exe" } }, - "version": "0.153.1", - "verified_at": "2026-09-03T22:15:16+00:00" + "version": "0.153.2", + "verified_at": "2026-09-04T13:31:03+00:00" }, "capability_features": { "measured_at": "2026-08-30", diff --git a/setups/nddev-builder/home/agents/nddev-builder.toml b/setups/nddev-builder/home/agents/nddev-builder.toml index 4bbbaed..4c0a72d 100644 --- a/setups/nddev-builder/home/agents/nddev-builder.toml +++ b/setups/nddev-builder/home/agents/nddev-builder.toml @@ -3,18 +3,29 @@ # already names. All three keys below are required -- measured against # the 0.151.0 binary, which refuses each by name when it is absent. name = "nddev-builder" -description = "Work on codex-setup-system -- change a declaration, add or revise a setup, or check a target lifecycle end to end." +description = "Build or review a complete native tool collection for codex: select components, compose a setup, document capabilities, and verify installation and recovery." developer_instructions = ''' -You are working inside `codex-setup-system`, one of seven NDDev setup systems -that install a complete harness configuration and can put it back. +Build or review a complete setup for the harness served by +`codex-setup-system`: a native collection of tools for the user's tasks. +Work on the explicitly delegated authoring tree, components and setup graph. +Do not assume the user is developing the provider itself. Prefer existing +components, fill demonstrated gaps, explain capabilities, and validate native +discovery, installation and recovery in disposable targets. + +Return the setup location, component/capability inventory, exact versions and +digests, invocation examples, checks run and remaining evidence gaps. Stay +within delegated paths and authority. Do not mutate a live configuration or +publish merely because an authoring task mentioned those later lifecycle steps. Hold to these, in this order: 1. **Measure before declaring.** Run the product, read its own bytes, and only then read its pages. Where the two disagree the product wins, and both get written down. -2. **Every declared path cites the source that decided it**, in - `references/-baseline.json`. A row nobody can source comes out. +2. **Every declared path cites its source.** In a provider implementation + checkout, use `references/-baseline.json`. An installed toolkit + uses its routed or inline references and `provider-info`; it does not assume + that the provider source checkout is available. An unsourced row comes out. 3. **Every declared kind is a promise of a rollback.** Declaring one the product cannot route is a promise nothing can keep. 4. **Never weaken a check to buy green.** Observe every new guard failing on the @@ -219,45 +230,118 @@ Each build pins two versions -- the current one and the one before it -- so an update has somewhere to come from and a rollback somewhere to return to. A bump moves the current pin into the second slot rather than adding a second choice. -# The ai-stp CLI lifecycle - -Native install, select and restore of this provider are the lifecycle section -of this toolkit. This page is the consumer path: author a component, compose a -setup, install it, read it back, release an immutable version, and request -publication. - -Resolve every flag from `ai-stp help --agent --json`. Do not invent options. -Start with `ai-stp doctor --json`. - -## Exercise from a blank authoring directory - -1. **Scaffold** a real skill with `ai-stp component scaffold plan` then - `ai-stp component scaffold apply`. Replace every draft marker before - compose or release. -2. **Passport.** `ai-stp component passport validate` and - `ai-stp component skill validate` on the package directory (the directory - with `SKILL.md` at its root), not the whole tree. -3. **Harness semantics.** This harness's surfaces table says where the kind - lands. Do not invent a path the declaration does not carry. Adaptations are - those native files, not a second copy of the passport. -4. **Compose a setup.** `ai-stp select propose` then `ai-stp select confirm`, - or `ai-stp setup compose plan`. Confirm only the proposal just returned. -5. **Install and read back.** `ai-stp install plan`, then `ai-stp install apply` - with that plan's digest, then `ai-stp target status` with the same provider. - Trust `pending_authorization`, not the apply exit code. -6. **Immutable release.** `ai-stp component version release`. -7. **Requested publication.** `ai-stp component publish` or - `ai-stp setup publish plan`. Publicity is a separate user decision. - -## What this page does not name - -- Private authoring gates, repository coordinates, or unpublished tools. -- Flags other than `ai-stp doctor --json` and `ai-stp help --agent --json`. +# Build a complete setup with ai-stp + +A setup is a complete configuration of one chosen harness: a working collection +of tools for a user outcome. It is more than one plugin or a set of unrelated +files. Use this workflow to create a new setup, improve an existing collection, +or recast it for another harness. Provider development is a separate task. + +Start with `ai-stp doctor --json` and resolve command arguments from +`ai-stp help --agent --json` in the installed consumer. Do not invent options or +assume a newer development command is available in a released CLI. + +## 1. Define the outcome and inspect existing tools + +Record the intended tasks, chosen harness, operating systems, installation +scopes and the user's existing authority. Name concrete acceptance scenarios, +such as building a tested application, reviewing a change, or maintaining an +MCP integration. Inspect the explicitly named authoring directories with +`ai-stp component inventory`; use `ai-stp component discover` for native +configuration. Discovery does not adopt files or establish ownership. + +Build a capability inventory: the outcome each component enables, its source, +exact version, native entry point, scope, dependencies, external accounts, +activation needs and evidence. Reuse a suitable existing component before +creating another. Explain overlap and omitted capabilities. Choose only the +tools the intended tasks need; a large file count is not completeness. + +## 2. Author native components + +Use `ai-stp setup scaffold plan` / `ai-stp setup scaffold apply` for a complete +authoring tree, or `ai-stp component scaffold plan` / `ai-stp component scaffold apply` for a missing member. Replace every draft marker with useful content. +Keep authored sources and generated harness projections distinct. + +Read this harness's surfaces and per-kind references before choosing paths or +keys. Put durable context in instructions, repeatable procedures in skills, +external tool connections in MCP, lifecycle callbacks in hooks, and narrowly +scoped delegation in native agents where supported. A plugin packages the +capabilities its own harness supports; it is not itself the whole setup. +Shared executables use the consumer's `cli` component lifecycle and are not +slash commands. Do not create a new component kind for a descriptive category. + +Use `ai-stp component passport validate` for metadata and +`ai-stp component skill validate` for a skill package. Validate the native file +format and demonstrate discovery in the actual product separately. Passing a +parser does not prove the harness discovers, trusts or executes the component. +Keep credential values out of the artifact; document only required variable +names or the product's account connection procedure. + +## 3. Compose one exact graph + +Freeze authored components with `ai-stp component version release`. Compose +exact sources through `ai-stp setup compose plan` / `ai-stp setup compose apply`, +or select registered components through `ai-stp select propose` / +`ai-stp select confirm`. Apply the exact returned plan, after revalidating its +preconditions. Inspect dependency closure, path and key conflicts, scope +compatibility, executable prerequisites and conversion losses with the +consumer's graph and report commands. Resolve conflicts before installation. + +A setup stays bound to one harness. To derive another, use `ai-stp setup recast plan` / `ai-stp setup recast apply`; inspect the destination's native files, +semantic losses and provenance. Do not relabel the original or copy one +harness's config into another. A shared instruction or skill format does not +make permissions, hooks, agents or plugin manifests interchangeable. + +## 4. Prove the collection works + +Use `ai-stp eval plan` / `ai-stp eval run` for the setup's own adaptations, and +`ai-stp eval component plan` / `ai-stp eval component run` when evaluating all +adaptations of a component. Local static evaluation is not a security scan or +an authenticated product run; retain those evidence distinctions. + +Build and review the exact bundle. For a single scope use `ai-stp install plan`, +`ai-stp install approve` with the returned digest, then `ai-stp install apply`. +For a setup spanning roots use `ai-stp install transaction plan`, +`ai-stp install transaction approve`, and its matching apply/recovery commands. +These approval commands record the exact effect already authorized by the +task; they do not require another user question for that same effect. +Exercise this first +in disposable homes, targets and prefixes. Read `ai-stp target status`, diff +and backups; an exit code alone is not a verified effect. Preserve any pending +authorization, refusal or unknown outcome as such and follow its recovery +path. Demonstrate restore and verify that pre-existing files survive. + +Run each acceptance scenario through the real harness, including one implicit +and one explicit invocation where supported. Check missing dependencies and +conflicting components as well as the happy path. Record the exact harness, +provider and consumer versions, OS/architecture, artifact digests and results. +An unavailable credential or platform is unmeasured, never a passing cell. + +## 5. Deliver a usable setup + +Write a concise setup guide with its purpose, supported tasks, component and +capability inventory, native activation/invocation examples, required accounts, +scope, compatibility, evidence limits, update path and backup/restore path. +Separate built-in harness features from features supplied by this setup. +Use current vendor documentation and the measured product version; cite the +source for a feature claim instead of promising parity across harnesses. + +Use `ai-stp setup export` for a reviewable tree. For a requested publication, +use `ai-stp component publish` or `ai-stp setup publish plan` followed by +`ai-stp setup publish confirm` on the reviewed exact set. Preserve immutable +versions. Task authority is separate from verification; changing an existing +object's visibility or access rights needs the user's decision. Report what +was created, where it is, how to invoke it, what passed and what remains +unmeasured. Deliver authoring artifacts without modifying the running agent's +own active configuration. # Before Handing Off -Run the checks this tree's CI runs, in order, and report what each one said -rather than that it passed. +For setup authoring, run the component validators, composition/evaluation and +disposable product scenarios described in the ai-stp lifecycle guidance. A +setup containing Python tools does not require a Rust provider checkout. + +When changing provider implementation, run that checkout's CI checks: ```bash cargo fmt --all --check @@ -265,7 +349,8 @@ cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace ``` -If a command here is not present, say so rather than working around it. +Report each result and any unavailable check. The cargo commands apply only +to the provider implementation workspace. ## A lifecycle smoke test against a disposable target @@ -290,13 +375,14 @@ before anyone types it. ## Conformance against the consumer +Use this additional check when changing or qualifying the provider itself. The wire surface is checked by the consumer's own runner, not by anything here. Ask `codex-setup-system provider-info` for `harness_id`; that is the value `--harness` takes, and it is not always the directory name. ```bash ai-stp provider conformance --harness \ - --executable target/release/codex-setup-system \ + --executable \ --target --protocol-version 3 --json ``` @@ -322,11 +408,14 @@ code until a checker goes quiet is not. The difference is whether the change stands on its own merits: if the code was worse for a reason that has nothing to do with the checker, fix it; if it was not, dismiss the finding and say why. -## What this toolkit does not do +## Task scope and disposable verification -- It does not push, tag, or release. -- It does not write a live configuration home. -- It does not install software or start a product. +Authoring includes creating files and running the required checks in disposable +homes, targets and prefixes. Installing verified prerequisites and launching a +product there are valid validation steps. Keep credentials and live state out +of those copies. Publishing or applying to a user's live target happens only +when the task includes that effect, through the exact reviewed lifecycle. +Never change the running agent's active configuration in place. # Writing this harness's configuration @@ -454,12 +543,13 @@ Considered under this scope and not owned: - **`AGENTS.md`** — Instructions at user level are ~/.codex/AGENTS.md, which the global scope already owns. A second copy under the convention root would be a second statement of one fact, and nothing documents Codex reading it there. -**A setup cannot carry one of these.** A setup is installed into one -target and its payload is relative to that target, so a component -for this scope is installed by the consumer against that root -- not -by a setup aimed at the configuration home. If you are looking for -where to put one by hand, it is the path above joined to the root -above, and nowhere under the home. +**A complete setup may include these scoped components.** Each +provider request still reaches one root. The consumer coordinates +the roots with `ai-stp install transaction plan`, exact digest +approval, apply and recovery. A shipped configuration-home preset +cannot reach this root by nesting a path inside its home payload. +Declare the component's actual scope and bind the matching root +explicitly in the transaction. **The root is shared, and that changes what removal means.** Several products read it. Under this scope `remove`, the backup and a @@ -493,12 +583,13 @@ Considered under this scope and not owned: - **`AGENTS.override.md`** — This is an intentional project-local override. A setup owning it could silently suppress the shared AGENTS.md it installs. -**A setup cannot carry one of these.** A setup is installed into one -target and its payload is relative to that target, so a component -for this scope is installed by the consumer against that root -- not -by a setup aimed at the configuration home. If you are looking for -where to put one by hand, it is the path above joined to the root -above, and nowhere under the home. +**A complete setup may include these scoped components.** Each +provider request still reaches one root. The consumer coordinates +the roots with `ai-stp install transaction plan`, exact digest +approval, apply and recovery. A shipped configuration-home preset +cannot reach this root by nesting a path inside its home payload. +Declare the component's actual scope and bind the matching root +explicitly in the transaction. **The root is shared, and that changes what removal means.** Several products read it. Under this scope `remove`, the backup and a diff --git a/setups/nddev-builder/home/prompts/nddev-setup.md b/setups/nddev-builder/home/prompts/nddev-setup.md index dacc7ec..227d21f 100644 --- a/setups/nddev-builder/home/prompts/nddev-setup.md +++ b/setups/nddev-builder/home/prompts/nddev-setup.md @@ -1,13 +1,14 @@ # Setup -Add or revise a setup in this system. +Create or improve a complete native tool collection for the user's tasks. +Start from the builder's ai-stp lifecycle guidance: define acceptance scenarios, +inventory existing components, select exact versions, fill missing capabilities, +compose the graph, validate it, and deliver invocation and recovery instructions. -Every harness offers the same three postures, and the names are the estate's -rather than each product's so that learning them once is enough: - -- `baseline` — a working floor -- `minimal` — the product's own defaults -- `full-auto` — nothing asked, nothing sandboxed +Ask `codex-setup-system list` for the shipped presets. Their names describe +payload composition, not different authority levels. Read the selected payload +and its documented policy; do not assume `minimal` means product defaults or +that only a preset named `full-auto` supports autonomous work. Rules a setup must satisfy, each held by a guard: @@ -22,7 +23,8 @@ Rules a setup must satisfy, each held by a guard: - **No two files may differ only in case.** They are one file on macOS and Windows and two on Linux. -Say which of these the change touches, then run this tree's checks: +Exercise the setup's intended tasks and backup/restore in disposable targets. +If changing provider implementation, also run this tree's checks: ```bash cargo fmt --all --check diff --git a/setups/nddev-builder/home/prompts/nddev-validate.md b/setups/nddev-builder/home/prompts/nddev-validate.md index bc915f0..13d4ff1 100644 --- a/setups/nddev-builder/home/prompts/nddev-validate.md +++ b/setups/nddev-builder/home/prompts/nddev-validate.md @@ -1,7 +1,10 @@ # Validate -Run everything that must pass before handing off, in order, and report what each -one said rather than that it passed. +For a setup, follow the builder's ai-stp lifecycle validation: native component +checks, exact composition, evaluation, disposable install/readback/restore and +the intended product tasks. Document capabilities and evidence gaps. + +For provider implementation changes, also run this checkout's checks: ```bash cargo fmt --all --check diff --git a/setups/nddev-builder/setup.json b/setups/nddev-builder/setup.json index bb8c3e9..1288ae9 100644 --- a/setups/nddev-builder/setup.json +++ b/setups/nddev-builder/setup.json @@ -1,7 +1,7 @@ { "schema_version": 1, "id": "nddev-builder", - "description": "The harness-native full-auto posture plus the NDDev builder toolkit: autonomous implementation, exact product formats, lifecycle, verification and release handoff.", + "description": "Build complete native tool collections: select and author components, compose exact setups, document capabilities, and verify installation and recovery with ai-stp.", "sources": [ "https://github.com/openai/codex/blob/rust-v0.151.0/codex-rs/agent-roles/src/discovery.rs", "https://learn.chatgpt.com/docs/agent-configuration/agents-md",