@integrity-labs/agt-cli 0.28.773 → 0.28.774

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37544,6 +37544,74 @@ var FLAG_REGISTRY = [
37544
37544
  // dominant callers. This is precisely the deliberate, audited flip ADR-0022
37545
37545
  // §4 reserves confirmation for.
37546
37546
  sensitive: true
37547
+ },
37548
+ {
37549
+ key: "artefact-export-jobs-serve",
37550
+ description: 'ADR-0077 / ENG-9729 \u2014 the MASTER switch for the async artefact-export lane. ON (default) = a route may resolve an export request to an artefact_export_jobs row: attach to one that is already rendering, or hand back the bytes of one that has completed. OFF = the job lane is invisible and every export renders synchronously, which is the pre-ADR-0077 behaviour. DEFAULT true DOES NOT MEAN ASYNC IS ON. Nothing CREATES a job unless artefact-export-jobs-start is also on, so with the shipped defaults this flag governs an empty table and no caller can tell it exists. WHY THE LANE IS TWO FLAGS AND NOT ONE. Disarming the start lever while renders are in flight must not strand the callers holding their job ids: those renders keep running (a Lambda invocation nobody awaits still runs to completion), and their bytes land in the private bucket regardless. A single flag would take the only door to them away at the moment it was most needed. So "stop creating new jobs" and "keep serving the ones that exist" are separate, and this is the second one. READ-ONLY BY CONSTRUCTION: with start off, the route looks up a REUSABLE row and nothing more \u2014 it never inserts, never requeues a terminal row, and never dispatches a renderer. A requeue mints an attempt and fires an invoke, so a serve lever that requeued would start new renders under a disarmed start lever, which is the exact thing disarming it was meant to stop. Evaluated server-side per request (org-scoped), so a flip applies within the evaluation cache TTL with no deploy and no host update. Deliberately NO envVar: the consumer is the API Lambda, whose environment block is at the AWS 4KB cap (ENG-7972), and a literal in sst.config.ts would pin every stage and make the admin control inert (ENG-8303).',
37551
+ flagType: "boolean",
37552
+ // ON is the no-op default here, which looks like the wrong direction until
37553
+ // you read it with the start lever: serving an empty table is
37554
+ // indistinguishable from not serving at all. Shipping it OFF would instead
37555
+ // mean that arming async later takes TWO flips, and that the second one is
37556
+ // the easy one to forget — leaving a fleet that creates jobs it refuses to
37557
+ // serve, i.e. every slow export failing while the flag page reads "async: on".
37558
+ defaultValue: true
37559
+ },
37560
+ {
37561
+ key: "artefact-export-jobs-start",
37562
+ description: "ADR-0077 / ENG-9729 \u2014 whether a route may CREATE an async artefact-export job: insert or requeue an artefact_export_jobs row, dispatch the worker, and answer a caller with a job id instead of bytes when the ~20s grace window is exceeded. OFF (default) = today's synchronous render on every export. THIS IS THE ROLLOUT GATE, AND IT IS ORDERED AGAINST A CLIENT, NOT A DEPLOY. The agent caller is `artefacts_download`, which ships inside the agt CLI to a permanently mixed-version fleet \u2014 hosts self-update overnight and some never do. Arming this against a CLI that cannot read a job-id body does not degrade an export, it BREAKS one: the pre-ENG-9729 tool does Buffer.from(data.base64) with no branch for any other shape, so a job id arrives as a TypeError deep in file-write logic. That is strictly worse than the 503 + Retry-After it would replace, which the tool already understands. A published CLI version is NOT evidence of convergence \u2014 measure hosts.agt_version across recently-seen hosts first. The procedure is docs/runbooks/async-export-rollout.md; arm this only after running it. Turning it back OFF stops new jobs and leaves artefact-export-jobs-serve delivering the in-flight ones, which is why the two are separate. Org-scoped, so it can be armed for one tenant at a time. Deliberately NO envVar (ENG-7972 4KB cap, ENG-8303 pin).",
37563
+ flagType: "boolean",
37564
+ // Dark. The client half of this change publishes with the same merge, and
37565
+ // the fleet has not converged on it at merge time by construction — see the
37566
+ // runbook. Arming is an operator action taken against a measurement.
37567
+ defaultValue: false,
37568
+ // Arming this changes the RESPONSE SHAPE of a route whose callers include a
37569
+ // binary we do not control the version of. ADR-0022 section 4 reserves
37570
+ // confirmation for exactly this: a flip that a single unguarded write should
37571
+ // not be able to make.
37572
+ sensitive: true,
37573
+ // `since` USED SLIGHTLY OFF-LABEL, AND THAT IS THE POINT.
37574
+ //
37575
+ // The field's docblock says it records the CLI whose build first shipped
37576
+ // this flag's HOST-SIDE READER, and this flag has none — it is evaluated
37577
+ // server-side in the export route, so every host "honors" a flip the instant
37578
+ // it is made. Read literally, `since` should therefore be undefined.
37579
+ //
37580
+ // Undefined is the dangerous answer. `classifyHostReach` returns `honors`
37581
+ // for every host when `since` is unset, so the flip-reach modal — the screen
37582
+ // an operator is looking at AT THE MOMENT OF THE FLIP — would report full
37583
+ // reach for the one flag whose entire purpose is "do not flip this until you
37584
+ // have measured the fleet". It would be telling the truth about the
37585
+ // mechanism (the flip does reach every host immediately) while giving
37586
+ // exactly the wrong answer to the question being asked (can those hosts
37587
+ // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
37588
+ // the flag, not to READ it, and the modal cannot tell those apart.
37589
+ //
37590
+ // Pinned ABOVE every published release on purpose, the `agt-bin-path`
37591
+ // precedent: it classifies EVERY host as `stale`, so the modal reports no
37592
+ // reach rather than reach it has no basis for. A guessed number would be
37593
+ // worse than a placeholder, and the two directions are not symmetric —
37594
+ // too HIGH over-warns (annoying), too LOW promises reach to a build that
37595
+ // answers a job id with a TypeError inside file-write logic (a broken export
37596
+ // reported to the agent as "download failed").
37597
+ //
37598
+ // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
37599
+ // this change, patch-bumping from whatever is current, so any pre-merge
37600
+ // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
37601
+ // trust a version produced by re-running a failed publish job (ENG-9647: a
37602
+ // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
37603
+ // string would claim a capability the bytes do not carry).
37604
+ //
37605
+ // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
37606
+ // the flip-reach modal. Nothing in the evaluation or override-write path
37607
+ // consults it, so this changes what an operator is TOLD and does not stop a
37608
+ // flip on an under-`since` host. What holds the line is `defaultValue:
37609
+ // false` + `sensitive: true` + the runbook.
37610
+ //
37611
+ // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
37612
+ // docs/runbooks/async-export-rollout.md, so the placeholder has a named
37613
+ // owner and a named moment rather than being a deferral nobody holds.
37614
+ since: "0.29.0"
37547
37615
  }
