@miller-tech/uap 1.72.0 → 1.72.1
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +6 -1
- package/dist/models/types.js.map +1 -1
- package/package.json +1 -1
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/src/policies/enforcers/iac_plan_destruction_check.py +128 -0
- package/src/policies/schemas/policies/iac-plan-destruction-check.md +53 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAGzE,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAGlF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAelC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
|
package/dist/models/types.js
CHANGED
|
@@ -94,7 +94,12 @@ export const ModelPresets = {
|
|
|
94
94
|
name: 'Qwen 3.5 35B A3B (llama.cpp)',
|
|
95
95
|
provider: 'custom',
|
|
96
96
|
apiModel: 'qwen35-a3b-iq4xs',
|
|
97
|
-
|
|
97
|
+
// Route through the anthropic-proxy (:4000), NOT llama :8080 directly. The
|
|
98
|
+
// proxy strips Qwen's <think> blocks and applies the tool/finalize guardrails.
|
|
99
|
+
// Hitting :8080 raw under `--reasoning auto` let reasoning leak into
|
|
100
|
+
// `uap deliver`-authored gate scripts (verify.sh became an unclosed <think>
|
|
101
|
+
// block -> bash syntax error -> unsatisfiable gate -> infinite verify loop).
|
|
102
|
+
endpoint: 'http://192.168.1.165:4000/v1',
|
|
98
103
|
maxContextTokens: 262144,
|
|
99
104
|
costPer1MInput: 0,
|
|
100
105
|
costPer1MOutput: 0,
|
package/dist/models/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""iac-plan-destruction-check enforcer.
|
|
3
|
+
|
|
4
|
+
Before an IaC apply/merge, REQUIRE that the terraform plan was reviewed for
|
|
5
|
+
`Destruction`/`must be replaced` events. A lagging pinned version slug against
|
|
6
|
+
an auto-upgraded cluster is a destroy-on-next-apply landmine (2026-05-31: a
|
|
7
|
+
routine dashboard PR's push-to-main apply destroyed an OpenObserve cluster).
|
|
8
|
+
|
|
9
|
+
Gate fires on IaC apply/merge Bash commands:
|
|
10
|
+
- terraform apply
|
|
11
|
+
- gh workflow run <iac-terraform...> with action=apply
|
|
12
|
+
- gh pr merge / gh api ...PUT|PATCH .../merge (only if the PR being merged
|
|
13
|
+
touches infra/terraform/**)
|
|
14
|
+
- git push origin main (only if infra/terraform/** changed)
|
|
15
|
+
|
|
16
|
+
Satisfy by reviewing the plan, then writing
|
|
17
|
+
.uap/iac_plan_reviewed.json -> {"reviewed_at": <epoch>, "no_unexpected_destruction": true}
|
|
18
|
+
(or set env UAP_IAC_PLAN_REVIEWED=1). Ack is valid for 2h.
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
import json
|
|
22
|
+
import os
|
|
23
|
+
import re
|
|
24
|
+
import time
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
import sys
|
|
27
|
+
|
|
28
|
+
sys.path.insert(0, str(Path(__file__).parent))
|
|
29
|
+
from _common import emit, parse_cli, arg_str, repo_root, run # noqa: E402
|
|
30
|
+
|
|
31
|
+
ACK = Path(os.environ.get("UAP_STATE_DIR", ".uap")) / "iac_plan_reviewed.json"
|
|
32
|
+
ACK_TTL = 2 * 60 * 60 # 2 hours
|
|
33
|
+
|
|
34
|
+
# Commands that apply/merge infrastructure.
|
|
35
|
+
APPLY_MARKERS = ("terraform apply",)
|
|
36
|
+
WORKFLOW_APPLY = ("gh workflow run",)
|
|
37
|
+
MERGE_MARKERS = ("gh pr merge", "/merge") # gh api .../pulls/<n>/merge
|
|
38
|
+
PUSH_MAIN = ("git push",)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def branch_touches_iac() -> bool:
|
|
42
|
+
"""True if the current branch diff vs origin/main touches infra/terraform."""
|
|
43
|
+
root = repo_root()
|
|
44
|
+
for ref in ("origin/main...HEAD", "HEAD"):
|
|
45
|
+
rc, out, _ = run(["git", "-C", str(root), "diff", "--name-only", ref], timeout=8)
|
|
46
|
+
if rc == 0 and "infra/terraform/" in out:
|
|
47
|
+
return True
|
|
48
|
+
# staged/working changes too
|
|
49
|
+
rc, out, _ = run(["git", "-C", str(root), "status", "--porcelain"], timeout=8)
|
|
50
|
+
return rc == 0 and "infra/terraform/" in out
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def merge_touches_iac(cmd: str) -> bool:
|
|
54
|
+
"""Decide whether a `gh pr merge`/`gh api .../merge` command touches IaC by
|
|
55
|
+
inspecting the FILES OF THE PR BEING MERGED — not the local working tree.
|
|
56
|
+
|
|
57
|
+
The naive approach falls back to branch_touches_iac(), which reads the
|
|
58
|
+
current checkout. That blocks EVERY `gh pr merge <N>` whenever the local
|
|
59
|
+
tree happens to carry unrelated infra/terraform changes (e.g. untracked
|
|
60
|
+
*.tf files), regardless of what PR <N> actually contains. We pull the PR's
|
|
61
|
+
own file list instead, and only fall back to the local check when no PR
|
|
62
|
+
number can be parsed or the lookup fails.
|
|
63
|
+
"""
|
|
64
|
+
m = re.search(r"gh\s+pr\s+merge\s+(\d+)", cmd) or re.search(r"/pulls/(\d+)/merge", cmd)
|
|
65
|
+
if not m:
|
|
66
|
+
# e.g. `gh pr merge` on the current branch with no number — use local diff.
|
|
67
|
+
return branch_touches_iac()
|
|
68
|
+
pr = m.group(1)
|
|
69
|
+
rc, out, _ = run(
|
|
70
|
+
["gh", "pr", "view", pr, "--json", "files", "-q", ".files[].path"], timeout=20
|
|
71
|
+
)
|
|
72
|
+
if rc != 0:
|
|
73
|
+
# Lookup failed (offline / auth) — fail safe by keeping the gate on.
|
|
74
|
+
return branch_touches_iac()
|
|
75
|
+
return "infra/terraform/" in out
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def ack_fresh() -> bool:
|
|
79
|
+
if os.environ.get("UAP_IAC_PLAN_REVIEWED") == "1":
|
|
80
|
+
return True
|
|
81
|
+
if not ACK.exists():
|
|
82
|
+
return False
|
|
83
|
+
try:
|
|
84
|
+
s = json.loads(ACK.read_text())
|
|
85
|
+
except json.JSONDecodeError:
|
|
86
|
+
return False
|
|
87
|
+
return bool(s.get("no_unexpected_destruction")) and (time.time() - float(s.get("reviewed_at", 0))) < ACK_TTL
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def main() -> None:
|
|
91
|
+
op, args = parse_cli()
|
|
92
|
+
if op not in ("Bash", "bash"):
|
|
93
|
+
emit(True, "not a bash op")
|
|
94
|
+
cmd = (args.get("command") or "").lower()
|
|
95
|
+
|
|
96
|
+
is_tf_apply = any(m in cmd for m in APPLY_MARKERS)
|
|
97
|
+
is_wf_apply = any(m in cmd for m in WORKFLOW_APPLY) and "iac-terraform" in cmd and "apply" in cmd
|
|
98
|
+
is_merge = any(m in cmd for m in MERGE_MARKERS)
|
|
99
|
+
is_push_main = any(m in cmd for m in PUSH_MAIN) and ("origin main" in cmd or "origin head" in cmd or " main" in cmd)
|
|
100
|
+
|
|
101
|
+
if not (is_tf_apply or is_wf_apply or is_merge or is_push_main):
|
|
102
|
+
emit(True, "not an IaC apply/merge command")
|
|
103
|
+
|
|
104
|
+
# Merges/pushes only gated when IaC is actually touched. For `gh pr merge`
|
|
105
|
+
# inspect the PR's own files; for local pushes use the working-tree diff.
|
|
106
|
+
if (is_merge or is_push_main) and not (is_tf_apply or is_wf_apply):
|
|
107
|
+
touches = merge_touches_iac(cmd) if is_merge else branch_touches_iac()
|
|
108
|
+
if not touches:
|
|
109
|
+
emit(True, "merge/push does not touch infra/terraform")
|
|
110
|
+
|
|
111
|
+
if ack_fresh():
|
|
112
|
+
emit(True, "IaC plan-destruction review acknowledged")
|
|
113
|
+
|
|
114
|
+
emit(
|
|
115
|
+
False,
|
|
116
|
+
"iac-plan-destruction-check: review the terraform plan for "
|
|
117
|
+
"'Destruction'/'must be replaced'/'forces replacement' BEFORE this "
|
|
118
|
+
"apply/merge. A lagging pinned version slug against an auto-upgraded "
|
|
119
|
+
"cluster is a destroy-on-next-apply landmine (it destroyed an "
|
|
120
|
+
"OpenObserve cluster on 2026-05-31). After confirming no unexpected "
|
|
121
|
+
"destruction, write .uap/iac_plan_reviewed.json "
|
|
122
|
+
'{"reviewed_at": <epoch>, "no_unexpected_destruction": true} '
|
|
123
|
+
"(valid 2h) or set UAP_IAC_PLAN_REVIEWED=1, then retry.",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
main()
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# iac-plan-destruction-check
|
|
2
|
+
|
|
3
|
+
**Category**: infrastructure
|
|
4
|
+
**Level**: REQUIRED
|
|
5
|
+
**Enforcement Stage**: pre-exec
|
|
6
|
+
**Tags**: terraform, iac, destroy, plan-review, merge, safety
|
|
7
|
+
|
|
8
|
+
## Rule
|
|
9
|
+
|
|
10
|
+
Before an IaC apply/merge, the terraform plan MUST have been reviewed for
|
|
11
|
+
`Destruction` / `must be replaced` / `forces replacement` events.
|
|
12
|
+
|
|
13
|
+
The gate fires on these Bash commands:
|
|
14
|
+
|
|
15
|
+
- `terraform apply`
|
|
16
|
+
- `gh workflow run <iac-terraform...>` with `action=apply`
|
|
17
|
+
- `gh pr merge` / `gh api ...PUT|PATCH .../merge` — **only if the PR being merged touches `infra/terraform/**`**
|
|
18
|
+
- `git push origin main` — only if `infra/terraform/**` changed
|
|
19
|
+
|
|
20
|
+
Satisfy by reviewing the plan, then writing `.uap/iac_plan_reviewed.json`
|
|
21
|
+
(`{"reviewed_at": <epoch>, "no_unexpected_destruction": true}`, valid 2h) or
|
|
22
|
+
setting `UAP_IAC_PLAN_REVIEWED=1`.
|
|
23
|
+
|
|
24
|
+
## Why
|
|
25
|
+
|
|
26
|
+
A lagging pinned version slug against an auto-upgraded cluster is a
|
|
27
|
+
destroy-on-next-apply landmine. On 2026-05-31 a routine dashboard PR's
|
|
28
|
+
push-to-main apply destroyed an OpenObserve cluster because the plan's
|
|
29
|
+
`Destruction` events were never reviewed. Forcing an explicit plan review
|
|
30
|
+
before the apply/merge eliminates the blast radius.
|
|
31
|
+
|
|
32
|
+
## Enforcement
|
|
33
|
+
|
|
34
|
+
Python enforcer `iac_plan_destruction_check.py`.
|
|
35
|
+
|
|
36
|
+
**Merge scoping (important):** for a `gh pr merge <N>` command the enforcer
|
|
37
|
+
inspects **the PR's own file list** via `gh pr view <N> --json files`, NOT the
|
|
38
|
+
local working tree. The earlier implementation read the local checkout
|
|
39
|
+
(`git status` / diff vs `origin/main`), which blocked *every* PR merge whenever
|
|
40
|
+
the working tree carried unrelated `infra/terraform/*.tf` changes (e.g.
|
|
41
|
+
untracked files) — regardless of what the merged PR actually contained. It
|
|
42
|
+
falls back to the local-tree check only when no PR number is parseable or the
|
|
43
|
+
`gh` lookup fails (fail-safe: the gate stays on). Local default-branch pushes
|
|
44
|
+
still use the working-tree diff.
|
|
45
|
+
|
|
46
|
+
```rules
|
|
47
|
+
- title: "IaC apply/merge requires reviewed plan (no unexpected destruction)"
|
|
48
|
+
keywords: [terraform apply, gh pr merge, git push, gh workflow run, iac-terraform]
|
|
49
|
+
antiPatterns: [forces replacement, must be replaced, Destruction]
|
|
50
|
+
- title: "PR merges gated by the PR's own files, not the local tree"
|
|
51
|
+
keywords: [gh pr merge, pulls, merge, infra/terraform]
|
|
52
|
+
antiPatterns: [local-working-tree-false-block]
|
|
53
|
+
```
|