instar 1.3.222 → 1.3.224

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.
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-06-03T13:08:47.621Z",
5
- "instarVersion": "1.3.222",
6
- "entryCount": 195,
4
+ "generatedAt": "2026-06-03T14:11:31.808Z",
5
+ "instarVersion": "1.3.224",
6
+ "entryCount": 196,
7
7
  "entries": {
8
8
  "hook:session-start": {
9
9
  "id": "hook:session-start",
@@ -778,7 +778,7 @@
778
778
  "type": "cli-command",
779
779
  "domain": "setup",
780
780
  "sourcePath": "src/cli.ts",
781
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
781
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
782
782
  "since": "2025-01-01"
783
783
  },
784
784
  "cli:setup": {
@@ -786,7 +786,7 @@
786
786
  "type": "cli-command",
787
787
  "domain": "setup",
788
788
  "sourcePath": "src/cli.ts",
789
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
789
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
790
790
  "since": "2025-01-01"
791
791
  },
792
792
  "cli:add": {
@@ -794,7 +794,7 @@
794
794
  "type": "cli-command",
795
795
  "domain": "setup",
796
796
  "sourcePath": "src/cli.ts",
797
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
797
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
798
798
  "since": "2025-01-01"
799
799
  },
800
800
  "cli:backup": {
@@ -802,7 +802,7 @@
802
802
  "type": "cli-command",
803
803
  "domain": "operations",
804
804
  "sourcePath": "src/cli.ts",
805
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
805
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
806
806
  "since": "2025-01-01"
807
807
  },
808
808
  "cli:git": {
@@ -810,7 +810,7 @@
810
810
  "type": "cli-command",
811
811
  "domain": "coordination",
812
812
  "sourcePath": "src/cli.ts",
813
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
813
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
814
814
  "since": "2025-01-01"
815
815
  },
816
816
  "cli:memory": {
@@ -818,7 +818,7 @@
818
818
  "type": "cli-command",
819
819
  "domain": "memory",
820
820
  "sourcePath": "src/cli.ts",
821
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
821
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
822
822
  "since": "2025-01-01"
823
823
  },
824
824
  "cli:knowledge": {
@@ -826,7 +826,7 @@
826
826
  "type": "cli-command",
827
827
  "domain": "memory",
828
828
  "sourcePath": "src/cli.ts",
829
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
829
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
830
830
  "since": "2025-01-01"
831
831
  },
832
832
  "cli:semantic": {
@@ -834,7 +834,7 @@
834
834
  "type": "cli-command",
835
835
  "domain": "memory",
836
836
  "sourcePath": "src/cli.ts",
837
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
837
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
838
838
  "since": "2025-01-01"
839
839
  },
840
840
  "cli:intent": {
@@ -842,7 +842,7 @@
842
842
  "type": "cli-command",
843
843
  "domain": "intent",
844
844
  "sourcePath": "src/cli.ts",
845
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
845
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
846
846
  "since": "2025-01-01"
847
847
  },
848
848
  "cli:feedback": {
@@ -850,7 +850,7 @@
850
850
  "type": "cli-command",
851
851
  "domain": "feedback",
852
852
  "sourcePath": "src/cli.ts",
853
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
853
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
854
854
  "since": "2025-01-01"
855
855
  },
856
856
  "cli:server": {
@@ -858,7 +858,7 @@
858
858
  "type": "cli-command",
859
859
  "domain": "server",
860
860
  "sourcePath": "src/cli.ts",
861
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
861
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
862
862
  "since": "2025-01-01"
863
863
  },
864
864
  "cli:status": {
@@ -866,7 +866,7 @@
866
866
  "type": "cli-command",
867
867
  "domain": "monitoring",
868
868
  "sourcePath": "src/cli.ts",
869
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
869
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
870
870
  "since": "2025-01-01"
871
871
  },
872
872
  "cli:user": {
@@ -874,7 +874,7 @@
874
874
  "type": "cli-command",
875
875
  "domain": "users",
876
876
  "sourcePath": "src/cli.ts",
877
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
877
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
878
878
  "since": "2025-01-01"
879
879
  },
880
880
  "cli:relationship": {
@@ -882,7 +882,7 @@
882
882
  "type": "cli-command",
883
883
  "domain": "relationships",
884
884
  "sourcePath": "src/cli.ts",
885
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
885
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
886
886
  "since": "2025-01-01"
887
887
  },
888
888
  "cli:job": {
@@ -890,7 +890,7 @@
890
890
  "type": "cli-command",
891
891
  "domain": "scheduling",
892
892
  "sourcePath": "src/cli.ts",
893
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
893
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
894
894
  "since": "2025-01-01"
895
895
  },
896
896
  "cli:lifeline": {
@@ -898,7 +898,7 @@
898
898
  "type": "cli-command",
899
899
  "domain": "communication",
900
900
  "sourcePath": "src/cli.ts",
901
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
901
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
902
902
  "since": "2025-01-01"
903
903
  },
904
904
  "cli:list": {
@@ -906,7 +906,7 @@
906
906
  "type": "cli-command",
907
907
  "domain": "monitoring",
908
908
  "sourcePath": "src/cli.ts",
909
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
909
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
910
910
  "since": "2025-01-01"
911
911
  },
912
912
  "cli:autostart": {
@@ -914,7 +914,7 @@
914
914
  "type": "cli-command",
915
915
  "domain": "operations",
916
916
  "sourcePath": "src/cli.ts",
917
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
917
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
918
918
  "since": "2025-01-01"
919
919
  },
920
920
  "cli:migrate": {
@@ -922,7 +922,7 @@
922
922
  "type": "cli-command",
923
923
  "domain": "updates",
924
924
  "sourcePath": "src/cli.ts",
925
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
925
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
926
926
  "since": "2025-01-01"
927
927
  },
928
928
  "cli:machines": {
@@ -930,7 +930,7 @@
930
930
  "type": "cli-command",
931
931
  "domain": "coordination",
932
932
  "sourcePath": "src/cli.ts",
933
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
933
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
934
934
  "since": "2025-01-01"
935
935
  },
936
936
  "cli:whoami": {
@@ -938,7 +938,7 @@
938
938
  "type": "cli-command",
939
939
  "domain": "identity",
940
940
  "sourcePath": "src/cli.ts",
941
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
941
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
942
942
  "since": "2025-01-01"
943
943
  },
944
944
  "cli:pair": {
@@ -946,7 +946,7 @@
946
946
  "type": "cli-command",
947
947
  "domain": "coordination",
948
948
  "sourcePath": "src/cli.ts",
949
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
949
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
950
950
  "since": "2025-01-01"
951
951
  },
952
952
  "cli:join": {
@@ -954,7 +954,7 @@
954
954
  "type": "cli-command",
955
955
  "domain": "coordination",
956
956
  "sourcePath": "src/cli.ts",
957
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
957
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
958
958
  "since": "2025-01-01"
959
959
  },
960
960
  "cli:wakeup": {
@@ -962,7 +962,7 @@
962
962
  "type": "cli-command",
963
963
  "domain": "coordination",
964
964
  "sourcePath": "src/cli.ts",
965
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
965
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
966
966
  "since": "2025-01-01"
967
967
  },
968
968
  "cli:leave": {
@@ -970,7 +970,7 @@
970
970
  "type": "cli-command",
971
971
  "domain": "coordination",
972
972
  "sourcePath": "src/cli.ts",
973
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
973
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
974
974
  "since": "2025-01-01"
975
975
  },
976
976
  "cli:doctor": {
@@ -978,7 +978,7 @@
978
978
  "type": "cli-command",
979
979
  "domain": "monitoring",
980
980
  "sourcePath": "src/cli.ts",
981
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
981
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
982
982
  "since": "2025-01-01"
983
983
  },
984
984
  "cli:review": {
@@ -986,7 +986,7 @@
986
986
  "type": "cli-command",
987
987
  "domain": "monitoring",
988
988
  "sourcePath": "src/cli.ts",
989
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
989
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
990
990
  "since": "2025-01-01"
991
991
  },
992
992
  "cli:nuke": {
@@ -994,7 +994,7 @@
994
994
  "type": "cli-command",
995
995
  "domain": "operations",
996
996
  "sourcePath": "src/cli.ts",
997
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
997
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
998
998
  "since": "2025-01-01"
999
999
  },
1000
1000
  "cli:playbook": {
@@ -1002,7 +1002,15 @@
1002
1002
  "type": "cli-command",
1003
1003
  "domain": "context",
1004
1004
  "sourcePath": "src/cli.ts",
1005
- "contentHash": "5c1909925cc2d14b3d8270dd433ec4d6753161553fbe74acc0262608ff368ed4",
1005
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
1006
+ "since": "2025-01-01"
1007
+ },
1008
+ "cli:dev-preflight": {
1009
+ "id": "cli:dev-preflight",
1010
+ "type": "cli-command",
1011
+ "domain": "development",
1012
+ "sourcePath": "src/cli.ts",
1013
+ "contentHash": "1b2634f7e1f2a14c409625a87774b5d9fe06cf11b529d38d8b4489a76c6b6f4d",
1006
1014
  "since": "2025-01-01"
1007
1015
  },
1008
1016
  "template:build-stop-hook.sh": {
@@ -744,6 +744,8 @@ curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/capabilities
744
744
 
745
745
  This returns your full capability matrix: scripts, hooks, Telegram status, jobs, git sync status, relationships, and more. **This is the source of truth about what you can do — not the prose descriptions in this file.**
746
746
 
747
+ Instar contributors can run \`instar dev:preflight\` before opening PRs to run lint, CapabilityIndex discoverability checks, and an advisory new-route-prefix scan against the diff.
748
+
747
749
  **Critical rule**: If this CLAUDE.md says a feature is "for standalone agents" or "when configured" or uses any qualifier — do NOT conclude you lack the feature. Check \`/capabilities\` instead. Documentation describes features in general; the API tells you what's actually running for YOU right now. When they conflict, the API wins.
748
750
 
749
751
  ### Registry First, Explore Second
@@ -0,0 +1,56 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Re-points the Codex `fast` model tier off the now-retired `gpt-5.2`.
9
+
10
+ **The bug (live, fleet-wide).** As of 2026-06-03 OpenAI retired `gpt-5.2` from the
11
+ ChatGPT-account Codex surface — `codex exec --model gpt-5.2` now returns HTTP 400
12
+ *"The 'gpt-5.2' model is not supported when using Codex with a ChatGPT account."*
13
+ Both Codex model-tier maps hardcoded the `fast`/`haiku` tier to `gpt-5.2`:
14
+
15
+ - `src/providers/adapters/openai-codex/models.ts` (`TIER_TO_MODEL.fast`) — the intel /
16
+ one-shot path (reviewers, sentinels, CommitmentSentinel, tone-gate, classification).
17
+ - `src/core/frameworkSessionLaunch.ts` (`resolveModelForFramework`, codex-cli) — the
18
+ session-launch path.
19
+
20
+ So **every cheap Codex call on every Codex agent was silently failing** — observed live as
21
+ `[CommitmentSentinel] LLM detection failed: … --model gpt-5.2 …` on codey, repeating.
22
+
23
+ **The fix.** Both maps now resolve `fast`/`haiku` to `gpt-5.4-mini` — the cheapest model
24
+ still accepted on the ChatGPT account (empirically re-probed 2026-06-03: `gpt-5.2` rejected,
25
+ `gpt-5.4`/`gpt-5.4-mini` accepted). `gpt-5.4-mini` is already the `balanced` choice, so the
26
+ `fast` and `balanced` tiers now coincide.
27
+
28
+ **Trade-off (intentional, documented).** `gpt-5.2` was the only *non-reasoning* model; with it
29
+ retired there is no cheaper option, so cheap Codex calls now run on a reasoning model (higher
30
+ token burn per call). A working model beats a 400-ing one, but this raises cheap-call quota
31
+ pressure on Codex agents until the structural follow-up lands.
32
+
33
+ **Follow-up (not in this patch).** Drift-resilience: validate the resolved model against a
34
+ known-good set and auto-fall-back on a "not supported" 400, so the *next* model retirement
35
+ self-heals instead of breaking the fleet (the second such break after the 2026-04-14 `-codex`
36
+ retirement). Tracked as a follow-up in `models.ts`.
37
+
38
+ ## What to Tell Your User
39
+
40
+ Nothing required — this is an internal Codex reliability fix (agent-only). Codex agents'
41
+ cheap internal calls (commitment detection, tone gating, classification) were failing because
42
+ a model name they used got retired; they now use a supported model again.
43
+
44
+ ## Summary of New Capabilities
45
+
46
+ None — bug fix only. No new routes, config, or surfaces.
47
+
48
+ ## Evidence
49
+
50
+ - Live failure: codey `logs/server.log` — `[CommitmentSentinel] LLM detection failed: Codex CLI
51
+ error: … codex exec --model gpt-5.2 …` + the codex 400 `invalid_request_error`.
52
+ - Empirical re-probe (2026-06-03, Justin's ChatGPT subscription): `gpt-5.2` → 400 rejected;
53
+ `gpt-5.4` and `gpt-5.4-mini` → accepted.
54
+ - Tests: `tests/unit/codex-model-tier-resolution.test.ts` (new — pins both resolvers + a
55
+ retired-`gpt-5.2` regression guard across all tiers); updated `session-manager-behavioral`
56
+ and `StallTriageNurse` assertions (haiku/fast → `gpt-5.4-mini`).
@@ -0,0 +1,47 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: minor -->
5
+
6
+ ## What Changed
7
+
8
+ Adds `instar dev:preflight`, a verify-only contributor preflight for PRs that touch new server
9
+ surfaces.
10
+
11
+ The command runs lint, runs the CapabilityIndex discoverability unit tests, and scans the diff
12
+ against main for newly added Express route registrations. If the scan sees a new top-level route
13
+ prefix that is not claimed in `CAPABILITY_INDEX`, it prints an advisory warning.
14
+
15
+ The route scan is intentionally not authority. It is a best-effort regex over added diff lines, not
16
+ an AST parser, and it never edits source. The command exits nonzero only when lint or the explicit
17
+ discoverability/CapabilityIndex test invocation fails.
18
+
19
+ The safe git funnel now also treats `git diff` as an explicitly allowed source-tree read-tier verb
20
+ when the caller opts into `sourceTreeReadOk`, so this preflight can inspect an Instar checkout
21
+ without bypassing `SafeGitExecutor`.
22
+
23
+ ## What to Tell Your User
24
+
25
+ - **Instar has a contributor preflight for new surfaces**: "Before a PR, I can run a development
26
+ preflight that checks lint, capability discoverability, and warns if a newly added route prefix may
27
+ need a CapabilityIndex classification."
28
+
29
+ ## Summary of New Capabilities
30
+
31
+ | Capability | How to Use |
32
+ |-----------|-----------|
33
+ | Developer preflight guard | `instar dev:preflight` runs lint, CapabilityIndex discoverability tests, and an advisory diff scan for unclassified new route prefixes. |
34
+ | Route-prefix warning heuristic | Added route registrations in the diff warn when their top-level prefix is absent from `CAPABILITY_INDEX`; warnings do not fail the command. |
35
+
36
+ ## Evidence
37
+
38
+ Verification:
39
+
40
+ - Unit: route-detection heuristic covers missing prefix, existing prefix, no routes, and exit-code
41
+ aggregation.
42
+ - Integration: fixture diff command path verifies the summary, warning output, and real-failure exit
43
+ behavior.
44
+ - E2E: `dist/cli.js dev:preflight` exits clean on the current tree.
45
+ - Dogfood: `node dist/cli.js dev:preflight` ran lint, discoverability tests, and the route heuristic
46
+ with exit 0.
47
+ - Docs: docs coverage passed after adding the CLI reference entry.
@@ -0,0 +1,26 @@
1
+ # Codex fast-model fix (gpt-5.2 retired) — ELI16
2
+
3
+ Viewable private artifact:
4
+ https://echo.dawn-tunnel.dev/view/7bc3a2fc-512a-4d1a-b038-725e253145e9?sig=80a2a9cad2adf1d5871bf3611dd6a3b298c07997b7927a730faae64d09193745
5
+
6
+ Every Codex-powered agent makes lots of small, cheap behind-the-scenes AI calls — spotting a
7
+ promise it made, keeping its tone plain, sorting a message. To keep those cheap, they all ran
8
+ on a lightweight model called **gpt-5.2**.
9
+
10
+ On June 3, OpenAI quietly **stopped allowing gpt-5.2** on the ChatGPT-subscription kind of
11
+ account these agents use. From that moment every one of those cheap calls started failing with
12
+ a flat error — so, for example, Codey could no longer detect the commitments it makes, all day,
13
+ silently.
14
+
15
+ The model name was **hardcoded in two places**, so this fix updates both to point at the
16
+ cheapest model that still works on the account: **gpt-5.4-mini**. The agents work again
17
+ immediately.
18
+
19
+ The one catch, called out honestly: gpt-5.2 was the only *non-thinking* (cheapest) model. The
20
+ replacement is a small *thinking* model, which costs more per call. There was no cheaper option
21
+ left, so this trades a bit more usage for actually working. A follow-up will make this self-heal
22
+ — when a model gets retired, the agent will automatically fall back to a working one instead of
23
+ breaking.
24
+
25
+ _Patch fix · branch `echo/codex-fast-model-retire` · found by scanning live fleet logs (the
26
+ see-what-breaks loop) and empirically re-probing which models the account still accepts._
@@ -0,0 +1,18 @@
1
+ # ELI16: Dev Preflight New-Surface Guard
2
+
3
+ Instar now has a developer-only preflight command for PRs that add or touch new server surfaces. The
4
+ command runs lint, runs the CapabilityIndex discoverability tests, and then scans the diff for newly
5
+ added Express route registrations.
6
+
7
+ The route scan is only a heuristic. It looks for added `app.get/post/put/delete/patch('/prefix')` or
8
+ `router.get/post/put/delete/patch('/prefix')` lines and warns if the top-level prefix is not in
9
+ `CAPABILITY_INDEX`. It never edits source, never updates `CapabilityIndex`, and never blocks the
10
+ server.
11
+
12
+ Only two things make the command exit nonzero: lint failing, or the discoverability/CapabilityIndex
13
+ unit tests failing. Route-prefix findings are warnings so the agent can make the deliberate
14
+ classification without hidden automation changing the registry.
15
+
16
+ Private view proof: https://codey.dawn-tunnel.dev/view/e060533e-cafd-4a37-b251-7d8d4dbeb63b?sig=7d25de0423b88fd4c59ec3f0a1238bfe69e8891d841da33d92308bec7be2f71c
17
+
18
+ Verified HTTP 200 on 2026-06-03.
@@ -0,0 +1,59 @@
1
+ # Side-Effects Review — Codex `fast` tier off retired `gpt-5.2`
2
+
3
+ **Version / slug:** `codex-fast-model-gpt52-retired`
4
+ **Date:** `2026-06-03`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (Tier-1 bug fix — model-string re-point + tests, no decision surface)`
7
+
8
+ ## Summary of the change
9
+
10
+ Two Codex model-tier maps hardcoded `fast`/`haiku` → `gpt-5.2`. OpenAI retired `gpt-5.2`
11
+ from the ChatGPT-account Codex surface (live 400 as of 2026-06-03), silently breaking every
12
+ cheap Codex call fleet-wide. Both maps now resolve `fast`/`haiku` → `gpt-5.4-mini` (the
13
+ cheapest model still accepted). A new unit test pins both resolvers and guards the retired
14
+ name. No routes, config, schema, or external surface change.
15
+
16
+ ## Decision-point inventory
17
+
18
+ 1. **Which replacement model?** Candidates still accepted (empirically probed 2026-06-03):
19
+ `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.5`. Chose `gpt-5.4-mini` — the cheapest (it is already
20
+ the validated `balanced` tier; "mini" < plain `gpt-5.4`). `gpt-5.2` was the only
21
+ *non-reasoning* model, so no zero-reasoning option remains; this is the least-cost working
22
+ choice, not a free one.
23
+ 2. **Re-point now vs. build the drift-resilient fallback first?** Chose to ship the re-point
24
+ immediately (it stops an active fleet-wide failure) and leave the structural fallback
25
+ (validate-against-known-good + auto-fall-back on a 400) as a follow-up. Rationale: the
26
+ urgent fix is small and regression-safe; the fallback is a larger, separately-testable
27
+ surface that shouldn't gate the stop-the-bleeding change.
28
+
29
+ ## 1. Cost / quota
30
+
31
+ `fast` was the cheap non-reasoning tier (gpt-5.2 ≈ 103 tokens on a trivial prompt vs ~5–7k
32
+ for reasoning models). Moving it to a reasoning model (`gpt-5.4-mini`) raises per-call token
33
+ burn for all cheap Codex calls. This is **unavoidable** (gpt-5.2 is gone) but worth flagging
34
+ against the known self-inflicted cheap-call 429 pressure on the shared ChatGPT account — it
35
+ makes the structural drift-resilient fallback (and any cheap-call-volume reduction) more
36
+ valuable, not less. No way to keep the old cost without the retired model.
37
+
38
+ ## 2. Tier collapse
39
+
40
+ `fast` now equals `balanced` (`gpt-5.4-mini`). Callers that distinguished the two tiers by
41
+ cost no longer get a cheaper `fast`. Acceptable: there is no cheaper accepted model. Reverts
42
+ automatically if/when a cheaper non-reasoning model is re-added to the map.
43
+
44
+ ## 3. Blast radius / reversibility
45
+
46
+ Two string literals + comment updates + one new test + two updated assertions. Fully
47
+ reversible (revert the two map entries). Claude and Gemini resolvers are untouched
48
+ (framework-scoped branches). No effect on API-key callers passing raw model names (those
49
+ pass through verbatim — unchanged).
50
+
51
+ ## 4. Tests
52
+
53
+ - New `tests/unit/codex-model-tier-resolution.test.ts`: both resolvers per tier + a
54
+ retired-`gpt-5.2` regression guard over `fast/balanced/capable/haiku/sonnet/opus` and the
55
+ undefined default.
56
+ - Updated `session-manager-behavioral` (codex session spawn: haiku → `gpt-5.4-mini`) and
57
+ `StallTriageNurse` (legacy haiku alias → `gpt-5.4-mini`).
58
+ - Transcript-fixture tests that contain `model: 'gpt-5.2'` (TokenLedger, CodexRolloutParser)
59
+ are unchanged — they parse historical rollouts and a past session legitimately used gpt-5.2.
@@ -0,0 +1,29 @@
1
+ ### dev-preflight-new-surface-friction-guard side effects
2
+
3
+ Primary risk reviewed: a developer convenience command could become hidden authority over route
4
+ classification.
5
+
6
+ Decision inventory:
7
+
8
+ - `instar dev:preflight` is verify-only and has no write path.
9
+ - The command never edits `src/server/CapabilityIndex.ts`.
10
+ - The command never mutates route files or server config.
11
+ - The command exits nonzero only for `pnpm lint` or the explicit
12
+ capabilities-discoverability/CapabilityIndex test invocation.
13
+ - Diff route-prefix findings are advisory warnings only.
14
+ - Diff lookup failure is a warning, not a failure, because the canonical guard remains the
15
+ discoverability test.
16
+ - `SafeGitExecutor` now includes `diff` in the explicit `sourceTreeReadOk` read-tier set so this
17
+ command can inspect the current Instar checkout without bypassing the safe git funnel.
18
+
19
+ Secondary risk: the heuristic could miss routes or flag false positives because it is regex-based.
20
+ That is acceptable by design. The heuristic is early friction for authors, not the source of truth.
21
+ The source of truth remains the existing CapabilityIndex registry and its unit tests.
22
+
23
+ Operational risk: running the command can be slow because it runs lint and a targeted Vitest
24
+ invocation. This is deliberate; the command is a contributor preflight, not a server path or
25
+ background job.
26
+
27
+ CI follow-up: manifest IDs must keep the `type:name` shape, so the built-in manifest registers this
28
+ surface as `cli:dev-preflight` while the actual command remains `instar dev:preflight`. Integration
29
+ assertions strip ANSI color before checking summary text because CI may enable color output.