From 2f2e7b03870899c9cc6f425e9d9eb8c005b15d99 Mon Sep 17 00:00:00 2001 From: Ompragash Date: Tue, 8 Sep 2026 12:07:15 +0530 Subject: [PATCH 1/2] docs: sync explicit tool generation and recovery contract --- .github/workflows/pages.yml | 2 +- .../RELEASE_CONTAINER_REMEDIATION_20260906.md | 20 ++ public/downloads/devops/01-ci-diagnosis.zip | Bin 37377 -> 37382 bytes public/downloads/devops/02-junit-triage.zip | Bin 33340 -> 33341 bytes .../downloads/devops/03-pipeline-review.zip | Bin 34291 -> 34291 bytes .../downloads/devops/04-dockerfile-review.zip | Bin 34251 -> 34257 bytes .../downloads/devops/05-kubernetes-review.zip | Bin 86242 -> 86244 bytes public/downloads/devops/06-terraform-plan.zip | Bin 33864 -> 33864 bytes .../downloads/devops/07-dependency-update.zip | Bin 34443 -> 34443 bytes public/downloads/devops/08-sbom-triage.zip | Bin 35501 -> 35504 bytes public/downloads/devops/09-release-notes.zip | Bin 33406 -> 33408 bytes .../downloads/devops/10-release-readiness.zip | Bin 35076 -> 35075 bytes .../devops/11-configuration-drift.zip | Bin 34242 -> 34246 bytes .../downloads/devops/12-incident-timeline.zip | Bin 37401 -> 37404 bytes .../downloads/devops/13-canary-evaluation.zip | Bin 33652 -> 33655 bytes .../downloads/devops/14-local-deployment.zip | Bin 34565 -> 34568 bytes .../devops/15-interrupted-deployment.zip | Bin 36210 -> 36210 bytes public/downloads/devops/16-retry-repair.zip | Bin 34804 -> 34807 bytes .../devops/17-compensated-rollout.zip | Bin 36123 -> 36122 bytes .../downloads/devops/18-parallel-matrix.zip | Bin 34580 -> 34584 bytes .../downloads/devops/19-role-subworkflow.zip | Bin 41025 -> 41027 bytes .../devops/20-bounded-remediation.zip | Bin 38923 -> 38925 bytes public/downloads/devops/catalog.json | 112 +++---- .../remediation/21-container-remediation.zip | Bin 71742 -> 72064 bytes public/downloads/remediation/catalog.json | 6 +- public/meta/agentctl-source.json | 280 +++++++++--------- .../_generated/architecture/decisions/0001.md | 2 +- .../_generated/architecture/decisions/0002.md | 2 +- .../_generated/architecture/decisions/0003.md | 2 +- .../_generated/architecture/decisions/0004.md | 2 +- .../_generated/architecture/decisions/0005.md | 2 +- .../_generated/architecture/decisions/0006.md | 2 +- .../_generated/architecture/decisions/0007.md | 2 +- .../docs/_generated/architecture/diagrams.md | 2 +- .../docs/_generated/architecture/index.md | 8 +- .../docs/_generated/concepts/memory.md | 2 +- src/content/docs/_generated/concepts/packs.md | 2 +- .../docs/_generated/concepts/policies.md | 8 +- .../docs/_generated/concepts/product.md | 2 +- src/content/docs/_generated/concepts/tools.md | 2 +- .../_generated/concepts/workflow-model.md | 26 +- .../_generated/contributing/add-action.md | 2 +- .../_generated/contributing/add-migration.md | 2 +- .../_generated/contributing/add-provider.md | 2 +- .../contributing/developer-guide.md | 2 +- .../_generated/contributing/documentation.md | 2 +- .../docs/_generated/contributing/index.md | 2 +- .../docs/_generated/contributing/release.md | 2 +- .../docs/_generated/contributing/testing.md | 6 +- .../_generated/durable-execution/index.md | 4 +- .../_generated/examples/approval-gated.md | 2 +- .../_generated/examples/ci-quality-gate.md | 2 +- .../docs/_generated/examples/devops.md | 8 +- .../examples/devops/01-ci-diagnosis.md | 8 +- .../examples/devops/02-junit-triage.md | 8 +- .../examples/devops/03-pipeline-review.md | 8 +- .../examples/devops/04-dockerfile-review.md | 8 +- .../examples/devops/05-kubernetes-review.md | 8 +- .../examples/devops/06-terraform-plan.md | 8 +- .../examples/devops/07-dependency-update.md | 8 +- .../examples/devops/08-sbom-triage.md | 8 +- .../examples/devops/09-release-notes.md | 8 +- .../examples/devops/10-release-readiness.md | 8 +- .../examples/devops/11-configuration-drift.md | 8 +- .../examples/devops/12-incident-timeline.md | 8 +- .../examples/devops/13-canary-evaluation.md | 8 +- .../examples/devops/14-local-deployment.md | 8 +- .../devops/15-interrupted-deployment.md | 10 +- .../examples/devops/16-retry-repair.md | 8 +- .../examples/devops/17-compensated-rollout.md | 8 +- .../examples/devops/18-parallel-matrix.md | 8 +- .../examples/devops/19-role-subworkflow.md | 8 +- .../examples/devops/20-bounded-remediation.md | 8 +- .../devops/21-container-remediation.md | 18 +- .../examples/provider-portability.md | 2 +- .../_generated/examples/recorded-replay.md | 2 +- .../_generated/examples/release-readiness.md | 2 +- .../_generated/examples/repository-audit.md | 2 +- .../_generated/examples/scheduled-review.md | 2 +- .../_generated/getting-started/first-agent.md | 2 +- .../docs/_generated/getting-started/index.md | 2 +- .../getting-started/installation.md | 6 +- src/content/docs/_generated/guides/ci-cd.md | 2 +- .../docs/_generated/guides/container.md | 8 +- .../docs/_generated/guides/local-operation.md | 2 +- .../_generated/guides/selective-repair.md | 8 +- .../docs/_generated/guides/variables.md | 4 +- .../_generated/guides/workflow-authoring.md | 2 +- .../docs/_generated/observability/index.md | 2 +- .../docs/_generated/operations/scheduled.md | 2 +- src/content/docs/_generated/providers/a2a.md | 2 +- .../docs/_generated/providers/index.md | 33 ++- src/content/docs/_generated/providers/mcp.md | 2 +- .../docs/_generated/reference/capabilities.md | 2 +- src/content/docs/_generated/reference/cli.md | 2 +- .../_generated/reference/compatibility.md | 6 +- .../docs/_generated/reference/database.md | 2 +- .../docs/_generated/reference/environment.md | 4 +- .../docs/_generated/reference/limitations.md | 8 +- .../docs/_generated/reference/migration.md | 2 +- .../docs/_generated/reference/output.md | 2 +- .../docs/_generated/reference/terminology.md | 2 +- src/content/docs/_generated/reference/yaml.md | 24 +- src/content/docs/_generated/security/index.md | 2 +- .../docs/_generated/security/threat-model.md | 2 +- .../docs/_generated/troubleshooting/index.md | 2 +- src/data/agentctl-source.json | 280 +++++++++--------- 107 files changed, 584 insertions(+), 545 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 5b42431..aca79de 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -15,7 +15,7 @@ concurrency: cancel-in-progress: true env: - AGENTCTL_COMMIT: "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2" + AGENTCTL_COMMIT: "7dee64e1d1b6fd38c1883d0d235d712590c30fbe" NODE_VERSION: "24.4.1" PNPM_VERSION: "11.9.0" RUST_TOOLCHAIN: "1.88.0" diff --git a/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md b/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md index b688f37..0ac92b5 100644 --- a/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md +++ b/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md @@ -256,3 +256,23 @@ The offered remediation ZIP is identical to the separately prepared clean export The actual uploaded artifact `10040098155` is 4,375,370 bytes with SHA-256 `c069d43f044e062cdf6f0e2eabcb171ecc29ce1e57fd3ad22009a5c94d93abf6`, matching Actions. Independent verification confirmed `.nojekyll`, all 94 HTML pages without retired branding or source boilerplate, exact clean source metadata and all 21 packages with every nested manifest/file digest. Every package matches its locally validated source package. The hosted remediation ZIP also matches the separate clean framework export byte for byte, including all 34 payload hashes. The artifact expires on 22 September 2026 at 03:47:25 UTC. Its actual ZIP, complete hosted log and Actions metadata remain under `hosted-bb8fb0a`; `verification.json` has SHA-256 `60ba75abe63693c493c5e25d35eb739f797bad2f2d6bdc0dc430505644cb24ba`. `site-clean-export-hosted-bb8fb0a.json` records the clean-export comparison. This subsequent ledger-only commit preserves tested documentation source `826071b`, framework pin `bb8fb0a` and all package bytes; only writing, Markdown and diff checks are repeated locally. Successful live preflight and full remediation remain separate gates; this source has not yet been deployed by this documentation update. + +## Approved revised-output deployment + +The user approved documentation PR8, merged as `f80553b2695b537b9e849e559c92b8c3370f1647`. Its tree matched reviewed evidence head `878560e`. [Normal Pages run 34187707168](https://github.com/opensourceops/opensourceops.github.io/actions/runs/34187707168) passed validation in 8 minutes 1 second and deployed in 12 seconds. The hosted browser suite passed 140 checks in 4.8 minutes with the unchanged generic mobile-search skip. The public source advanced from `0d4542c` to `bb8fb0a`. + +All 116 public files, including 92 HTML pages and all 21 downloads, matched the actual Pages artifact. All 346 nonhidden artifact files matched the reviewed PR build; the pinned official Pages uploader omitted only `.nojekyll`, which remained present in the validated PR artifact. Search and the mobile tutorial passed, and visible source boilerplate was absent. Report `deployed-bb8fb0a/deployment-evidence.json` has SHA-256 `8831ad090d0eb01e9d87dfd8b6bb623cb0a3fa154cf13a359da0dcc8216a930d`. + +The deployed tutorial exposed a second stale source sentence: it said both full-journey roles had 2,048 output tokens, although the analyzer used 2,048 and the implementer used 4,096. The preceding paragraph stated the correct distinction. This source-prose contradiction was recorded separately from the successful deployment and is corrected in the next source below. The earlier claim that the README fully agreed with the limits was therefore too broad; its 512-token preflight sentence had been corrected, but this second sentence remained. + +## Tool generation and runtime authority: framework 7dee64e + +Framework `7dee64e1d1b6fd38c1883d0d235d712590c30fbe` corrects the remaining role-limit sentence and adds the explicit boolean `providerOptions.toolStrict` for OpenAI and Azure OpenAI agents. Strict tool generation remains the default. The remediation preflight and implementer select `false` while retaining the complete exact path, content-pattern and length schemas. Runtime validation still rejects invalid arguments before their tool effect can dispatch, and final structured outputs remain strict. The selected option is persisted and changes affected recovery identities; recorded replay retains the recorded choice. + +The real CLI preflight passed at this source using `gpt-6-astra`, high reasoning and one exact pure echo with both multiline input objects. Its durable receipt records two requests, 1,208 total tokens, eight seconds and USD0.0176 estimated cost. The binary was a local native debug build, not a release package. An independent replay without the credential, after changing the instruction file and with macOS network access denied, produced zero fresh provider requests and effects and left the original state unchanged. Evidence is retained in `live-preflight-tool-strict/verification.json`. This establishes that bounded preflight and replay case; full two-role remediation, its resulting PR and release-image execution remain separate gates. + +The documentation branch starts from the approved merged Pages source and advances the framework pin, imported guidance and complete downloads together. Earlier source-specific passes and failures remain unchanged. This update prepares a draft PR and does not merge or deploy it. The local shared Cargo target was unavailable when work began, so source import, clean export and independent site checks proceed before the paired framework documentation gate. + +The shared-target framework generation and Clippy commands completed normally without interruption. Local verification then passed both components of the paired gate against the same clean source: `cargo xtask docs-verify` using the existing target and `pnpm verify` using pnpm 11.9.0 with `AGENTCTL_REPO` set to that checkout. The site verified generated freshness, writing, Mermaid, workflow pins, Markdown, spelling, Astro, all 94 HTML pages, routes, links, anchors and search. It checked 171 exact source objects and 17 remaining external URLs. Browser checks passed 140 cases in 2.6 minutes with the unchanged generic mobile-search skip. Logs are `framework-docs-7dee64e-attempt1.log` and `site-7dee64e-attempt1.log`; hosted verification will execute the unchanged combined `pnpm verify:agentctl` command. + +The complete remediation download is byte-identical to a separate clean export: ZIP SHA-256 `6ae2b1fa1a9d8737a075460bc30af21e2e9ec4eba49af1a09416b649c0f07827`, manifest SHA-256 `2df2f7b929ed03e797c28be9bf01258b3e6535194e11538466eadfbfdce12585`. All 34 payload hashes pass, the stale role-limit sentence is absent, and the preflight and implementer contain the explicit tool-generation setting. `site-clean-export-local-7dee64e.json` records the comparison. Hosted source and uploaded-artifact evidence follow the draft PR push; no full remediation or release publication is inferred from these checks. diff --git a/public/downloads/devops/01-ci-diagnosis.zip b/public/downloads/devops/01-ci-diagnosis.zip index ae53a0b35547ccfd1e892cfd069337f7d28a989c..dbd7918bf132c8588cf642f0b5f8942b885bf0c3 100644 GIT binary patch delta 2811 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 delta 2777 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 diff --git a/public/downloads/devops/02-junit-triage.zip b/public/downloads/devops/02-junit-triage.zip index 6cac135afa436b36d05f332f9f1b34cb02080901..0bfc9bb1d51e90facf9018ecb0270ab394c4d2ad 100644 GIT binary patch delta 3428 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 G0001WBX-*W delta 3404 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 diff --git a/public/downloads/devops/03-pipeline-review.zip b/public/downloads/devops/03-pipeline-review.zip index c9409445a2761fef915f8a7b05bc0cedfbe2b778..ee3a0a8d28cc02775d9bae9cb88e848cce609e0a 100644 GIT binary patch delta 3893 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 D|1Eaa delta 3893 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 D-5!R% diff --git a/public/downloads/devops/04-dockerfile-review.zip b/public/downloads/devops/04-dockerfile-review.zip index 669aede410b369d52ac4fb4cccfaf12be551e954..394d861462c0c513757e6c31d68360aa9cbb39c2 100644 GIT binary patch delta 3945 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 DHu8Ze delta 3983 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 bz=GdjXdNj9=nVP;*${1!WVoL~|GW7guF9&7 diff --git a/public/downloads/devops/05-kubernetes-review.zip b/public/downloads/devops/05-kubernetes-review.zip index 713677ceaed5fb71e50512f3c78b489f4817d852..50b6c8b308098ccd4d500d0c890c9bed6556b2e3 100644 GIT binary patch delta 3859 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 delta 3842 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 diff --git a/public/downloads/devops/06-terraform-plan.zip b/public/downloads/devops/06-terraform-plan.zip index dfc52a452e3e6b7766695a7ce2c180ef19eda176..b0d3dc442ba3d07229308207ac84cae338ef4544 100644 GIT binary patch delta 3456 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 OSP7G1g%`7Zf(``!S#v=E delta 3384 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 ORtb|~g%`7Zf(`_##dpmB diff --git a/public/downloads/devops/08-sbom-triage.zip b/public/downloads/devops/08-sbom-triage.zip index e0f2a17472e0cd07ffe7f3a335b83a380103a517..a8ea3d076cd54d8fa3d9de81fde51ed36f9a7f19 100644 GIT binary patch delta 3579 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 delta 3589 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 LECwBh00000NCm?V diff --git a/public/downloads/devops/09-release-notes.zip b/public/downloads/devops/09-release-notes.zip index d2f2117aca43f554135a9d00a78e0ef097e95539..1e1df69de567680458af1a880160e51e80eaa276 100644 GIT binary patch delta 3442 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 U_Px# delta 3426 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 delta 3776 zcmY*ccQhLgv?hd7kr**z#1_QQEUIc$tx&s&S-bYARYhznREgHAy-Fo&1f{CBB8}D# ztyYbMs?MKTUSHpP=e>8&x#xV}x%YneuY1mSQ}O|+`2Yb+QwBzEIy$;@e^Qh#$G)sl zn3ayMo|leJ7$=J6%TwWp<}DCheBW^|Qg))8FarVNAhq<7;yib0jJWw1-nBUSWj!Xz z+Qu~HoX7{9=0sHNk^MXcu_ulD^oe)AOc;)hrj;q1KDQ=7#>N!p9Eo8WM8bncZv1ma zy=Ufguw@-+r=Me-B6KwC^?Z}O6wbF(?wi@TEL$7Yv~5U6r(*ysAY^wX%hhfnyzwg0 zdX5O!)E;S^=z(EE%C^h!8K^=$r|Bj2sLqaRy9fVLV2?t#?j2xR#hRa{>>k;DWQ>%f zVQ{a~zUg(!_xEjkJ+`ADf#xbztoTH~w?WzoMAoYPh98HVJRt9+_{~oH(PjG9w!Vrj zg-!2($=hgczlr1Td2wHB6TWARh9j8AwgfAmbsF_0v_JqhEqN?NySX~VlO-yu}PzSUf15eQ2dB1 z^`Lt_wW-Taob&5-0p;5tuk*zQ_92F&qaeCI^6%S3*WAOx#hQoO1(J8#sSMSXeL<2z zjZ==70uWJxN_`C3t^)d|`F+GI+bnC2hYY#CWeylm1*_>*uG2g0+@w!;V&Cl~ti*37 zuELqS^_h>wR?>$;+T4_cL$VL-N-6IT8u=_!&%2)e_TGqqpX`4tz4ERJXwDHYmv?!& z*89@37^<)%tVsf{k~Oh;E+8v*FHvdhqVNGm!K%pP4F%N+q_6Yaz1EuN(mP(KX?MS8 z*U1HA(7lo4BWXMY@p))oVwq?(@A&S+4SvRLql>SvzDF0Z+A^x~v2EFZ!tOt{Vpm*s z|2S6;g7;I7Z-Wyeb<=&Ba97!#&k@;A#MfXyza|v&8aCa1ilTvZ->g zm~LzNha``N=cf_hP8J*!r(Zmkzb;&M@^0x# zA?{Ui-tK5Xg%YE(?!H>*3-T`$THys_QwB$BKCL%KmBTdT z-M9>YR$^?!sQZcxvnxYt8w_{gZ;C@vdRn^d&rB4Jybn(csw z`#_AKMY65+>;fA9j;)e>YDSCwY>4`Jb8yKoUj7jHH^ifj#IhGA2WMP0)RWF!7YTrR z_~)V_!|jJFHyU|~0z(sEC>ldylRr#3AvM$2KVIZRVVh~@z<}rD0@g^8XR@5~=b60N zwiYqvF2gCtAz8t6hO_d*3`06HzPEC#LaXYk<%VX0u{l`-LlF`rDW&sGJ_Xh5*|{AN z<-B)x^~5hr#6)ajg^=CK@G@If!ie%Y*C^2i*`8iQ|``!i>zt zdR%1w1i`LMa#h@dU5aWKC{m%)AYyE?666#k1|xj!L)~pRlQZig!SC(fRUGuIdi?y%D6^>%hm26nC;Vn?#lfeI>RV zUhxWdJi`{Oj3MUL%|PXT%uZdVmzEZ03>J_mViR9{d(X9w$#~7PT>$H~>(Xy9%~zg0 zlw+0Z8~i~C$2Im4Y%nToWK|Cw$Ic3FT*{|z-F`TW^_5?n1v|@pWxG_}|7E-!+3CH0$q_KWqanS5yj?(%d*Xfaa(1~K zN?f#Q`iz2Q<+CNtawU5X2)UmiTLVL>rJ3jWQdQ|_*v!(|J{JytG;7bU-Y})lN4rSI z2cdt!-EPyFp(`$6E={A*W+r2Tc z9V8s|(X$e5ql34b4}aYO{DF$uR%X(#Y4vUZ?C_G>=M ztS=FMNn{goUppzLWY~i-7$r`WPc$+}t-$0w7`!h!&i-3N;#N{3w{|bmAz+NL{Z>XY zYhhj2E@bu#RJVy(3T?7L=Br(Hn}%hq z;3|VgQq&7dOwF5E&WQpwG$QR`NdDvV9?&x9fh#>fZ!ipusNSb`b3`6#TqxZ@T46Gc zZlLZ=#?@(b4=aec&c8?UMgOb6kpiB)7G4VpX`6m0pk^2yerS`DbGqjKWj$i`N(T$) zx4vIymI;TK!XY~KyAf6YQHz;JFqmyHzqr*k9%3uVH*!s5Yk#SMnucdus z0r;NYPAkhmUstRJhWh+- z!_XXf2pT^-M41nhJ~|*=n-N-GT^1)^>b<>BB@oore_!1nv%)+ijSMUyj?v4SqzdwA zSNlB_mZIf!3*s^{QeI?R|4`97e~WNnQaB4`zhXWE zT^J4boAcf$hX+Sn(8mIi@2gTEGQHHKVjINgKD4#b8}r86`=XNVV`jEpuAec#o}{L$r39?vXS0yqT(Hk@&9Otx2Vb3;#!iPIbH)hjd z^5Rm%KkxjTEhX|csECLN(F5CV#~&^LUp zy5#&mUy={h?MmT%w-J^@PldPE5muVDXk6%^@Us2%_=a+yx&g9~zmfa87E?|Z@&g7N zDOlHm8h#O@0A;~e$_WQDKFGoWrjCMX8H+3VOhmcI2u0lj z0Fja&&1WLdf;g|ho$>Fu7k+fn?F@b6pWzp$zh5gb;}M`AkX1h&{8_(_w3Izc+)EFR zZ!6~5u~lddNG_~(BRQKnYO3Obi5LJ^5Bv37?p)n_AT96o$|PLSV^=MudH+HCS!!S@ z4Hz@jyJSJ8<=bSUj4L~>nz+McJtl`ypCP;R%LCEpOw69%6c-9K=BOU=V_R-JihZBt z#HBV~5!gb|oc_AwR{_fHWQX4r{CVT-T1L*=jyuM|4mS4j?716w2QQp{2>Yn$+@qn+5gffX)HL`G*ti}_`j((AmYDZJ(wHkm;u2_BOvGhR|SUCOSc6`Apdp~ z(p3P==)dqNT@%pk^cTK&0{t131w{D%rDYkKfcl$%Ao8yqG!sUDAE%g!0-)pn*0J#* aTxF&#pgi#}ola!M?PfxlVp9Ke>3;wwI|}~* diff --git a/public/downloads/devops/11-configuration-drift.zip b/public/downloads/devops/11-configuration-drift.zip index 328505052033079426e38bf23b2423ade67b01da..09ece20fdf65ef2dd8725efdbf96cf6edee86e73 100644 GIT binary patch delta 3683 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 delta 3648 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 SlOcE+lct3l2FZW`0001KsoGrt diff --git a/public/downloads/devops/12-incident-timeline.zip b/public/downloads/devops/12-incident-timeline.zip index b105b5f1e9b4e7d3f35c124500edde215336898d..4b96b2dbeda9164b9ff2247ea05ca515d352d473 100644 GIT binary patch delta 3830 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 s0;q74!Eh{-8<8pkl6{lGa2bnJ^>S#+u#OC1hX6 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 P^nY{Y?@~ww{!{-0@x-Tp diff --git a/public/downloads/devops/14-local-deployment.zip b/public/downloads/devops/14-local-deployment.zip index 58b4da047f4868efa96cf80011669a92a11b9064..c5cf2cf4cfb2ed975aac52c188cd62467c68498d 100644 GIT binary patch delta 4023 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 diff --git a/public/downloads/devops/15-interrupted-deployment.zip b/public/downloads/devops/15-interrupted-deployment.zip index 0681ef08081fb9e2b2d54ddefe41b1d1d766d86c..352efc0518ac0c4b5e8253cf07405795b9e7104a 100644 GIT binary patch delta 4547 zcmV;!5j^hlnga5g0vu3F0|XQR000O8001EXZS^e;&kXD?z53PHjHkMWxw58E6I<$f`NPJnX)6DG zXXhI0wv!R&*>ROAy=&{tV5>WE#LlE}lbtVeV?O_b+0Az+pHK6>FSFe*zue28=AZ37 z%fHzD?AafmW_wSk6SIGlyUg!gx3GfWIeC3?xqo`Pe|d8DdNj{BN9xesmW9(fb_bI- zZR2XIi*?_fqte+8mR8f+&G`(Nuq9t>F{8yh?A|+ZoFz9kj%;P-RkKvNg?BOUa-_bQ znUbwb7DyAy5mh!b*$phdt+Lv%SLruB@3ufLc|I77$74SmR7(W-r`(H^Hv%F75tCX1 z9e+2x5w$nk-Bqr}vs+V-)PbCVBE`Ex)0C!M*xHq3JGPkZ0i&{INw0+cBBD%5xV6SV zIPq|<7MM$o=-&bVy8{&M$nW%XWvev%um-??YH=J|*pHgK=HZxlF0sd1slKsg?r#0I zYQ0foe*gQ6thQC-zn3v1gwhzRsH)KLo`0K$*Lu^!N*6RShj*QO@u(>bTbLQ7s)4au z;t-z^&&I1UlfsCAGA-QgXsPGLn7xmnPZ4D9C@=+XaiZZwds7l-u4`R3#8?Y!Zn3a# z6ynF!?1?zDnwY7pjjG#{{cADe5_{AwwqN7LcPo4NVPoa%CeAenGCcn3oY{s0A%C|G ze-T`R9xnU55WyT^72MkZd4t_&!yc^;J6hctD0P0cfB5PMQH#$3CZiv{EAe$o#LK)kKF-Gd+Z7dIa>L<{a2?F7UJ5NN)u67c-2g&v|b3&l(kNt{ftL&MVgtb%$vK@O@8V zOh_+;G-B!!2V(=pBOuS$?tivehEo#q=o3i3uu)08I|K2r3WPFCk6|>U^0^s5ne#{$B|1%=NICyg<-+} zw27JX&9JInX1otHYMUhv_NPyV!z6k@b6L^m=J|u{{eB8u4F^Qkb$^TLUWVZKGehhG znl3mXVmg@3L$aIeoICAF+22J%1?bs2xiee)ft!dv$hxcyzA5`Ys5T z{0d_8@aW<|ou0fpxm3GYb!wnm5jPu~@1Fj!Njn{7g@5z-zV>TUtavxpx-Cpz2=9+2 z?#EOhkA0hEs8CEUGKh&$k{4^~q|eltXeNxIsKW><4H+?s1Y#OvEuE5{xw91JDD4D6 zMkot(sh2b%R2GU5gs)wgZ7#YQIa2h5NL`|o`mqIi!r}=IH#Bzm^~vd}TKhDido7%P zD$51D>VJZ;xJ*2r6F514Tc$sfIcx@|YMgAw80|Cl1KuOsM8cPpdGU`^1!k-HY*gaL zM3d-j8UrRIQp%4W6QQQYV9K~2>@(NfY+df8_@-{9t$~zI85gA@BEtmv;JD$!k|h&= z(FU)B@AluEh;)r;h&2s$H4t8d!CN0{X&Ao(^M3-f>wS9c3kjpM8HN@HES;ndgGVZ1 z$`qP>nOZgv$yG-Ad-yGYlMdN^EPr5N+}hFcF{1BhhKD}Rd!lERWgo`UG>(U`0i*a% z05;&cDke!mxGflRU7^6wyMStzmFaP3udjl@uoDw>KtI85ZP_v@r(O(Ev}|p$K&RZt zDSsCA7PM%}=~yNS*~UfBM4^n2cDf{@mB{5>$}*5tP$Y);>xb>2SB2(T!`{=azZ3!= z@FWskU;D`%qhA7%xE-@HHT~Rj+8ai_KOAam>c|;~B3)skAwFu_!J707O#VRsJn9@4 zJ~PceNt$1_xJKQlK$62LZS6g0qdirm@PADHzk{;uo~@0&2PPuM3M7f0fE%#cF<}{W z9~Eq!&L7_Zi4sg0N*{8&y!(Ewlg=Zn;sYzHpE=)uGxtXs?Q)h{w(H{Jp~N3Cye=iU zl8hoeEh*N>VlYxt=)hJNIUONzMH$#M_=V=1EGapeVoLR=$TPPH8CJ(A5A75Puz#G^ zrrwuOOISOG{x)K`px#>A&CuiDUVTcXNmqowONDITsft_0|DSer2-fqXgR|EMC#NS} zUz!uz(Otl=B=1h|^!hpdo)$pd`$cG6ez@NSiYDWZ6@D!o>L9Wes}fUtZBerB!6!r*sj$8>ZM@f(b7Rww9lGMm0d;QJEqQiS1&>EaWMXCpwt@M6nwq*9Dll_HQV%T z2CO%;W&cq;KA!FJ1D^q-__h{2@mS+bXQNZ+Ua@u1CQh2gj=xwj@Ge z*j<28{Ub`6%i+}mE#85sH-CNE669wp#K-|1D?Zv6?McQLl=2Kemu(}0o7ydjQzug2IgC7_J%d{Q^F3$`wA zkq+WX^keeyy@H1BQkeRfEE0pt9T*&E1^rQzo*c$YoyT$!Y$X{i$qcSly`Q$+FA>cd z3Zqr-36)&zB1i=nWPjmfilm|>{_C37vc;hG@6`Y+QIv`Rl;ArnStC|sDE^%%Bfk^M z+YVT8B&sTH>)$xz9=<)_|LXMU>gd~}gSXxF?>+;an?cln6Jvq|ToxpSpf+62I}w(y z;1;0ZeLuww86pF>m2H)-yyl_czIXMvur>2@??x2yt|#6VZGU6>7kVM`q(3zd3Vfe5 z4Aqn47`Fd3a%T{)|0n^*8$X-HD_V(kV9GZ>fGRMIG`CsKcdas8a? zmny+$Y%pZlVIDgg##7U^mw$s0EU$-wP&^DXad*sKhKICccA}RLzDYChX}t&D>rCt*-uorb}I2D_2!&purOV-lG%FynSdbn&T*4Q z7i_tzq1G~}1ZnQKi>Lcn7U^R43IFF6J0a5yMZ!oJZA+#m5-gJEHf$LCOc9*)+nQq zA6V?ahmtIB5Fhktc6U{?isYB8VYuG6wLa2sI`22r_WHZwn*P%5(w1>0`gGT(>4EKY zyQB7CJ9kg+`sR2|U+8f+>W^}~;?g-Nn_1g3&9CR+?Pj~^Jbxc{i^{F&Zk%2p4f}j{ zKON?#zpm+cwuowu>cnyG60kYMARs;@DbA+~EkI}e@73R@`C*w=KW*maNZ4uI>-ibF z)2-;XZFFxNe^_kzme&cx*1OkbJ#E9at^Pb+>zna({>yp)m(SmS`swrP@suG_kL)?8 z;91$_#twWZ_J0nVP^%sxA{2^K1uAEVyDc#QRM<%Ie$?NUQ()RX#i&C{7y8@kF?xR zJDq8x z4Yb6Ne9TR-2dJX1IrE~H8e0g4BjN~K7oVXemtAzOS4U7R4F-Y>=r}bR?=O;^v9nKI z%v-F0l7A={a1?rRA$U`{W(1eO8A&Ojnr6lTJ@{svDYKIc_6H@HVr<1!1aZhvJWKXg zJlUe+F?4B-do+#+ni&gKY#b{wSwgX1fM@;ZU{)R*XTMrrmLqnhsNze|sD%YQmd-`6 zRkDgi@1+(hXq|%|G9)E*f&jgw*sWmSReqD=qkoMU#rJOSl>kJL39wcT0UbL8^{oJu zqQIT3dU6Xcq~e3CwF8HqzY#2l-5aJeM}oD8SYLGOcds?YrqHW4sC2w+LG#*oLpPn+ zS23kJ#;#WU7t9aM1AvrKm^@prVOJ6oUzsRj1EaEb%>to>1W7nW%R;j&7zx#sx&R;X z?teGa+jGe&M5RKYE?$tKr<#zD9CZ`vL$z8N;#{X*k7{NMMRVOi^Tm=D|GqU!LxS=JV& zWjIaR-K_S#y1x2)^)FCM0|XQR000O80F$GM6SLqEA$J9B^(_t0lLm=Q9G!nF25tiY h0NVus044wc00000000000HlEs4wI3L9J7jv=mRcw+Fbwu delta 4546 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 delta 3716 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 diff --git a/public/downloads/devops/17-compensated-rollout.zip b/public/downloads/devops/17-compensated-rollout.zip index 2087f10a69008162461b114a2d86646d8a5e725d..329a0d240aacf54ec40c217e9dc84dea5d84b7c8 100644 GIT binary patch delta 3974 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 delta 3959 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 LESXEp|Lpk>qxzBU diff --git a/public/downloads/devops/18-parallel-matrix.zip b/public/downloads/devops/18-parallel-matrix.zip index 016e4cc09b543fc012cbe0872b230ab0bce60da4..4672c56122ecb9815843743fa48cd6d0f8dcb901 100644 GIT binary patch delta 3966 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 RK@b&__=Xw=R)PQk002ghn8E-6 diff --git a/public/downloads/devops/19-role-subworkflow.zip b/public/downloads/devops/19-role-subworkflow.zip index 959484326ec5160c70832f26b8564a6e4924bd6e..a5352bac0b53b6b9e6c8e37450b0475e175bcbcd 100644 GIT binary patch delta 4026 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 A8vpl09g$ll9Dk30063g#RIs{7>(Ja1^}2@ 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 H=79eLL&l%R diff --git a/public/downloads/devops/20-bounded-remediation.zip b/public/downloads/devops/20-bounded-remediation.zip index a42e6a606a31208509942acda44d8ebc50e5fc2e..01fb5dc88c86a9aff6121b339b2e78108537705c 100644 GIT binary patch delta 3862 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 YmofoalYf^{0Undlmox_Yk^lez09%Ys5&!@I delta 3870 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 diff --git a/public/downloads/devops/catalog.json b/public/downloads/devops/catalog.json index 1c96a8a..7973d85 100644 --- a/public/downloads/devops/catalog.json +++ b/public/downloads/devops/catalog.json @@ -3,160 +3,160 @@ "directory": "01-ci-diagnosis", "route": "/agentctl/examples/devops/01-ci-diagnosis/", "download": "/agentctl/downloads/devops/01-ci-diagnosis.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5407572fdb3b4d092cb40fc93524ad499126bb0a1c58fe3b3b84df63d74b049f", - "bytes": 37377 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "741a48a6994c6fe87282156c0a19f699aa7df59a320a3743ea9b63801d1af60e", + "bytes": 37382 }, { "directory": "02-junit-triage", "route": "/agentctl/examples/devops/02-junit-triage/", "download": "/agentctl/downloads/devops/02-junit-triage.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "f41fd98e5e017563ecd9f5806500c3f81aeaf5bd946c97fd3fffee7c075553e4", - "bytes": 33340 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "410eae753dffdd834ababaf34c2a661d511f104d6e9bc431d96235b1abfbcf32", + "bytes": 33341 }, { "directory": "03-pipeline-review", "route": "/agentctl/examples/devops/03-pipeline-review/", "download": "/agentctl/downloads/devops/03-pipeline-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5b7ebf61f36f2d496319bf35ff5d3364513a926e4eb2b961412121462738e898", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "ac3919f07bd5eea967a899a7063f6b4ddbb3dfa341de2bc3c39842caa05da696", "bytes": 34291 }, { "directory": "04-dockerfile-review", "route": "/agentctl/examples/devops/04-dockerfile-review/", "download": "/agentctl/downloads/devops/04-dockerfile-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "77e6e862f2fd29a929ac4eac5ef496b3e3e790f7f53a4eac951b2c94725f7f8e", - "bytes": 34251 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "a5075ecbb6f6d9755b0baffa7acb3c40c87fa6a0699794aca576b71364f6cc81", + "bytes": 34257 }, { "directory": "05-kubernetes-review", "route": "/agentctl/examples/devops/05-kubernetes-review/", "download": "/agentctl/downloads/devops/05-kubernetes-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "d5c31dfbed9b89618edd0645724a6d82949d28a1a939b753f9de747abc969465", - "bytes": 86242 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "5fe696b231f0d6668091ec688f517b73b29a0f66da8451a8e1c8f8e043a9b91e", + "bytes": 86244 }, { "directory": "06-terraform-plan", "route": "/agentctl/examples/devops/06-terraform-plan/", "download": "/agentctl/downloads/devops/06-terraform-plan.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "7caba1e953d52e0e6b8407810cb8a98ed9b8585779da8a374603de3c1baaa2ff", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "a25be3491df15702dcb63d48041067d05595e1ea5dfc1c73defd984507e412e9", "bytes": 33864 }, { "directory": "07-dependency-update", "route": "/agentctl/examples/devops/07-dependency-update/", "download": "/agentctl/downloads/devops/07-dependency-update.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "538e1c7528062258edbe474dc9f6ec163534b0d6466af0973b8c005409b65a3c", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "08163b7bba3960b47f55832a47c3e9d33cba9c9ba686d4503cf193ed99890063", "bytes": 34443 }, { "directory": "08-sbom-triage", "route": "/agentctl/examples/devops/08-sbom-triage/", "download": "/agentctl/downloads/devops/08-sbom-triage.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "e826b25ae2d163c819197676a37961e7426e281cb44d43d0caf370bc668e3c8f", - "bytes": 35501 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "3ee726ce6438c785e9fb08bc922296ceecfea123ca736befa30cb3af89845c8c", + "bytes": 35504 }, { "directory": "09-release-notes", "route": "/agentctl/examples/devops/09-release-notes/", "download": "/agentctl/downloads/devops/09-release-notes.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "a0ae8ce9c0c4973ed002155d4e0b6420b20c7dc612cd95172d1293dffaf96247", - "bytes": 33406 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "7a0d62bce10ae9bd4eda50b3c39d55decd77a3bf1876e9a44eba34ffdfd43a76", + "bytes": 33408 }, { "directory": "10-release-readiness", "route": "/agentctl/examples/devops/10-release-readiness/", "download": "/agentctl/downloads/devops/10-release-readiness.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "80056bc95d72f0c1c390d11933ae78f94a94e3fe5656d4b85b191bc761cc9b30", - "bytes": 35076 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "d35cd6c11295c3c780486923990628b61630c4afe9043adcdeeaba58db05d110", + "bytes": 35075 }, { "directory": "11-configuration-drift", "route": "/agentctl/examples/devops/11-configuration-drift/", "download": "/agentctl/downloads/devops/11-configuration-drift.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "8e244826c117eed3a87d8e8b6c2ee087e2a9d344b3114ef815211945f4ce0285", - "bytes": 34242 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "006092ee659d1446c9c0d0d85a23cc9c674882b649c64473641b53334ac4a847", + "bytes": 34246 }, { "directory": "12-incident-timeline", "route": "/agentctl/examples/devops/12-incident-timeline/", "download": "/agentctl/downloads/devops/12-incident-timeline.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "eb25ee8f284d5d781204d1ce805d8ec07182ba34f94813958da631218fbf805a", - "bytes": 37401 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "87c4f42990c90d90314b7e0459431746ede458088f362d382a37aa6a8b825890", + "bytes": 37404 }, { "directory": "13-canary-evaluation", "route": "/agentctl/examples/devops/13-canary-evaluation/", "download": "/agentctl/downloads/devops/13-canary-evaluation.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5489b2c7bb2e214bd947e79357d8aff3e38e6934b929a89c598a1516c1a07dd6", - "bytes": 33652 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "580ade0dc60ca16da773f5681edb82f0c02b44e94e05517d4e4833cc62932459", + "bytes": 33655 }, { "directory": "14-local-deployment", "route": "/agentctl/examples/devops/14-local-deployment/", "download": "/agentctl/downloads/devops/14-local-deployment.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "2dd27bcfa2fff84da2885182c24e7b3ae3055687dea08330ba96dfcfc7f0ab7a", - "bytes": 34565 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "65c925fa3478029f27d6fedd840701a2c0c072a2e035eeacbb1515212050d1a3", + "bytes": 34568 }, { "directory": "15-interrupted-deployment", "route": "/agentctl/examples/devops/15-interrupted-deployment/", "download": "/agentctl/downloads/devops/15-interrupted-deployment.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "8d42cc1136248dd662253497de4ade69c1ed10e63824f1c83e5ea615314063a0", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "88a825bcb3b1f7a2fc7b6fce067bc948687982c531b8e69521741e3d01724a3e", "bytes": 36210 }, { "directory": "16-retry-repair", "route": "/agentctl/examples/devops/16-retry-repair/", "download": "/agentctl/downloads/devops/16-retry-repair.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "54a0b7561316e983d1a759c112b1e3451aba92d176b4578c5119bb892de9dfc3", - "bytes": 34804 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "dc3ebe1ea9dd71690f920612cf3032814c36f737fc707e74436d488053e2c2df", + "bytes": 34807 }, { "directory": "17-compensated-rollout", "route": "/agentctl/examples/devops/17-compensated-rollout/", "download": "/agentctl/downloads/devops/17-compensated-rollout.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "f7030e7665c0daa012320764dc8cd125e8aae4b7ac43dbb4236ac4673f777433", - "bytes": 36123 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "7d81119430420de672c737db4bd561851a45f44c0a8e15dcec612eb0fc560864", + "bytes": 36122 }, { "directory": "18-parallel-matrix", "route": "/agentctl/examples/devops/18-parallel-matrix/", "download": "/agentctl/downloads/devops/18-parallel-matrix.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "76f75ad1f7c5f106c684ca1b83a5c5a8502acfcbc480d99893946a95d09a91ec", - "bytes": 34580 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "790b721793a920923fc4577b8a6f39c11138dce38565c5094a28c25daf679e3f", + "bytes": 34584 }, { "directory": "19-role-subworkflow", "route": "/agentctl/examples/devops/19-role-subworkflow/", "download": "/agentctl/downloads/devops/19-role-subworkflow.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "2229e091ab28a0b669fea64b45536e4fb934bd5ea7da6a52909fe7a8636b04b8", - "bytes": 41025 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "1fdb69b59947347aced60ff267023c414d67b68fc15ddf72946a655ef2b75c6d", + "bytes": 41027 }, { "directory": "20-bounded-remediation", "route": "/agentctl/examples/devops/20-bounded-remediation/", "download": "/agentctl/downloads/devops/20-bounded-remediation.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "0de9cbc40d7a1bc2d9746fde0bc5f3b2d2b76a298dd852b6658bf10c972cb8db", - "bytes": 38923 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "fde6369c05835d61037b22395caec92f271c40148c1c0298bc5d02f1f9ac096b", + "bytes": 38925 } ] diff --git a/public/downloads/remediation/21-container-remediation.zip b/public/downloads/remediation/21-container-remediation.zip index e05b2b80bbeed18ae96fb36d7edf6df72e1095d9..0bb0856af4e52d930d32a9946853716669e126ba 100644 GIT binary patch delta 16163 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 IIt=9h0Y*^bxBvhE delta 15947 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 is rejected because hidden conversation state would bypass the compiled graph. -See [Structured role handoffs](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/STRUCTURED_HANDOFFS.md). +See [Structured role handoffs](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/STRUCTURED_HANDOFFS.md). An agent may set `stream: true` when its provider advertises streaming. Stream fragments are bounded, redacted, persisted under task-attempt sequence numbers, and kept separate from final task output validation. See [Durable provider -streaming](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/DURABLE_STREAMING.md). +streaming](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/DURABLE_STREAMING.md). `builtin.shell.exec` and `extension.process` expose `isolation: process` by default. This is bounded host execution, not a sandbox. `isolation: container` @@ -85,7 +85,7 @@ requires a local digest-pinned image plus Docker or Podman and runs with a read-only root/workspace, no network, a non-root identity, dropped capabilities, and explicit memory/CPU/PID limits. The requested engine and image fail closed without host fallback. See [Process -isolation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/PROCESS_ISOLATION.md). +isolation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/PROCESS_ISOLATION.md). `runtime.budgets` sets optional run-wide request, turn, tool, token, wall-time, process-output, artifact, task, expansion, loop, and monetary ceilings. Static @@ -93,7 +93,7 @@ graph counts fail compilation. Dynamic units are reserved atomically before fresh effect dispatch and reconciled from actual usage. Monetary limits use integer micro-US-dollars and require versioned `runtime.pricing` entries keyed by `provider/model`. See [Resource and cost -budgets](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/RESOURCE_BUDGETS.md). +budgets](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/RESOURCE_BUDGETS.md). `builtin.shell.exec` captures stdout and stderr concurrently. Its optional `stdoutLimitBytes`, `stderrLimitBytes`, and `combinedOutputLimitBytes` fields default to 1 MiB, 1 MiB, and 2 MiB respectively. Each configured value must be between 1 byte and 16 MiB. `timeoutSeconds` must be between 1 and 86,400. Exceeding an output bound terminates and reaps the process and records a structured failed effect; timeout or cancellation remains an uncertain effect because external changes may already have occurred. These fields are validated identically for workflow and pack actions. diff --git a/src/content/docs/_generated/contributing/add-action.md b/src/content/docs/_generated/contributing/add-action.md index 9a81ffb..ca92ace 100644 --- a/src/content/docs/_generated/contributing/add-action.md +++ b/src/content/docs/_generated/contributing/add-action.md @@ -1,7 +1,7 @@ --- title: "Add an action or tool" description: "Define contracts, policy, effects, recovery, tests, and documentation." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/development/ADD_ACTION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/development/ADD_ACTION.md" --- An action is selected directly by a task. A tool is requested by a model. Both need explicit data, policy, effect, persistence, replay, and test contracts. diff --git a/src/content/docs/_generated/contributing/add-migration.md b/src/content/docs/_generated/contributing/add-migration.md index 378ea16..6001508 100644 --- a/src/content/docs/_generated/contributing/add-migration.md +++ b/src/content/docs/_generated/contributing/add-migration.md @@ -1,7 +1,7 @@ --- title: "Add a store migration" description: "Version and test forward SQLite migrations." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/development/ADD_MIGRATION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/development/ADD_MIGRATION.md" --- The SQLite schema is versioned with `PRAGMA user_version`. Migrations are forward-only and run in order. diff --git a/src/content/docs/_generated/contributing/add-provider.md b/src/content/docs/_generated/contributing/add-provider.md index 3d6a4b0..c3a66d6 100644 --- a/src/content/docs/_generated/contributing/add-provider.md +++ b/src/content/docs/_generated/contributing/add-provider.md @@ -1,7 +1,7 @@ --- title: "Add a provider" description: "Add capabilities, native mapping, mock evidence, and honest claims." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/development/ADD_PROVIDER.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/development/ADD_PROVIDER.md" --- Provider support means a native adapter with explicit capabilities and deterministic protocol evidence. A provider name alone is not support. diff --git a/src/content/docs/_generated/contributing/developer-guide.md b/src/content/docs/_generated/contributing/developer-guide.md index c28347c..bac1a42 100644 --- a/src/content/docs/_generated/contributing/developer-guide.md +++ b/src/content/docs/_generated/contributing/developer-guide.md @@ -1,7 +1,7 @@ --- title: "Developer guide" description: "Understand the Rust workspace, deterministic core, effects, persistence, and tests." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/development/REPOSITORY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/development/REPOSITORY.md" --- ## Repository layout diff --git a/src/content/docs/_generated/contributing/documentation.md b/src/content/docs/_generated/contributing/documentation.md index a163e6f..64ca8fc 100644 --- a/src/content/docs/_generated/contributing/documentation.md +++ b/src/content/docs/_generated/contributing/documentation.md @@ -1,7 +1,7 @@ --- title: "Write documentation" description: "Own content in the right repository and verify it end to end." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/development/DOCUMENTATION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/development/DOCUMENTATION.md" --- ## Ownership diff --git a/src/content/docs/_generated/contributing/index.md b/src/content/docs/_generated/contributing/index.md index ceb72ff..673c1bb 100644 --- a/src/content/docs/_generated/contributing/index.md +++ b/src/content/docs/_generated/contributing/index.md @@ -1,7 +1,7 @@ --- title: "Contributing" description: "Set up, test, review, and prepare focused changes." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/CONTRIBUTING.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/CONTRIBUTING.md" --- Thank you for improving `agentctl`. Keep changes narrow, add executable evidence for public behavior, and preserve the deterministic and security boundaries. diff --git a/src/content/docs/_generated/contributing/release.md b/src/content/docs/_generated/contributing/release.md index 48c7a78..afb1987 100644 --- a/src/content/docs/_generated/contributing/release.md +++ b/src/content/docs/_generated/contributing/release.md @@ -1,7 +1,7 @@ --- title: "Release process" description: "Prepare and verify an exact-commit release without overstating evidence." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/RELEASE_PROCESS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/RELEASE_PROCESS.md" --- An agentctl release supplies native GitHub binary downloads and two Docker Hub image flavors. It does not publish crates to crates.io or deploy a service. Preparation builds and tests exact source; publication promotes the retained OCI bytes without rebuilding. diff --git a/src/content/docs/_generated/contributing/testing.md b/src/content/docs/_generated/contributing/testing.md index 5d7dba2..672b9f1 100644 --- a/src/content/docs/_generated/contributing/testing.md +++ b/src/content/docs/_generated/contributing/testing.md @@ -1,7 +1,7 @@ --- title: "Testing strategy" description: "Credential-free gates, acceptance layers, fuzzing, and live evidence." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/TESTING.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/TESTING.md" --- The canonical command is: @@ -65,7 +65,7 @@ the failed two-agent source/selective repair/keyless replay journey. It retains its additional 40-request and conservative US$10 guard. The four distinct DevOps OpenAI workflows are examples 01, 12, 19, and 20 and are included in the example gate; the other examples -remain deterministic. See their [catalog](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/catalog.json). +remain deterministic. See their [catalog](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/catalog.json). After a failure in the composite, `cargo xtask examples-verify-live-openai-composites` runs that composite, selective repair, the OCI repair case and the four DevOps @@ -116,7 +116,7 @@ python3 -m unittest discover -s scripts -p test_live_command.py -v python3 -m unittest discover -s scripts -p test_container_agentctl.py -v ``` -The [execution ledger](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/execution/AUTONOMOUS_LAUNCH_READINESS.md) records the +The [execution ledger](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/execution/AUTONOMOUS_LAUNCH_READINESS.md) records the actual code-under-test SHA, model IDs, requests, tokens, estimates, and results. Historical live evidence is not certification of a changed candidate. Never run paid gates for fuzzing, load, or ordinary CI. diff --git a/src/content/docs/_generated/durable-execution/index.md b/src/content/docs/_generated/durable-execution/index.md index c9e2503..9fe7189 100644 --- a/src/content/docs/_generated/durable-execution/index.md +++ b/src/content/docs/_generated/durable-execution/index.md @@ -1,7 +1,7 @@ --- title: "Durable execution" description: "Understand checkpoints, effects, resume, replay, fork, and uncertain outcomes." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/DURABLE_EXECUTION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/DURABLE_EXECUTION.md" --- SQLite is the local history and correctness boundary. Run, task, effect, approval, checkpoint, audit, provider-session, tool-call, and long-term-memory records are schema-versioned. Future database, runtime, plan, effect, or checkpoint versions fail explicitly instead of being ignored. @@ -11,7 +11,7 @@ with actual usage. Parallel tasks share the same SQLite coordinator. The wall-time deadline is derived from run creation, so pause and resume cannot reset it. Recorded replay and reused retry or repair boundaries dispatch nothing and consume no fresh effect units. See [Resource and cost -budgets](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/RESOURCE_BUDGETS.md). +budgets](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/RESOURCE_BUDGETS.md). ## Operations diff --git a/src/content/docs/_generated/examples/approval-gated.md b/src/content/docs/_generated/examples/approval-gated.md index 42ea6bc..86ec125 100644 --- a/src/content/docs/_generated/examples/approval-gated.md +++ b/src/content/docs/_generated/examples/approval-gated.md @@ -1,7 +1,7 @@ --- title: "Approval-gated action" description: "Pause a mutation until an operator resolves a durable request." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/APPROVAL_GATED_ACTION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/APPROVAL_GATED_ACTION.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/ci-quality-gate.md b/src/content/docs/_generated/examples/ci-quality-gate.md index 51353c4..8e5f339 100644 --- a/src/content/docs/_generated/examples/ci-quality-gate.md +++ b/src/content/docs/_generated/examples/ci-quality-gate.md @@ -1,7 +1,7 @@ --- title: "CI quality gate" description: "Turn typed evidence into stable process output." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/CI_QUALITY_GATE.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/CI_QUALITY_GATE.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/devops.md b/src/content/docs/_generated/examples/devops.md index 01d1c0f..17c1b53 100644 --- a/src/content/docs/_generated/examples/devops.md +++ b/src/content/docs/_generated/examples/devops.md @@ -1,7 +1,7 @@ --- title: "DevOps and CI/CD examples" description: "Run twenty bounded local examples and inspect their semantic evidence, artifacts, and recovery behavior." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/README.md" --- Choose a complete local workflow for a concrete CI, platform, SRE, release or security problem. The twenty tutorials below lead with editable YAML, input files and direct `agentctl` commands. `agentctl.dev/v1` names the workflow document format. @@ -71,9 +71,9 @@ python3 -m pip install -r examples/devops/requirements.txt python3 examples/devops/run.py --agentctl target/debug/agentctl --report /tmp/agentctl-devops.json ``` -Use `--only 01` to select a case, repeat it to select several, and use `--keep` to retain workspaces. The discoverable suite alias is `cargo xtask devops-examples`. Reports retain source and binary identity, commands, exit codes, semantic assertions and artifact hashes. Passing static `check` alone does not establish execution evidence. The [machine-readable catalog](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/catalog.json) and [recorded validation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/validation.json) preserve exact inventory and source-labeled results. +Use `--only 01` to select a case, repeat it to select several, and use `--keep` to retain workspaces. The discoverable suite alias is `cargo xtask devops-examples`. Reports retain source and binary identity, commands, exit codes, semantic assertions and artifact hashes. Passing static `check` alone does not establish execution evidence. The [machine-readable catalog](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/catalog.json) and [recorded validation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/validation.json) preserve exact inventory and source-labeled results. -Hand-maintained tutorial prose is separate from the deterministic [catalog generator](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/build_catalog.py). Regeneration updates workflows, input fixtures and machine-readable inventory; it must not overwrite these READMEs. Run it after authored generator changes and verify a second pass produces no diff. +Hand-maintained tutorial prose is separate from the deterministic [catalog generator](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/build_catalog.py). Regeneration updates workflows, input fixtures and machine-readable inventory; it must not overwrite these READMEs. Run it after authored generator changes and verify a second pass produces no diff. ### Optional container verification @@ -111,7 +111,7 @@ python3 examples/devops/run.py --agentctl target/debug/agentctl --mode openai -- Use the **same budget file for the entire launch suite and all retries**. A new file would create a new allowance; it must not be used to bypass an existing -suite limit. [live_budget.py](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/live_budget.py) exposes `LiveBudget.reserve` and +suite limit. [live_budget.py](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/live_budget.py) exposes `LiveBudget.reserve` and `reconcile` for other authorized harnesses. Defaults are 100 provider requests, 200,000 total tokens, 1,800 seconds of paid execution and US$25 estimated cost. SQLite transactions reserve each workflow's request/token/time/cost upper diff --git a/src/content/docs/_generated/examples/devops/01-ci-diagnosis.md b/src/content/docs/_generated/examples/devops/01-ci-diagnosis.md index 64e6d56..dd01c57 100644 --- a/src/content/docs/_generated/examples/devops/01-ci-diagnosis.md +++ b/src/content/docs/_generated/examples/devops/01-ci-diagnosis.md @@ -1,9 +1,9 @@ --- title: "Diagnose a failed CI build" description: "Separate parsed failure evidence from advisory recommendations." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/01-ci-diagnosis/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/01-ci-diagnosis/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/01-ci-diagnosis.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/01-ci-diagnosis). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/01-ci-diagnosis.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/01-ci-diagnosis). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** CI developer. **Level and evidence:** Beginner; deterministic offline parsing and decision validation. A separate OpenAI workflow is opt-in. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/01-ci-diagnosis/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/01-ci-diagnosis/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The parser distinguishes missing imports, test assertions, malformed configuration, and unknown or mixed evidence. The decision names an allowed action and the exact lines supporting it. A deterministic verifier creates the recommendation from that action; arbitrary advisory prose is retained with `validated: false`. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/01-ci-diagnosis/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/01-ci-diagnosis/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/02-junit-triage.md b/src/content/docs/_generated/examples/devops/02-junit-triage.md index 023e55f..68399f2 100644 --- a/src/content/docs/_generated/examples/devops/02-junit-triage.md +++ b/src/content/docs/_generated/examples/devops/02-junit-triage.md @@ -1,9 +1,9 @@ --- title: "Triage JUnit test results" description: "Classify failures and errors without inventing infrastructure causes." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/02-junit-triage/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/02-junit-triage/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/02-junit-triage.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/02-junit-triage). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/02-junit-triage.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/02-junit-triage). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** CI developer. **Level and evidence:** Beginner; offline, no model. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/02-junit-triage/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/02-junit-triage/workflow.yaml) remains readable and editable source. The complete package contains: @@ -65,7 +65,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The parser traverses test suites, preserves the JUnit `failure` versus `error` distinction, and classifies each issue separately. Infrastructure classification requires connectivity or availability evidence. An application `ValueError` remains an application issue; an unrecognized error remains unknown. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/02-junit-triage/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/02-junit-triage/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/03-pipeline-review.md b/src/content/docs/_generated/examples/devops/03-pipeline-review.md index 79eeca7..8fd78d0 100644 --- a/src/content/docs/_generated/examples/devops/03-pipeline-review.md +++ b/src/content/docs/_generated/examples/devops/03-pipeline-review.md @@ -1,9 +1,9 @@ --- title: "Review a GitHub Actions pipeline" description: "Inspect permissions and validate a narrow proposed YAML patch." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/03-pipeline-review/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/03-pipeline-review/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/03-pipeline-review.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/03-pipeline-review). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/03-pipeline-review.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/03-pipeline-review). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** CI developer. **Level and evidence:** Intermediate; offline, Python and Git plus the declared validator. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/03-pipeline-review/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/03-pipeline-review/workflow.yaml) remains readable and editable source. The complete package contains: @@ -65,7 +65,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The workflow separates local input review from the proposed change and validation. Review the permission rules and the patch before adapting them to a real repository. The local patch workspace preserves unrelated YAML fields. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/03-pipeline-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/03-pipeline-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/04-dockerfile-review.md b/src/content/docs/_generated/examples/devops/04-dockerfile-review.md index 0933072..d73798c 100644 --- a/src/content/docs/_generated/examples/devops/04-dockerfile-review.md +++ b/src/content/docs/_generated/examples/devops/04-dockerfile-review.md @@ -1,9 +1,9 @@ --- title: "Review a Dockerfile" description: "Inspect a Dockerfile patch and optionally build a disposable image." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/04-dockerfile-review/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/04-dockerfile-review/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/04-dockerfile-review.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/04-dockerfile-review). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/04-dockerfile-review.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/04-dockerfile-review). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Intermediate; offline review uses Python and Git. An optional real image gate needs Docker or Podman. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/04-dockerfile-review/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/04-dockerfile-review/workflow.yaml) remains readable and editable source. The complete package contains: @@ -66,7 +66,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The helper generates and checks a patch in a disposable directory. Source checks establish the proposed bytes and Python syntax. Building and probing an actual image is a separate opt-in operation, so its evidence cannot be inferred from a successful text review. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/04-dockerfile-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/04-dockerfile-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/05-kubernetes-review.md b/src/content/docs/_generated/examples/devops/05-kubernetes-review.md index 9b4fe03..882797b 100644 --- a/src/content/docs/_generated/examples/devops/05-kubernetes-review.md +++ b/src/content/docs/_generated/examples/devops/05-kubernetes-review.md @@ -1,9 +1,9 @@ --- title: "Validate Kubernetes manifests" description: "Review local manifests and validate a pinned schema without a cluster." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/05-kubernetes-review/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/05-kubernetes-review/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/05-kubernetes-review.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/05-kubernetes-review). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/05-kubernetes-review.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/05-kubernetes-review). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Intermediate; offline, Python and the bundled pinned schema. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/05-kubernetes-review/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/05-kubernetes-review/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The workflow inspects security-sensitive settings, proposes a narrow local change, and validates the resulting object. The full-schema path uses the bundled Kubernetes v1.35.0 Deployment schema, including its 120 referenced definitions, and preserves unrelated fields. Its recorded transformation handles Kubernetes IntOrString values; it does not implement CEL, server defaulting, admission policy or image validation. Keep the schema, provenance and license files together. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/05-kubernetes-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/05-kubernetes-review/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/06-terraform-plan.md b/src/content/docs/_generated/examples/devops/06-terraform-plan.md index e3d4b5f..238467d 100644 --- a/src/content/docs/_generated/examples/devops/06-terraform-plan.md +++ b/src/content/docs/_generated/examples/devops/06-terraform-plan.md @@ -1,9 +1,9 @@ --- title: "Review a Terraform plan" description: "Inspect plan JSON and approve an isolated test mutation without apply." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/06-terraform-plan/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/06-terraform-plan/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/06-terraform-plan.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/06-terraform-plan). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/06-terraform-plan.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/06-terraform-plan). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Intermediate; offline plan analysis and a local approval demonstration. No Terraform apply. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/06-terraform-plan/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/06-terraform-plan/workflow.yaml) remains readable and editable source. The complete package contains: @@ -75,7 +75,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The analysis consumes plan JSON and identifies governed changes. A separate task pauses before the local mutation. An approval binds to the pending operation reviewed in the plan; it is not blanket permission to apply infrastructure. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/06-terraform-plan/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/06-terraform-plan/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/07-dependency-update.md b/src/content/docs/_generated/examples/devops/07-dependency-update.md index 51d92f3..020de98 100644 --- a/src/content/docs/_generated/examples/devops/07-dependency-update.md +++ b/src/content/docs/_generated/examples/devops/07-dependency-update.md @@ -1,9 +1,9 @@ --- title: "Validate a vendored-code patch" description: "Apply a supplied patch and compare failing and passing tests." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/07-dependency-update/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/07-dependency-update/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/07-dependency-update.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/07-dependency-update). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/07-dependency-update.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/07-dependency-update). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** CI developer. **Level and evidence:** Intermediate; offline, Python and Git. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/07-dependency-update/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/07-dependency-update/workflow.yaml) remains readable and editable source. The complete package contains: @@ -67,7 +67,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The workflow keeps the original target, supplied change and test evidence inspectable. A clean patch application alone is insufficient: the behavioral test must demonstrate the defect and its correction. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/07-dependency-update/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/07-dependency-update/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/08-sbom-triage.md b/src/content/docs/_generated/examples/devops/08-sbom-triage.md index 4ce8f62..6f474d3 100644 --- a/src/content/docs/_generated/examples/devops/08-sbom-triage.md +++ b/src/content/docs/_generated/examples/devops/08-sbom-triage.md @@ -1,9 +1,9 @@ --- title: "Triage an SBOM and vulnerability report" description: "Evaluate severity and scoped exceptions, then optionally enforce a CI gate." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/08-sbom-triage/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/08-sbom-triage/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/08-sbom-triage.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/08-sbom-triage). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/08-sbom-triage.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/08-sbom-triage). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Security practitioner. **Level and evidence:** Intermediate; offline, no model or live vulnerability database. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/08-sbom-triage/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/08-sbom-triage/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Each vulnerability and exception is scoped by vulnerability ID and component identity. Exceptions need an approved status, owner, reason and expiry. Revoked, expired or wrong-component exceptions do not authorize a finding. Unknown severity is handled conservatively. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/08-sbom-triage/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/08-sbom-triage/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/09-release-notes.md b/src/content/docs/_generated/examples/devops/09-release-notes.md index 05d90e3..e4eb005 100644 --- a/src/content/docs/_generated/examples/devops/09-release-notes.md +++ b/src/content/docs/_generated/examples/devops/09-release-notes.md @@ -1,9 +1,9 @@ --- title: "Generate evidenced release notes" description: "Read a repository and explicit ref range without changing its history." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/09-release-notes/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/09-release-notes/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/09-release-notes.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/09-release-notes). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/09-release-notes.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/09-release-notes). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Release engineer. **Level and evidence:** Beginner; offline, Python and Git. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/09-release-notes/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/09-release-notes/workflow.yaml) remains readable and editable source. The complete package contains: @@ -65,7 +65,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Setup may create the disposable fixture history once. The operational action only resolves the supplied refs, reads commits and changed paths, and writes release notes beneath `artifacts`. The range excludes `fromRef` and includes `toRef`, with a 500-commit ceiling. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/09-release-notes/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/09-release-notes/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/10-release-readiness.md b/src/content/docs/_generated/examples/devops/10-release-readiness.md index cb42021..735ba50 100644 --- a/src/content/docs/_generated/examples/devops/10-release-readiness.md +++ b/src/content/docs/_generated/examples/devops/10-release-readiness.md @@ -1,9 +1,9 @@ --- title: "Evaluate and enforce release readiness" description: "Distinguish report generation from a fail-closed release gate." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/10-release-readiness/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/10-release-readiness/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/10-release-readiness.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/10-release-readiness). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/10-release-readiness.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/10-release-readiness). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Release engineer. **Level and evidence:** Intermediate; offline, no model. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/10-release-readiness/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/10-release-readiness/workflow.yaml) remains readable and editable source. The complete package contains: @@ -67,7 +67,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Analysis requires a nonempty list of uniquely named checks with boolean passed values, plus a lowercase SHA-256 digest. It hashes the supplied package and adds its own digest check. Report generation and permission to release are separate boundaries. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/10-release-readiness/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/10-release-readiness/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/11-configuration-drift.md b/src/content/docs/_generated/examples/devops/11-configuration-drift.md index 94ed04f..53819ad 100644 --- a/src/content/docs/_generated/examples/devops/11-configuration-drift.md +++ b/src/content/docs/_generated/examples/devops/11-configuration-drift.md @@ -1,9 +1,9 @@ --- title: "Explain configuration drift" description: "Edit YAML variable layers and inspect precedence without exposing secrets." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/11-configuration-drift/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/11-configuration-drift/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/11-configuration-drift.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/11-configuration-drift). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/11-configuration-drift.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/11-configuration-drift). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Beginner; offline, no model. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/11-configuration-drift/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/11-configuration-drift/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Workflow files load in order, then inline workflow values apply. Agent defaults and task overrides follow, with invocation variable files and inline flags last. Keys replace whole values; an object replacement does not implicitly deep-merge its old keys. Typed inputs remain a separate namespace. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/11-configuration-drift/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/11-configuration-drift/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/12-incident-timeline.md b/src/content/docs/_generated/examples/devops/12-incident-timeline.md index 775b4b5..1b58087 100644 --- a/src/content/docs/_generated/examples/devops/12-incident-timeline.md +++ b/src/content/docs/_generated/examples/devops/12-incident-timeline.md @@ -1,9 +1,9 @@ --- title: "Build an incident timeline" description: "Order timestamped observations and cite supporting log lines." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/12-incident-timeline/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/12-incident-timeline/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/12-incident-timeline.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/12-incident-timeline). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/12-incident-timeline.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/12-incident-timeline). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Beginner; deterministic offline parsing and decision validation. A separate OpenAI workflow is opt-in. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/12-incident-timeline/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/12-incident-timeline/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Every nonempty line must contain a timezone-bearing timestamp, service and message. The parser normalizes instants to UTC, sorts them and applies an explicit optional window. Duration is the observed interval, not automatically the outage duration or proof of causation. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/12-incident-timeline/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/12-incident-timeline/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/13-canary-evaluation.md b/src/content/docs/_generated/examples/devops/13-canary-evaluation.md index 18b130e..a710b06 100644 --- a/src/content/docs/_generated/examples/devops/13-canary-evaluation.md +++ b/src/content/docs/_generated/examples/devops/13-canary-evaluation.md @@ -1,9 +1,9 @@ --- title: "Evaluate a canary" description: "Route healthy, unhealthy, and insufficient-data metrics explicitly." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/13-canary-evaluation/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/13-canary-evaluation/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/13-canary-evaluation.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/13-canary-evaluation). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/13-canary-evaluation.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/13-canary-evaluation). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Beginner; offline local decision, no monitoring-service access. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/13-canary-evaluation/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/13-canary-evaluation/workflow.yaml) remains readable and editable source. The complete package contains: @@ -65,7 +65,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The workflow validates integer counts, aggregates requests and errors, checks minimum sample and request counts, then uses a typed router. Insufficient evidence selects hold; it must not promote merely because there were zero observed errors. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/13-canary-evaluation/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/13-canary-evaluation/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/14-local-deployment.md b/src/content/docs/_generated/examples/devops/14-local-deployment.md index 03c6283..932427f 100644 --- a/src/content/docs/_generated/examples/devops/14-local-deployment.md +++ b/src/content/docs/_generated/examples/devops/14-local-deployment.md @@ -1,9 +1,9 @@ --- title: "Approve a disposable local deployment" description: "Review a mutation, deploy local state, and inspect health probes." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/14-local-deployment/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/14-local-deployment/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/14-local-deployment.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/14-local-deployment). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/14-local-deployment.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/14-local-deployment). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Intermediate; local contract demonstration, Python and a loopback HTTP service. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/14-local-deployment/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/14-local-deployment/workflow.yaml) remains readable and editable source. On Windows, Python socket startup also requires `SYSTEMROOT`. Setup adds an explicit `SYSTEMROOT` environment reference only to the local `service-probe` actions and a matching `environmentAllowlist` grant. It records the variable name, never its value, and fails if the prerequisite is absent or conflicts with an authored environment setting or explicit allowlist. Review this declared prerequisite in `local.*.yaml`; other host environment variables are not inherited. Keep `SYSTEMROOT` available when running or resuming the workflow. @@ -88,7 +88,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The normal workflow makes deployment and health validation visible. Setup starts the explicitly local service separately; it is not production hosting. Inspect the initial state and intended version before the mutation approval, then compare the post-change probe. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/14-local-deployment/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/14-local-deployment/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/15-interrupted-deployment.md b/src/content/docs/_generated/examples/devops/15-interrupted-deployment.md index d95dea0..220c51d 100644 --- a/src/content/docs/_generated/examples/devops/15-interrupted-deployment.md +++ b/src/content/docs/_generated/examples/devops/15-interrupted-deployment.md @@ -1,9 +1,9 @@ --- title: "Recover an interrupted deployment" description: "Inspect uncertain effects before reconciliation and resume." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/15-interrupted-deployment/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/15-interrupted-deployment/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/15-interrupted-deployment.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/15-interrupted-deployment). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/15-interrupted-deployment.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/15-interrupted-deployment). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Advanced; local recovery contract demonstration. Fault injection is a separate test aid. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/15-interrupted-deployment/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/15-interrupted-deployment/workflow.yaml) remains readable and editable source. The complete package contains: @@ -66,7 +66,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The local mutation records its effect before execution. After interruption, inspect the run and effect ledger. A confirmed applied mutation can be reused. An uncertain non-idempotent effect requires evidence about the external state before narrowly recording reconciliation. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/15-interrupted-deployment/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/15-interrupted-deployment/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml @@ -274,7 +274,7 @@ agentctl retry local.fault.workflow.yaml RUN_ID --failed --plan --db state.db -- agentctl retry local.fault.workflow.yaml RUN_ID --failed --db state.db --workspace . --output json ``` -The example's fake-delay explanation does not apply to a real provider or deployment operation. An effect inspection by itself cannot prove that a remote service did nothing. For a real mutation, collect provider-side evidence and follow the [effect reconciliation guide](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/EFFECT_RECONCILIATION.md). +The example's fake-delay explanation does not apply to a real provider or deployment operation. An effect inspection by itself cannot prove that a remote service did nothing. For a real mutation, collect provider-side evidence and follow the [effect reconciliation guide](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/EFFECT_RECONCILIATION.md). ## Expected result diff --git a/src/content/docs/_generated/examples/devops/16-retry-repair.md b/src/content/docs/_generated/examples/devops/16-retry-repair.md index 604faf5..1557295 100644 --- a/src/content/docs/_generated/examples/devops/16-retry-repair.md +++ b/src/content/docs/_generated/examples/devops/16-retry-repair.md @@ -1,9 +1,9 @@ --- title: "Retry and selectively repair a workflow" description: "Choose a recovery command and verify reuse of successful boundaries." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/16-retry-repair/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/16-retry-repair/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/16-retry-repair.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/16-retry-repair). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/16-retry-repair.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/16-retry-repair). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Intermediate; offline recovery contract demonstration. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/16-retry-repair/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/16-retry-repair/workflow.yaml) remains readable and editable source. The complete package contains: @@ -66,7 +66,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never Resume continues an interrupted nonterminal run. Retry creates a child attempt for failed boundaries of a compatible terminal workflow. Repair uses corrected workflow content and reuses only compatible successful boundaries. Preview reuse before dispatching either terminal recovery command. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/16-retry-repair/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/16-retry-repair/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/17-compensated-rollout.md b/src/content/docs/_generated/examples/devops/17-compensated-rollout.md index 55a8760..327cb06 100644 --- a/src/content/docs/_generated/examples/devops/17-compensated-rollout.md +++ b/src/content/docs/_generated/examples/devops/17-compensated-rollout.md @@ -1,9 +1,9 @@ --- title: "Compensate a failed local rollout" description: "Restore captured prior state and verify reconciliation evidence." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/17-compensated-rollout/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/17-compensated-rollout/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/17-compensated-rollout.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/17-compensated-rollout). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/17-compensated-rollout.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/17-compensated-rollout). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Advanced; local compensation contract demonstration. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/17-compensated-rollout/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/17-compensated-rollout/workflow.yaml) remains readable and editable source. On Windows, Python socket startup also requires `SYSTEMROOT`. Setup adds an explicit `SYSTEMROOT` environment reference only to the local `service-probe` actions and a matching `environmentAllowlist` grant. It records the variable name, never its value, and fails if the prerequisite is absent or conflicts with an authored environment setting or explicit allowlist. Review this declared prerequisite in `local.*.yaml`; other host environment variables are not inherited. Keep `SYSTEMROOT` available when running or resuming the workflow. @@ -79,7 +79,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The workflow captures the real prior local state before mutation. On failure, inspect the applied effect, preview compensation, then execute the declared inverse and probe the restored state. Compensation is a separate auditable operation. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/17-compensated-rollout/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/17-compensated-rollout/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/18-parallel-matrix.md b/src/content/docs/_generated/examples/devops/18-parallel-matrix.md index b1e17cc..0433a6c 100644 --- a/src/content/docs/_generated/examples/devops/18-parallel-matrix.md +++ b/src/content/docs/_generated/examples/devops/18-parallel-matrix.md @@ -1,9 +1,9 @@ --- title: "Run bounded checks across services" description: "Edit service inputs and inspect ordered results and failed children." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/18-parallel-matrix/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/18-parallel-matrix/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/18-parallel-matrix.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/18-parallel-matrix). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/18-parallel-matrix.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/18-parallel-matrix). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** CI developer. **Level and evidence:** Beginner; offline, Python. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/18-parallel-matrix/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/18-parallel-matrix/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The YAML declares bounded matrix expansion and independent checks. Matrix axis names are sorted deterministically, and values retain their declared order. Here `check` precedes `service`, so the report contains syntax checks for each service followed by configuration checks for each service, regardless of completion order. A failed child remains visible and must not be hidden by a successful sibling. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/18-parallel-matrix/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/18-parallel-matrix/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/19-role-subworkflow.md b/src/content/docs/_generated/examples/devops/19-role-subworkflow.md index 36c1972..f071e46 100644 --- a/src/content/docs/_generated/examples/devops/19-role-subworkflow.md +++ b/src/content/docs/_generated/examples/devops/19-role-subworkflow.md @@ -1,9 +1,9 @@ --- title: "Review a proposed change with bounded roles" description: "Connect planner, reviewer, and executor through typed handoffs." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/19-role-subworkflow/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/19-role-subworkflow/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/19-role-subworkflow.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/19-role-subworkflow). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/19-role-subworkflow.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/19-role-subworkflow). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** Platform engineer. **Level and evidence:** Advanced; deterministic offline change review with typed handoffs. Separate fake-agent and paid OpenAI variants. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/19-role-subworkflow/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/19-role-subworkflow/workflow.yaml) remains readable and editable source. The complete package contains: @@ -71,7 +71,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The primary workflow prepares a source digest and requested change, then calls a reusable sub-workflow with explicit plan, review, validation and handoff tasks. A failed review assertion blocks the executor. The final action accepts only the matching reviewed timeout and source digest, writes an output copy and verifies it. The separate agent variants assign planner, reviewer and executor roles distinct tool visibility; they must pass the same deterministic review boundary. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/19-role-subworkflow/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/19-role-subworkflow/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/20-bounded-remediation.md b/src/content/docs/_generated/examples/devops/20-bounded-remediation.md index 86e95a7..2283b21 100644 --- a/src/content/docs/_generated/examples/devops/20-bounded-remediation.md +++ b/src/content/docs/_generated/examples/devops/20-bounded-remediation.md @@ -1,9 +1,9 @@ --- title: "Run a bounded remediation loop" description: "Validate actual repair artifacts under explicit iteration and resource limits." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/20-bounded-remediation/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/20-bounded-remediation/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/devops/20-bounded-remediation.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/20-bounded-remediation). It includes the helper and setup step used below; download the complete package before editing a workflow. +> **Complete example package:** [Download all files](/agentctl/downloads/devops/20-bounded-remediation.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/20-bounded-remediation). It includes the helper and setup step used below; download the complete package before editing a workflow. **For:** SRE. **Level and evidence:** Intermediate for the deterministic offline path; advanced for the separate fake-agent or paid OpenAI proposal variants. @@ -25,7 +25,7 @@ python3 -m venv .venv .venv/bin/python setup.py ``` -On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/20-bounded-remediation/workflow.yaml) remains readable and editable source. +On Windows, use `.venv\Scripts\python.exe` in place of `.venv/bin/python`. Setup records the selected interpreters and prepares `local.workflow.yaml` with a matching explicit interpreter-basename grant. Review that generated workflow before running it. The authored [workflow.yaml](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/20-bounded-remediation/workflow.yaml) remains readable and editable source. The complete package contains: @@ -68,7 +68,7 @@ agentctl inspect RUN_ID --db state.db --output json --color never The primary YAML declares `prepare` → `repair` → `analyze` → `report`. `repair` is a deterministic action loop with at most three iterations; it reads the previous artifact, performs one bounded timeout reduction and computes completion from the actual resulting configuration. `analyze` rereads the final artifact and checks the threshold, preserved fields and digest before reporting success. -[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/20-bounded-remediation/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. +[Open the complete workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/20-bounded-remediation/workflow.yaml) to inspect its inputs, task dependencies, grants and bounds. The site embeds the same source below; editing a helper does not replace review of its host-process authority. ```yaml diff --git a/src/content/docs/_generated/examples/devops/21-container-remediation.md b/src/content/docs/_generated/examples/devops/21-container-remediation.md index 5922969..8d5ba8d 100644 --- a/src/content/docs/_generated/examples/devops/21-container-remediation.md +++ b/src/content/docs/_generated/examples/devops/21-container-remediation.md @@ -1,9 +1,9 @@ --- title: "Remediate a container vulnerability" description: "Connect real Trivy evidence, two bounded agents, deterministic validation and a separately authorized draft-PR publisher." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/README.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/README.md" --- -> **Complete example package:** [Download all files](/agentctl/downloads/remediation/21-container-remediation.zip). Built from source [`bb8fb0a5a28d`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation). It includes the standalone application, workflows, instructions, adapters and CI workflow. Follow its explicit image and secret setup before running the live journey. +> **Complete example package:** [Download all files](/agentctl/downloads/remediation/21-container-remediation.zip). Built from source [`7dee64e1d1b6`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation). It includes the standalone application, workflows, instructions, adapters and CI workflow. Follow its explicit image and secret setup before running the live journey. For a platform engineer who needs a reviewable dependency fix backed by an actual application build and vulnerability rescan. @@ -28,11 +28,11 @@ A successful eligible result may retain unrelated baseline findings. Every resid ## Package contents -- [Application](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/app.py), [Dockerfile](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/Dockerfile), [direct manifest](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/requirements.in), [hash lock](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/requirements.lock), [application tests](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/tests/test_app.py). -- [Two-role workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/agentctl/remediate.yaml), [eligibility workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/agentctl/eligibility.yaml), [Responses preflight](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/agentctl/preflight.yaml), [analyzer instructions](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/agentctl/instructions/analyze.md), [implementer instructions](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/agentctl/instructions/implement.md). -- [Adapter and validator](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/adapter.py), [reviewed dependency/scan contract](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/contract.json), [typed schemas](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/schemas.py). -- [Trusted runner](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/runner.py), [candidate/published tooling selection](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/bootstrap.py), [publisher](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/publisher.py), [GitHub Actions workflow](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/.github/workflows/remediation.yml). -- [Synthetic CLI contract runner](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/remediation/contract_check.py), [adapter tests](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/tests/test_adapter.py), [package and publication tests](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/21-container-remediation/tests/test_contracts.py). +- [Application](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/app.py), [Dockerfile](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/Dockerfile), [direct manifest](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/requirements.in), [hash lock](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/requirements.lock), [application tests](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/tests/test_app.py). +- [Two-role workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/agentctl/remediate.yaml), [eligibility workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/agentctl/eligibility.yaml), [Responses preflight](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/agentctl/preflight.yaml), [analyzer instructions](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/agentctl/instructions/analyze.md), [implementer instructions](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/agentctl/instructions/implement.md). +- [Adapter and validator](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/adapter.py), [reviewed dependency/scan contract](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/contract.json), [typed schemas](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/schemas.py). +- [Trusted runner](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/runner.py), [candidate/published tooling selection](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/bootstrap.py), [publisher](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/publisher.py), [GitHub Actions workflow](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/.github/workflows/remediation.yml). +- [Synthetic CLI contract runner](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/remediation/contract_check.py), [adapter tests](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/tests/test_adapter.py), [package and publication tests](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/21-container-remediation/tests/test_contracts.py). No sibling framework checkout or twenty-example cookbook runner is required. @@ -114,7 +114,9 @@ Dispatch the full **Bounded container remediation** journey with `operation: rem - `image_mode: candidate` and the exact allowlisted `framework_sha` before publication, or `image_mode: published` after configuring the exact digest. - `budget_lease`: the coordinator's nonsecret JSON lease bound to this invocation. -The default operation is `remediate`. The authored runtime ceilings are four provider requests, 20,000 total input-plus-output tokens, 600 seconds and US$1 estimated cost. The analyzer has one turn; the implementer has at most three turns and two tool calls. Both have 2,048 maximum output tokens. The coordinator also reserves aggregate allowance before dispatch, reconciles actual durable usage and retains uncertain reservations. Runtime ceilings must fit the assigned lease. The dated pricing estimate includes uncached input, cached input, cache writes and output. It is recorded in the workflow, not presented as a guaranteed invoice. +The preflight and implementer explicitly set `providerOptions.toolStrict: false`. This disables OpenAI’s constrained tool-argument generation for these exact multiline schemas; agentctl still validates every returned argument against the complete path, content pattern and length schema before dispatch, and still enforces each agent’s tool scope and workflow policy. Final structured outputs remain strict. Other workflows keep strict tool generation by default. The live comparison succeeded with this one provider option changed after constrained generation repeatedly returned an incomplete response; this is compatibility evidence, not a guarantee that fresh model responses are deterministic. + +The default operation is `remediate`. The authored runtime ceilings are four provider requests, 20,000 total input-plus-output tokens, 600 seconds and US$1 estimated cost. The analyzer has one turn; the implementer has at most three turns and two tool calls. Their per-response output caps are 2,048 tokens for the analyzer and 4,096 for the implementer. The coordinator also reserves aggregate allowance before dispatch, reconciles actual durable usage and retains uncertain reservations. Runtime ceilings must fit the assigned lease. The dated pricing estimate includes uncached input, cached input, cache writes and output. It is recorded in the workflow, not presented as a guaranteed invoice. CI executes these trusted stages from the demo checkout: diff --git a/src/content/docs/_generated/examples/provider-portability.md b/src/content/docs/_generated/examples/provider-portability.md index 0b239c8..f3c4afd 100644 --- a/src/content/docs/_generated/examples/provider-portability.md +++ b/src/content/docs/_generated/examples/provider-portability.md @@ -1,7 +1,7 @@ --- title: "Provider portability" description: "Keep the workflow contract neutral while capability evidence stays honest." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/PROVIDER_PORTABILITY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/PROVIDER_PORTABILITY.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/recorded-replay.md b/src/content/docs/_generated/examples/recorded-replay.md index 31d3c06..54fa730 100644 --- a/src/content/docs/_generated/examples/recorded-replay.md +++ b/src/content/docs/_generated/examples/recorded-replay.md @@ -1,7 +1,7 @@ --- title: "Offline recorded replay" description: "Reconstruct a terminal run without credentials or effects." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/RECORDED_REPLAY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/RECORDED_REPLAY.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/release-readiness.md b/src/content/docs/_generated/examples/release-readiness.md index 83a9c91..5779429 100644 --- a/src/content/docs/_generated/examples/release-readiness.md +++ b/src/content/docs/_generated/examples/release-readiness.md @@ -1,7 +1,7 @@ --- title: "Release readiness" description: "Combine deterministic gates with bounded analysis." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/RELEASE_READINESS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/RELEASE_READINESS.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/repository-audit.md b/src/content/docs/_generated/examples/repository-audit.md index a4d06f7..bb72714 100644 --- a/src/content/docs/_generated/examples/repository-audit.md +++ b/src/content/docs/_generated/examples/repository-audit.md @@ -1,7 +1,7 @@ --- title: "Repository audit" description: "Bound repository reads and verify the resulting report." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/REPOSITORY_AUDIT.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/REPOSITORY_AUDIT.md" --- ## Problem diff --git a/src/content/docs/_generated/examples/scheduled-review.md b/src/content/docs/_generated/examples/scheduled-review.md index fd97bce..f9fdc81 100644 --- a/src/content/docs/_generated/examples/scheduled-review.md +++ b/src/content/docs/_generated/examples/scheduled-review.md @@ -1,7 +1,7 @@ --- title: "Scheduled operational review" description: "Produce durable state and artifacts from an external schedule." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/use-cases/SCHEDULED_REVIEW.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/use-cases/SCHEDULED_REVIEW.md" --- ## Problem diff --git a/src/content/docs/_generated/getting-started/first-agent.md b/src/content/docs/_generated/getting-started/first-agent.md index a5e0c71..526a9c1 100644 --- a/src/content/docs/_generated/getting-started/first-agent.md +++ b/src/content/docs/_generated/getting-started/first-agent.md @@ -1,7 +1,7 @@ --- title: "First agent workflow" description: "Run a bounded tool-using agent without a paid API key." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/FIRST_AGENT_WORKFLOW.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/FIRST_AGENT_WORKFLOW.md" --- You will run a tool-using agent with the deterministic fake provider. The model path is scripted, but the workflow exercises the real compiler, agent loop, tool policy, tool schemas, effect ledger, SQLite store, assertion, and artifact writer. diff --git a/src/content/docs/_generated/getting-started/index.md b/src/content/docs/_generated/getting-started/index.md index 86dc665..373dac8 100644 --- a/src/content/docs/_generated/getting-started/index.md +++ b/src/content/docs/_generated/getting-started/index.md @@ -1,7 +1,7 @@ --- title: "Getting started" description: "Run and inspect a credential-free deterministic workflow." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/GETTING_STARTED.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/GETTING_STARTED.md" --- You will validate, plan, run, and inspect a credential-free workflow from a clean directory. The run performs one deterministic assignment, persists its history to SQLite, and returns a typed output. diff --git a/src/content/docs/_generated/getting-started/installation.md b/src/content/docs/_generated/getting-started/installation.md index 62114ec..8d59fe2 100644 --- a/src/content/docs/_generated/getting-started/installation.md +++ b/src/content/docs/_generated/getting-started/installation.md @@ -1,7 +1,7 @@ --- title: "Installation" description: "Install the CLI or container image and select reproducible source and artifact identities." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/INSTALLATION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/INSTALLATION.md" --- Choose a published CLI package, a container image, or an exact-source build. Use the same source and artifacts when reproducing a workflow. `agentctl.dev/v1` identifies @@ -48,10 +48,10 @@ needs no provider key. The documentation site renders the exact source revision and copyable command here: -This documentation describes source [`bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2`](https://github.com/opensourceops/agentctl/tree/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2). Install this exact source revision: +This documentation describes source [`7dee64e1d1b6fd38c1883d0d235d712590c30fbe`](https://github.com/opensourceops/agentctl/tree/7dee64e1d1b6fd38c1883d0d235d712590c30fbe). Install this exact source revision: ```sh -cargo install --locked --git https://github.com/opensourceops/agentctl --rev bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2 agentctl-cli +cargo install --locked --git https://github.com/opensourceops/agentctl --rev 7dee64e1d1b6fd38c1883d0d235d712590c30fbe agentctl-cli agentctl version ``` diff --git a/src/content/docs/_generated/guides/ci-cd.md b/src/content/docs/_generated/guides/ci-cd.md index af2454f..7deca14 100644 --- a/src/content/docs/_generated/guides/ci-cd.md +++ b/src/content/docs/_generated/guides/ci-cd.md @@ -1,7 +1,7 @@ --- title: "CI/CD integration" description: "Use the generic OCI contract in pipelines and Kubernetes." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/CI_CD.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/CI_CD.md" --- The CI system checks out source, schedules work, selects a reviewed image, injects secrets and retains results. agentctl validates and executes one bounded workflow with durable local history. A model can propose a change only through its declared tools; the outer pipeline remains responsible for build, scan and publication authority. diff --git a/src/content/docs/_generated/guides/container.md b/src/content/docs/_generated/guides/container.md index 7a32a8e..de1722a 100644 --- a/src/content/docs/_generated/guides/container.md +++ b/src/content/docs/_generated/guides/container.md @@ -1,7 +1,7 @@ --- title: "Container guide" description: "Run the non-root, read-only OCI image with durable mounts." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/CONTAINER.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/CONTAINER.md" --- Use the minimal image for workflows implemented by the Rust runtime. Use the tooling image when a reviewed process adapter needs Python or Git, or a CI Run step needs a shell. Both run as UID/GID 65532 by default and have `/usr/local/bin/agentctl` as their entrypoint. @@ -32,7 +32,7 @@ Appending a shell command after the image name without `--entrypoint /bin/sh` pa The default final build target is minimal. The [release process](/agentctl/contributing/release/) records supported platforms, source relationships, checksums and image digests. A tooling image permits more executables to exist; the workflow must still explicitly authorize each process action. Allowing Python or a shell grants the capabilities of that interpreter to the reviewed script; it is not a file-level sandbox. -This whole-workflow container is separate from action-level `isolation: container`, where a host agentctl process invokes an exact local Docker/Podman image with restricted mounts, resources and networking. Neither image includes an engine, and the following walkthrough mounts no engine socket. See [Process isolation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/PROCESS_ISOLATION.md). +This whole-workflow container is separate from action-level `isolation: container`, where a host agentctl process invokes an exact local Docker/Podman image with restricted mounts, resources and networking. Neither image includes an engine, and the following walkthrough mounts no engine socket. See [Process isolation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/PROCESS_ISOLATION.md). ## Run your first image workflow @@ -152,7 +152,7 @@ To clean up this disposable walkthrough, remove its `agentctl-container-first-ru Use `--inputs-file /workspace/config/inputs.json` or repeated `--input KEY=VALUE` for typed `inputs`. Use ordered `--vars-file /workspace/config/overrides.yaml` and explicit `--var KEY=JSON` for `vars`. The namespaces stay separate. `explain` reports winning variable origins without printing their values. Instruction files are reviewed text, not credentials. Ordinary variables are retained configuration and must not contain keys or tokens. -A model-dependent workflow may receive `--env OPENAI_API_KEY` from a protected host environment or a read-only secret file. Forward only the name, never a literal value in the command. Remove `--network none` only for a reviewed network-enabled run, retain the workflow's destination policy, and apply the platform's egress controls. A credential does not grant network authority. [Secret references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md) gives the mounted-file contract. +A model-dependent workflow may receive `--env OPENAI_API_KEY` from a protected host environment or a read-only secret file. Forward only the name, never a literal value in the command. Remove `--network none` only for a reviewed network-enabled run, retain the workflow's destination policy, and apply the platform's egress controls. A credential does not grant network authority. [Secret references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md) gives the mounted-file contract. ## Pipeline examples @@ -278,7 +278,7 @@ spec: The adapter adds the bundle to rustls in memory. The bundle is not copied into SQLite, effects, traces, or artifact storage. Invalid, empty, private-key, or mixed-object PEM input fails before dispatch. See [Network -policy](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/NETWORK_POLICY.md). +policy](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/NETWORK_POLICY.md). ## Validation level diff --git a/src/content/docs/_generated/guides/local-operation.md b/src/content/docs/_generated/guides/local-operation.md index 9e337e4..9ac061f 100644 --- a/src/content/docs/_generated/guides/local-operation.md +++ b/src/content/docs/_generated/guides/local-operation.md @@ -1,7 +1,7 @@ --- title: "Local operation" description: "Manage paths, state, outputs, interruption, recovery, and retention." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/LOCAL_OPERATION.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/LOCAL_OPERATION.md" --- Use explicit paths and retain the database whenever you may need inspection, approval, resume, replay, repair, or audit evidence. diff --git a/src/content/docs/_generated/guides/selective-repair.md b/src/content/docs/_generated/guides/selective-repair.md index 6cbabb4..bedff9e 100644 --- a/src/content/docs/_generated/guides/selective-repair.md +++ b/src/content/docs/_generated/guides/selective-repair.md @@ -1,13 +1,13 @@ --- title: "Repair a failed workflow" description: "Reuse compatible upstream results and safely execute a corrected suffix." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/repair-a-failed-workflow.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/repair-a-failed-workflow.md" --- Suppose `analyze` and `publish` are agent tasks. `analyze` succeeded and stored validated JSON. `publish` called its read-only tool but failed because its turn limit was too small. You corrected only `publish`. Do not resume the failed terminal run. Resume continues the same non-terminal run with the same compiled definition. Do not replay it to execute the fix. Recorded replay copies terminal recorded results and emits no fresh effects. Use repair to create a linked run that reuses compatible `analyze` data and executes `publish` plus its descendants from the corrected workflow. -The runnable example is in [`examples/selective-repair-openai/`](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/selective-repair-openai/README.md). +The runnable example is in [`examples/selective-repair-openai/`](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/selective-repair-openai/README.md). ## 1. Understand the failed source @@ -156,7 +156,7 @@ agentctl effects --db .agentctl/runtime.db reconcile EFFECT_ID \ --actor operator-name ``` -Use `--status applied --result-file result.json` when the effect happened and resume needs its externally confirmed result. Use `--status compensated --compensation-effect EFFECT_ID` only after a distinct compensation effect is confirmed. There is no generic force option and no exactly-once claim. An applied non-idempotent effect stays blocked from duplicate fresh execution until it has a valid compensation record. Normal policy, approval, timeout, retry, and cancellation behavior applies to every fresh task. See [Effect reconciliation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/EFFECT_RECONCILIATION.md). +Use `--status applied --result-file result.json` when the effect happened and resume needs its externally confirmed result. Use `--status compensated --compensation-effect EFFECT_ID` only after a distinct compensation effect is confirmed. There is no generic force option and no exactly-once claim. An applied non-idempotent effect stays blocked from duplicate fresh execution until it has a valid compensation record. Normal policy, approval, timeout, retry, and cancellation behavior applies to every fresh task. See [Effect reconciliation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/EFFECT_RECONCILIATION.md). A repaired agent begins a new provider session. It receives target instructions and tools plus validated upstream output and reconstructed memory. It never @@ -196,4 +196,4 @@ Recorded replay has a new replay run ID but the same semantic outputs. It dispat | `new_task_outside_repair_closure` | A new unrelated task has no result. | Add it as a root or choose an earlier common boundary. | | `unreconciled_effect` | Fresh execution may duplicate a mutation. | Inspect and reconcile external reality first. | -Use [`agentctl retry`](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/TERMINAL_RETRY.md) instead when the workflow definition is unchanged and the intent is to rerun failed or explicitly selected boundaries of a terminal source. Use repair for a corrected definition and fork for a broader intentionally fresh execution. +Use [`agentctl retry`](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/TERMINAL_RETRY.md) instead when the workflow definition is unchanged and the intent is to rerun failed or explicitly selected boundaries of a terminal source. Use repair for a corrected definition and fork for a broader intentionally fresh execution. diff --git a/src/content/docs/_generated/guides/variables.md b/src/content/docs/_generated/guides/variables.md index a2870f2..40b07dc 100644 --- a/src/content/docs/_generated/guides/variables.md +++ b/src/content/docs/_generated/guides/variables.md @@ -1,7 +1,7 @@ --- title: "Variables and instruction files" description: "Resolve ordered variables, instruction templates, read policy, and captured recovery inputs." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/VARIABLES.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/VARIABLES.md" --- Use `varsFiles` for ordinary configuration shared across workflow tasks, agent defaults, and task overrides. Use `instructionsFile` for an agent's reviewed instruction text. Both are captured configuration inputs; they grant no filesystem, process, network, tool, or approval authority. @@ -47,7 +47,7 @@ An ordinary object such as `{file: report.txt}` or `{env: REGION}` remains data; Variable values are data, not recursively evaluated expressions. A string that contains template syntax does not trigger another expansion pass after it is selected by a template. Put template expressions in the consuming task fields or instruction text. -Do not put credentials, tokens, or confidential secret material in ordinary variables or CLI flags. Use dedicated [secret references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md). Variable values can enter prompts, task outputs, artifacts, and retained execution state. [Sensitive-state encryption](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SENSITIVE_STATE_ENCRYPTION.md) protects selected persisted fields when configured; it does not turn an ordinary variable file into a secret reference. +Do not put credentials, tokens, or confidential secret material in ordinary variables or CLI flags. Use dedicated [secret references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md). Variable values can enter prompts, task outputs, artifacts, and retained execution state. [Sensitive-state encryption](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SENSITIVE_STATE_ENCRYPTION.md) protects selected persisted fields when configured; it does not turn an ordinary variable file into a secret reference. ## A credential-free example diff --git a/src/content/docs/_generated/guides/workflow-authoring.md b/src/content/docs/_generated/guides/workflow-authoring.md index 0d1d3a1..4072109 100644 --- a/src/content/docs/_generated/guides/workflow-authoring.md +++ b/src/content/docs/_generated/guides/workflow-authoring.md @@ -1,7 +1,7 @@ --- title: "Author workflows" description: "Learn workflow YAML in execution order." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/WORKFLOW_AUTHORING.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/WORKFLOW_AUTHORING.md" --- This guide teaches the YAML model in the order you need it. The generated JSON Schema is the field authority, but start with the execution model rather than the schema dump. diff --git a/src/content/docs/_generated/observability/index.md b/src/content/docs/_generated/observability/index.md index 87cf799..9b2eb91 100644 --- a/src/content/docs/_generated/observability/index.md +++ b/src/content/docs/_generated/observability/index.md @@ -1,7 +1,7 @@ --- title: "Logs and observability" description: "Correlate CLI output, audit events, traces, and usage metrics." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/OBSERVABILITY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/OBSERVABILITY.md" --- Observability has two audiences: terminal users need a concise final result, while operators need durable evidence for diagnosis and audit. The runtime keeps those contracts separate. diff --git a/src/content/docs/_generated/operations/scheduled.md b/src/content/docs/_generated/operations/scheduled.md index 2f305a6..a8defe5 100644 --- a/src/content/docs/_generated/operations/scheduled.md +++ b/src/content/docs/_generated/operations/scheduled.md @@ -1,7 +1,7 @@ --- title: "Scheduled execution" description: "Use cron, systemd, or Kubernetes as the external scheduler." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/OPERATIONS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/OPERATIONS.md" --- Scheduling belongs to the external platform. `agentctl` owns deterministic execution, SQLite history, overlap-safe database access, effects, outputs, recovery, and diagnostics; it does not own clocks, calendars, leader election, log rotation, or distributed leases. diff --git a/src/content/docs/_generated/providers/a2a.md b/src/content/docs/_generated/providers/a2a.md index c698fb7..90cecc7 100644 --- a/src/content/docs/_generated/providers/a2a.md +++ b/src/content/docs/_generated/providers/a2a.md @@ -1,7 +1,7 @@ --- title: "A2A" description: "Delegate bounded work to pinned A2A peers." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/A2A.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/A2A.md" --- The client pins [A2A `1.0`](https://a2a-protocol.org/latest/specification/) and discovers an Agent Card. It selects a same-origin JSON-RPC interface advertising version `1.0`, then supports `SendMessage`, bounded `GetTask` polling, `SubscribeToTask` SSE updates, `CancelTask`, terminal states, messages, structured parts, and artifacts. diff --git a/src/content/docs/_generated/providers/index.md b/src/content/docs/_generated/providers/index.md index 3eb8683..c7cf9cd 100644 --- a/src/content/docs/_generated/providers/index.md +++ b/src/content/docs/_generated/providers/index.md @@ -1,14 +1,14 @@ --- title: "Providers" description: "Compare native adapters, capabilities, authentication, and evidence levels." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/PROVIDERS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/PROVIDERS.md" --- The core defines provider-neutral messages, text/reasoning/tool content, strict tool schemas, tool calls/results, finish reasons, usage, and opaque continuation. The compiler compares each agent’s requested structured output, tools, reasoning, cache, and continuation needs with typed provider capabilities. | Kind | Native API | Implemented behavior | Credential default | | --- | --- | --- | --- | | `fake` | in-process scripted provider | deterministic echo/script, tool path, usage, typed streaming | none | -| `openai` | Responses API | Explicit compatible model; strict function tools and structured output; multiple call IDs; stored and stateless continuation; reasoning effort/mode/context; prompt-cache mode/TTL; input/output/reasoning/cache metrics; typed SSE streaming | `OPENAI_API_KEY` | +| `openai` | Responses API | Explicit compatible model; function tools with strict generation by default and strict structured output; multiple call IDs; stored and stateless continuation; reasoning effort/mode/context; prompt-cache mode/TTL; input/output/reasoning/cache metrics; typed SSE streaming | `OPENAI_API_KEY` | | `azure_openai` | Azure `/openai/v1/responses?api-version=v1` | OpenAI mapping and SSE with Azure `api-key`; explicit endpoint required | `AZURE_OPENAI_API_KEY` | | `anthropic` | Messages API | native content/tool/thinking blocks, structured output instruction, usage and stop mapping | `ANTHROPIC_API_KEY` | | `google` | Gemini `generateContent` | native contents/function declarations/calls/results, thought-signature continuation, response schema, token usage | `GEMINI_API_KEY` | @@ -19,7 +19,7 @@ answer to prevent resolution drift. Private addresses and environment proxies are denied by default. Redirects and Unix-socket transports are disabled. Response bytes and DNS/connect time are bounded, composed with the provider task timeout and the adapter's lower hard limit. See [Network -policy](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/NETWORK_POLICY.md). +policy](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/NETWORK_POLICY.md). Credentials and configured headers accept environment, mounted-file, or policy-gated process references. Provider credentials in the fresh execution closure are preflighted before a new run record or effect; custom headers @@ -27,7 +27,7 @@ resolve while building a required adapter. Standard authentication headers override custom headers. Successful/error response JSON keys and values plus provider request IDs are scrubbed of configured secrets before parsing or persistence. Calls honor timeout and -cancellation. See [Secret references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md). +cancellation. See [Secret references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md). `agentctl providers inspect ` reports declared capabilities without calling a service. OpenAI has the broadest mock request/response/tool/usage/error coverage. Azure OpenAI, Anthropic, and Google have native mapping and focused mock-protocol coverage at the maturity shown below; normal tests have no credentials. Live provider workflows are opt-in: historical examples end in `-live.yaml`, while the four DevOps variants use `openai.workflow.yaml`. @@ -72,10 +72,27 @@ dispatch, reconcile complete durable usage, and retain uncertain reservations. Unknown accounting fails the gate even if the child CLI returned success. Reviewed price schedules are versioned operator inputs. Unpriced model selections fail closed; estimates are not invoices. See the [current execution -ledger](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/execution/AUTONOMOUS_LAUNCH_READINESS.md) for actual live results and +ledger](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/execution/AUTONOMOUS_LAUNCH_READINESS.md) for actual live results and usage, rather than treating earlier GPT-5.6 evidence as a new-source result. -OpenAI provider options are an allowlisted map (`store`, `reasoningContext`, `promptCacheMode`, `promptCacheTtl`, `parallelToolCalls`, and `safetyIdentifier`). Unknown options or invalid values fail compilation. Tool-using OpenAI and Azure OpenAI agents may set `store: false`; the adapter requests encrypted reasoning content and replays the complete ordered response-item and function-output history. `stream: true` selects typed Responses SSE for fake, OpenAI, and Azure OpenAI agents. Anthropic and Google streaming fail capability negotiation. Programmatic tool calling remains unsupported and fails rather than being ignored. Parallel function calls are parsed and correlated, but one agent task executes them serially in response order. Independent workflow tasks can use bounded parallel scheduling. +OpenAI provider options are an allowlisted map (`store`, `reasoningContext`, `promptCacheMode`, `promptCacheTtl`, `parallelToolCalls`, `toolStrict`, and `safetyIdentifier`). Unknown options or invalid values fail compilation. Tool-using OpenAI and Azure OpenAI agents may set `store: false`; the adapter requests encrypted reasoning content and replays the complete ordered response-item and function-output history. `stream: true` selects typed Responses SSE for fake, OpenAI, and Azure OpenAI agents. Anthropic and Google streaming fail capability negotiation. Programmatic tool calling remains unsupported and fails rather than being ignored. Parallel function calls are parsed and correlated, but one agent task executes them serially in response order. Independent workflow tasks can use bounded parallel scheduling. + +`providerOptions.toolStrict` is a boolean for OpenAI and Azure OpenAI agents and +defaults to `true`. Setting it to `false` explicitly selects the API's +[best-effort function generation](https://developers.openai.com/api/docs/guides/function-calling#strict-mode) +when strict generation is unsuitable for a reviewed tool schema. The complete +tool parameters still go to the provider. Runtime validation still checks every +returned input against that same schema before creating or dispatching its tool +effect, and existing policy and approval checks still apply. Invalid inputs fail +the task; this option does not add an automatic repair loop. The final +`structuredOutput` schema continues to use `text.format.strict: true`. + +The option is captured in the stored workflow and each model request. Changing +it changes workflow and model-effect identities and the affected task's recovery +fingerprint. Resume and recorded replay retain the original choice. An explicit +repair may rerun the changed task in a new provider session while preserving +compatible, unaffected task results. Provider generation settings grant no tool +or filesystem authority. ## Stateful and stateless continuation @@ -107,7 +124,7 @@ capability negotiation. Token-only run budgets remain enforceable from native usage without pricing. Retry is limited to explicit task bounds and definitive retryable HTTP responses. Timeout, cancellation, or a transport loss after dispatch is considered ambiguous and is not automatically reissued. See -[Resource and cost budgets](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/RESOURCE_BUDGETS.md). +[Resource and cost budgets](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/RESOURCE_BUDGETS.md). OpenAI responses must include nonnegative integer `input_tokens` and `output_tokens` usage counters. Missing or malformed required counters leave the @@ -132,4 +149,4 @@ never captured. Replay continues to use recorded evidence without a provider cal Streaming persists each accepted fragment before reading more transport data. Records are bounded and redacted, while the terminal response still follows the normal validation path. See [Durable provider -streaming](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/DURABLE_STREAMING.md). +streaming](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/DURABLE_STREAMING.md). diff --git a/src/content/docs/_generated/providers/mcp.md b/src/content/docs/_generated/providers/mcp.md index 310b508..5fcc96b 100644 --- a/src/content/docs/_generated/providers/mcp.md +++ b/src/content/docs/_generated/providers/mcp.md @@ -1,7 +1,7 @@ --- title: "MCP" description: "Use pinned MCP Streamable HTTP tools under explicit policy." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/MCP.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/MCP.md" --- The client pins the stable MCP protocol version `2025-11-25` from the [official specification](https://modelcontextprotocol.io/specification/2025-11-25). It uses Streamable HTTP JSON-RPC and implements initialization/version negotiation, initialized notification, session IDs, protocol headers, tool listing, input/output schemas, tool calls, structured content, bounded SSE response parsing, timeout, and best-effort cancellation notification. diff --git a/src/content/docs/_generated/reference/capabilities.md b/src/content/docs/_generated/reference/capabilities.md index 5e51797..d99d869 100644 --- a/src/content/docs/_generated/reference/capabilities.md +++ b/src/content/docs/_generated/reference/capabilities.md @@ -1,7 +1,7 @@ --- title: "Capability matrices" description: "Provider and tool capabilities with exact evidence levels." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/MATRICES.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/MATRICES.md" --- ## Provider capabilities and evidence diff --git a/src/content/docs/_generated/reference/cli.md b/src/content/docs/_generated/reference/cli.md index f8edc1a..f0c9756 100644 --- a/src/content/docs/_generated/reference/cli.md +++ b/src/content/docs/_generated/reference/cli.md @@ -1,7 +1,7 @@ --- title: "CLI reference" description: "Generated command and flag reference for the current Rust CLI." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/generated/CLI.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/generated/CLI.md" --- Generated from the Rust CLI by `cargo xtask generate`. Do not edit by hand. diff --git a/src/content/docs/_generated/reference/compatibility.md b/src/content/docs/_generated/reference/compatibility.md index 71eb5a9..0aeafcd 100644 --- a/src/content/docs/_generated/reference/compatibility.md +++ b/src/content/docs/_generated/reference/compatibility.md @@ -1,7 +1,7 @@ --- title: "Compatibility" description: "Preserved, migrated, changed, removed, and explicit non-goal contracts." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/COMPATIBILITY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/COMPATIBILITY.md" --- ## Preserved @@ -34,11 +34,11 @@ Unversioned YAML is compatibility-only and warns. The TypeScript package exposes Tool-level `compensation` metadata was never executable and is rejected. Declare an effectful inverse action on each source task with `compensate`; see -[Compensation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/COMPENSATION.md). +[Compensation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/COMPENSATION.md). Free-form `team:` orchestration is rejected. Convert each role to an explicit agent task and each payload transfer to a typed handoff task; see -[Structured role handoffs](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/STRUCTURED_HANDOFFS.md). +[Structured role handoffs](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/STRUCTURED_HANDOFFS.md). Legacy exact local pack references remain readable and warn until `agentctl packs lock` writes `agentctl.pack.lock`. Convert `path` and diff --git a/src/content/docs/_generated/reference/database.md b/src/content/docs/_generated/reference/database.md index 9583adc..742aca5 100644 --- a/src/content/docs/_generated/reference/database.md +++ b/src/content/docs/_generated/reference/database.md @@ -1,7 +1,7 @@ --- title: "Database and migrations" description: "SQLite records, schema migration, locking, backup, and retention." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/DATABASE.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/DATABASE.md" --- The local SQLite database and its sibling artifact root are history and part of the correctness boundary. The current database schema version is `15`. diff --git a/src/content/docs/_generated/reference/environment.md b/src/content/docs/_generated/reference/environment.md index 82d8f0d..835945b 100644 --- a/src/content/docs/_generated/reference/environment.md +++ b/src/content/docs/_generated/reference/environment.md @@ -1,7 +1,7 @@ --- title: "Environment and paths" description: "Credential references, repository variables, and default paths." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/ENVIRONMENT_AND_PATHS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/ENVIRONMENT_AND_PATHS.md" --- ## Provider credentials @@ -18,7 +18,7 @@ another valid environment reference or use a mounted-file or policy-gated process reference. Primary provider credential environment names do not require a duplicate environment allowlist entry; custom headers and action environment values do. Values never belong in YAML, CLI arguments, ordinary inputs, logs, -or committed fixtures. See [Secret references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md). +or committed fixtures. See [Secret references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md). ## State-encryption keys diff --git a/src/content/docs/_generated/reference/limitations.md b/src/content/docs/_generated/reference/limitations.md index 5db2ef2..bb17f29 100644 --- a/src/content/docs/_generated/reference/limitations.md +++ b/src/content/docs/_generated/reference/limitations.md @@ -1,7 +1,7 @@ --- title: "Limitations" description: "Current supported boundary, operational limits, and non-goals." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/LIMITATIONS.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/LIMITATIONS.md" --- These boundaries are part of the product contract. Choose an execution environment, provider and recovery strategy that satisfy your workflow's requirements. Features @@ -155,15 +155,15 @@ These are extension points, not incomplete core runtime behavior: - Terminal retry requires an identical workflow digest and a terminal source. It creates a new source-linked run, reuses only proven compatible successful boundaries, and freshly executes the selected closure. Use repair for a changed definition, resume for a non-terminal run, replay for effect-free reconstruction, and fork for knowingly broad fresh execution. - Anthropic, Google, Azure OpenAI, MCP, and A2A have native adapters and mock coverage; an OpenAI credential does not provide live evidence for those - services. The [retained GPT-5.6 matrix](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/execution/LIVE_FRAMEWORK_VERIFICATION.md) + services. The [retained GPT-5.6 matrix](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/execution/LIVE_FRAMEWORK_VERIFICATION.md) records its July 2026 scenarios and usage. Current model IDs, requests, tokens, estimated cost, and final-source results must come from the current execution ledger, not that historical matrix. - The DevOps catalog labels deterministic/fake-provider workflows, isolated local services, and opt-in OpenAI variants separately. Its Terraform, Kubernetes, canary, and deployment fixtures do not establish live cloud or - production deployment coverage. See the [suite catalog](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/catalog.json) - and its [validation evidence](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/examples/devops/validation.json). + production deployment coverage. See the [suite catalog](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/catalog.json) + and its [validation evidence](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/examples/devops/validation.json). - Local Linux arm64 OCI evidence and hosted Linux x64 container, vulnerability, and image-SBOM evidence are distinct. Each result applies only to its recorded source, image digest, runtime, and architecture. diff --git a/src/content/docs/_generated/reference/migration.md b/src/content/docs/_generated/reference/migration.md index ef3f2a8..2d841b4 100644 --- a/src/content/docs/_generated/reference/migration.md +++ b/src/content/docs/_generated/reference/migration.md @@ -1,7 +1,7 @@ --- title: "Migrate from TypeScript" description: "Translate supported legacy workflows to strict workflow API v1 YAML." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/MIGRATING_FROM_TYPESCRIPT.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/MIGRATING_FROM_TYPESCRIPT.md" --- 1. Preserve a copy of the old workflow and run the archived test suite if its behavior matters: `NODE_OPTIONS=--no-deprecation npm test`. 2. Run `cargo run -p agentctl-cli -- migrate old.yaml --write workflow.yaml`. diff --git a/src/content/docs/_generated/reference/output.md b/src/content/docs/_generated/reference/output.md index f2f96a7..5c7bb05 100644 --- a/src/content/docs/_generated/reference/output.md +++ b/src/content/docs/_generated/reference/output.md @@ -1,7 +1,7 @@ --- title: "Output and exit codes" description: "Versioned machine output, streams, and stable exit categories." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/CLI_OUTPUT.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/CLI_OUTPUT.md" --- The [generated CLI reference](/agentctl/reference/cli/) is produced from Clap help by `cargo xtask generate`. This page explains the stable process contract used by scripts and CI. diff --git a/src/content/docs/_generated/reference/terminology.md b/src/content/docs/_generated/reference/terminology.md index 05f695d..a1dabbe 100644 --- a/src/content/docs/_generated/reference/terminology.md +++ b/src/content/docs/_generated/reference/terminology.md @@ -1,7 +1,7 @@ --- title: "Terminology" description: "Use workflow, task, effect, resume, replay, retry, and fork precisely." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/TERMINOLOGY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/TERMINOLOGY.md" --- Use these terms consistently in workflows, documentation, issues, and reviews. diff --git a/src/content/docs/_generated/reference/yaml.md b/src/content/docs/_generated/reference/yaml.md index ebbb8b5..8152940 100644 --- a/src/content/docs/_generated/reference/yaml.md +++ b/src/content/docs/_generated/reference/yaml.md @@ -1,7 +1,7 @@ --- title: "YAML reference" description: "Readable field groups, defaults, validation, and examples." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/reference/YAML.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/reference/YAML.md" --- The generated [workflow JSON Schema](/agentctl/downloads/workflow.schema.json) is authoritative. This page explains the field groups, defaults, and validation behavior that matter when writing YAML. @@ -62,7 +62,7 @@ Required provider, MCP, and A2A URLs are checked before a run record is created. Agentctl resolves the destination, rejects the complete answer if any address is forbidden, and pins all accepted addresses into the direct client. Redirects and Unix-socket transports are disabled. See [Network -policy](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/NETWORK_POLICY.md). +policy](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/NETWORK_POLICY.md). ## Tasks @@ -90,7 +90,7 @@ Each task requires `id` and `uses`. `uses` is `action:name`, `agent:name`, `extension.process` actions require `protocolVersion: agentctl.dev/process-extension/v1`, explicit idempotency, input and output JSON Schemas, a declared capability list, direct command/args, -and bounded process limits. See [Extensions](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/EXTENSIONS.md). +and bounded process limits. See [Extensions](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/EXTENSIONS.md). Ready tasks are selected in YAML declaration order up to `maxConcurrency`. They read isolated durable snapshots and commit in compiled order. There is no @@ -133,7 +133,7 @@ Capability negotiation happens during compilation. A provider must explicitly su `runtime.pricing.models` entry for every cost-limited `provider/model`. Input and output rates are integer micro-US-dollars per million tokens. Optional reasoning and cache rates fall back to output and input rates. See -[Resource and cost budgets](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/RESOURCE_BUDGETS.md). +[Resource and cost budgets](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/RESOURCE_BUDGETS.md). ## Actions @@ -170,7 +170,7 @@ means bounded host execution, not sandboxing. `container` requires a Container mode fixes a read-only root and workspace mount, non-root user, network none, dropped capabilities, `no-new-privileges`, bounded `/tmp`, and direct entrypoint/arguments. The compiled plan exposes process requirements. -See [Process isolation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/PROCESS_ISOLATION.md). +See [Process isolation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/PROCESS_ISOLATION.md). `mcp.call` accepts an optional `idempotency` declaration. Only `pure`, `idempotent`, or `keyed` permits the bounded reconnect path, and a refreshed @@ -220,7 +220,7 @@ Provider credentials, action environment values, and protocol headers use The source description is stored in the workflow, but the value is resolved only at the execution boundary. File and process sources require explicit `secretFileRoots` or `secretProcessAllowlist` policy. See -[Secret references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md). +[Secret references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md). ## Example and validation @@ -233,10 +233,10 @@ agentctl run examples/v1/dataflow.yaml --db /tmp/dataflow.db --output json --col ``` Related guides: [Workflow authoring](/agentctl/guides/workflow-authoring/), [Matrix -and foreach](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/MATRIX_AND_FOREACH.md), [Conditions and -routers](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/CONDITIONS_AND_ROUTERS.md), [Bounded -loops](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/BOUNDED_LOOPS.md), [Reusable -sub-workflows](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SUB_WORKFLOWS.md), -[Compensation](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/COMPENSATION.md), [Secret -references](https://github.com/opensourceops/agentctl/blob/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/SECRET_REFERENCES.md), [Policies](/agentctl/concepts/policies/), +and foreach](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/MATRIX_AND_FOREACH.md), [Conditions and +routers](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/CONDITIONS_AND_ROUTERS.md), [Bounded +loops](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/BOUNDED_LOOPS.md), [Reusable +sub-workflows](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SUB_WORKFLOWS.md), +[Compensation](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/COMPENSATION.md), [Secret +references](https://github.com/opensourceops/agentctl/blob/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/SECRET_REFERENCES.md), [Policies](/agentctl/concepts/policies/), [Tools](/agentctl/concepts/tools/), and [Workflow DSL](/agentctl/concepts/workflow-model/). diff --git a/src/content/docs/_generated/security/index.md b/src/content/docs/_generated/security/index.md index 128c31c..5c3f3c2 100644 --- a/src/content/docs/_generated/security/index.md +++ b/src/content/docs/_generated/security/index.md @@ -1,7 +1,7 @@ --- title: "Security model" description: "Review controls, trust boundaries, and residual risks." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/SECURITY.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/SECURITY.md" --- ## Controls diff --git a/src/content/docs/_generated/security/threat-model.md b/src/content/docs/_generated/security/threat-model.md index fbc78d6..aa6344d 100644 --- a/src/content/docs/_generated/security/threat-model.md +++ b/src/content/docs/_generated/security/threat-model.md @@ -1,7 +1,7 @@ --- title: "Threat model" description: "Map assets and threats to controls and residual risk." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/THREAT_MODEL.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/THREAT_MODEL.md" --- ## Assets and boundaries diff --git a/src/content/docs/_generated/troubleshooting/index.md b/src/content/docs/_generated/troubleshooting/index.md index 2050a2e..4d01899 100644 --- a/src/content/docs/_generated/troubleshooting/index.md +++ b/src/content/docs/_generated/troubleshooting/index.md @@ -1,7 +1,7 @@ --- title: "Troubleshooting" description: "Diagnose validation, provider, policy, state, replay, and container failures." -editUrl: "https://github.com/opensourceops/agentctl/edit/bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2/docs/guides/TROUBLESHOOTING.md" +editUrl: "https://github.com/opensourceops/agentctl/edit/7dee64e1d1b6fd38c1883d0d235d712590c30fbe/docs/guides/TROUBLESHOOTING.md" --- Start with the exit code, then inspect the versioned error envelope and durable run state. Do not share provider credentials, complete databases, private prompts, or confidential artifacts in a public issue. diff --git a/src/data/agentctl-source.json b/src/data/agentctl-source.json index 5de400d..fab0670 100644 --- a/src/data/agentctl-source.json +++ b/src/data/agentctl-source.json @@ -2,7 +2,7 @@ "product": "agentctl", "version": "0.4.0", "workflowApi": "agentctl.dev/v1", - "commit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", + "commit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", "dirty": false, "sourceRepository": "https://github.com/opensourceops/agentctl", "importedFiles": 80, @@ -10,402 +10,402 @@ { "source": "docs/PRODUCT.md", "route": "/agentctl/concepts/product/", - "contentSha256": "d380f47c61d558b8eb44977930c15b749e1867a8542d791ef5dd43b0875f3661" + "contentSha256": "0d3791ca142fbf126bba31575f7bd3201ba608a3b9f0ee618f40e821340b2849" }, { "source": "docs/DSL.md", "route": "/agentctl/concepts/workflow-model/", - "contentSha256": "302cd4931a1cef691f6465c93d7d4c4ceba9ee360e9491464795a9ba41a3219d" + "contentSha256": "453d933c3c846ac3968ddf8116f3e03009e2d28007d7658048c5aace186dbd35" }, { "source": "docs/VARIABLES.md", "route": "/agentctl/guides/variables/", - "contentSha256": "772a22ea28d602350e617a3c37931624ac84cea220ae9a4b629343b0075432f2" + "contentSha256": "e57992ec794a3fa9e6ec1328bd71d78fd51031aa776b52e40367e63c5c79ff83" }, { "source": "docs/policies.md", "route": "/agentctl/concepts/policies/", - "contentSha256": "8feaf49c909199db26c3b4dc2788e03b5c5b90567e7586494585ffe423eaee33" + "contentSha256": "1a67cd1bbef46be95d798ac78c43ccd33d8e9f2dc0f6b572e95c561c84f44489" }, { "source": "docs/TOOLS.md", "route": "/agentctl/concepts/tools/", - "contentSha256": "e523686aec13a51af3913d79b5b21f67222496c2ea9fec73ed1654aa1cbfc28b" + "contentSha256": "8ce37cfc3ad4a3d87d1d9ac4c8c1e0f582dd364a47ad1bfbc416be9b4a039f1e" }, { "source": "docs/memory.md", "route": "/agentctl/concepts/memory/", - "contentSha256": "8598101a61478239df581201cbf566a60a3bede0fb2c5f89fb4694828a0b9272" + "contentSha256": "e161523e4536ec02d9d6698017309603528db88073ccfd8be3705bee8abd20ee" }, { "source": "docs/PACKS.md", "route": "/agentctl/concepts/packs/", - "contentSha256": "f71691297e85bd56b62de28127a5bfb86c028ad3ff3493ce0c05d6d2503f6304" + "contentSha256": "fdaaed35671d6ab99d6e0c32cfdf76c91a44eabcb7631aeafd620d1c76aff404" }, { "source": "docs/guides/INSTALLATION.md", "route": "/agentctl/getting-started/installation/", - "contentSha256": "324b386e777efbcb5212e7aecdcb541063404bc5c203b4afe6f42b8694ceb975" + "contentSha256": "39a771c9f8e7bba2973c50f35f8ea47a9d3e8019b4818cf90af7f17c0d1fdf0c" }, { "source": "docs/guides/GETTING_STARTED.md", "route": "/agentctl/getting-started/", - "contentSha256": "7894932cc94040f471db04e16898c326596dfc037e4cbfb3e7bdb32bf4a1efdb" + "contentSha256": "7e22a7d642d7000dda28e02722ca13e90d2f83e370a551aec0fc180b215bce1b" }, { "source": "docs/guides/FIRST_AGENT_WORKFLOW.md", "route": "/agentctl/getting-started/first-agent/", - "contentSha256": "229e123d402de0e652ce51a751fa2aad463ea627c8012b3ab406ebdd0ccf0b66" + "contentSha256": "8f7ca5b0f75d093864f7ca4ae8be00e16389bc66f5690a8e8bec3e3097e546a0" }, { "source": "docs/guides/WORKFLOW_AUTHORING.md", "route": "/agentctl/guides/workflow-authoring/", - "contentSha256": "670fc0ea1a03a94a218664935e18e5c5996d2155dcf094db8afc12be518e0f7e" + "contentSha256": "bba2a05e17ec72508e9f804f9ca24a970a0e895ee979a3c057ec7f1679241bf7" }, { "source": "docs/guides/LOCAL_OPERATION.md", "route": "/agentctl/guides/local-operation/", - "contentSha256": "cb19fcaf051e8d6002cfa543bea908e8c82bb02f8095daaf32c93ee7ae8faa06" + "contentSha256": "a8e6079df2653f04d0c69d4e4b4cd82774636bea81cebb86ed229d428fe47322" }, { "source": "docs/guides/repair-a-failed-workflow.md", "route": "/agentctl/guides/selective-repair/", - "contentSha256": "18c739a5650af665483e8d9d58726ee21aedb90771ef681bf577a44defb94c0e" + "contentSha256": "05eddaa6a7a5fb46af5e0e064df3d8cca2388b4ceea150e6f4c15f15bbf52be4" }, { "source": "docs/guides/CI_CD.md", "route": "/agentctl/guides/ci-cd/", - "contentSha256": "9ab65a897ccfec4ff1881885c9a91f899085cdf95392a1607f13abaab4bfe4cc" + "contentSha256": "92e4ea3adf2a41bc49fd664c160959926ee275745705c51a02bc0f6741c429d5" }, { "source": "docs/CONTAINER.md", "route": "/agentctl/guides/container/", - "contentSha256": "b4a7fdd2c3a48a624fc3e61e9b5308d8c1cd3c08e0f16a77045e4b37f780f0ad" + "contentSha256": "835ab9bcd31646d05b58e7d3e3a06f3b2ad0ec864f01ad53380f882d1df81768" }, { "source": "docs/OPERATIONS.md", "route": "/agentctl/operations/scheduled/", - "contentSha256": "c71f39187508ff4da53a6f7d84695c16dd439dad32d3896aac348ce0d6bdc4b6" + "contentSha256": "62245a3a1e89aaf8f0dba6a6192401c6df98160589054a3eec78726c9b4aa704" }, { "source": "docs/DURABLE_EXECUTION.md", "route": "/agentctl/durable-execution/", - "contentSha256": "159f47924ce09f324a3cf86d71f5e07f9c95e57bc6489018c1d9fdebce1061cb" + "contentSha256": "32086b37ffa79ca176ebb6917e7bd5f9e78f46d1c2e8890b466ac9ab607393cf" }, { "source": "docs/OBSERVABILITY.md", "route": "/agentctl/observability/", - "contentSha256": "006f1c6b77ce63ced3756865f04411cf536cf2cb37eb2514954c18dc50d87df8" + "contentSha256": "049d1fcf2476220ef1b1f70eb7863ff806b6f85a4f20125dfbad88ff027d3a3c" }, { "source": "docs/PROVIDERS.md", "route": "/agentctl/providers/", - "contentSha256": "a895e0d02c40d69bfc3b832dda87751ac584c1b2c826602846187ef4233ab954" + "contentSha256": "c5ec920e79d51cae0f26d36446cbaf279e3b610533398e08b334ef4bc06ba6c4" }, { "source": "docs/MCP.md", "route": "/agentctl/providers/mcp/", - "contentSha256": "b97dddf936b7e1a81c519f5a38bfb2f94b8eb3efa9dd62b52da2dcf4a22b4002" + "contentSha256": "274b3bec4ca8eb6ed414a485409866a463530f758631acb3671cfd6be4b88289" }, { "source": "docs/A2A.md", "route": "/agentctl/providers/a2a/", - "contentSha256": "188abc577c72a49d938ecbb0bd6b0d3989dc71e5a9d5cf29206a966f00d9ff7c" + "contentSha256": "3f078665a46e96800d107aad09fd35bfeec84dac9fbc257d00bffce9c14fa724" }, { "source": "docs/SECURITY.md", "route": "/agentctl/security/", - "contentSha256": "9371e8aedeeb003b432b815af406ef875d21a43a135353c2b8bd3f7d729398fa" + "contentSha256": "ddeab38588930f91a413b5fa6b2edbe0755a55d69570c990342dd3babf0ec1b7" }, { "source": "docs/THREAT_MODEL.md", "route": "/agentctl/security/threat-model/", - "contentSha256": "e231769d4376c4c75345f99feb65fa4216212fa489f45514e36af9b17567bc3d" + "contentSha256": "90d084443ca8f8c31f9a1922298af746e94698e66c2541b6d6e650e9e3e9e579" }, { "source": "docs/guides/TROUBLESHOOTING.md", "route": "/agentctl/troubleshooting/", - "contentSha256": "14047edeff2cf979fa634d44adab80fa78de66b16bb561c166effcdf0d8d2371" + "contentSha256": "42571082151e5a1150f75ea5e1d12d2f57176a9308da9e36544d1bfc500b852c" }, { "source": "docs/use-cases/REPOSITORY_AUDIT.md", "route": "/agentctl/examples/repository-audit/", - "contentSha256": "797509d51c8e7c6c0629075d5d0849a0365cfceca7e4f3a4aa47f75d6fdbcc20" + "contentSha256": "86856600252ef85f6236484cc167caccc2730e2995b76e7488b00e923f98dd99" }, { "source": "examples/devops/README.md", "route": "/agentctl/examples/devops/", - "contentSha256": "c3155f97ce99e5a0c5cd6d322e71ef0c874a7ab6dda435d6dabf7fdf0851454f" + "contentSha256": "5caaca9c3f0c0e7b94896bc90990786c162555c22acf2aedb46ecae1c880ba14" }, { "source": "examples/devops/01-ci-diagnosis/README.md", "route": "/agentctl/examples/devops/01-ci-diagnosis/", - "contentSha256": "76eecd5f07cff1c8a2864be318daeb2d7a58b160a229552111645843a26cc9a6" + "contentSha256": "ecaaa0e7b2b62379a49f19fd2279369cbd22d51d8c1da6f8bb67e6768e55d1cb" }, { "source": "examples/devops/02-junit-triage/README.md", "route": "/agentctl/examples/devops/02-junit-triage/", - "contentSha256": "e020a7f3e09e2278ee31d888c40feb10bb3d1cc2b538277c7de11464de7ddced" + "contentSha256": "0dc46414589553a598252ef73273ce9c2bbd75ed935d8ace8f83d3f22a8de4b3" }, { "source": "examples/devops/03-pipeline-review/README.md", "route": "/agentctl/examples/devops/03-pipeline-review/", - "contentSha256": "27344bb35c43b4dd6807e42b7d0dc7f9ba149c825f4fc7de0c10bad7bfac6bf7" + "contentSha256": "448062c48d8f25b22d09286478e0049f20975886f9ee2b32f61bbc475f2d8e43" }, { "source": "examples/devops/04-dockerfile-review/README.md", "route": "/agentctl/examples/devops/04-dockerfile-review/", - "contentSha256": "6aa1a508246d8c159330c7937a6ba99a6c3ab7d8402565d13cee910431ee98ca" + "contentSha256": "3e1670980ce2c0c49c72350a0fb37d811f3ea92dea680ff85d350fe8567e7068" }, { "source": "examples/devops/05-kubernetes-review/README.md", "route": "/agentctl/examples/devops/05-kubernetes-review/", - "contentSha256": "c59292ad2618d2a1c123853067bdb30bb5ea9e369929d1736b184b2d4c30b0ac" + "contentSha256": "144b2014a3c1cb86669f11a96b0af824357b4bd47576fe4e66251693429f14f5" }, { "source": "examples/devops/06-terraform-plan/README.md", "route": "/agentctl/examples/devops/06-terraform-plan/", - "contentSha256": "85d1c735bf69581323fd59bcf485295b0e9e0eb6ddeba3f7b7a1957bd4c8547b" + "contentSha256": "4dbd75f1c30ad6d34e205ed28c2680e70bf324d4046fbbc389fc8c1317350f39" }, { "source": "examples/devops/07-dependency-update/README.md", "route": "/agentctl/examples/devops/07-dependency-update/", - "contentSha256": "12dc3acfb1e618f030418e2badd3be69636d1219f6f60cda1adcf2b3ded7cffe" + "contentSha256": "c880822a0cca184bd71817d0d3d1969ba0e2547d335b60413e3f340a83721ee6" }, { "source": "examples/devops/08-sbom-triage/README.md", "route": "/agentctl/examples/devops/08-sbom-triage/", - "contentSha256": "5be3101fbaf223da865774d35a914046b80a7f72a76d723a8fbff2a3909ebc59" + "contentSha256": "e5986f18da411aa104e5f7463ea44f50cc9d1abf436f31b7f612e8918e4459d1" }, { "source": "examples/devops/09-release-notes/README.md", "route": "/agentctl/examples/devops/09-release-notes/", - "contentSha256": "5898fb6da9e9b9e2c87c453f19e6442f3972fdc2de6de64a755373099e6ec222" + "contentSha256": "eb53764c709a5a0dbb3e07da7a430db9bd26e203b8eddf5279ed84587da3a217" }, { "source": "examples/devops/10-release-readiness/README.md", "route": "/agentctl/examples/devops/10-release-readiness/", - "contentSha256": "d352b0a209aa9cbb36fe1c51e80c6c7955581cd18191bb5523dd9b9f282570ee" + "contentSha256": "5b537f336c31ff7daf7afa6fe07e79e67384c8f57b6ae187f6fed896e3f1eec8" }, { "source": "examples/devops/11-configuration-drift/README.md", "route": "/agentctl/examples/devops/11-configuration-drift/", - "contentSha256": "136a92a46d12f169a704b9c4af5ade39818152d3f8bda52db07123b273790c34" + "contentSha256": "a8f0c2886bea09bad45a83aada5e9dd26c89dfb1dbede1e42fca53c4641796cc" }, { "source": "examples/devops/12-incident-timeline/README.md", "route": "/agentctl/examples/devops/12-incident-timeline/", - "contentSha256": "6f32b833e81ad8e4e9743025081c1d6507c7b940c77cddd7ebc62c40905eceb7" + "contentSha256": "ea630a09ba7152b3ad01eb427e52f01d4fc96017887cf8382ac5279475a25370" }, { "source": "examples/devops/13-canary-evaluation/README.md", "route": "/agentctl/examples/devops/13-canary-evaluation/", - "contentSha256": "21ddb8faee7f1a0bb66935076acb36961ca697b9f8a1295ba894bb2b97ae1bba" + "contentSha256": "5024802fad97eff5d8eb9ae50177677f70bf94f9364f1c7909ee80b182b4e4c8" }, { "source": "examples/devops/14-local-deployment/README.md", "route": "/agentctl/examples/devops/14-local-deployment/", - "contentSha256": "d71be78c5aa968aa81e280449f90eb8adc0a67f2d8d8cfddee038c2523570a25" + "contentSha256": "8bf23b7cf0b0d7c0d5d93773aaedaa90918af576ff335ee174b99e30fdc3f7f1" }, { "source": "examples/devops/15-interrupted-deployment/README.md", "route": "/agentctl/examples/devops/15-interrupted-deployment/", - "contentSha256": "a2af94400f57e63b7fa36865081ab526ea047d89ded779ddeb5340ebf74e76ac" + "contentSha256": "d86b3b1e8e6af950650718f5a1832367c387a881690487cc04302d8937efb5c2" }, { "source": "examples/devops/16-retry-repair/README.md", "route": "/agentctl/examples/devops/16-retry-repair/", - "contentSha256": "3c1f87e2a85e0665eb49fe8183a21d39d86b40e470f94f184f38645cd78649bc" + "contentSha256": "b7653f3670d0bbac0d2a71f98a1d7db39195a3887ddaadc63dc899d7df94a28e" }, { "source": "examples/devops/17-compensated-rollout/README.md", "route": "/agentctl/examples/devops/17-compensated-rollout/", - "contentSha256": "68a977063c75fa2bc087e3fb768932472f9c3b8ae08b193c51a63ccedcd0a36a" + "contentSha256": "e4bb236e2940739837e532014f11304b585b1ecbc894d14e80b06d9650a441e2" }, { "source": "examples/devops/18-parallel-matrix/README.md", "route": "/agentctl/examples/devops/18-parallel-matrix/", - "contentSha256": "d3dd352bf621195b8714ed30195acf7d7d31cc8d0fadba1c0fbccbe34384056c" + "contentSha256": "984a5cb6631461f5c77ea45a3d4afda612a4264b2cb80b0e9a030fe6d8dc5133" }, { "source": "examples/devops/19-role-subworkflow/README.md", "route": "/agentctl/examples/devops/19-role-subworkflow/", - "contentSha256": "cecad6831c594ea8d54c1b699323b044576b2a88016584b4ea1b0741aa86b33f" + "contentSha256": "2556a2c2e442e64f0c29fc39354c4af8078a803a060a56404045e67f62726447" }, { "source": "examples/devops/20-bounded-remediation/README.md", "route": "/agentctl/examples/devops/20-bounded-remediation/", - "contentSha256": "f20ce99339bdc186ceb9baa354e5625c03c397d55a450d892b198caae7b8be74" + "contentSha256": "1f49316b4323041d0db52b5535d52d2f88522104dd5e113167a93fc08cacbc26" }, { "source": "examples/devops/21-container-remediation/README.md", "route": "/agentctl/examples/devops/21-container-remediation/", - "contentSha256": "d76b6528dea79805ee9515d1271bc4a154d947c0df1af89dc3e5ca6406978e64" + "contentSha256": "dd759d08c8e285feee01b885e990de4f521567e18a77dbf40f0e92763394acd1" }, { "source": "docs/use-cases/RELEASE_READINESS.md", "route": "/agentctl/examples/release-readiness/", - "contentSha256": "329408f63dccc89908b3e2a3e8171cfc29e485abfd4363bc4468d8f6f739a6c0" + "contentSha256": "5d2ce46de2e63f77026528687f3297a248e5e53df809149ba51c4bfbe1d8e728" }, { "source": "docs/use-cases/SCHEDULED_REVIEW.md", "route": "/agentctl/examples/scheduled-review/", - "contentSha256": "c52f21d86b67118797ae8d5b998fe130da82266189673d01d22461afe8ef0da3" + "contentSha256": "489c1e79ce2293ef0a903449f88d504ee935860754ebe99c9abdadf784b39d6a" }, { "source": "docs/use-cases/CI_QUALITY_GATE.md", "route": "/agentctl/examples/ci-quality-gate/", - "contentSha256": "eacc4670eaa506346682b98e016df16999585f23ceaf8ffa47bf374f8430846e" + "contentSha256": "65b959e719b50214025da6173b47e2f2a7e081d11ad65e4073de28f983aa2b55" }, { "source": "docs/use-cases/APPROVAL_GATED_ACTION.md", "route": "/agentctl/examples/approval-gated/", - "contentSha256": "dd8a189b5534dd1a145bb65dda011bf263837134a4737ac617320bf0e227e54f" + "contentSha256": "f1b440c5fc1142b0e9a1cc6bfd3eab8b756313f143dd8204acc5c3e160b9ac6e" }, { "source": "docs/use-cases/RECORDED_REPLAY.md", "route": "/agentctl/examples/recorded-replay/", - "contentSha256": "5d501a62b3d0044c210768febd5aae5769e9c80826db2d499f94303dd207b302" + "contentSha256": "2ff885152742411d79a03d1f805a552f87505a53e3dea7e6e2d9bb0ddecbe640" }, { "source": "docs/use-cases/PROVIDER_PORTABILITY.md", "route": "/agentctl/examples/provider-portability/", - "contentSha256": "855382d649b2118de5e9f754389aab7009ac31f5a71bb9ce31fced5bc29cc237" + "contentSha256": "aaf569657a51f43181ab3cda4039d808a12e461b5e1083ada19f7621ec6f406b" }, { "source": "docs/reference/YAML.md", "route": "/agentctl/reference/yaml/", - "contentSha256": "94c8f7ac290def6fe979933ea7a697596381c299dff074b85624c24a805682ce" + "contentSha256": "45f6ffa7d36f18a4273f347452cfe1c9018d1209aba4f272b362a011c5805511" }, { "source": "docs/generated/CLI.md", "route": "/agentctl/reference/cli/", - "contentSha256": "cbe4b65288c8b373129d2ecb9d4ed4e61b990157781eeebab696a7d189a8e11c" + "contentSha256": "0b5438ca193d7dd7ef419abae4df4ee7c2d9201d359684411d75d46e7ac9bfaa" }, { "source": "docs/reference/CLI_OUTPUT.md", "route": "/agentctl/reference/output/", - "contentSha256": "2ae20a2ecc3f71bda9b8bc930f5d038cf9e6e503dc3a9cdd62338b37f6452d8d" + "contentSha256": "a409666b9830ce3eac488b526a7850f87289d2e76d8bc21de1ec5497f011033f" }, { "source": "docs/reference/ENVIRONMENT_AND_PATHS.md", "route": "/agentctl/reference/environment/", - "contentSha256": "8cb345981b554d71c8b517d0ae0c91db742e6e453d48593ff08b638545302a66" + "contentSha256": "be1fb0ee160f31b8d4005b5b86d4ed77812db734cd1640d7b73edf26674fe52c" }, { "source": "docs/reference/MATRICES.md", "route": "/agentctl/reference/capabilities/", - "contentSha256": "2286e3164b89f6c82edf62108ae3736c6fd2bf464ff4af7a2d74fdafe72c3c6b" + "contentSha256": "d77b71c316c60df7fbfe763b03e6dad77bd1a96485930a6f61feec99f32e6bc2" }, { "source": "docs/reference/DATABASE.md", "route": "/agentctl/reference/database/", - "contentSha256": "dd5bb9db997a58ae09f0efff0b22023b4bd2efb1e1b3dda7b42869f99f77e606" + "contentSha256": "c7530f47e1425936586df057da3d20ced7025ccb8848b5ba360d58a7712ba6c1" }, { "source": "docs/reference/TERMINOLOGY.md", "route": "/agentctl/reference/terminology/", - "contentSha256": "3313105dfb6022e396e680882e5d984b86dd70c67b3fa38c230068f438bea619" + "contentSha256": "858ef982e9251df0aaabd2679688840b3c4ac0048f4ec356a1458946ce483091" }, { "source": "docs/LIMITATIONS.md", "route": "/agentctl/reference/limitations/", - "contentSha256": "5dc88c0333bc46a7d7c8f5bfa718c1f545f544908a8cfb4d2e395265c164d290" + "contentSha256": "c8a1ec77ecccbc536eed661005c6394fb18e0deeb3486e1d163648871129ba09" }, { "source": "docs/COMPATIBILITY.md", "route": "/agentctl/reference/compatibility/", - "contentSha256": "341bb042a69dd324650acbc9794d2e0558e908470f2153f0807ec6a1fa8ce618" + "contentSha256": "4bcee0baea801e01b8ea020baf3b134482a2a77b501be860f7793b4f087ce4b1" }, { "source": "docs/MIGRATING_FROM_TYPESCRIPT.md", "route": "/agentctl/reference/migration/", - "contentSha256": "342ef6c78d3b37141fd85acf802e3f6070d99586fbda50a15c01150b9709367d" + "contentSha256": "c5c2125d495258faad954512d430068e183d0710ae81e2ab32539dd324fcf33d" }, { "source": "docs/ARCHITECTURE.md", "route": "/agentctl/architecture/", - "contentSha256": "86bd8464ab316fde2bde9b115bedacfe5964b53d68517c62b4e40c1d734f5bfe" + "contentSha256": "6fffc9e603eec43416eccc5ab4264b8c4ad715e5de88a526ae037930ba573ae6" }, { "source": "docs/architecture/DIAGRAMS.md", "route": "/agentctl/architecture/diagrams/", - "contentSha256": "922f53a9b81126ec066a40cc53d6f24ddbc72c8ef565c5b63a766058bb3712c0" + "contentSha256": "ced3b6d2402e9b3bb9cdf5cd222fc781d10b4ecff9e6e9d45d76fb3d3c052dbc" }, { "source": "docs/adr/0001-deterministic-core-explicit-effects.md", "route": "/agentctl/architecture/decisions/0001/", - "contentSha256": "7acf32d6b4d7d4a352699f088d86ced545e0619ef6a08a3d7c1c934057c9cd50" + "contentSha256": "1f3b02402a390efac97772bdb6a336d3bf3b6e62d6ad5b28a6d224322942e826" }, { "source": "docs/adr/0002-versioned-strict-workflow-envelope.md", "route": "/agentctl/architecture/decisions/0002/", - "contentSha256": "cab1434db00989574699321f8df7f547a65227a3c2cb6c2ae229963c41f8046b" + "contentSha256": "6f22c1c359a3ce0534df4d1fe8a1f43c2541cd5780e41ccefe4d82ab9954f69f" }, { "source": "docs/adr/0003-sqlite-history-and-conservative-recovery.md", "route": "/agentctl/architecture/decisions/0003/", - "contentSha256": "8bacac740e9680cd46829593679281c97f5b732a3caf730ece159c7d9d3c6750" + "contentSha256": "295ca1ddd597d1a723d62cc7c3c026e72883132666a5cf05b3a7fa1a20b6fe6c" }, { "source": "docs/adr/0004-native-provider-adapters.md", "route": "/agentctl/architecture/decisions/0004/", - "contentSha256": "e10f8baa6951bdff3e92ad08b4be2c4f548693ac039c966ec0f8719cd0ebd091" + "contentSha256": "dc2dab30318baabfa347420d9c1fefafcce58f40012459ec164d7edae70bad89" }, { "source": "docs/adr/0005-narrow-v1-scheduling-and-extensions.md", "route": "/agentctl/architecture/decisions/0005/", - "contentSha256": "a7002343212f36a0a620fcec70feb4e485d735da5f31c54433c66f8f5ff5eaea" + "contentSha256": "e76b7ee737953a120a574e6a6356287bc80b4be04a8de017d53734f01d9b3054" }, { "source": "docs/adr/0006-schedulable-runtime-and-noninteractive-contract.md", "route": "/agentctl/architecture/decisions/0006/", - "contentSha256": "2b11bca5e647caf01a6126a83fe5d5cba36dfd7c4919e435495da722c667c573" + "contentSha256": "6bf260a57a571a3740d7b9cf9f1e4ab09c742b9445bcc2e50e4aafdc1ef0d2da" }, { "source": "docs/adr/0007-generic-oci-step-contract.md", "route": "/agentctl/architecture/decisions/0007/", - "contentSha256": "54e34e32f2a3f17ea76bbddaaedc74ac3a1dfcf1162f7b52b501c0de5e23f5cb" + "contentSha256": "b2917c6b9e67405c22a0a564d40baab003c0bd9633f17191d1f71af808e9e695" }, { "source": "docs/CONTRIBUTING.md", "route": "/agentctl/contributing/", - "contentSha256": "decb4ab10c5fdcb1e6334edb0c2ab6553c2c47cb62da2bbc101ec5c2470f11d6" + "contentSha256": "930af73d30446e0fefd8cb3d30e994d40fc0d7cc4e1b3052753f7d1a160dc0e0" }, { "source": "docs/development/REPOSITORY.md", "route": "/agentctl/contributing/developer-guide/", - "contentSha256": "670b43794103bde7378e51178d86c538ba99e32cba9cdfde5284a6cb2652daa8" + "contentSha256": "504767c0ff9a8f194c0e32dbb698c445303c65a07287b45e45998c77aef7db35" }, { "source": "docs/development/ADD_ACTION.md", "route": "/agentctl/contributing/add-action/", - "contentSha256": "b17511167c45ea822ce92a39c55bee34530962669f8301820b827d38dd9844e2" + "contentSha256": "3ddae2429013b39323dc6e5cad0d1be16d8f0f44a3de7cbf120ee0ad59d3bbcb" }, { "source": "docs/development/ADD_PROVIDER.md", "route": "/agentctl/contributing/add-provider/", - "contentSha256": "f71676be54e8aea289f5d6dbc079808c75201547bec69627e23a20a1bb5adc8a" + "contentSha256": "c4f570e9ac6949a48cda0497e36b114d692adffacc332e436ebe89d3e35b244e" }, { "source": "docs/development/ADD_MIGRATION.md", "route": "/agentctl/contributing/add-migration/", - "contentSha256": "50c20721d342073201da61ef16ab32cb73dd702eeb43f6f31f7e90ad272bb92c" + "contentSha256": "ebaddf6188bec1082cc1f55110c35df6d58cf43442a1a9eb6e724a3146349e3f" }, { "source": "docs/development/DOCUMENTATION.md", "route": "/agentctl/contributing/documentation/", - "contentSha256": "aafdcbce6bd2bdb6242c69320fb4bf92c7b8990af97ef8587842088ee6140466" + "contentSha256": "fa8e8c47fac40c0efe6d87328bfed6bb1f5e4dc6ef82950ddf5cf0735eaf99a8" }, { "source": "docs/TESTING.md", "route": "/agentctl/contributing/testing/", - "contentSha256": "e9063d8d339bff025352803fa4fe9d4924525e6c703182179a54b51f23896d3c" + "contentSha256": "b88e5bec1610781cae4010d68560fc0856826eb3cceb0480be3200f3dbcd501d" }, { "source": "docs/RELEASE_PROCESS.md", "route": "/agentctl/contributing/release/", - "contentSha256": "35e854ca102563bb2244a1097629265fb04ad7fc7773526512508f412e6b3018" + "contentSha256": "d9428d21541482f68abbc8d04f7c7e26a50aa38fd5740c0426dbd11d7b0525d5" } ], "cookbookPackages": [ @@ -413,169 +413,169 @@ "directory": "01-ci-diagnosis", "route": "/agentctl/examples/devops/01-ci-diagnosis/", "download": "/agentctl/downloads/devops/01-ci-diagnosis.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5407572fdb3b4d092cb40fc93524ad499126bb0a1c58fe3b3b84df63d74b049f", - "bytes": 37377 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "741a48a6994c6fe87282156c0a19f699aa7df59a320a3743ea9b63801d1af60e", + "bytes": 37382 }, { "directory": "02-junit-triage", "route": "/agentctl/examples/devops/02-junit-triage/", "download": "/agentctl/downloads/devops/02-junit-triage.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "f41fd98e5e017563ecd9f5806500c3f81aeaf5bd946c97fd3fffee7c075553e4", - "bytes": 33340 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "410eae753dffdd834ababaf34c2a661d511f104d6e9bc431d96235b1abfbcf32", + "bytes": 33341 }, { "directory": "03-pipeline-review", "route": "/agentctl/examples/devops/03-pipeline-review/", "download": "/agentctl/downloads/devops/03-pipeline-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5b7ebf61f36f2d496319bf35ff5d3364513a926e4eb2b961412121462738e898", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "ac3919f07bd5eea967a899a7063f6b4ddbb3dfa341de2bc3c39842caa05da696", "bytes": 34291 }, { "directory": "04-dockerfile-review", "route": "/agentctl/examples/devops/04-dockerfile-review/", "download": "/agentctl/downloads/devops/04-dockerfile-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "77e6e862f2fd29a929ac4eac5ef496b3e3e790f7f53a4eac951b2c94725f7f8e", - "bytes": 34251 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "a5075ecbb6f6d9755b0baffa7acb3c40c87fa6a0699794aca576b71364f6cc81", + "bytes": 34257 }, { "directory": "05-kubernetes-review", "route": "/agentctl/examples/devops/05-kubernetes-review/", "download": "/agentctl/downloads/devops/05-kubernetes-review.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "d5c31dfbed9b89618edd0645724a6d82949d28a1a939b753f9de747abc969465", - "bytes": 86242 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "5fe696b231f0d6668091ec688f517b73b29a0f66da8451a8e1c8f8e043a9b91e", + "bytes": 86244 }, { "directory": "06-terraform-plan", "route": "/agentctl/examples/devops/06-terraform-plan/", "download": "/agentctl/downloads/devops/06-terraform-plan.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "7caba1e953d52e0e6b8407810cb8a98ed9b8585779da8a374603de3c1baaa2ff", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "a25be3491df15702dcb63d48041067d05595e1ea5dfc1c73defd984507e412e9", "bytes": 33864 }, { "directory": "07-dependency-update", "route": "/agentctl/examples/devops/07-dependency-update/", "download": "/agentctl/downloads/devops/07-dependency-update.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "538e1c7528062258edbe474dc9f6ec163534b0d6466af0973b8c005409b65a3c", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "08163b7bba3960b47f55832a47c3e9d33cba9c9ba686d4503cf193ed99890063", "bytes": 34443 }, { "directory": "08-sbom-triage", "route": "/agentctl/examples/devops/08-sbom-triage/", "download": "/agentctl/downloads/devops/08-sbom-triage.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "e826b25ae2d163c819197676a37961e7426e281cb44d43d0caf370bc668e3c8f", - "bytes": 35501 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "3ee726ce6438c785e9fb08bc922296ceecfea123ca736befa30cb3af89845c8c", + "bytes": 35504 }, { "directory": "09-release-notes", "route": "/agentctl/examples/devops/09-release-notes/", "download": "/agentctl/downloads/devops/09-release-notes.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "a0ae8ce9c0c4973ed002155d4e0b6420b20c7dc612cd95172d1293dffaf96247", - "bytes": 33406 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "7a0d62bce10ae9bd4eda50b3c39d55decd77a3bf1876e9a44eba34ffdfd43a76", + "bytes": 33408 }, { "directory": "10-release-readiness", "route": "/agentctl/examples/devops/10-release-readiness/", "download": "/agentctl/downloads/devops/10-release-readiness.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "80056bc95d72f0c1c390d11933ae78f94a94e3fe5656d4b85b191bc761cc9b30", - "bytes": 35076 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "d35cd6c11295c3c780486923990628b61630c4afe9043adcdeeaba58db05d110", + "bytes": 35075 }, { "directory": "11-configuration-drift", "route": "/agentctl/examples/devops/11-configuration-drift/", "download": "/agentctl/downloads/devops/11-configuration-drift.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "8e244826c117eed3a87d8e8b6c2ee087e2a9d344b3114ef815211945f4ce0285", - "bytes": 34242 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "006092ee659d1446c9c0d0d85a23cc9c674882b649c64473641b53334ac4a847", + "bytes": 34246 }, { "directory": "12-incident-timeline", "route": "/agentctl/examples/devops/12-incident-timeline/", "download": "/agentctl/downloads/devops/12-incident-timeline.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "eb25ee8f284d5d781204d1ce805d8ec07182ba34f94813958da631218fbf805a", - "bytes": 37401 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "87c4f42990c90d90314b7e0459431746ede458088f362d382a37aa6a8b825890", + "bytes": 37404 }, { "directory": "13-canary-evaluation", "route": "/agentctl/examples/devops/13-canary-evaluation/", "download": "/agentctl/downloads/devops/13-canary-evaluation.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5489b2c7bb2e214bd947e79357d8aff3e38e6934b929a89c598a1516c1a07dd6", - "bytes": 33652 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "580ade0dc60ca16da773f5681edb82f0c02b44e94e05517d4e4833cc62932459", + "bytes": 33655 }, { "directory": "14-local-deployment", "route": "/agentctl/examples/devops/14-local-deployment/", "download": "/agentctl/downloads/devops/14-local-deployment.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "2dd27bcfa2fff84da2885182c24e7b3ae3055687dea08330ba96dfcfc7f0ab7a", - "bytes": 34565 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "65c925fa3478029f27d6fedd840701a2c0c072a2e035eeacbb1515212050d1a3", + "bytes": 34568 }, { "directory": "15-interrupted-deployment", "route": "/agentctl/examples/devops/15-interrupted-deployment/", "download": "/agentctl/downloads/devops/15-interrupted-deployment.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "8d42cc1136248dd662253497de4ade69c1ed10e63824f1c83e5ea615314063a0", + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "88a825bcb3b1f7a2fc7b6fce067bc948687982c531b8e69521741e3d01724a3e", "bytes": 36210 }, { "directory": "16-retry-repair", "route": "/agentctl/examples/devops/16-retry-repair/", "download": "/agentctl/downloads/devops/16-retry-repair.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "54a0b7561316e983d1a759c112b1e3451aba92d176b4578c5119bb892de9dfc3", - "bytes": 34804 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "dc3ebe1ea9dd71690f920612cf3032814c36f737fc707e74436d488053e2c2df", + "bytes": 34807 }, { "directory": "17-compensated-rollout", "route": "/agentctl/examples/devops/17-compensated-rollout/", "download": "/agentctl/downloads/devops/17-compensated-rollout.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "f7030e7665c0daa012320764dc8cd125e8aae4b7ac43dbb4236ac4673f777433", - "bytes": 36123 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "7d81119430420de672c737db4bd561851a45f44c0a8e15dcec612eb0fc560864", + "bytes": 36122 }, { "directory": "18-parallel-matrix", "route": "/agentctl/examples/devops/18-parallel-matrix/", "download": "/agentctl/downloads/devops/18-parallel-matrix.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "76f75ad1f7c5f106c684ca1b83a5c5a8502acfcbc480d99893946a95d09a91ec", - "bytes": 34580 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "790b721793a920923fc4577b8a6f39c11138dce38565c5094a28c25daf679e3f", + "bytes": 34584 }, { "directory": "19-role-subworkflow", "route": "/agentctl/examples/devops/19-role-subworkflow/", "download": "/agentctl/downloads/devops/19-role-subworkflow.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "2229e091ab28a0b669fea64b45536e4fb934bd5ea7da6a52909fe7a8636b04b8", - "bytes": 41025 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "1fdb69b59947347aced60ff267023c414d67b68fc15ddf72946a655ef2b75c6d", + "bytes": 41027 }, { "directory": "20-bounded-remediation", "route": "/agentctl/examples/devops/20-bounded-remediation/", "download": "/agentctl/downloads/devops/20-bounded-remediation.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "0de9cbc40d7a1bc2d9746fde0bc5f3b2d2b76a298dd852b6658bf10c972cb8db", - "bytes": 38923 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "fde6369c05835d61037b22395caec92f271c40148c1c0298bc5d02f1f9ac096b", + "bytes": 38925 } ], "remediationPackage": { "directory": "21-container-remediation", "route": "/agentctl/examples/devops/21-container-remediation/", "download": "/agentctl/downloads/remediation/21-container-remediation.zip", - "sourceCommit": "bb8fb0a5a28d876fee26c49c49a8a5bf1c8390e2", - "sha256": "5853c6b30e97fb5efe179f21953ce4a2a6bfd8fc20823ce8aca55e86d05838c6", - "bytes": 71742 + "sourceCommit": "7dee64e1d1b6fd38c1883d0d235d712590c30fbe", + "sha256": "6ae2b1fa1a9d8737a075460bc30af21e2e9ec4eba49af1a09416b649c0f07827", + "bytes": 72064 } } From 86ac4876ecf14ced90b9128faf658a6674d6e731 Mon Sep 17 00:00:00 2001 From: Ompragash Date: Tue, 8 Sep 2026 12:27:48 +0530 Subject: [PATCH 2/2] docs: record hosted artifact and live remediation evidence --- .../RELEASE_CONTAINER_REMEDIATION_20260906.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md b/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md index 0ac92b5..9192aa9 100644 --- a/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md +++ b/docs/execution/RELEASE_CONTAINER_REMEDIATION_20260906.md @@ -276,3 +276,21 @@ The documentation branch starts from the approved merged Pages source and advanc The shared-target framework generation and Clippy commands completed normally without interruption. Local verification then passed both components of the paired gate against the same clean source: `cargo xtask docs-verify` using the existing target and `pnpm verify` using pnpm 11.9.0 with `AGENTCTL_REPO` set to that checkout. The site verified generated freshness, writing, Mermaid, workflow pins, Markdown, spelling, Astro, all 94 HTML pages, routes, links, anchors and search. It checked 171 exact source objects and 17 remaining external URLs. Browser checks passed 140 cases in 2.6 minutes with the unchanged generic mobile-search skip. Logs are `framework-docs-7dee64e-attempt1.log` and `site-7dee64e-attempt1.log`; hosted verification will execute the unchanged combined `pnpm verify:agentctl` command. The complete remediation download is byte-identical to a separate clean export: ZIP SHA-256 `6ae2b1fa1a9d8737a075460bc30af21e2e9ec4eba49af1a09416b649c0f07827`, manifest SHA-256 `2df2f7b929ed03e797c28be9bf01258b3e6535194e11538466eadfbfdce12585`. All 34 payload hashes pass, the stale role-limit sentence is absent, and the preflight and implementer contain the explicit tool-generation setting. `site-clean-export-local-7dee64e.json` records the comparison. Hosted source and uploaded-artifact evidence follow the draft PR push; no full remediation or release publication is inferred from these checks. + +## Hosted tool-generation source proof + +[Hosted run 34195633694](https://github.com/opensourceops/opensourceops.github.io/actions/runs/34195633694) passed the unchanged combined `pnpm verify:agentctl` gate for documentation `2f2e7b03870899c9cc6f425e9d9eb8c005b15d99` and framework `7dee64e1d1b6fd38c1883d0d235d712590c30fbe`. Validation completed in 6 minutes 38 seconds. Browser checks passed 140 cases in 3.9 minutes with the unchanged generic mobile-search skip; all dedicated package checks passed. The hosted checkout verified 166 exact source objects and 22 remaining external URLs. Deployment and production Pages upload were skipped. + +The actual uploaded artifact `10043952664` is 4,377,533 bytes with SHA-256 `bba2fc3895a18e77ec92bdf1236499a403c19eeeb47c0d7008e2e21bd00b962a`, matching Actions. Independent inspection confirmed `.nojekyll`, all 94 HTML pages without source boilerplate or retired branding, exact clean source metadata and all 21 packages with every nested manifest and payload digest. Each package matches its locally validated source package. The hosted remediation ZIP is byte-identical to the separate clean framework export, including all 34 payload hashes, and the stale role-limit sentence is absent. + +The artifact expires on 22 September 2026 at 06:46:12 UTC. Its actual ZIP, complete hosted log and Actions metadata remain under `hosted-7dee64e`; `verification.json` has SHA-256 `d3b25f9d31ad4e0fb201a327b14bded8236f838dfea4e9e2563e75b3f3151514`. `site-clean-export-hosted-7dee64e.json` records the clean-export comparison. This subsequent evidence-only commit preserves tested documentation source `2f2e7b0`, framework pin `7dee64e` and all package bytes. Only writing, Markdown and diff checks are repeated locally for this ledger update. + +## Live candidate and publication reconciliation + +[Candidate remediation run 34195429813](https://github.com/Ompragash/agentctl-remediation-demo/actions/runs/34195429813) completed successfully using framework `7dee64e` and demo source `dfd8ba73af22eb9e121f0923e89d162c0b9bcf64`. It created [actual remediation draft PR10](https://github.com/Ompragash/agentctl-remediation-demo/pull/10), whose observed head was `458ea6480616ae8a5c9890646e466a577d762ca7`. The PR changes only `requirements.in` and `requirements.lock`; it remains an unmerged draft. Independent artifact, remote-tree, scan and durable-runtime reviews passed against that exact candidate source. + +The live durable receipt records three `gpt-6-astra` requests with high reasoning, 4,290 total tokens, two scoped file writes, 28 seconds of runtime usage and USD0.089960 estimated cost. Reasoning tokens are included once within output tokens; the estimate is not an invoice. The lease was reconciled. Remediation and eligibility both replayed without a credential and with container networking disabled, preserving recorded outputs and artifact digests with zero fresh provider requests or effects. SQLite integrity, persisted state, effect/result records, budget accounting and CAS hashes matched the inspections. Report `remediate-34195429813/live-verification.json` has SHA-256 `4dbfd5c0ef07ca230c12e3752d8e9e4fd7798ec78a09b0ac452f0c1815e3f556`. + +The trusted outer pipeline built and tested the original and changed application; each isolated application test run passed two tests. Rescanning against the same recorded vulnerability database removed the three targeted advisories, introduced no new findings and disclosed 270 unrelated residual findings. Those residual findings remain unresolved. Independent verification recomputed eligibility and matched the exact two-file remote PR tree. Report `remediate-34195429813/publication-verification.json` has SHA-256 `6ffd78a9f761f419a3640f41f63a46aa37d4f9bb3d4b7fead4bc13472b420d8c`. + +[Publication reconciliation run 34196095845](https://github.com/Ompragash/agentctl-remediation-demo/actions/runs/34196095845) passed with the paid jobs skipped before any steps. It revalidated the recorded publication artifact and reused the same branch, fingerprint, validated tree and draft PR with zero fresh provider requests. The verification report `reconcile-34196095845/verification.json` has SHA-256 `a35fd2e745557f72d3ee30f4a6703cd0c0145386cac64b85523e25859ac7cffd`. This verifies outer CI publication reconciliation. Runtime replay and selective recovery have separate execution evidence; no exactly-once GitHub delivery guarantee follows. Production publication and smoke testing of the published image remain separate operator steps.