Integrate measured blockers into the hardening plan Make missing JavaScript coverage, staging database isolation, migration lineage, UI policy decisions, typed configuration, and known authorization gaps explicit release gates.
Integrate measured blockers into the hardening plan
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
docs/2026-08-20-integration-hardening-and-staging-readiness-recommendations.md
Diff
1 file changed, +136 -54
docs/2026-08-20-integration-hardening-and-staging-readiness-recommendations.md modified +136 -54
@@ -2,7 +2,7 @@
| 2 | 2 |
|
| 3 | 3 |
|
| 4 | 4 |
|
| 5 |
|
|
| 5 |
|
|
| 6 | 6 |
|
| 7 | 7 |
|
| 8 | 8 |
|
@@ -65,11 +65,20 @@ Create a reliable starting point before changing architecture or infrastructure.
| 65 | 65 |
|
| 66 | 66 |
|
| 67 | 67 |
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 76 |
|
|
| 77 |
|
|
| 78 |
|
|
| 79 |
|
|
| 80 |
|
|
| 81 |
|
|
| 73 | 82 |
|
| 74 | 83 |
|
| 75 | 84 |
|
@@ -255,11 +264,20 @@ Remove the unused parser and update every related document in the same commit.
| 255 | 264 |
|
| 256 | 265 |
|
| 257 | 266 |
|
| 258 |
|
|
| 259 |
|
|
| 267 |
|
|
| 268 |
|
|
| 269 |
|
|
| 270 |
|
|
| 260 | 271 |
|
| 261 |
|
|
| 262 |
|
|
| 272 |
|
|
| 273 |
|
|
| 274 |
|
|
| 275 |
|
|
| 276 |
|
|
| 277 |
|
|
| 278 |
|
|
| 279 |
|
|
| 280 |
|
|
| 263 | 281 |
|
| 264 | 282 |
|
| 265 | 283 |
|
@@ -272,7 +290,8 @@ Remove the unused parser and update every related document in the same commit.
| 272 | 290 |
|
| 273 | 291 |
|
| 274 | 292 |
|
| 275 |
|
|
| 293 |
|
|
| 294 |
|
|
| 276 | 295 |
|
| 277 | 296 |
|
| 278 | 297 |
|
@@ -293,6 +312,10 @@ Validate these groups at boot:
| 293 | 312 |
|
| 294 | 313 |
|
| 295 | 314 |
|
| 315 |
|
|
| 316 |
|
|
| 317 |
|
|
| 318 |
|
|
| 296 | 319 |
|
| 297 | 320 |
|
| 298 | 321 |
|
@@ -310,6 +333,11 @@ Add a command that prints a content-free configuration readiness report. It
| 310 | 333 |
|
| 311 | 334 |
|
| 312 | 335 |
|
| 336 |
|
|
| 337 |
|
|
| 338 |
|
|
| 339 |
|
|
| 340 |
|
|
| 313 | 341 |
|
| 314 | 342 |
|
| 315 | 343 |
|
@@ -392,6 +420,17 @@ Build on the completed controller, LiveView, and domain coverage. Add
| 392 | 420 |
|
| 393 | 421 |
|
| 394 | 422 |
|
| 423 |
|
|
| 424 |
|
|
| 425 |
|
|
| 426 |
|
|
| 427 |
|
|
| 428 |
|
|
| 429 |
|
|
| 430 |
|
|
| 431 |
|
|
| 432 |
|
|
| 433 |
|
|
| 395 | 434 |
|
| 396 | 435 |
|
| 397 | 436 |
|
@@ -425,6 +464,11 @@ owned by another repository, and PostgreSQL enforces the boundary.
| 425 | 464 |
|
| 426 | 465 |
|
| 427 | 466 |
|
| 467 |
|
|
| 468 |
|
|
| 469 |
|
|
| 470 |
|
|
| 471 |
|
|
| 428 | 472 |
|
| 429 | 473 |
|
| 430 | 474 |
|
@@ -551,6 +595,11 @@ fallbacks before broadening the direct-load allowlist.
| 551 | 595 |
|
| 552 | 596 |
|
| 553 | 597 |
|
| 598 |
|
|
| 599 |
|
|
| 600 |
|
|
| 601 |
|
|
| 602 |
|
|
| 554 | 603 |
|
| 555 | 604 |
|
| 556 | 605 |
|
@@ -587,6 +636,11 @@ LiveView, chat, memory, provider, and voice behavior. It cannot by itself prove
| 587 | 636 |
|
| 588 | 637 |
|
| 589 | 638 |
|
| 639 |
|
|
| 640 |
|
|
| 641 |
|
|
| 642 |
|
|
| 643 |
|
|
| 590 | 644 |
|
| 591 | 645 |
|
| 592 | 646 |
|
@@ -628,8 +682,8 @@ as evidence for an OTP relup.
| 628 | 682 |
|
| 629 | 683 |
|
| 630 | 684 |
|
| 631 |
|
|
| 632 |
|
|
| 685 |
|
|
| 686 |
|
|
| 633 | 687 |
|
| 634 | 688 |
|
| 635 | 689 |
|
@@ -637,7 +691,8 @@ as evidence for an OTP relup.
| 637 | 691 |
|
| 638 | 692 |
|
| 639 | 693 |
|
| 640 |
|
|
| 694 |
|
|
| 695 |
|
|
| 641 | 696 |
|
| 642 | 697 |
|
| 643 | 698 |
|
@@ -647,23 +702,28 @@ Use this sequence for every staging candidate:
| 647 | 702 |
|
| 648 | 703 |
|
| 649 | 704 |
|
| 650 |
|
|
| 651 |
|
|
| 652 |
|
|
| 653 |
|
|
| 654 |
|
|
| 655 |
|
|
| 705 |
|
|
| 706 |
|
|
| 707 |
|
|
| 708 |
|
|
| 709 |
|
|
| 710 |
|
|
| 711 |
|
|
| 712 |
|
|
| 713 |
|
|
| 714 |
|
|
| 715 |
|
|
| 656 | 716 |
|
| 657 |
|
|
| 717 |
|
|
| 658 | 718 |
|
| 659 |
|
|
| 660 |
|
|
| 661 |
|
|
| 662 |
|
|
| 719 |
|
|
| 720 |
|
|
| 721 |
|
|
| 722 |
|
|
| 663 | 723 |
|
| 664 |
|
|
| 724 |
|
|
| 665 | 725 |
|
| 666 |
|
|
| 726 |
|
|
| 667 | 727 |
|
| 668 | 728 |
|
| 669 | 729 |
|
@@ -816,6 +876,8 @@ verification.
| 816 | 876 |
|
| 817 | 877 |
|
| 818 | 878 |
|
| 879 |
|
|
| 880 |
|
|
| 819 | 881 |
|
| 820 | 882 |
|
| 821 | 883 |
|
@@ -872,6 +934,8 @@ Production remains blocked while any of these conditions is true:
| 872 | 934 |
|
| 873 | 935 |
|
| 874 | 936 |
|
| 937 |
|
|
| 938 |
|
|
| 875 | 939 |
|
| 876 | 940 |
|
| 877 | 941 |
|
@@ -879,7 +943,10 @@ Production remains blocked while any of these conditions is true:
| 879 | 943 |
|
| 880 | 944 |
|
| 881 | 945 |
|
| 882 |
|
|
| 946 |
|
|
| 947 |
|
|
| 948 |
|
|
| 949 |
|
|
| 883 | 950 |
|
| 884 | 951 |
|
| 885 | 952 |
|
@@ -900,15 +967,15 @@ each handoff.
| 900 | 967 |
|
| 901 | 968 |
|
| 902 | 969 |
|
| 903 |
|
|
| 970 |
|
|
| 904 | 971 |
|
| 905 | 972 |
|
| 906 | 973 |
|
| 907 | 974 |
|
| 908 | 975 |
|
| 909 | 976 |
|
| 910 |
|
|
| 911 |
|
|
| 977 |
|
|
| 978 |
|
|
| 912 | 979 |
|
| 913 | 980 |
|
| 914 | 981 |
|
@@ -918,12 +985,15 @@ each handoff.
| 918 | 985 |
|
| 919 | 986 |
|
| 920 | 987 |
|
| 921 |
|
|
| 988 |
|
|
| 989 |
|
|
| 990 |
|
|
| 922 | 991 |
|
| 923 | 992 |
|
| 924 | 993 |
|
| 925 | 994 |
|
| 926 | 995 |
|
| 996 |
|
|
| 927 | 997 |
|
| 928 | 998 |
|
| 929 | 999 |
|
@@ -932,6 +1002,8 @@ each handoff.
| 932 | 1002 |
|
| 933 | 1003 |
|
| 934 | 1004 |
|
| 1005 |
|
|
| 1006 |
|
|
| 935 | 1007 |
|
| 936 | 1008 |
|
| 937 | 1009 |
|
@@ -939,18 +1011,20 @@ each handoff.
| 939 | 1011 |
|
| 940 | 1012 |
|
| 941 | 1013 |
|
| 942 |
|
|
| 1014 |
|
|
| 943 | 1015 |
|
| 944 | 1016 |
|
| 945 | 1017 |
|
| 946 | 1018 |
|
| 947 |
|
|
| 1019 |
|
|
| 948 | 1020 |
|
| 949 |
|
|
| 950 |
|
|
| 951 |
|
|
| 952 |
|
|
| 953 |
|
|
| 1021 |
|
|
| 1022 |
|
|
| 1023 |
|
|
| 1024 |
|
|
| 1025 |
|
|
| 1026 |
|
|
| 1027 |
|
|
| 954 | 1028 |
|
| 955 | 1029 |
|
| 956 | 1030 |
|
@@ -972,13 +1046,13 @@ Two qualifiers on that coverage number, both already in the coverage audit:
| 972 | 1046 |
|
| 973 | 1047 |
|
| 974 | 1048 |
|
| 975 |
|
|
| 976 |
|
|
| 977 |
|
|
| 978 |
|
|
| 979 |
|
|
| 980 |
|
|
| 981 |
|
|
| 1049 |
|
|
| 1050 |
|
|
| 1051 |
|
|
| 1052 |
|
|
| 1053 |
|
|
| 1054 |
|
|
| 1055 |
|
|
| 982 | 1056 |
|
| 983 | 1057 |
|
| 984 | 1058 |
|
@@ -1012,6 +1086,7 @@ Consequences the plan should state explicitly:
| 1012 | 1086 |
|
| 1013 | 1087 |
|
| 1014 | 1088 |
|
| 1089 |
|
|
| 1015 | 1090 |
|
| 1016 | 1091 |
|
| 1017 | 1092 |
|
@@ -1039,11 +1114,16 @@ That fix works for staging precisely because staging has no data worth keeping.
| 1039 | 1114 |
|
| 1040 | 1115 |
|
| 1041 | 1116 |
|
| 1042 |
|
|
| 1117 |
|
|
| 1118 |
|
|
| 1119 |
|
|
| 1043 | 1120 |
|
| 1044 | 1121 |
|
| 1045 | 1122 |
|
| 1046 |
|
|
| 1123 |
|
|
| 1124 |
|
|
| 1125 |
|
|
| 1126 |
|
|
| 1047 | 1127 |
|
| 1048 | 1128 |
|
| 1049 | 1129 |
|
@@ -1097,10 +1177,10 @@ Separately, `Tools.Registry.install!` reads
| 1097 | 1177 |
|
| 1098 | 1178 |
|
| 1099 | 1179 |
|
| 1100 |
|
|
| 1101 |
|
|
| 1102 |
|
|
| 1103 |
|
|
| 1180 |
|
|
| 1181 |
|
|
| 1182 |
|
|
| 1183 |
|
|
| 1104 | 1184 |
|
| 1105 | 1185 |
|
| 1106 | 1186 |
|
@@ -1108,7 +1188,8 @@ with repo *paths* (`"lib/openagents"`, `"config"`, `"mix.exs"`) while
| 1108 | 1188 |
|
| 1109 | 1189 |
|
| 1110 | 1190 |
|
| 1111 |
|
|
| 1191 |
|
|
| 1192 |
|
|
| 1112 | 1193 |
|
| 1113 | 1194 |
|
| 1114 | 1195 |
|
@@ -1126,7 +1207,8 @@ is an authorization gap and not merely a GitHub-shape mismatch.
| 1126 | 1207 |
|
| 1127 | 1208 |
|
| 1128 | 1209 |
|
| 1129 |
|
|
| 1210 |
|
|
| 1211 |
|
|
| 1130 | 1212 |
|
| 1131 | 1213 |
|
| 1132 | 1214 |
|