37548
37616
  ];
37549
37617
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -49,8 +49,8 @@ import {
49
49
  writeDirectChatSessionState,
50
50
  writeEgressAllowlist,
51
51
  writePersistentClaudeWrapper
52
- } from "./chunk-UL2W5NY6.js";
53
- import "./chunk-75UAJFJJ.js";
52
+ } from "./chunk-SXTHAF3R.js";
53
+ import "./chunk-PMKI7ZTP.js";
54
54
  import "./chunk-XWVM4KPK.js";
55
55
  export {
56
56
  EGRESS_BASELINE_DOMAINS,
@@ -104,4 +104,4 @@ export {
104
104
  writeEgressAllowlist,
105
105
  writePersistentClaudeWrapper
106
106
  };
107
- //# sourceMappingURL=persistent-session-E4AHQHRA.js.map
107
+ //# sourceMappingURL=persistent-session-C2Y4CSAY.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-UL2W5NY6.js";
4
- import "./chunk-75UAJFJJ.js";
3
+ } from "./chunk-SXTHAF3R.js";
4
+ import "./chunk-PMKI7ZTP.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -745,4 +745,4 @@ export {
745
745
  readAndResetSlackReplyBindingClassifications,
746
746
  readAndResetSlackReplyTargetClassifications
747
747
  };
748
- //# sourceMappingURL=responsiveness-probe-EN6IOLBG.js.map
748
+ //# sourceMappingURL=responsiveness-probe-7CVB5NBT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-75UAJFJJ.js";
3
+ } from "./chunk-PMKI7ZTP.js";
4
4
 
5
5
  // src/lib/session-auth-dead.ts
6
6
  import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
@@ -203,4 +203,4 @@ export {
203
203
  decideSessionAuthState,
204
204
  probeSessionAuth
205
205
  };
206
- //# sourceMappingURL=session-auth-dead-LNYMXEHY.js.map
206
+ //# sourceMappingURL=session-auth-dead-E3WEZYEH.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.773",
3
+ "version": "0.28.774",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {