@crvouga/dev-fleet 0.8.0 → 0.9.0
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/README.md +65 -9
- package/agents/audit.md +18 -18
- package/ansible/agents/agents.yml +134 -0
- package/ansible/agents/templates/antigravity.settings.json.j2 +3 -0
- package/ansible/agents/templates/claude.settings.json.j2 +3 -0
- package/ansible/agents/templates/codex.config.toml.j2 +11 -0
- package/ansible/agents/templates/gemini.settings.json.j2 +14 -0
- package/ansible/agents/templates/grok.config.toml.j2 +19 -0
- package/ansible/agents/templates/opencode.json.j2 +24 -0
- package/ansible/agents/templates/receipt.json.j2 +10 -0
- package/ansible/ansible.cfg +14 -0
- package/ansible/github/git.yml +82 -0
- package/ansible/macos/manager-privilege.yml +55 -9
- package/ansible/macos/manager.yml +154 -7
- package/ansible/macos/policy.json +13 -0
- package/ansible/macos/t3-policy.yml +5 -3
- package/ansible/macos/vault-renew.yml +85 -0
- package/ansible/monitoring/agent-darwin.yml +3 -0
- package/ansible/monitoring/agent.yml +2 -0
- package/ansible/monitoring/hub-darwin.yml +3 -0
- package/ansible/monitoring/hub-route-darwin.yml +1 -0
- package/ansible/net/remote-probe.sh +4 -1
- package/ansible/platforms.json +2 -2
- package/ansible/pyproject.toml +5 -0
- package/ansible/ubuntu/baseline.yml +39 -13
- package/ansible/ubuntu/disk-gc.py +6 -2
- package/ansible/ubuntu/firewall.nft.j2 +50 -0
- package/ansible/ubuntu/policy.json +125 -6
- package/ansible/ubuntu/reboot.yml +89 -0
- package/ansible/ubuntu/recovery.yml +13 -3
- package/ansible/ubuntu/t3/policy.json +3 -0
- package/ansible/ubuntu/t3-desktop.yml +23 -2
- package/ansible/ubuntu/t3-headless.yml +128 -0
- package/ansible/ubuntu/t3-health.sh +24 -10
- package/ansible/ubuntu/t3-idle.py +37 -2
- package/ansible/ubuntu/t3-policy.yml +4 -1
- package/ansible/ubuntu/t3-route.yml +1 -0
- package/ansible/ubuntu/tailscale.yml +54 -8
- package/ansible/ubuntu/tasks/browser.yml +3 -0
- package/ansible/ubuntu/tasks/containers-off.yml +43 -0
- package/ansible/ubuntu/tasks/docker.yml +53 -6
- package/ansible/ubuntu/tasks/dpkg.yml +4 -0
- package/ansible/ubuntu/tasks/features.yml +22 -0
- package/ansible/ubuntu/tasks/firewall.yml +172 -0
- package/ansible/ubuntu/tasks/install.yml +2 -1
- package/ansible/ubuntu/tasks/packages.yml +4 -2
- package/ansible/ubuntu/tasks/release.yml +6 -0
- package/ansible/ubuntu/tasks/resources.yml +6 -4
- package/ansible/ubuntu/tasks/services.yml +2 -2
- package/ansible/ubuntu/tasks/sizing.yml +49 -0
- package/ansible/ubuntu/tasks/snapshot.yml +14 -3
- package/ansible/ubuntu/tasks/ssh.yml +61 -4
- package/ansible/ubuntu/tasks/t3-restart.yml +3 -1
- package/ansible/ubuntu/tasks/user.yml +1 -0
- package/ansible/ubuntu/worker-account.yml +117 -0
- package/ansible/uv.lock +265 -0
- package/bin/devfleet.mjs +42 -4
- package/bootstrap/fleet-remote-bootstrap.sh +91 -25
- package/bootstrap/global-config.ts +29 -3
- package/bootstrap/package-smoke.ts +127 -0
- package/bootstrap/pins.ts +189 -0
- package/bootstrap/release-notes.ts +88 -0
- package/bootstrap/release-version.ts +41 -7
- package/bootstrap/worker-features.ts +114 -0
- package/bootstrap/worker-seed.yaml +7 -3
- package/bootstrap/worker-tools.ts +39 -9
- package/cliproxy/README.md +1 -1
- package/cliproxy/docs/health-workflow.example.yml +20 -143
- package/docs/authentication.md +19 -11
- package/docs/consumer-setup.md +42 -27
- package/docs/convergence.md +67 -0
- package/docs/declared.md +61 -34
- package/docs/machine-setup.md +73 -7
- package/docs/manager-setup.md +10 -3
- package/docs/operations.md +64 -9
- package/docs/releasing.md +49 -1
- package/docs/runbooks.md +98 -7
- package/docs/state.md +23 -11
- package/docs/support-matrix.md +40 -4
- package/docs/topology.md +67 -6
- package/docs/ubuntu-sync.md +78 -28
- package/docs/worker-contract.md +122 -19
- package/docs/worker-requirements.md +107 -0
- package/examples/fleet.json +1 -0
- package/examples/workers-from-infrastructure/main.tf +132 -0
- package/examples/workers-from-infrastructure/worker-records.json +14 -0
- package/llms.txt +3 -1
- package/mise.lock +29 -0
- package/mise.toml +5 -3
- package/package.json +2 -2
- package/schema/check-ids.json +1967 -170
- package/schema/check-ids.schema.json +34 -0
- package/schema/fleet.schema.json +327 -8
- package/schema/output/check.schema.json +1 -1
- package/schema/output/fleet-state-definition.schema.json +14 -0
- package/schema/output/fleet-sync-schedule.schema.json +26 -0
- package/schema/output/fleet-sync.schema.json +18 -0
- package/schema/output/report.schema.json +3 -2
- package/schema/worker-record.schema.json +76 -0
- package/src/agents/converge.ts +140 -24
- package/src/agents/files.ts +2 -32
- package/src/agents/native-verify.ts +34 -3
- package/src/agents/secrets.ts +39 -4
- package/src/check-owners.ts +61 -2
- package/src/check-registry.ts +630 -0
- package/src/cli/agent-guide.ts +3 -3
- package/src/cli/cli.ts +4 -0
- package/src/cli/fleet-manifest.ts +9 -3
- package/src/cli/fleet-node-lifecycle.ts +313 -64
- package/src/cli/fleet-node-park.ts +238 -0
- package/src/cli/fleet-node-seed.ts +51 -35
- package/src/cli/fleet-state.ts +2 -1
- package/src/cli/fleet-sync-checkout.ts +7 -0
- package/src/cli/fleet-sync-enrollment.ts +193 -32
- package/src/cli/fleet-sync-forward.ts +4 -0
- package/src/cli/fleet-sync-manager.ts +103 -33
- package/src/cli/fleet-sync-output.ts +31 -11
- package/src/cli/fleet-sync-plan.ts +65 -9
- package/src/cli/fleet-sync-records.ts +113 -0
- package/src/cli/fleet-sync-remote.ts +151 -9
- package/src/cli/fleet-sync-schedule.ts +14 -4
- package/src/cli/fleet-sync-state.ts +28 -16
- package/src/cli/fleet-sync-vault.ts +77 -0
- package/src/cli/fleet-sync-worker.ts +214 -0
- package/src/cli/fleet-sync.ts +150 -19
- package/src/cli/fleet-validate.ts +59 -21
- package/src/cli/fleet-watch.ts +7 -1
- package/src/cli/fleet.ts +87 -5
- package/src/cli/managed-health.ts +25 -1
- package/src/cli/register-fleet.ts +115 -4
- package/src/cli/registry.ts +14 -0
- package/src/cli/tailnet.ts +43 -10
- package/src/cli/ui-data.ts +3 -1
- package/src/cli/worker-usage-report.ts +63 -0
- package/src/clock.ts +42 -0
- package/src/definition.ts +332 -9
- package/src/diagnostics.ts +5 -2
- package/src/exposure.ts +102 -0
- package/src/fleet-config.ts +3 -1
- package/src/git-identity.ts +76 -3
- package/src/ide/ide.ts +5 -0
- package/src/ide/t3.ts +12 -2
- package/src/input-hashes.ts +6 -0
- package/src/machine/machine-class.ts +59 -0
- package/src/machine/platform.ts +90 -11
- package/src/machine/state.ts +37 -15
- package/src/machine/support-matrix.ts +11 -9
- package/src/machine-health.ts +28 -5
- package/src/manager-health.ts +148 -2
- package/src/manager-sync.ts +65 -4
- package/src/monitoring/beszel.ts +8 -8
- package/src/monitoring/enroll.ts +8 -1
- package/src/monitoring/hub-access.ts +10 -4
- package/src/monitoring/systems.ts +138 -0
- package/src/network-definition.ts +13 -4
- package/src/node-converge-linux.ts +136 -27
- package/src/node-converge.ts +13 -3
- package/src/platform/ansible-receipt.ts +17 -2
- package/src/platform/ansible.ts +40 -4
- package/src/platform/manager-host.ts +25 -8
- package/src/platform/resource-verify.ts +18 -7
- package/src/platform/t3-policy.ts +24 -10
- package/src/platform/t3-service.ts +109 -34
- package/src/platform/ubuntu-release.ts +24 -0
- package/src/platform/ubuntu-verify.ts +31 -3
- package/src/platform/ubuntu-worker.ts +58 -0
- package/src/platform/worker-platform.ts +72 -0
- package/src/protocol.ts +1 -1
- package/src/public-reachability.ts +186 -0
- package/src/remote-bootstrap.ts +50 -12
- package/src/remote-operation.ts +18 -4
- package/src/repair-plan.ts +23 -12
- package/src/report.ts +2 -1
- package/src/schedule-check.ts +21 -2
- package/src/secrets.ts +4 -0
- package/src/service-auth.ts +55 -48
- package/src/ssh-connection.ts +141 -0
- package/src/ssh.ts +63 -24
- package/src/state/store.ts +4 -2
- package/src/state/sync.ts +35 -6
- package/src/state/workers.ts +140 -0
- package/src/t3/pairing.ts +59 -0
- package/src/t3/peer-link.ts +333 -0
- package/src/t3/version.ts +1 -1
- package/src/tailnet-cleanup.ts +185 -0
- package/src/tailnet-control.ts +346 -0
- package/src/tailscale.ts +1 -1
- package/src/toolchain-checks.ts +11 -1
- package/src/types.ts +4 -2
- package/src/worker-account.ts +63 -0
- package/src/worker-activity.ts +303 -0
- package/src/worker-capacity.ts +31 -0
- package/src/worker-exposure.ts +388 -0
- package/src/worker-features.ts +201 -0
- package/src/worker-host-checks.ts +71 -20
- package/src/worker-manifest.ts +27 -4
- package/src/worker-parking.ts +70 -0
- package/src/worker-policy.ts +17 -1
- package/src/worker-readiness.ts +15 -3
- package/src/worker-reboot.ts +129 -0
- package/src/worker-records.ts +305 -0
- package/src/worker-seed.ts +16 -11
- package/src/worker-sizing.ts +76 -0
- package/src/cli/schedule-logs.ts +0 -36
package/schema/check-ids.json
CHANGED
|
@@ -1,606 +1,2403 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "Every check ID dev-fleet reports
|
|
2
|
+
"$comment": "Generated by `bun src/check-registry.ts > schema/check-ids.json` from the checks the code reports; features/rules/contracts.feature fails when this file differs. Every check ID dev-fleet reports: what a passing check means; severity, required (a failure blocks readiness unless the run marks the check out of scope) or advisory (reported as a warning or as not required, never blocking); and repair, the fleet-repair recipe that repairs it or the reason only a person can (manual); requirement, a requirement docs/worker-requirements.md lists. A * stands for a name taken from the fleet configuration, a machine or a tool at run time.",
|
|
3
3
|
"version": 1,
|
|
4
4
|
"checks": [
|
|
5
5
|
{
|
|
6
6
|
"id": "accounts:native-login",
|
|
7
|
-
"meaning": "This machine holds no provider login of its own outside the proxy."
|
|
7
|
+
"meaning": "This machine holds no provider login of its own outside the proxy.",
|
|
8
|
+
"severity": "required",
|
|
9
|
+
"repair": {
|
|
10
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
11
|
+
}
|
|
8
12
|
},
|
|
9
13
|
{
|
|
10
14
|
"id": "accounts:roster-current",
|
|
11
|
-
"meaning": "This machine offers exactly the accounts of the proxy's current account roster."
|
|
15
|
+
"meaning": "This machine offers exactly the accounts of the proxy's current account roster.",
|
|
16
|
+
"severity": "required",
|
|
17
|
+
"repair": {
|
|
18
|
+
"manual": "The roster reaches every node with devfleet fleet-sync --only accounts, run from the manager."
|
|
19
|
+
}
|
|
12
20
|
},
|
|
13
21
|
{
|
|
14
22
|
"id": "accounts:verification",
|
|
15
|
-
"meaning": "The provider accounts this machine offers were verified; fails when verification could not run."
|
|
23
|
+
"meaning": "The provider accounts this machine offers were verified; fails when verification could not run.",
|
|
24
|
+
"severity": "required",
|
|
25
|
+
"repair": {
|
|
26
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
27
|
+
}
|
|
16
28
|
},
|
|
17
29
|
{
|
|
18
|
-
"id": "agent
|
|
19
|
-
"meaning": "A coding agent
|
|
30
|
+
"id": "agent:*:*:*",
|
|
31
|
+
"meaning": "A coding agent launches with its fleet profile on this machine.",
|
|
32
|
+
"severity": "required",
|
|
33
|
+
"repair": {
|
|
34
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
35
|
+
}
|
|
20
36
|
},
|
|
21
37
|
{
|
|
22
|
-
"id": "agent
|
|
23
|
-
"meaning": "
|
|
38
|
+
"id": "agent:*:account-*:session",
|
|
39
|
+
"meaning": "An agent instance of one proxy account is signed in and usable on this machine.",
|
|
40
|
+
"severity": "required",
|
|
41
|
+
"repair": {
|
|
42
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
43
|
+
}
|
|
24
44
|
},
|
|
25
45
|
{
|
|
26
46
|
"id": "agent:*:removed-*:session",
|
|
27
|
-
"meaning": "This machine offers no agent instance for an account the proxy no longer holds."
|
|
47
|
+
"meaning": "This machine offers no agent instance for an account the proxy no longer holds.",
|
|
48
|
+
"severity": "required",
|
|
49
|
+
"repair": {
|
|
50
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "agent:antigravity",
|
|
55
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
56
|
+
"severity": "required",
|
|
57
|
+
"repair": {
|
|
58
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "agent:antigravity:session",
|
|
63
|
+
"meaning": "The shared account of a coding agent is signed in and usable.",
|
|
64
|
+
"severity": "required",
|
|
65
|
+
"repair": {
|
|
66
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "agent:antigravity:version",
|
|
71
|
+
"meaning": "A coding agent runs the version the fleet pins.",
|
|
72
|
+
"severity": "required",
|
|
73
|
+
"repair": {
|
|
74
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "agent:claude",
|
|
79
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
80
|
+
"severity": "required",
|
|
81
|
+
"repair": {
|
|
82
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "agent:claude:session",
|
|
87
|
+
"meaning": "The shared account of a coding agent is signed in and usable.",
|
|
88
|
+
"severity": "required",
|
|
89
|
+
"repair": {
|
|
90
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "agent:claude:version",
|
|
95
|
+
"meaning": "A coding agent runs the version the fleet pins.",
|
|
96
|
+
"severity": "required",
|
|
97
|
+
"repair": {
|
|
98
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "agent:codex",
|
|
103
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
104
|
+
"severity": "required",
|
|
105
|
+
"repair": {
|
|
106
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "agent:codex:session",
|
|
111
|
+
"meaning": "The shared account of a coding agent is signed in and usable.",
|
|
112
|
+
"severity": "required",
|
|
113
|
+
"repair": {
|
|
114
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "agent:codex:version",
|
|
119
|
+
"meaning": "A coding agent runs the version the fleet pins.",
|
|
120
|
+
"severity": "required",
|
|
121
|
+
"repair": {
|
|
122
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
123
|
+
}
|
|
28
124
|
},
|
|
29
125
|
{
|
|
30
|
-
"id": "agent
|
|
31
|
-
"meaning": "
|
|
126
|
+
"id": "agent:copilot",
|
|
127
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
128
|
+
"severity": "required",
|
|
129
|
+
"repair": {
|
|
130
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
131
|
+
}
|
|
32
132
|
},
|
|
33
133
|
{
|
|
34
|
-
"id": "agent
|
|
35
|
-
"meaning": "A coding agent
|
|
134
|
+
"id": "agent:cursor",
|
|
135
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
136
|
+
"severity": "required",
|
|
137
|
+
"repair": {
|
|
138
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "agent:gemini",
|
|
143
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
144
|
+
"severity": "required",
|
|
145
|
+
"repair": {
|
|
146
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "agent:grok",
|
|
151
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
152
|
+
"severity": "required",
|
|
153
|
+
"repair": {
|
|
154
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "agent:grok:session",
|
|
159
|
+
"meaning": "The shared account of a coding agent is signed in and usable.",
|
|
160
|
+
"severity": "required",
|
|
161
|
+
"repair": {
|
|
162
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "agent:grok:version",
|
|
167
|
+
"meaning": "A coding agent runs the version the fleet pins.",
|
|
168
|
+
"severity": "required",
|
|
169
|
+
"repair": {
|
|
170
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "agent:muse:session",
|
|
175
|
+
"meaning": "The shared account of a coding agent is signed in and usable.",
|
|
176
|
+
"severity": "required",
|
|
177
|
+
"repair": {
|
|
178
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"id": "agent:muse:version",
|
|
183
|
+
"meaning": "A coding agent runs the version the fleet pins.",
|
|
184
|
+
"severity": "required",
|
|
185
|
+
"repair": {
|
|
186
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"id": "agent:opencode",
|
|
191
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
192
|
+
"severity": "required",
|
|
193
|
+
"repair": {
|
|
194
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
195
|
+
}
|
|
36
196
|
},
|
|
37
197
|
{
|
|
38
198
|
"id": "agent:profiles",
|
|
39
|
-
"meaning": "The fleet's agent profiles are written on this machine."
|
|
199
|
+
"meaning": "The fleet's agent profiles are written on this machine.",
|
|
200
|
+
"severity": "required",
|
|
201
|
+
"repair": {
|
|
202
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
203
|
+
}
|
|
40
204
|
},
|
|
41
205
|
{
|
|
42
206
|
"id": "agent:service-environment",
|
|
43
|
-
"meaning": "The environment agent services start with is complete."
|
|
207
|
+
"meaning": "The environment agent services start with is complete.",
|
|
208
|
+
"severity": "required",
|
|
209
|
+
"repair": {
|
|
210
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"id": "agent:t3",
|
|
215
|
+
"meaning": "A coding agent CLI is installed at its pinned version on this machine.",
|
|
216
|
+
"severity": "required",
|
|
217
|
+
"repair": {
|
|
218
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
219
|
+
}
|
|
44
220
|
},
|
|
45
221
|
{
|
|
46
222
|
"id": "agent:verification",
|
|
47
|
-
"meaning": "Every coding agent was verified; fails when verification could not run."
|
|
223
|
+
"meaning": "Every coding agent was verified; fails when verification could not run.",
|
|
224
|
+
"severity": "required",
|
|
225
|
+
"repair": {
|
|
226
|
+
"manual": "Re-converge the machine with fleet-sync; an agent that needs a sign-in is a person’s."
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"id": "auth:antigravity",
|
|
231
|
+
"meaning": "Not applicable: antigravity has no sign-in of its own on this machine; its summary names the check that proves its access instead.",
|
|
232
|
+
"severity": "advisory",
|
|
233
|
+
"repair": {
|
|
234
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
235
|
+
}
|
|
48
236
|
},
|
|
49
237
|
{
|
|
50
|
-
"id": "auth
|
|
51
|
-
"meaning": "A required login or capability works in this process context."
|
|
238
|
+
"id": "auth:aws",
|
|
239
|
+
"meaning": "A required login or capability works in this process context.",
|
|
240
|
+
"severity": "required",
|
|
241
|
+
"repair": {
|
|
242
|
+
"recipe": "login:aws"
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"id": "auth:claude",
|
|
247
|
+
"meaning": "A required login or capability works in this process context.",
|
|
248
|
+
"severity": "required",
|
|
249
|
+
"repair": {
|
|
250
|
+
"recipe": "login:claude"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"id": "auth:cloudflare",
|
|
255
|
+
"meaning": "A required login or capability works in this process context.",
|
|
256
|
+
"severity": "required",
|
|
257
|
+
"repair": {
|
|
258
|
+
"recipe": "login:cloudflare"
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "auth:codex",
|
|
263
|
+
"meaning": "A required login or capability works in this process context.",
|
|
264
|
+
"severity": "required",
|
|
265
|
+
"repair": {
|
|
266
|
+
"recipe": "login:codex"
|
|
267
|
+
}
|
|
52
268
|
},
|
|
53
269
|
{
|
|
54
270
|
"id": "auth:copilot",
|
|
55
|
-
"meaning": "Copilot CLI uses the node's GitHub sign-in with a token it accepts."
|
|
271
|
+
"meaning": "Copilot CLI uses the node's GitHub sign-in with a token it accepts.",
|
|
272
|
+
"severity": "required",
|
|
273
|
+
"repair": {
|
|
274
|
+
"recipe": "login:copilot"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "auth:gemini",
|
|
279
|
+
"meaning": "Not applicable: gemini has no sign-in of its own on this machine; its summary names the check that proves its access instead.",
|
|
280
|
+
"severity": "advisory",
|
|
281
|
+
"repair": {
|
|
282
|
+
"recipe": "login:gemini"
|
|
283
|
+
}
|
|
56
284
|
},
|
|
57
285
|
{
|
|
58
286
|
"id": "auth:github",
|
|
59
|
-
"meaning": "gh answers auth status in this context."
|
|
287
|
+
"meaning": "gh answers auth status in this context.",
|
|
288
|
+
"severity": "required",
|
|
289
|
+
"repair": {
|
|
290
|
+
"recipe": "login:github"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"id": "auth:grok",
|
|
295
|
+
"meaning": "Not applicable: grok has no sign-in of its own on this machine; its summary names the check that proves its access instead.",
|
|
296
|
+
"severity": "advisory",
|
|
297
|
+
"repair": {
|
|
298
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"id": "auth:npm",
|
|
303
|
+
"meaning": "A required login or capability works in this process context.",
|
|
304
|
+
"severity": "required",
|
|
305
|
+
"repair": {
|
|
306
|
+
"recipe": "login:npm"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"id": "auth:opencode",
|
|
311
|
+
"meaning": "Not applicable: opencode has no sign-in of its own on this machine; its summary names the check that proves its access instead.",
|
|
312
|
+
"severity": "advisory",
|
|
313
|
+
"repair": {
|
|
314
|
+
"recipe": "login:opencode"
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"id": "auth:railway",
|
|
319
|
+
"meaning": "A required login or capability works in this process context.",
|
|
320
|
+
"severity": "required",
|
|
321
|
+
"repair": {
|
|
322
|
+
"recipe": "login:railway"
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "auth:services",
|
|
327
|
+
"meaning": "A required login or capability works in this process context.",
|
|
328
|
+
"severity": "required",
|
|
329
|
+
"repair": {
|
|
330
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"id": "auth:t3",
|
|
335
|
+
"meaning": "A required login or capability works in this process context.",
|
|
336
|
+
"severity": "required",
|
|
337
|
+
"repair": {
|
|
338
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
339
|
+
}
|
|
60
340
|
},
|
|
61
341
|
{
|
|
62
342
|
"id": "auth:toolchain",
|
|
63
|
-
"meaning": "The pinned toolchain, dependencies and Docker could be checked."
|
|
343
|
+
"meaning": "The pinned toolchain, dependencies and Docker could be checked.",
|
|
344
|
+
"severity": "required",
|
|
345
|
+
"repair": {
|
|
346
|
+
"recipe": "workspace"
|
|
347
|
+
}
|
|
64
348
|
},
|
|
65
349
|
{
|
|
66
350
|
"id": "auth:vault",
|
|
67
|
-
"meaning": "This machine has its own Vault session."
|
|
351
|
+
"meaning": "This machine has its own Vault session.",
|
|
352
|
+
"severity": "required",
|
|
353
|
+
"repair": {
|
|
354
|
+
"recipe": "login:vault"
|
|
355
|
+
}
|
|
68
356
|
},
|
|
69
357
|
{
|
|
70
358
|
"id": "auth:vault-isolation",
|
|
71
|
-
"meaning": "A worker reads its Vault token from a document of its own, not from the fleet's shared one."
|
|
359
|
+
"meaning": "A worker reads its Vault token from a document of its own, not from the fleet's shared one.",
|
|
360
|
+
"severity": "required",
|
|
361
|
+
"repair": {
|
|
362
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"id": "auth:vercel",
|
|
367
|
+
"meaning": "A required login or capability works in this process context.",
|
|
368
|
+
"severity": "required",
|
|
369
|
+
"repair": {
|
|
370
|
+
"recipe": "login:vercel"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"id": "auth:vscode",
|
|
375
|
+
"meaning": "A required login or capability works in this process context.",
|
|
376
|
+
"severity": "required",
|
|
377
|
+
"repair": {
|
|
378
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"id": "auth:worker",
|
|
383
|
+
"meaning": "A required login or capability works in this process context.",
|
|
384
|
+
"severity": "required",
|
|
385
|
+
"repair": {
|
|
386
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
387
|
+
}
|
|
72
388
|
},
|
|
73
389
|
{
|
|
74
390
|
"id": "auth:worker-token",
|
|
75
|
-
"meaning": "A worker has a Vault token of its own that only it and the manager can read, or a retired worker's token is revoked."
|
|
391
|
+
"meaning": "A worker has a Vault token of its own that only it and the manager can read, or a retired worker's token is revoked.",
|
|
392
|
+
"severity": "required",
|
|
393
|
+
"repair": {
|
|
394
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
395
|
+
}
|
|
76
396
|
},
|
|
77
397
|
{
|
|
78
|
-
"id": "
|
|
79
|
-
"meaning": "A
|
|
398
|
+
"id": "auth:workstation",
|
|
399
|
+
"meaning": "A required login or capability works in this process context.",
|
|
400
|
+
"severity": "required",
|
|
401
|
+
"repair": {
|
|
402
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
403
|
+
}
|
|
80
404
|
},
|
|
81
405
|
{
|
|
82
406
|
"id": "beszel:access",
|
|
83
|
-
"meaning": "The monitoring dashboard answers privately."
|
|
407
|
+
"meaning": "The monitoring dashboard answers privately.",
|
|
408
|
+
"severity": "required",
|
|
409
|
+
"repair": {
|
|
410
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"id": "beszel:api",
|
|
415
|
+
"meaning": "The monitoring hub's API answers this account for this machine.",
|
|
416
|
+
"severity": "required",
|
|
417
|
+
"repair": {
|
|
418
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
419
|
+
}
|
|
84
420
|
},
|
|
85
421
|
{
|
|
86
422
|
"id": "beszel:backup",
|
|
87
|
-
"meaning": "The monitoring hub's data is backed up."
|
|
423
|
+
"meaning": "The monitoring hub's data is backed up.",
|
|
424
|
+
"severity": "required",
|
|
425
|
+
"repair": {
|
|
426
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"id": "beszel:connection",
|
|
431
|
+
"meaning": "The monitoring hub reports this machine connected.",
|
|
432
|
+
"severity": "required",
|
|
433
|
+
"repair": {
|
|
434
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
435
|
+
}
|
|
88
436
|
},
|
|
89
437
|
{
|
|
90
438
|
"id": "beszel:disk",
|
|
91
|
-
"meaning": "The monitoring hub's disk use could be verified."
|
|
439
|
+
"meaning": "The monitoring hub's disk use could be verified.",
|
|
440
|
+
"severity": "required",
|
|
441
|
+
"repair": {
|
|
442
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
443
|
+
}
|
|
92
444
|
},
|
|
93
445
|
{
|
|
94
446
|
"id": "beszel:enrollment",
|
|
95
|
-
"meaning": "This machine is enrolled in the monitoring hub."
|
|
447
|
+
"meaning": "This machine is enrolled in the monitoring hub.",
|
|
448
|
+
"severity": "required",
|
|
449
|
+
"repair": {
|
|
450
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"id": "beszel:freshness",
|
|
455
|
+
"meaning": "The monitoring hub received a sample from this machine within 180 seconds.",
|
|
456
|
+
"severity": "required",
|
|
457
|
+
"repair": {
|
|
458
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
459
|
+
}
|
|
96
460
|
},
|
|
97
461
|
{
|
|
98
462
|
"id": "beszel:hub",
|
|
99
|
-
"meaning": "The monitoring hub runs on the manager."
|
|
463
|
+
"meaning": "The monitoring hub runs on the manager.",
|
|
464
|
+
"severity": "required",
|
|
465
|
+
"repair": {
|
|
466
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
467
|
+
}
|
|
100
468
|
},
|
|
101
469
|
{
|
|
102
470
|
"id": "beszel:hub-connection",
|
|
103
|
-
"meaning": "The monitoring agent reaches the hub."
|
|
471
|
+
"meaning": "The monitoring agent reaches the hub.",
|
|
472
|
+
"severity": "required",
|
|
473
|
+
"repair": {
|
|
474
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
475
|
+
}
|
|
104
476
|
},
|
|
105
477
|
{
|
|
106
478
|
"id": "beszel:installation",
|
|
107
|
-
"meaning": "The monitoring agent is installed at its pinned version."
|
|
479
|
+
"meaning": "The monitoring agent is installed at its pinned version.",
|
|
480
|
+
"severity": "required",
|
|
481
|
+
"repair": {
|
|
482
|
+
"recipe": "monitoring"
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"id": "beszel:leftover",
|
|
487
|
+
"meaning": "The monitoring hub watches no system that matches no declared worker.",
|
|
488
|
+
"severity": "advisory",
|
|
489
|
+
"repair": {
|
|
490
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
491
|
+
}
|
|
108
492
|
},
|
|
109
493
|
{
|
|
110
494
|
"id": "beszel:lock",
|
|
111
|
-
"meaning": "Monitoring changes could take the machine's operation lock."
|
|
495
|
+
"meaning": "Monitoring changes could take the machine's operation lock.",
|
|
496
|
+
"severity": "required",
|
|
497
|
+
"repair": {
|
|
498
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
499
|
+
}
|
|
112
500
|
},
|
|
113
501
|
{
|
|
114
502
|
"id": "beszel:operation",
|
|
115
|
-
"meaning": "The monitoring operation completed."
|
|
503
|
+
"meaning": "The monitoring operation completed.",
|
|
504
|
+
"severity": "required",
|
|
505
|
+
"repair": {
|
|
506
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
507
|
+
}
|
|
116
508
|
},
|
|
117
509
|
{
|
|
118
510
|
"id": "beszel:protocol",
|
|
119
|
-
"meaning": "The machine's monitoring evidence is a valid fleet document."
|
|
511
|
+
"meaning": "The machine's monitoring evidence is a valid fleet document.",
|
|
512
|
+
"severity": "required",
|
|
513
|
+
"repair": {
|
|
514
|
+
"recipe": "monitoring"
|
|
515
|
+
}
|
|
120
516
|
},
|
|
121
517
|
{
|
|
122
518
|
"id": "beszel:public-endpoint",
|
|
123
|
-
"meaning": "The public monitoring dashboard answers."
|
|
519
|
+
"meaning": "The public monitoring dashboard answers.",
|
|
520
|
+
"severity": "required",
|
|
521
|
+
"repair": {
|
|
522
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
523
|
+
}
|
|
124
524
|
},
|
|
125
525
|
{
|
|
126
526
|
"id": "beszel:public-viewer",
|
|
127
|
-
"meaning": "The public read-only viewer account works."
|
|
527
|
+
"meaning": "The public read-only viewer account works.",
|
|
528
|
+
"severity": "required",
|
|
529
|
+
"repair": {
|
|
530
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"id": "beszel:registration",
|
|
535
|
+
"meaning": "The monitoring hub holds exactly one system record for this machine.",
|
|
536
|
+
"severity": "required",
|
|
537
|
+
"repair": {
|
|
538
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
539
|
+
}
|
|
128
540
|
},
|
|
129
541
|
{
|
|
130
542
|
"id": "beszel:service",
|
|
131
|
-
"meaning": "The monitoring agent service runs."
|
|
543
|
+
"meaning": "The monitoring agent service runs.",
|
|
544
|
+
"severity": "required",
|
|
545
|
+
"repair": {
|
|
546
|
+
"recipe": "monitoring"
|
|
547
|
+
}
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"id": "beszel:system",
|
|
551
|
+
"meaning": "The monitoring hub's system for a replaced worker watches the new machine, or a retired worker's system is gone.",
|
|
552
|
+
"severity": "required",
|
|
553
|
+
"repair": {
|
|
554
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
555
|
+
}
|
|
132
556
|
},
|
|
133
557
|
{
|
|
134
|
-
"id": "
|
|
135
|
-
"meaning": "
|
|
558
|
+
"id": "beszel:version",
|
|
559
|
+
"meaning": "The monitoring hub runs the pinned Beszel release.",
|
|
560
|
+
"severity": "required",
|
|
561
|
+
"repair": {
|
|
562
|
+
"manual": "The monitoring hub and its accounts are converged by fleet-sync on the manager; follow the remedy, then run fleet-sync."
|
|
563
|
+
}
|
|
136
564
|
},
|
|
137
565
|
{
|
|
138
566
|
"id": "bootstrap:attached",
|
|
139
|
-
"meaning": "The manager followed this machine's running operation of the same revision and reports its result."
|
|
567
|
+
"meaning": "The manager followed this machine's running operation of the same revision and reports its result.",
|
|
568
|
+
"severity": "required",
|
|
569
|
+
"repair": {
|
|
570
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
"id": "bootstrap:bootstrap",
|
|
575
|
+
"meaning": "The worker is a supported Ubuntu release and architecture, not a container or WSL2, reached as a non-root account, and its fleet state directory is safe.",
|
|
576
|
+
"severity": "required",
|
|
577
|
+
"repair": {
|
|
578
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
579
|
+
}
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"id": "bootstrap:cleanup",
|
|
583
|
+
"meaning": "Revision checkouts beyond the current, the applied and the two most recent were removed.",
|
|
584
|
+
"severity": "required",
|
|
585
|
+
"repair": {
|
|
586
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"id": "bootstrap:configuration",
|
|
591
|
+
"meaning": "The node converged at the revision: its configuration, services and evidence.",
|
|
592
|
+
"severity": "required",
|
|
593
|
+
"repair": {
|
|
594
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
595
|
+
}
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
"id": "bootstrap:configuration-install",
|
|
599
|
+
"meaning": "The fleet configuration was written on the worker under its operation lock.",
|
|
600
|
+
"severity": "required",
|
|
601
|
+
"repair": {
|
|
602
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
603
|
+
}
|
|
140
604
|
},
|
|
141
605
|
{
|
|
142
606
|
"id": "bootstrap:exit",
|
|
143
|
-
"meaning": "The remote bootstrap exited without failure."
|
|
607
|
+
"meaning": "The remote bootstrap exited without failure.",
|
|
608
|
+
"severity": "required",
|
|
609
|
+
"repair": {
|
|
610
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"id": "bootstrap:first-boot",
|
|
615
|
+
"meaning": "The machine's own first boot (cloud-init) has finished, or it has none.",
|
|
616
|
+
"severity": "required",
|
|
617
|
+
"repair": {
|
|
618
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"id": "bootstrap:lock",
|
|
623
|
+
"meaning": "The bootstrap holds the worker's fleet operation lock.",
|
|
624
|
+
"severity": "required",
|
|
625
|
+
"repair": {
|
|
626
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
"id": "bootstrap:prerequisites",
|
|
631
|
+
"meaning": "The packages the bootstrap needs are installed; an interrupted package run was finished first.",
|
|
632
|
+
"severity": "required",
|
|
633
|
+
"repair": {
|
|
634
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
635
|
+
}
|
|
144
636
|
},
|
|
145
637
|
{
|
|
146
638
|
"id": "bootstrap:privilege",
|
|
147
|
-
"meaning": "The development account may use sudo without a password."
|
|
639
|
+
"meaning": "The development account may use sudo without a password.",
|
|
640
|
+
"severity": "required",
|
|
641
|
+
"repair": {
|
|
642
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
643
|
+
},
|
|
644
|
+
"requirement": true
|
|
148
645
|
},
|
|
149
646
|
{
|
|
150
647
|
"id": "bootstrap:protocol",
|
|
151
|
-
"meaning": "The remote bootstrap answered with a valid fleet document."
|
|
648
|
+
"meaning": "The remote bootstrap answered with a valid fleet document.",
|
|
649
|
+
"severity": "required",
|
|
650
|
+
"repair": {
|
|
651
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"id": "bootstrap:resources",
|
|
656
|
+
"meaning": "The home file system has the space and inodes the bootstrap needs.",
|
|
657
|
+
"severity": "required",
|
|
658
|
+
"repair": {
|
|
659
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"id": "bootstrap:source-transfer",
|
|
664
|
+
"meaning": "The source bundle arrived with the digest the manager sent.",
|
|
665
|
+
"severity": "required",
|
|
666
|
+
"repair": {
|
|
667
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
668
|
+
}
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"id": "bootstrap:source-verification",
|
|
672
|
+
"meaning": "The fleet-owned checkout holds exactly the revision, with no change fleet-sync did not make.",
|
|
673
|
+
"severity": "required",
|
|
674
|
+
"repair": {
|
|
675
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"id": "bootstrap:tailnet-key",
|
|
680
|
+
"meaning": "The single-use tailnet key was handed to the worker in a root-only file.",
|
|
681
|
+
"severity": "required",
|
|
682
|
+
"repair": {
|
|
683
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
684
|
+
}
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
"id": "bootstrap:toolchain",
|
|
688
|
+
"meaning": "The pinned toolchain converged.",
|
|
689
|
+
"severity": "required",
|
|
690
|
+
"repair": {
|
|
691
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
692
|
+
}
|
|
152
693
|
},
|
|
153
694
|
{
|
|
154
695
|
"id": "configuration:apply",
|
|
155
|
-
"meaning": "The node's configuration (agent profiles, launcher) was applied."
|
|
696
|
+
"meaning": "The node's configuration (agent profiles, launcher) was applied.",
|
|
697
|
+
"severity": "required",
|
|
698
|
+
"repair": {
|
|
699
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
700
|
+
}
|
|
156
701
|
},
|
|
157
702
|
{
|
|
158
703
|
"id": "configuration:operation",
|
|
159
|
-
"meaning": "The remote configuration operation completed."
|
|
704
|
+
"meaning": "The remote configuration operation completed.",
|
|
705
|
+
"severity": "required",
|
|
706
|
+
"repair": {
|
|
707
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
708
|
+
}
|
|
160
709
|
},
|
|
161
710
|
{
|
|
162
711
|
"id": "definition:inventory",
|
|
163
|
-
"meaning": "Ansible reads the inventory the fleet definition describes."
|
|
712
|
+
"meaning": "Ansible reads the inventory the fleet definition describes.",
|
|
713
|
+
"severity": "required",
|
|
714
|
+
"repair": {
|
|
715
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
716
|
+
}
|
|
164
717
|
},
|
|
165
718
|
{
|
|
166
719
|
"id": "definition:playbooks",
|
|
167
|
-
"meaning": "Every playbook passes ansible-playbook --syntax-check."
|
|
720
|
+
"meaning": "Every playbook passes ansible-playbook --syntax-check.",
|
|
721
|
+
"severity": "required",
|
|
722
|
+
"repair": {
|
|
723
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
724
|
+
}
|
|
168
725
|
},
|
|
169
726
|
{
|
|
170
727
|
"id": "definition:schema",
|
|
171
|
-
"meaning": "fleet.json follows every rule of the fleet definition."
|
|
728
|
+
"meaning": "fleet.json follows every rule of the fleet definition.",
|
|
729
|
+
"severity": "required",
|
|
730
|
+
"repair": {
|
|
731
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
732
|
+
}
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"id": "dependencies",
|
|
736
|
+
"meaning": "The checkout's dependencies are installed as its lockfile and inputs declare.",
|
|
737
|
+
"severity": "required",
|
|
738
|
+
"repair": {
|
|
739
|
+
"recipe": "workspace"
|
|
740
|
+
}
|
|
172
741
|
},
|
|
173
742
|
{
|
|
174
743
|
"id": "enrollment:connection",
|
|
175
|
-
"meaning": "The manager has an enrolled connection to this worker."
|
|
744
|
+
"meaning": "The manager has an enrolled connection to this worker.",
|
|
745
|
+
"severity": "required",
|
|
746
|
+
"repair": {
|
|
747
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"id": "enrollment:record",
|
|
752
|
+
"meaning": "A worker whose record disappeared was retired.",
|
|
753
|
+
"severity": "required",
|
|
754
|
+
"repair": {
|
|
755
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
756
|
+
}
|
|
176
757
|
},
|
|
177
758
|
{
|
|
178
759
|
"id": "fleet:enrollment:*",
|
|
179
|
-
"meaning": "A declared worker has a verified SSH and checkout registration."
|
|
760
|
+
"meaning": "A declared worker has a verified SSH and checkout registration.",
|
|
761
|
+
"severity": "required",
|
|
762
|
+
"repair": {
|
|
763
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
764
|
+
}
|
|
180
765
|
},
|
|
181
766
|
{
|
|
182
767
|
"id": "fleet:probe",
|
|
183
|
-
"meaning": "The remote probe could be prepared and completed."
|
|
768
|
+
"meaning": "The remote probe could be prepared and completed.",
|
|
769
|
+
"severity": "required",
|
|
770
|
+
"repair": {
|
|
771
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
772
|
+
}
|
|
184
773
|
},
|
|
185
774
|
{
|
|
186
775
|
"id": "fleet:registration",
|
|
187
|
-
"meaning": "The machine is registered in the roster."
|
|
776
|
+
"meaning": "The machine is registered in the roster.",
|
|
777
|
+
"severity": "required",
|
|
778
|
+
"repair": {
|
|
779
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
780
|
+
}
|
|
188
781
|
},
|
|
189
782
|
{
|
|
190
783
|
"id": "fleet:roster",
|
|
191
|
-
"meaning": "A fleet roster is configured."
|
|
784
|
+
"meaning": "A fleet roster is configured.",
|
|
785
|
+
"severity": "required",
|
|
786
|
+
"repair": {
|
|
787
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
788
|
+
}
|
|
192
789
|
},
|
|
193
790
|
{
|
|
194
791
|
"id": "git:clean",
|
|
195
|
-
"meaning": "The checkout has no uncommitted changes."
|
|
792
|
+
"meaning": "The checkout has no uncommitted changes.",
|
|
793
|
+
"severity": "required",
|
|
794
|
+
"repair": {
|
|
795
|
+
"manual": "Uncommitted or unpushed work belongs to a person; dev-fleet never resets a checkout."
|
|
796
|
+
}
|
|
196
797
|
},
|
|
197
798
|
{
|
|
198
799
|
"id": "git:configuration",
|
|
199
|
-
"meaning": "The declared Git identity and the GitHub credential helper are written in the node's global Git configuration."
|
|
800
|
+
"meaning": "The declared Git identity and the GitHub credential helper are written in the node's global Git configuration.",
|
|
801
|
+
"severity": "required",
|
|
802
|
+
"repair": {
|
|
803
|
+
"manual": "fleet-sync writes the Git identity and credential helper with ansible/github/git.yml; run it from the manager."
|
|
804
|
+
}
|
|
200
805
|
},
|
|
201
806
|
{
|
|
202
807
|
"id": "github:expiry",
|
|
203
|
-
"meaning": "The GitHub token does not expire within the warning window."
|
|
808
|
+
"meaning": "The GitHub token does not expire within the warning window.",
|
|
809
|
+
"severity": "required",
|
|
810
|
+
"repair": {
|
|
811
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
812
|
+
}
|
|
204
813
|
},
|
|
205
814
|
{
|
|
206
815
|
"id": "github:git-credential",
|
|
207
|
-
"meaning": "git asks gh for its GitHub credential."
|
|
816
|
+
"meaning": "git asks gh for its GitHub credential.",
|
|
817
|
+
"severity": "required",
|
|
818
|
+
"repair": {
|
|
819
|
+
"manual": "fleet-sync writes the GitHub credential helper with ansible/github/git.yml when the git block is declared; run it from the manager."
|
|
820
|
+
}
|
|
208
821
|
},
|
|
209
822
|
{
|
|
210
823
|
"id": "github:org-access",
|
|
211
|
-
"meaning": "Single sign-on has authorised the GitHub token for each declared organisation."
|
|
824
|
+
"meaning": "Single sign-on has authorised the GitHub token for each declared organisation.",
|
|
825
|
+
"severity": "required",
|
|
826
|
+
"repair": {
|
|
827
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
828
|
+
}
|
|
212
829
|
},
|
|
213
830
|
{
|
|
214
831
|
"id": "github:permissions",
|
|
215
|
-
"meaning": "The GitHub token has every declared scope and can push to every declared repository."
|
|
832
|
+
"meaning": "The GitHub token has every declared scope and can push to every declared repository.",
|
|
833
|
+
"severity": "required",
|
|
834
|
+
"repair": {
|
|
835
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
836
|
+
}
|
|
216
837
|
},
|
|
217
838
|
{
|
|
218
839
|
"id": "github:principal",
|
|
219
|
-
"meaning": "The node is signed in to GitHub as its declared login."
|
|
840
|
+
"meaning": "The node is signed in to GitHub as its declared login.",
|
|
841
|
+
"severity": "required",
|
|
842
|
+
"repair": {
|
|
843
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
844
|
+
}
|
|
220
845
|
},
|
|
221
846
|
{
|
|
222
847
|
"id": "github:rate-limit",
|
|
223
|
-
"meaning": "The GitHub rate limit left is above the warning floor."
|
|
848
|
+
"meaning": "The GitHub rate limit left is above the warning floor.",
|
|
849
|
+
"severity": "advisory",
|
|
850
|
+
"repair": {
|
|
851
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
852
|
+
}
|
|
224
853
|
},
|
|
225
854
|
{
|
|
226
855
|
"id": "github:sync",
|
|
227
|
-
"meaning": "fleet-sync signed this node in to GitHub from the stored credential."
|
|
856
|
+
"meaning": "fleet-sync signed this node in to GitHub from the stored credential.",
|
|
857
|
+
"severity": "required",
|
|
858
|
+
"repair": {
|
|
859
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
860
|
+
}
|
|
228
861
|
},
|
|
229
862
|
{
|
|
230
863
|
"id": "github:token-current",
|
|
231
|
-
"meaning": "The node uses the GitHub token the store holds now."
|
|
864
|
+
"meaning": "The node uses the GitHub token the store holds now.",
|
|
865
|
+
"severity": "required",
|
|
866
|
+
"repair": {
|
|
867
|
+
"manual": "fleet-sync signs every node in to GitHub from the stored github-token (a worker retries every ten minutes); a token that is missing, expired or short of a scope or organisation needs a person to issue a new one."
|
|
868
|
+
}
|
|
232
869
|
},
|
|
233
870
|
{
|
|
234
871
|
"id": "github:workflow",
|
|
235
|
-
"meaning": "fleet-github-verify completed clone, branch, commit, push, pull request, checks and comment on the sandbox repository."
|
|
872
|
+
"meaning": "fleet-github-verify completed clone, branch, commit, push, pull request, checks and comment on the sandbox repository.",
|
|
873
|
+
"severity": "required",
|
|
874
|
+
"repair": {
|
|
875
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
876
|
+
}
|
|
236
877
|
},
|
|
237
878
|
{
|
|
238
|
-
"id": "
|
|
239
|
-
"meaning": "
|
|
879
|
+
"id": "manager:boot-recovery",
|
|
880
|
+
"meaning": "The manager comes back by itself after a power cut or reboot.",
|
|
881
|
+
"severity": "required",
|
|
882
|
+
"repair": {
|
|
883
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
884
|
+
}
|
|
240
885
|
},
|
|
241
886
|
{
|
|
242
|
-
"id": "manager:
|
|
243
|
-
"meaning": "The manager
|
|
887
|
+
"id": "manager:clock",
|
|
888
|
+
"meaning": "The manager keeps its clock on network time.",
|
|
889
|
+
"severity": "required",
|
|
890
|
+
"repair": {
|
|
891
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
892
|
+
}
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
"id": "manager:container-watchdog",
|
|
896
|
+
"meaning": "No container on the manager was capped or restarted by the container watchdog within the last hour.",
|
|
897
|
+
"severity": "required",
|
|
898
|
+
"repair": {
|
|
899
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
900
|
+
}
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
"id": "manager:disk",
|
|
904
|
+
"meaning": "The manager's data volume has the free space the macOS policy asks for.",
|
|
905
|
+
"severity": "required",
|
|
906
|
+
"repair": {
|
|
907
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
908
|
+
}
|
|
244
909
|
},
|
|
245
910
|
{
|
|
246
911
|
"id": "manager:docker",
|
|
247
|
-
"meaning": "The manager runs the pinned Docker Desktop."
|
|
912
|
+
"meaning": "The manager runs the pinned Docker Desktop.",
|
|
913
|
+
"severity": "advisory",
|
|
914
|
+
"repair": {
|
|
915
|
+
"manual": "Docker Desktop is installed and updated by a person; no playbook installs it."
|
|
916
|
+
}
|
|
248
917
|
},
|
|
249
918
|
{
|
|
250
919
|
"id": "manager:identity",
|
|
251
|
-
"meaning": "This machine is the declared fleet manager."
|
|
920
|
+
"meaning": "This machine is the declared fleet manager.",
|
|
921
|
+
"severity": "required",
|
|
922
|
+
"repair": {
|
|
923
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
924
|
+
}
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
"id": "manager:job-logs",
|
|
928
|
+
"meaning": "newsyslog keeps the logs of the manager's scheduled jobs under the size the macOS policy names.",
|
|
929
|
+
"severity": "advisory",
|
|
930
|
+
"repair": {
|
|
931
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
932
|
+
}
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"id": "manager:playbook",
|
|
936
|
+
"meaning": "The manager playbook passed its check-mode run and was applied, or is unchanged since and its postconditions hold.",
|
|
937
|
+
"severity": "required",
|
|
938
|
+
"repair": {
|
|
939
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
940
|
+
}
|
|
252
941
|
},
|
|
253
942
|
{
|
|
254
943
|
"id": "manager:power",
|
|
255
|
-
"meaning": "The manager never sleeps on AC power."
|
|
944
|
+
"meaning": "The manager never sleeps on AC power.",
|
|
945
|
+
"severity": "required",
|
|
946
|
+
"repair": {
|
|
947
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
948
|
+
}
|
|
256
949
|
},
|
|
257
950
|
{
|
|
258
951
|
"id": "manager:preflight",
|
|
259
|
-
"meaning": "fleet-sync could start on the manager; its summary names the reason when not."
|
|
952
|
+
"meaning": "fleet-sync could start on the manager; its summary names the reason when not.",
|
|
953
|
+
"severity": "required",
|
|
954
|
+
"repair": {
|
|
955
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
"id": "manager:release",
|
|
960
|
+
"meaning": "The manager runs at least the macOS release the macOS policy requires.",
|
|
961
|
+
"severity": "required",
|
|
962
|
+
"repair": {
|
|
963
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
964
|
+
}
|
|
260
965
|
},
|
|
261
966
|
{
|
|
262
967
|
"id": "manager:schedule",
|
|
263
|
-
"meaning": "The manager's schedule converged the fleet within two of its intervals."
|
|
968
|
+
"meaning": "The manager's schedule converged the fleet within two of its intervals.",
|
|
969
|
+
"severity": "required",
|
|
970
|
+
"repair": {
|
|
971
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
972
|
+
}
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"id": "manager:updates",
|
|
976
|
+
"meaning": "No macOS update is pending on the manager.",
|
|
977
|
+
"severity": "advisory",
|
|
978
|
+
"repair": {
|
|
979
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
980
|
+
}
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"id": "manager:vault-renewal",
|
|
984
|
+
"meaning": "The manager is logged in to Vault and its launch agent renews the session.",
|
|
985
|
+
"severity": "required",
|
|
986
|
+
"repair": {
|
|
987
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
988
|
+
}
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"id": "manager:watch",
|
|
992
|
+
"meaning": "fleet-watch runs on the manager on a schedule, so the heartbeat reaches the bucket.",
|
|
993
|
+
"severity": "required",
|
|
994
|
+
"repair": {
|
|
995
|
+
"manual": "The manager converges itself in fleet-sync; what needs an administrator is granted once with ansible-playbook -e user=$(id -un) -K ansible/macos/manager-privilege.yml."
|
|
996
|
+
}
|
|
264
997
|
},
|
|
265
998
|
{
|
|
266
999
|
"id": "notify:configured",
|
|
267
|
-
"meaning": "Every notification target fleet.json names has its address available as a secret."
|
|
1000
|
+
"meaning": "Every notification target fleet.json names has its address available as a secret.",
|
|
1001
|
+
"severity": "required",
|
|
1002
|
+
"repair": {
|
|
1003
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
1004
|
+
}
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"id": "notify:ntfy",
|
|
1008
|
+
"meaning": "A notification target fleet.json names took the notification.",
|
|
1009
|
+
"severity": "required",
|
|
1010
|
+
"repair": {
|
|
1011
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
1012
|
+
}
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
"id": "notify:webhook",
|
|
1016
|
+
"meaning": "A notification target fleet.json names took the notification.",
|
|
1017
|
+
"severity": "required",
|
|
1018
|
+
"repair": {
|
|
1019
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
1020
|
+
}
|
|
268
1021
|
},
|
|
269
1022
|
{
|
|
270
1023
|
"id": "platform:environment",
|
|
271
|
-
"meaning": "The worker runs on a physical or virtual machine of its own, not in a container or WSL2."
|
|
1024
|
+
"meaning": "The worker runs on a physical or virtual machine of its own, not in a container or WSL2.",
|
|
1025
|
+
"severity": "required",
|
|
1026
|
+
"repair": {
|
|
1027
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
1028
|
+
},
|
|
1029
|
+
"requirement": true
|
|
1030
|
+
},
|
|
1031
|
+
{
|
|
1032
|
+
"id": "platform:machine-class",
|
|
1033
|
+
"meaning": "The probe recorded the class of the worker (physical or virtual machine) before anything is installed; a virtual machine reports firmware power recovery and lid policy as not applicable.",
|
|
1034
|
+
"severity": "required",
|
|
1035
|
+
"repair": {
|
|
1036
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
1037
|
+
}
|
|
272
1038
|
},
|
|
273
1039
|
{
|
|
274
1040
|
"id": "platform:unsupported",
|
|
275
|
-
"meaning": "The machine runs a supported operating system."
|
|
1041
|
+
"meaning": "The machine runs a supported operating system.",
|
|
1042
|
+
"severity": "required",
|
|
1043
|
+
"repair": {
|
|
1044
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
1045
|
+
}
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
"id": "platform:worker-size",
|
|
1049
|
+
"meaning": "The worker has at least the stated minimum memory, root filesystem and CPUs (sizing.minimumWorker in the Ubuntu policy), measured before anything is installed.",
|
|
1050
|
+
"severity": "required",
|
|
1051
|
+
"repair": {
|
|
1052
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
1053
|
+
},
|
|
1054
|
+
"requirement": true
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
"id": "provider:antigravity:authentication",
|
|
1058
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1059
|
+
"severity": "required",
|
|
1060
|
+
"repair": {
|
|
1061
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1062
|
+
}
|
|
1063
|
+
},
|
|
1064
|
+
{
|
|
1065
|
+
"id": "provider:antigravity:inference",
|
|
1066
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1067
|
+
"severity": "required",
|
|
1068
|
+
"repair": {
|
|
1069
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1070
|
+
}
|
|
276
1071
|
},
|
|
277
1072
|
{
|
|
278
|
-
"id": "provider
|
|
279
|
-
"meaning": "A proxy provider authenticates unattended."
|
|
1073
|
+
"id": "provider:claude:authentication",
|
|
1074
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1075
|
+
"severity": "required",
|
|
1076
|
+
"repair": {
|
|
1077
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1078
|
+
}
|
|
280
1079
|
},
|
|
281
1080
|
{
|
|
282
|
-
"id": "provider
|
|
283
|
-
"meaning": "A proxy provider answers a bounded inference round trip."
|
|
1081
|
+
"id": "provider:claude:inference",
|
|
1082
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1083
|
+
"severity": "required",
|
|
1084
|
+
"repair": {
|
|
1085
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1086
|
+
}
|
|
1087
|
+
},
|
|
1088
|
+
{
|
|
1089
|
+
"id": "provider:codex:authentication",
|
|
1090
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1091
|
+
"severity": "required",
|
|
1092
|
+
"repair": {
|
|
1093
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1094
|
+
}
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
"id": "provider:codex:inference",
|
|
1098
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1099
|
+
"severity": "required",
|
|
1100
|
+
"repair": {
|
|
1101
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1102
|
+
}
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
"id": "provider:gemini:authentication",
|
|
1106
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1107
|
+
"severity": "required",
|
|
1108
|
+
"repair": {
|
|
1109
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"id": "provider:gemini:inference",
|
|
1114
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1115
|
+
"severity": "required",
|
|
1116
|
+
"repair": {
|
|
1117
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1118
|
+
}
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"id": "provider:grok:authentication",
|
|
1122
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1123
|
+
"severity": "required",
|
|
1124
|
+
"repair": {
|
|
1125
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"id": "provider:grok:inference",
|
|
1130
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1131
|
+
"severity": "required",
|
|
1132
|
+
"repair": {
|
|
1133
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1134
|
+
}
|
|
1135
|
+
},
|
|
1136
|
+
{
|
|
1137
|
+
"id": "provider:muse:authentication",
|
|
1138
|
+
"meaning": "A proxy provider authenticates unattended.",
|
|
1139
|
+
"severity": "required",
|
|
1140
|
+
"repair": {
|
|
1141
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1142
|
+
}
|
|
1143
|
+
},
|
|
1144
|
+
{
|
|
1145
|
+
"id": "provider:muse:inference",
|
|
1146
|
+
"meaning": "A proxy provider answers a bounded inference round trip.",
|
|
1147
|
+
"severity": "required",
|
|
1148
|
+
"repair": {
|
|
1149
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1150
|
+
}
|
|
284
1151
|
},
|
|
285
1152
|
{
|
|
286
1153
|
"id": "provider:verification",
|
|
287
|
-
"meaning": "Every proxy provider was verified; fails when verification could not run."
|
|
1154
|
+
"meaning": "Every proxy provider was verified; fails when verification could not run.",
|
|
1155
|
+
"severity": "required",
|
|
1156
|
+
"repair": {
|
|
1157
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1158
|
+
}
|
|
288
1159
|
},
|
|
289
1160
|
{
|
|
290
1161
|
"id": "proxy:*",
|
|
291
|
-
"meaning": "A phase of the CLI proxy's reconciliation completed."
|
|
1162
|
+
"meaning": "A phase of the CLI proxy's reconciliation completed.",
|
|
1163
|
+
"severity": "required",
|
|
1164
|
+
"repair": {
|
|
1165
|
+
"manual": "The CLI proxy is installed with devfleet cliproxy install and its accounts are signed in by a person."
|
|
1166
|
+
}
|
|
292
1167
|
},
|
|
293
1168
|
{
|
|
294
1169
|
"id": "proxy:account:*",
|
|
295
|
-
"meaning": "A provider has at least one usable account signed in on the CLI proxy."
|
|
1170
|
+
"meaning": "A provider has at least one usable account signed in on the CLI proxy.",
|
|
1171
|
+
"severity": "required",
|
|
1172
|
+
"repair": {
|
|
1173
|
+
"manual": "The CLI proxy is installed with devfleet cliproxy install and its accounts are signed in by a person."
|
|
1174
|
+
}
|
|
296
1175
|
},
|
|
297
1176
|
{
|
|
298
1177
|
"id": "proxy:configuration",
|
|
299
|
-
"meaning": "The CLI proxy's configuration was reconciled."
|
|
1178
|
+
"meaning": "The CLI proxy's configuration was reconciled.",
|
|
1179
|
+
"severity": "required",
|
|
1180
|
+
"repair": {
|
|
1181
|
+
"manual": "The CLI proxy is installed with devfleet cliproxy install and its accounts are signed in by a person."
|
|
1182
|
+
}
|
|
300
1183
|
},
|
|
301
1184
|
{
|
|
302
1185
|
"id": "proxy:reachable-from",
|
|
303
|
-
"meaning": "This machine reaches the CLI proxy, and how fast."
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
1186
|
+
"meaning": "This machine reaches the CLI proxy, and how fast.",
|
|
1187
|
+
"severity": "required",
|
|
1188
|
+
"repair": {
|
|
1189
|
+
"manual": "The CLI proxy is installed with devfleet cliproxy install and its accounts are signed in by a person."
|
|
1190
|
+
},
|
|
1191
|
+
"requirement": true
|
|
308
1192
|
},
|
|
309
1193
|
{
|
|
310
1194
|
"id": "repair:inputs",
|
|
311
|
-
"meaning": "The checkout inputs are unchanged since the diagnostics a repair plan used."
|
|
1195
|
+
"meaning": "The checkout inputs are unchanged since the diagnostics a repair plan used.",
|
|
1196
|
+
"severity": "required",
|
|
1197
|
+
"repair": {
|
|
1198
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1199
|
+
}
|
|
312
1200
|
},
|
|
313
1201
|
{
|
|
314
1202
|
"id": "repair:operation",
|
|
315
|
-
"meaning": "A repair could be prepared and completed."
|
|
1203
|
+
"meaning": "A repair could be prepared and completed.",
|
|
1204
|
+
"severity": "required",
|
|
1205
|
+
"repair": {
|
|
1206
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1207
|
+
}
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
"id": "repair:providers",
|
|
1211
|
+
"meaning": "An automated repair completed.",
|
|
1212
|
+
"severity": "required",
|
|
1213
|
+
"repair": {
|
|
1214
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1215
|
+
}
|
|
316
1216
|
},
|
|
317
1217
|
{
|
|
318
1218
|
"id": "repair:recheck",
|
|
319
|
-
"meaning": "Diagnostics completed again after a repair."
|
|
1219
|
+
"meaning": "Diagnostics completed again after a repair.",
|
|
1220
|
+
"severity": "required",
|
|
1221
|
+
"repair": {
|
|
1222
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1223
|
+
}
|
|
320
1224
|
},
|
|
321
1225
|
{
|
|
322
1226
|
"id": "repair:workspace",
|
|
323
|
-
"meaning": "A complete checkout exists for repairs."
|
|
1227
|
+
"meaning": "A complete checkout exists for repairs.",
|
|
1228
|
+
"severity": "required",
|
|
1229
|
+
"repair": {
|
|
1230
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1231
|
+
}
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"id": "repair:workstation",
|
|
1235
|
+
"meaning": "An automated repair completed.",
|
|
1236
|
+
"severity": "required",
|
|
1237
|
+
"repair": {
|
|
1238
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
{
|
|
1242
|
+
"id": "restore:applied",
|
|
1243
|
+
"meaning": "A replacement manager holds the fleet state from the bucket.",
|
|
1244
|
+
"severity": "required",
|
|
1245
|
+
"repair": {
|
|
1246
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1247
|
+
}
|
|
1248
|
+
},
|
|
1249
|
+
{
|
|
1250
|
+
"id": "restore:bucket",
|
|
1251
|
+
"meaning": "The bucket is named in fleet.json, with credentials for it.",
|
|
1252
|
+
"severity": "required",
|
|
1253
|
+
"repair": {
|
|
1254
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1255
|
+
}
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"id": "restore:configuration",
|
|
1259
|
+
"meaning": "The project's fleet.json is found and valid.",
|
|
1260
|
+
"severity": "required",
|
|
1261
|
+
"repair": {
|
|
1262
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1263
|
+
}
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
"id": "restore:container-engine",
|
|
1267
|
+
"meaning": "The container engine answers on the replacement manager.",
|
|
1268
|
+
"severity": "required",
|
|
1269
|
+
"repair": {
|
|
1270
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1271
|
+
}
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
"id": "restore:git",
|
|
1275
|
+
"meaning": "Git is installed on the replacement manager.",
|
|
1276
|
+
"severity": "required",
|
|
1277
|
+
"repair": {
|
|
1278
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1279
|
+
}
|
|
1280
|
+
},
|
|
1281
|
+
{
|
|
1282
|
+
"id": "restore:host-name",
|
|
1283
|
+
"meaning": "The replacement manager has the host name fleet.json gives the manager.",
|
|
1284
|
+
"severity": "required",
|
|
1285
|
+
"repair": {
|
|
1286
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
"id": "restore:state",
|
|
1291
|
+
"meaning": "The bucket answers and holds the fleet state.",
|
|
1292
|
+
"severity": "required",
|
|
1293
|
+
"repair": {
|
|
1294
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1295
|
+
}
|
|
1296
|
+
},
|
|
1297
|
+
{
|
|
1298
|
+
"id": "restore:tailscale",
|
|
1299
|
+
"meaning": "The replacement manager is signed in to the tailnet.",
|
|
1300
|
+
"severity": "required",
|
|
1301
|
+
"repair": {
|
|
1302
|
+
"manual": "fleet-restore rebuilds a replacement manager from the bucket; what it needs first (the project’s fleet.json, the bucket’s credentials, Git, Docker Desktop, a tailnet sign-in) is the operator’s: follow the remedy, then run fleet-restore again."
|
|
1303
|
+
}
|
|
1304
|
+
},
|
|
1305
|
+
{
|
|
1306
|
+
"id": "revision",
|
|
1307
|
+
"meaning": "The computer's checkout is at the manager's commit.",
|
|
1308
|
+
"severity": "required",
|
|
1309
|
+
"repair": {
|
|
1310
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its branch, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1311
|
+
}
|
|
324
1312
|
},
|
|
325
1313
|
{
|
|
326
1314
|
"id": "rollout:evidence",
|
|
327
|
-
"meaning": "A worker's rollout produced verification evidence."
|
|
1315
|
+
"meaning": "A worker's rollout produced verification evidence.",
|
|
1316
|
+
"severity": "required",
|
|
1317
|
+
"repair": {
|
|
1318
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1319
|
+
}
|
|
328
1320
|
},
|
|
329
1321
|
{
|
|
330
1322
|
"id": "rollout:next",
|
|
331
|
-
"meaning": "Names the command that converges a worker after it was replaced."
|
|
1323
|
+
"meaning": "Names the command that converges a worker after it was replaced.",
|
|
1324
|
+
"severity": "required",
|
|
1325
|
+
"repair": {
|
|
1326
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1327
|
+
}
|
|
1328
|
+
},
|
|
1329
|
+
{
|
|
1330
|
+
"id": "rollout:node",
|
|
1331
|
+
"meaning": "The fleet-sync of one worker that fleet-node-resume runs ended ready.",
|
|
1332
|
+
"severity": "required",
|
|
1333
|
+
"repair": {
|
|
1334
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1335
|
+
}
|
|
332
1336
|
},
|
|
333
1337
|
{
|
|
334
1338
|
"id": "rollout:operation",
|
|
335
|
-
"meaning": "The remote rollout operation completed."
|
|
1339
|
+
"meaning": "The remote rollout operation completed.",
|
|
1340
|
+
"severity": "required",
|
|
1341
|
+
"repair": {
|
|
1342
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1343
|
+
}
|
|
336
1344
|
},
|
|
337
1345
|
{
|
|
338
1346
|
"id": "rollout:prerequisites",
|
|
339
|
-
"meaning": "A worker met the rollout's prerequisites."
|
|
1347
|
+
"meaning": "A worker met the rollout's prerequisites.",
|
|
1348
|
+
"severity": "required",
|
|
1349
|
+
"repair": {
|
|
1350
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1351
|
+
}
|
|
340
1352
|
},
|
|
341
1353
|
{
|
|
342
1354
|
"id": "rollout:promotion",
|
|
343
|
-
"meaning": "The canary proved the revision, so promotion to this worker went ahead."
|
|
1355
|
+
"meaning": "The canary proved the revision, so promotion to this worker went ahead.",
|
|
1356
|
+
"severity": "required",
|
|
1357
|
+
"repair": {
|
|
1358
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1359
|
+
}
|
|
344
1360
|
},
|
|
345
1361
|
{
|
|
346
1362
|
"id": "source:bootstrap",
|
|
347
|
-
"meaning": "The approved bootstrap source is available on the manager."
|
|
1363
|
+
"meaning": "The approved bootstrap source is available on the manager.",
|
|
1364
|
+
"severity": "required",
|
|
1365
|
+
"repair": {
|
|
1366
|
+
"manual": "It reports how a command or a run went, not the state of a machine: repeat the command once its remedy is followed."
|
|
1367
|
+
}
|
|
348
1368
|
},
|
|
349
1369
|
{
|
|
350
1370
|
"id": "ssh:agent",
|
|
351
|
-
"meaning": "The SSH agent exposes at least one identity."
|
|
1371
|
+
"meaning": "The SSH agent exposes at least one identity.",
|
|
1372
|
+
"severity": "required",
|
|
1373
|
+
"repair": {
|
|
1374
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1375
|
+
}
|
|
352
1376
|
},
|
|
353
1377
|
{
|
|
354
1378
|
"id": "ssh:auth",
|
|
355
|
-
"meaning": "SSH key or agent authentication succeeded."
|
|
1379
|
+
"meaning": "SSH key or agent authentication succeeded.",
|
|
1380
|
+
"severity": "required",
|
|
1381
|
+
"repair": {
|
|
1382
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1383
|
+
},
|
|
1384
|
+
"requirement": true
|
|
356
1385
|
},
|
|
357
1386
|
{
|
|
358
1387
|
"id": "ssh:disconnected",
|
|
359
|
-
"meaning": "The SSH session was not lost while an operation ran."
|
|
1388
|
+
"meaning": "The SSH session was not lost while an operation ran.",
|
|
1389
|
+
"severity": "required",
|
|
1390
|
+
"repair": {
|
|
1391
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1392
|
+
}
|
|
360
1393
|
},
|
|
361
1394
|
{
|
|
362
1395
|
"id": "ssh:dns",
|
|
363
|
-
"meaning": "The SSH host name resolved."
|
|
1396
|
+
"meaning": "The SSH host name resolved.",
|
|
1397
|
+
"severity": "required",
|
|
1398
|
+
"repair": {
|
|
1399
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1400
|
+
}
|
|
364
1401
|
},
|
|
365
1402
|
{
|
|
366
1403
|
"id": "ssh:fresh-session",
|
|
367
|
-
"meaning": "A fresh, host-key-verified SSH session succeeded."
|
|
1404
|
+
"meaning": "A fresh, host-key-verified SSH session succeeded.",
|
|
1405
|
+
"severity": "required",
|
|
1406
|
+
"repair": {
|
|
1407
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1408
|
+
}
|
|
368
1409
|
},
|
|
369
1410
|
{
|
|
370
1411
|
"id": "ssh:host-key",
|
|
371
|
-
"meaning": "The worker's SSH host key is known and unchanged."
|
|
1412
|
+
"meaning": "The worker's SSH host key is known and unchanged.",
|
|
1413
|
+
"severity": "required",
|
|
1414
|
+
"repair": {
|
|
1415
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1416
|
+
},
|
|
1417
|
+
"requirement": true
|
|
372
1418
|
},
|
|
373
1419
|
{
|
|
374
1420
|
"id": "ssh:missing",
|
|
375
|
-
"meaning": "The local SSH client could be started."
|
|
1421
|
+
"meaning": "The local SSH client could be started.",
|
|
1422
|
+
"severity": "required",
|
|
1423
|
+
"repair": {
|
|
1424
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1425
|
+
}
|
|
376
1426
|
},
|
|
377
1427
|
{
|
|
378
1428
|
"id": "ssh:network",
|
|
379
|
-
"meaning": "The SSH endpoint is reachable."
|
|
1429
|
+
"meaning": "The SSH endpoint is reachable.",
|
|
1430
|
+
"severity": "required",
|
|
1431
|
+
"repair": {
|
|
1432
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1433
|
+
}
|
|
380
1434
|
},
|
|
381
1435
|
{
|
|
382
1436
|
"id": "ssh:probe",
|
|
383
|
-
"meaning": "A remote probe over SSH succeeded."
|
|
1437
|
+
"meaning": "A remote probe over SSH succeeded.",
|
|
1438
|
+
"severity": "required",
|
|
1439
|
+
"repair": {
|
|
1440
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1441
|
+
}
|
|
384
1442
|
},
|
|
385
1443
|
{
|
|
386
1444
|
"id": "ssh:protocol",
|
|
387
|
-
"meaning": "The remote answer is a supported fleet document."
|
|
1445
|
+
"meaning": "The remote answer is a supported fleet document.",
|
|
1446
|
+
"severity": "required",
|
|
1447
|
+
"repair": {
|
|
1448
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1449
|
+
}
|
|
388
1450
|
},
|
|
389
1451
|
{
|
|
390
1452
|
"id": "ssh:runtime",
|
|
391
|
-
"meaning": "The remote workspace and runtime exist for non-login SSH sessions."
|
|
1453
|
+
"meaning": "The remote workspace and runtime exist for non-login SSH sessions.",
|
|
1454
|
+
"severity": "required",
|
|
1455
|
+
"repair": {
|
|
1456
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1457
|
+
}
|
|
392
1458
|
},
|
|
393
1459
|
{
|
|
394
1460
|
"id": "ssh:session",
|
|
395
|
-
"meaning": "A noninteractive SSH session and probe succeeded."
|
|
1461
|
+
"meaning": "A noninteractive SSH session and probe succeeded.",
|
|
1462
|
+
"severity": "required",
|
|
1463
|
+
"repair": {
|
|
1464
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1465
|
+
}
|
|
396
1466
|
},
|
|
397
1467
|
{
|
|
398
1468
|
"id": "ssh:tailscale-check",
|
|
399
|
-
"meaning": "Tailscale SSH did not require interactive reauthentication."
|
|
1469
|
+
"meaning": "Tailscale SSH did not require interactive reauthentication.",
|
|
1470
|
+
"severity": "required",
|
|
1471
|
+
"repair": {
|
|
1472
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1473
|
+
}
|
|
400
1474
|
},
|
|
401
1475
|
{
|
|
402
1476
|
"id": "ssh:timeout",
|
|
403
|
-
"meaning": "SSH and the remote probe finished within their deadline."
|
|
1477
|
+
"meaning": "SSH and the remote probe finished within their deadline.",
|
|
1478
|
+
"severity": "required",
|
|
1479
|
+
"repair": {
|
|
1480
|
+
"manual": "SSH trust (host keys, keys in the agent, the alias) is set up by a person once per machine; dev-fleet never accepts a host key for you."
|
|
1481
|
+
}
|
|
404
1482
|
},
|
|
405
1483
|
{
|
|
406
|
-
"id": "state
|
|
407
|
-
"meaning": "A
|
|
1484
|
+
"id": "state:bucket",
|
|
1485
|
+
"meaning": "A bucket for the fleet state is configured and reachable.",
|
|
1486
|
+
"severity": "required",
|
|
1487
|
+
"repair": {
|
|
1488
|
+
"manual": "The bucket and its credentials are the operator’s: name them in fleet.json and pass the credentials."
|
|
1489
|
+
}
|
|
408
1490
|
},
|
|
409
1491
|
{
|
|
410
|
-
"id": "state:
|
|
411
|
-
"meaning": "A
|
|
1492
|
+
"id": "state:definition",
|
|
1493
|
+
"meaning": "A document of the fleet state (definition, roster, enrollment) is stored.",
|
|
1494
|
+
"severity": "required",
|
|
1495
|
+
"repair": {
|
|
1496
|
+
"manual": "The fleet configuration (fleet.json) or the roster is wrong: only the operator edits them."
|
|
1497
|
+
}
|
|
1498
|
+
},
|
|
1499
|
+
{
|
|
1500
|
+
"id": "state:enrollment",
|
|
1501
|
+
"meaning": "A document of the fleet state (definition, roster, enrollment) is stored.",
|
|
1502
|
+
"severity": "required",
|
|
1503
|
+
"repair": {
|
|
1504
|
+
"recipe": "state"
|
|
1505
|
+
}
|
|
412
1506
|
},
|
|
413
1507
|
{
|
|
414
1508
|
"id": "state:replica",
|
|
415
|
-
"meaning": "The bucket holds this manager's fleet state."
|
|
1509
|
+
"meaning": "The bucket holds this manager's fleet state.",
|
|
1510
|
+
"severity": "required",
|
|
1511
|
+
"repair": {
|
|
1512
|
+
"recipe": "state"
|
|
1513
|
+
}
|
|
416
1514
|
},
|
|
417
1515
|
{
|
|
418
1516
|
"id": "state:retired",
|
|
419
|
-
"meaning": "The fleet state records that a retired worker was retired."
|
|
1517
|
+
"meaning": "The fleet state records that a retired worker was retired.",
|
|
1518
|
+
"severity": "required",
|
|
1519
|
+
"repair": {
|
|
1520
|
+
"recipe": "state"
|
|
1521
|
+
}
|
|
1522
|
+
},
|
|
1523
|
+
{
|
|
1524
|
+
"id": "state:roster",
|
|
1525
|
+
"meaning": "A document of the fleet state (definition, roster, enrollment) is stored.",
|
|
1526
|
+
"severity": "required",
|
|
1527
|
+
"repair": {
|
|
1528
|
+
"recipe": "state"
|
|
1529
|
+
}
|
|
1530
|
+
},
|
|
1531
|
+
{
|
|
1532
|
+
"id": "sync:bun.lock",
|
|
1533
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1534
|
+
"severity": "required",
|
|
1535
|
+
"repair": {
|
|
1536
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1537
|
+
}
|
|
1538
|
+
},
|
|
1539
|
+
{
|
|
1540
|
+
"id": "sync:mise-sidecars",
|
|
1541
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1542
|
+
"severity": "required",
|
|
1543
|
+
"repair": {
|
|
1544
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1545
|
+
}
|
|
1546
|
+
},
|
|
1547
|
+
{
|
|
1548
|
+
"id": "sync:mise.lock",
|
|
1549
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1550
|
+
"severity": "required",
|
|
1551
|
+
"repair": {
|
|
1552
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1553
|
+
}
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"id": "sync:mise.toml",
|
|
1557
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1558
|
+
"severity": "required",
|
|
1559
|
+
"repair": {
|
|
1560
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1561
|
+
}
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"id": "sync:package.json",
|
|
1565
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1566
|
+
"severity": "required",
|
|
1567
|
+
"repair": {
|
|
1568
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1569
|
+
}
|
|
1570
|
+
},
|
|
1571
|
+
{
|
|
1572
|
+
"id": "sync:workspace-manifests",
|
|
1573
|
+
"meaning": "An input of the computer's checkout (a lockfile, a tool pin, a manifest) matches the manager's.",
|
|
1574
|
+
"severity": "required",
|
|
1575
|
+
"repair": {
|
|
1576
|
+
"manual": "The checkout of that computer differs from the manager’s: reconcile its lockfiles and pins, or converge it with fleet-sync; dev-fleet never resets a working tree."
|
|
1577
|
+
}
|
|
420
1578
|
},
|
|
421
1579
|
{
|
|
422
1580
|
"id": "t3:api",
|
|
423
|
-
"meaning": "The local T3 API answers."
|
|
1581
|
+
"meaning": "The local T3 API answers.",
|
|
1582
|
+
"severity": "required",
|
|
1583
|
+
"repair": {
|
|
1584
|
+
"recipe": "t3"
|
|
1585
|
+
}
|
|
424
1586
|
},
|
|
425
1587
|
{
|
|
426
1588
|
"id": "t3:end-to-end",
|
|
427
|
-
"meaning": "T3 relay and peer access, which need an operator test."
|
|
1589
|
+
"meaning": "T3 relay and peer access, which need an operator test.",
|
|
1590
|
+
"severity": "required",
|
|
1591
|
+
"repair": {
|
|
1592
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1593
|
+
}
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
"id": "t3:link",
|
|
1597
|
+
"meaning": "The manager's T3 link to a replaced or retired worker's old environment is gone, and the manager's T3 is paired with a replacement's new environment.",
|
|
1598
|
+
"severity": "required",
|
|
1599
|
+
"repair": {
|
|
1600
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1601
|
+
}
|
|
428
1602
|
},
|
|
429
1603
|
{
|
|
430
1604
|
"id": "t3:manager-endpoint",
|
|
431
|
-
"meaning": "The manager reaches the worker's private T3 endpoint."
|
|
1605
|
+
"meaning": "The manager reaches the worker's private T3 endpoint.",
|
|
1606
|
+
"severity": "required",
|
|
1607
|
+
"repair": {
|
|
1608
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1609
|
+
}
|
|
432
1610
|
},
|
|
433
1611
|
{
|
|
434
1612
|
"id": "t3:manager-origin",
|
|
435
|
-
"meaning": "The manager's T3 origin is configured."
|
|
1613
|
+
"meaning": "The manager's T3 origin is configured.",
|
|
1614
|
+
"severity": "required",
|
|
1615
|
+
"repair": {
|
|
1616
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1617
|
+
}
|
|
436
1618
|
},
|
|
437
1619
|
{
|
|
438
1620
|
"id": "t3:models",
|
|
439
|
-
"meaning": "T3 offers only the declared models for every account instance the fleet manages."
|
|
1621
|
+
"meaning": "T3 offers only the declared models for every account instance the fleet manages.",
|
|
1622
|
+
"severity": "advisory",
|
|
1623
|
+
"repair": {
|
|
1624
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1625
|
+
}
|
|
440
1626
|
},
|
|
441
1627
|
{
|
|
442
1628
|
"id": "t3:paired-access",
|
|
443
|
-
"meaning": "The manager's T3 is linked to this worker."
|
|
1629
|
+
"meaning": "The manager's T3 is linked to this worker.",
|
|
1630
|
+
"severity": "required",
|
|
1631
|
+
"repair": {
|
|
1632
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1633
|
+
}
|
|
444
1634
|
},
|
|
445
1635
|
{
|
|
446
1636
|
"id": "t3:policy-loaded",
|
|
447
|
-
"meaning": "The running T3 loaded the managed policy."
|
|
1637
|
+
"meaning": "The running T3 loaded the managed policy.",
|
|
1638
|
+
"severity": "required",
|
|
1639
|
+
"repair": {
|
|
1640
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1641
|
+
}
|
|
448
1642
|
},
|
|
449
1643
|
{
|
|
450
1644
|
"id": "t3:policy-staged",
|
|
451
|
-
"meaning": "The managed T3 policy is installed."
|
|
1645
|
+
"meaning": "The managed T3 policy is installed.",
|
|
1646
|
+
"severity": "required",
|
|
1647
|
+
"repair": {
|
|
1648
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1649
|
+
}
|
|
452
1650
|
},
|
|
453
1651
|
{
|
|
454
1652
|
"id": "t3:prerequisites",
|
|
455
|
-
"meaning": "The T3 baseline prerequisites are present."
|
|
1653
|
+
"meaning": "The T3 baseline prerequisites are present.",
|
|
1654
|
+
"severity": "required",
|
|
1655
|
+
"repair": {
|
|
1656
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1657
|
+
}
|
|
456
1658
|
},
|
|
457
1659
|
{
|
|
458
1660
|
"id": "t3:private-route",
|
|
459
|
-
"meaning": "T3's private HTTPS route is served."
|
|
1661
|
+
"meaning": "T3's private HTTPS route is served.",
|
|
1662
|
+
"severity": "required",
|
|
1663
|
+
"repair": {
|
|
1664
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1665
|
+
}
|
|
460
1666
|
},
|
|
461
1667
|
{
|
|
462
1668
|
"id": "t3:profile",
|
|
463
|
-
"meaning": "The declared T3 settings are in place on this machine."
|
|
1669
|
+
"meaning": "The declared T3 settings are in place on this machine.",
|
|
1670
|
+
"severity": "required",
|
|
1671
|
+
"repair": {
|
|
1672
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1673
|
+
}
|
|
464
1674
|
},
|
|
465
1675
|
{
|
|
466
1676
|
"id": "t3:provider-names",
|
|
467
|
-
"meaning": "T3 lists the fleet's provider names."
|
|
1677
|
+
"meaning": "T3 lists the fleet's provider names.",
|
|
1678
|
+
"severity": "required",
|
|
1679
|
+
"repair": {
|
|
1680
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1681
|
+
}
|
|
468
1682
|
},
|
|
469
1683
|
{
|
|
470
1684
|
"id": "t3:providers",
|
|
471
|
-
"meaning": "T3's provider instances are the declared ones."
|
|
1685
|
+
"meaning": "T3's provider instances are the declared ones.",
|
|
1686
|
+
"severity": "required",
|
|
1687
|
+
"repair": {
|
|
1688
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1689
|
+
}
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"id": "t3:running-version",
|
|
1693
|
+
"meaning": "The running T3 server is the installed release; a restart the release needs waits for running agent turns.",
|
|
1694
|
+
"severity": "required",
|
|
1695
|
+
"repair": {
|
|
1696
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1697
|
+
}
|
|
472
1698
|
},
|
|
473
1699
|
{
|
|
474
1700
|
"id": "t3:service",
|
|
475
|
-
"meaning": "The pinned T3 app runs."
|
|
1701
|
+
"meaning": "The pinned T3 app runs.",
|
|
1702
|
+
"severity": "required",
|
|
1703
|
+
"repair": {
|
|
1704
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1705
|
+
}
|
|
476
1706
|
},
|
|
477
1707
|
{
|
|
478
1708
|
"id": "t3:settings",
|
|
479
|
-
"meaning": "T3 settings are readable."
|
|
1709
|
+
"meaning": "T3 settings are readable.",
|
|
1710
|
+
"severity": "required",
|
|
1711
|
+
"repair": {
|
|
1712
|
+
"recipe": "t3"
|
|
1713
|
+
}
|
|
480
1714
|
},
|
|
481
1715
|
{
|
|
482
1716
|
"id": "t3:updates",
|
|
483
|
-
"meaning": "T3's own updater is off, as the fleet's policy declares."
|
|
1717
|
+
"meaning": "T3's own updater is off, as the fleet's policy declares.",
|
|
1718
|
+
"severity": "advisory",
|
|
1719
|
+
"repair": {
|
|
1720
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1721
|
+
}
|
|
484
1722
|
},
|
|
485
1723
|
{
|
|
486
1724
|
"id": "t3:version",
|
|
487
|
-
"meaning": "This machine runs the T3 version the fleet pins."
|
|
1725
|
+
"meaning": "This machine runs the T3 version the fleet pins.",
|
|
1726
|
+
"severity": "required",
|
|
1727
|
+
"repair": {
|
|
1728
|
+
"manual": "A worker’s first T3 pairing and its private route are approved by a person; a replaced worker is paired by fleet-node-replace or the next fleet-sync, and fleet-sync applies the rest."
|
|
1729
|
+
}
|
|
488
1730
|
},
|
|
489
1731
|
{
|
|
490
1732
|
"id": "tailscale:configuration",
|
|
491
|
-
"meaning": "Tailscale is configured as declared."
|
|
1733
|
+
"meaning": "Tailscale is configured as declared.",
|
|
1734
|
+
"severity": "required",
|
|
1735
|
+
"repair": {
|
|
1736
|
+
"recipe": "network"
|
|
1737
|
+
},
|
|
1738
|
+
"requirement": true
|
|
1739
|
+
},
|
|
1740
|
+
{
|
|
1741
|
+
"id": "tailscale:device",
|
|
1742
|
+
"meaning": "A replaced or retired worker's old tailnet device was removed.",
|
|
1743
|
+
"severity": "advisory",
|
|
1744
|
+
"repair": {
|
|
1745
|
+
"manual": "Removing a device needs the tailnet-admin credential and a declared control plane, both the operator’s; without them a person removes it in the admin console."
|
|
1746
|
+
}
|
|
492
1747
|
},
|
|
493
1748
|
{
|
|
494
1749
|
"id": "tailscale:discovery",
|
|
495
|
-
"meaning": "Tailscale computers could be discovered."
|
|
1750
|
+
"meaning": "Tailscale computers could be discovered.",
|
|
1751
|
+
"severity": "required",
|
|
1752
|
+
"repair": {
|
|
1753
|
+
"manual": "Signing a machine in to the tailnet and approving it is a person’s; the daemon itself is repaired by the network recipe."
|
|
1754
|
+
}
|
|
496
1755
|
},
|
|
497
1756
|
{
|
|
498
1757
|
"id": "tailscale:enrolled-identity",
|
|
499
|
-
"meaning": "The Tailscale identity matches the enrollment."
|
|
1758
|
+
"meaning": "The Tailscale identity matches the enrollment.",
|
|
1759
|
+
"severity": "required",
|
|
1760
|
+
"repair": {
|
|
1761
|
+
"manual": "Signing a machine in to the tailnet and approving it is a person’s; the daemon itself is repaired by the network recipe."
|
|
1762
|
+
}
|
|
1763
|
+
},
|
|
1764
|
+
{
|
|
1765
|
+
"id": "tailscale:enrolment-key",
|
|
1766
|
+
"meaning": "A worker that is not on the tailnet yet was handed a single-use, pre-authorised, tagged key minted by the fleet's control plane.",
|
|
1767
|
+
"severity": "required",
|
|
1768
|
+
"repair": {
|
|
1769
|
+
"manual": "The tailnet-admin credential and the tag it may use are the operator’s, kept in the secrets provider and the control plane."
|
|
1770
|
+
}
|
|
500
1771
|
},
|
|
501
1772
|
{
|
|
502
1773
|
"id": "tailscale:identity",
|
|
503
|
-
"meaning": "A machine's Tailscale identity is unambiguous."
|
|
1774
|
+
"meaning": "A machine's Tailscale identity is unambiguous.",
|
|
1775
|
+
"severity": "required",
|
|
1776
|
+
"repair": {
|
|
1777
|
+
"manual": "Signing a machine in to the tailnet and approving it is a person’s; the daemon itself is repaired by the network recipe."
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
{
|
|
1781
|
+
"id": "tailscale:key-expiry",
|
|
1782
|
+
"meaning": "The machine's Tailscale node key does not expire, or not within the warning window.",
|
|
1783
|
+
"severity": "required",
|
|
1784
|
+
"repair": {
|
|
1785
|
+
"manual": "Signing a machine in to the tailnet and approving it is a person’s; the daemon itself is repaired by the network recipe."
|
|
1786
|
+
}
|
|
1787
|
+
},
|
|
1788
|
+
{
|
|
1789
|
+
"id": "tailscale:key-expiry-policy",
|
|
1790
|
+
"meaning": "The control plane disabled node-key expiry for an enrolled worker whose key had one.",
|
|
1791
|
+
"severity": "required",
|
|
1792
|
+
"repair": {
|
|
1793
|
+
"manual": "The tailnet-admin credential and the tag it may use are the operator’s, kept in the secrets provider and the control plane."
|
|
1794
|
+
}
|
|
1795
|
+
},
|
|
1796
|
+
{
|
|
1797
|
+
"id": "tailscale:leftover",
|
|
1798
|
+
"meaning": "Every device on the tailnet that carries the fleet's worker tag is a declared worker (parked ones included) or a device the roster binds; warns, naming the device, for one that is not.",
|
|
1799
|
+
"severity": "advisory",
|
|
1800
|
+
"repair": {
|
|
1801
|
+
"manual": "Whether a device tagged as a worker belongs to the fleet is the operator’s choice: declare it, or remove it from the tailnet."
|
|
1802
|
+
}
|
|
504
1803
|
},
|
|
505
1804
|
{
|
|
506
1805
|
"id": "tailscale:membership",
|
|
507
|
-
"meaning": "A registered machine is in the visible tailnet."
|
|
1806
|
+
"meaning": "A registered machine is in the visible tailnet.",
|
|
1807
|
+
"severity": "required",
|
|
1808
|
+
"repair": {
|
|
1809
|
+
"manual": "Signing a machine in to the tailnet and approving it is a person’s; the daemon itself is repaired by the network recipe."
|
|
1810
|
+
}
|
|
508
1811
|
},
|
|
509
1812
|
{
|
|
510
1813
|
"id": "tailscale:online",
|
|
511
|
-
"meaning": "Tailscale is online on this machine."
|
|
1814
|
+
"meaning": "Tailscale is online on this machine.",
|
|
1815
|
+
"severity": "required",
|
|
1816
|
+
"repair": {
|
|
1817
|
+
"recipe": "network"
|
|
1818
|
+
}
|
|
512
1819
|
},
|
|
513
1820
|
{
|
|
514
1821
|
"id": "tailscale:reachability",
|
|
515
|
-
"meaning": "The machine is online in the tailnet."
|
|
1822
|
+
"meaning": "The machine is online in the tailnet.",
|
|
1823
|
+
"severity": "required",
|
|
1824
|
+
"repair": {
|
|
1825
|
+
"recipe": "network"
|
|
1826
|
+
}
|
|
516
1827
|
},
|
|
517
1828
|
{
|
|
518
1829
|
"id": "tool:*",
|
|
519
|
-
"meaning": "A pinned tool, or the global mise configuration (tool:global-mise-config), is as the revision declares."
|
|
1830
|
+
"meaning": "A pinned tool, or the global mise configuration (tool:global-mise-config), is as the revision declares.",
|
|
1831
|
+
"severity": "required",
|
|
1832
|
+
"repair": {
|
|
1833
|
+
"recipe": "workspace"
|
|
1834
|
+
}
|
|
1835
|
+
},
|
|
1836
|
+
{
|
|
1837
|
+
"id": "tool:docker-cli",
|
|
1838
|
+
"meaning": "Not applicable on a worker whose containers feature is off: the Docker CLI is not one of its tools.",
|
|
1839
|
+
"severity": "required",
|
|
1840
|
+
"repair": {
|
|
1841
|
+
"recipe": "docker"
|
|
1842
|
+
}
|
|
520
1843
|
},
|
|
521
1844
|
{
|
|
522
1845
|
"id": "ubuntu:baseline",
|
|
523
|
-
"meaning": "The Ubuntu baseline policy is applied."
|
|
1846
|
+
"meaning": "The Ubuntu baseline policy is applied.",
|
|
1847
|
+
"severity": "required",
|
|
1848
|
+
"repair": {
|
|
1849
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the Ubuntu baseline."
|
|
1850
|
+
}
|
|
524
1851
|
},
|
|
525
1852
|
{
|
|
526
1853
|
"id": "ubuntu:boot-policy",
|
|
527
|
-
"meaning": "The no-sleep and session boot policy is active."
|
|
1854
|
+
"meaning": "The no-sleep and session boot policy is active.",
|
|
1855
|
+
"severity": "required",
|
|
1856
|
+
"repair": {
|
|
1857
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the Ubuntu baseline."
|
|
1858
|
+
}
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
"id": "ubuntu:lid-policy",
|
|
1862
|
+
"meaning": "Not applicable on a virtual machine, which has no lid; on a physical machine the lid policy is part of ubuntu:boot-policy.",
|
|
1863
|
+
"severity": "required",
|
|
1864
|
+
"repair": {
|
|
1865
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the Ubuntu baseline."
|
|
1866
|
+
}
|
|
528
1867
|
},
|
|
529
1868
|
{
|
|
530
1869
|
"id": "ubuntu:prerequisites",
|
|
531
|
-
"meaning": "The Ubuntu prerequisites are installed."
|
|
1870
|
+
"meaning": "The Ubuntu prerequisites are installed.",
|
|
1871
|
+
"severity": "required",
|
|
1872
|
+
"repair": {
|
|
1873
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the Ubuntu baseline."
|
|
1874
|
+
}
|
|
532
1875
|
},
|
|
533
1876
|
{
|
|
534
1877
|
"id": "ubuntu:release",
|
|
535
|
-
"meaning": "The worker runs the supported Ubuntu release."
|
|
1878
|
+
"meaning": "The worker runs the supported Ubuntu release.",
|
|
1879
|
+
"severity": "required",
|
|
1880
|
+
"repair": {
|
|
1881
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
1882
|
+
},
|
|
1883
|
+
"requirement": true
|
|
536
1884
|
},
|
|
537
1885
|
{
|
|
538
1886
|
"id": "ubuntu:resource-safety",
|
|
539
|
-
"meaning": "The OOM killer, disk guard and resource caps are active."
|
|
1887
|
+
"meaning": "The OOM killer, disk guard and resource caps are active.",
|
|
1888
|
+
"severity": "required",
|
|
1889
|
+
"repair": {
|
|
1890
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the Ubuntu baseline."
|
|
1891
|
+
}
|
|
540
1892
|
},
|
|
541
1893
|
{
|
|
542
1894
|
"id": "vscode:forwarding",
|
|
543
|
-
"meaning": "VS Code Remote-SSH forwarding, which needs an operator test."
|
|
1895
|
+
"meaning": "VS Code Remote-SSH forwarding, which needs an operator test.",
|
|
1896
|
+
"severity": "required",
|
|
1897
|
+
"repair": {
|
|
1898
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
1899
|
+
}
|
|
1900
|
+
},
|
|
1901
|
+
{
|
|
1902
|
+
"id": "watch:heartbeat",
|
|
1903
|
+
"meaning": "fleet-watch stored its heartbeat and each machine's health in the bucket.",
|
|
1904
|
+
"severity": "required",
|
|
1905
|
+
"repair": {
|
|
1906
|
+
"manual": "The heartbeat is kept in the bucket fleet.json names: name it, or restore access to it, then run fleet-watch again."
|
|
1907
|
+
}
|
|
1908
|
+
},
|
|
1909
|
+
{
|
|
1910
|
+
"id": "worker:account",
|
|
1911
|
+
"meaning": "The declared worker account was created over a root login, with the manager's key and the fleet's sudo rule.",
|
|
1912
|
+
"severity": "required",
|
|
1913
|
+
"repair": {
|
|
1914
|
+
"manual": "fleet-sync creates the declared account over a root login; when it cannot, the account is created by the operator on the machine, or declared in fleet.json."
|
|
1915
|
+
},
|
|
1916
|
+
"requirement": true
|
|
544
1917
|
},
|
|
545
1918
|
{
|
|
546
|
-
"id": "worker
|
|
547
|
-
"meaning": "
|
|
1919
|
+
"id": "worker:agent-sessions",
|
|
1920
|
+
"meaning": "How many agent sessions this worker runs, and how many its memory policy supports at the estimated size of a session; warns when more run.",
|
|
1921
|
+
"severity": "required",
|
|
1922
|
+
"repair": {
|
|
1923
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
1924
|
+
}
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
"id": "worker:auto-park",
|
|
1928
|
+
"meaning": "fleet-watch parked a worker idle longer than declared (only with parking.autoPark).",
|
|
1929
|
+
"severity": "advisory",
|
|
1930
|
+
"repair": {
|
|
1931
|
+
"manual": "Whether a worker runs is the operator’s choice: park it with fleet-node-park or resume it with fleet-node-resume."
|
|
1932
|
+
}
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"id": "worker:browser",
|
|
1936
|
+
"meaning": "A headless browser starts on a worker whose tool profiles include web.",
|
|
1937
|
+
"severity": "required",
|
|
1938
|
+
"repair": {
|
|
1939
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
1940
|
+
}
|
|
548
1941
|
},
|
|
549
1942
|
{
|
|
550
1943
|
"id": "worker:capacity",
|
|
551
|
-
"meaning": "CPU, memory and disk evidence is available."
|
|
1944
|
+
"meaning": "CPU, memory and disk evidence is available.",
|
|
1945
|
+
"severity": "required",
|
|
1946
|
+
"repair": {
|
|
1947
|
+
"recipe": "disk"
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"id": "worker:capacity:disk",
|
|
1952
|
+
"meaning": "A worker meets one capacity floor (load, memory, disk, inodes).",
|
|
1953
|
+
"severity": "required",
|
|
1954
|
+
"repair": {
|
|
1955
|
+
"recipe": "disk"
|
|
1956
|
+
}
|
|
1957
|
+
},
|
|
1958
|
+
{
|
|
1959
|
+
"id": "worker:capacity:inodes",
|
|
1960
|
+
"meaning": "A worker meets one capacity floor (load, memory, disk, inodes).",
|
|
1961
|
+
"severity": "required",
|
|
1962
|
+
"repair": {
|
|
1963
|
+
"recipe": "disk"
|
|
1964
|
+
}
|
|
1965
|
+
},
|
|
1966
|
+
{
|
|
1967
|
+
"id": "worker:capacity:load",
|
|
1968
|
+
"meaning": "A worker meets one capacity floor (load, memory, disk, inodes).",
|
|
1969
|
+
"severity": "required",
|
|
1970
|
+
"repair": {
|
|
1971
|
+
"recipe": "disk"
|
|
1972
|
+
}
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"id": "worker:capacity:memory",
|
|
1976
|
+
"meaning": "A worker meets one capacity floor (load, memory, disk, inodes).",
|
|
1977
|
+
"severity": "required",
|
|
1978
|
+
"repair": {
|
|
1979
|
+
"recipe": "disk"
|
|
1980
|
+
}
|
|
1981
|
+
},
|
|
1982
|
+
{
|
|
1983
|
+
"id": "worker:clock",
|
|
1984
|
+
"meaning": "The worker keeps its clock on network time.",
|
|
1985
|
+
"severity": "required",
|
|
1986
|
+
"repair": {
|
|
1987
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
1988
|
+
}
|
|
552
1989
|
},
|
|
553
1990
|
{
|
|
554
|
-
"id": "worker:
|
|
555
|
-
"meaning": "
|
|
1991
|
+
"id": "worker:clock-offset",
|
|
1992
|
+
"meaning": "The worker's clock is within the offset the Ubuntu policy allows of the manager's.",
|
|
1993
|
+
"severity": "required",
|
|
1994
|
+
"repair": {
|
|
1995
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
1996
|
+
}
|
|
1997
|
+
},
|
|
1998
|
+
{
|
|
1999
|
+
"id": "worker:credential-renewal",
|
|
2000
|
+
"meaning": "Worker credential renewal timer is active.",
|
|
2001
|
+
"severity": "required",
|
|
2002
|
+
"repair": {
|
|
2003
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2004
|
+
}
|
|
556
2005
|
},
|
|
557
2006
|
{
|
|
558
2007
|
"id": "worker:desired-source",
|
|
559
|
-
"meaning": "The worker runs the declared revision."
|
|
2008
|
+
"meaning": "The worker runs the declared revision.",
|
|
2009
|
+
"severity": "required",
|
|
2010
|
+
"repair": {
|
|
2011
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2012
|
+
}
|
|
2013
|
+
},
|
|
2014
|
+
{
|
|
2015
|
+
"id": "worker:docker-run",
|
|
2016
|
+
"meaning": "A container starts and exits on a worker whose containers feature is on.",
|
|
2017
|
+
"severity": "required",
|
|
2018
|
+
"repair": {
|
|
2019
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2020
|
+
}
|
|
2021
|
+
},
|
|
2022
|
+
{
|
|
2023
|
+
"id": "worker:exposure",
|
|
2024
|
+
"meaning": "Nothing listens on the worker beyond loopback and the tailnet but what the declared exposure policy allows, and the fleet firewall that closes the rest is loaded; not applicable without an address outside the tailnet.",
|
|
2025
|
+
"severity": "required",
|
|
2026
|
+
"repair": {
|
|
2027
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2028
|
+
},
|
|
2029
|
+
"requirement": true
|
|
2030
|
+
},
|
|
2031
|
+
{
|
|
2032
|
+
"id": "worker:features",
|
|
2033
|
+
"meaning": "The worker has the features fleet.json declares, and nothing dev-fleet installed for a feature that is off (containers) remains.",
|
|
2034
|
+
"severity": "required",
|
|
2035
|
+
"repair": {
|
|
2036
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2037
|
+
}
|
|
2038
|
+
},
|
|
2039
|
+
{
|
|
2040
|
+
"id": "worker:git-identity",
|
|
2041
|
+
"meaning": "The worker's global Git identity is the one fleet.json declares.",
|
|
2042
|
+
"severity": "required",
|
|
2043
|
+
"repair": {
|
|
2044
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2045
|
+
}
|
|
2046
|
+
},
|
|
2047
|
+
{
|
|
2048
|
+
"id": "worker:git-push-auth",
|
|
2049
|
+
"meaning": "The worker can push to the declared repositories with the fleet credentials.",
|
|
2050
|
+
"severity": "required",
|
|
2051
|
+
"repair": {
|
|
2052
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2053
|
+
}
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"id": "worker:git-signing",
|
|
2057
|
+
"meaning": "The worker signs commits as fleet.json declares, or leaves signing off.",
|
|
2058
|
+
"severity": "required",
|
|
2059
|
+
"repair": {
|
|
2060
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2061
|
+
}
|
|
560
2062
|
},
|
|
561
2063
|
{
|
|
562
2064
|
"id": "worker:github-sync",
|
|
563
|
-
"meaning": "The worker is signed in to GitHub from the stored credential as the declared login."
|
|
2065
|
+
"meaning": "The worker is signed in to GitHub from the stored credential as the declared login.",
|
|
2066
|
+
"severity": "required",
|
|
2067
|
+
"repair": {
|
|
2068
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2069
|
+
},
|
|
2070
|
+
"requirement": true
|
|
564
2071
|
},
|
|
565
2072
|
{
|
|
566
|
-
"id": "worker:
|
|
567
|
-
"meaning": "
|
|
2073
|
+
"id": "worker:idle",
|
|
2074
|
+
"meaning": "An active worker runs an agent turn, or has run one within fleet.json's parking.idleAfterHours; warns once it has been idle longer.",
|
|
2075
|
+
"severity": "advisory",
|
|
2076
|
+
"repair": {
|
|
2077
|
+
"manual": "Whether a worker runs is the operator’s choice: park it with fleet-node-park or resume it with fleet-node-resume."
|
|
2078
|
+
}
|
|
568
2079
|
},
|
|
569
2080
|
{
|
|
570
2081
|
"id": "worker:manifest",
|
|
571
|
-
"meaning": "A worker is made of what the declared pins and a fresh build of the same revision are made of."
|
|
2082
|
+
"meaning": "A worker is made of what the declared pins and a fresh build of the same revision are made of.",
|
|
2083
|
+
"severity": "required",
|
|
2084
|
+
"repair": {
|
|
2085
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2086
|
+
}
|
|
2087
|
+
},
|
|
2088
|
+
{
|
|
2089
|
+
"id": "worker:package:ansible-core",
|
|
2090
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2091
|
+
"severity": "required",
|
|
2092
|
+
"repair": {
|
|
2093
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2094
|
+
}
|
|
2095
|
+
},
|
|
2096
|
+
{
|
|
2097
|
+
"id": "worker:package:build-essential",
|
|
2098
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2099
|
+
"severity": "required",
|
|
2100
|
+
"repair": {
|
|
2101
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2102
|
+
}
|
|
2103
|
+
},
|
|
2104
|
+
{
|
|
2105
|
+
"id": "worker:package:ca-certificates",
|
|
2106
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2107
|
+
"severity": "required",
|
|
2108
|
+
"repair": {
|
|
2109
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2110
|
+
}
|
|
2111
|
+
},
|
|
2112
|
+
{
|
|
2113
|
+
"id": "worker:package:curl",
|
|
2114
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2115
|
+
"severity": "required",
|
|
2116
|
+
"repair": {
|
|
2117
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2118
|
+
}
|
|
2119
|
+
},
|
|
2120
|
+
{
|
|
2121
|
+
"id": "worker:package:dconf-cli",
|
|
2122
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2123
|
+
"severity": "required",
|
|
2124
|
+
"repair": {
|
|
2125
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2126
|
+
}
|
|
2127
|
+
},
|
|
2128
|
+
{
|
|
2129
|
+
"id": "worker:package:docker-buildx",
|
|
2130
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2131
|
+
"severity": "required",
|
|
2132
|
+
"repair": {
|
|
2133
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2134
|
+
}
|
|
2135
|
+
},
|
|
2136
|
+
{
|
|
2137
|
+
"id": "worker:package:docker-compose-v2",
|
|
2138
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2139
|
+
"severity": "required",
|
|
2140
|
+
"repair": {
|
|
2141
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2142
|
+
}
|
|
2143
|
+
},
|
|
2144
|
+
{
|
|
2145
|
+
"id": "worker:package:docker.io",
|
|
2146
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2147
|
+
"severity": "required",
|
|
2148
|
+
"repair": {
|
|
2149
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2150
|
+
}
|
|
2151
|
+
},
|
|
2152
|
+
{
|
|
2153
|
+
"id": "worker:package:git",
|
|
2154
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2155
|
+
"severity": "required",
|
|
2156
|
+
"repair": {
|
|
2157
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2158
|
+
}
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
"id": "worker:package:nftables",
|
|
2162
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2163
|
+
"severity": "required",
|
|
2164
|
+
"repair": {
|
|
2165
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2166
|
+
}
|
|
2167
|
+
},
|
|
2168
|
+
{
|
|
2169
|
+
"id": "worker:package:openssh-server",
|
|
2170
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2171
|
+
"severity": "required",
|
|
2172
|
+
"repair": {
|
|
2173
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2174
|
+
}
|
|
2175
|
+
},
|
|
2176
|
+
{
|
|
2177
|
+
"id": "worker:package:python3",
|
|
2178
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2179
|
+
"severity": "required",
|
|
2180
|
+
"repair": {
|
|
2181
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2182
|
+
}
|
|
2183
|
+
},
|
|
2184
|
+
{
|
|
2185
|
+
"id": "worker:package:sudo",
|
|
2186
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2187
|
+
"severity": "required",
|
|
2188
|
+
"repair": {
|
|
2189
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2190
|
+
}
|
|
2191
|
+
},
|
|
2192
|
+
{
|
|
2193
|
+
"id": "worker:package:systemd-oomd",
|
|
2194
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2195
|
+
"severity": "required",
|
|
2196
|
+
"repair": {
|
|
2197
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2198
|
+
}
|
|
2199
|
+
},
|
|
2200
|
+
{
|
|
2201
|
+
"id": "worker:package:tailscale",
|
|
2202
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2203
|
+
"severity": "required",
|
|
2204
|
+
"repair": {
|
|
2205
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2206
|
+
}
|
|
2207
|
+
},
|
|
2208
|
+
{
|
|
2209
|
+
"id": "worker:package:unzip",
|
|
2210
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2211
|
+
"severity": "required",
|
|
2212
|
+
"repair": {
|
|
2213
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2214
|
+
}
|
|
2215
|
+
},
|
|
2216
|
+
{
|
|
2217
|
+
"id": "worker:package:xz-utils",
|
|
2218
|
+
"meaning": "The pinned Ubuntu package is installed at or past its pin.",
|
|
2219
|
+
"severity": "required",
|
|
2220
|
+
"repair": {
|
|
2221
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2222
|
+
}
|
|
2223
|
+
},
|
|
2224
|
+
{
|
|
2225
|
+
"id": "worker:park-hook",
|
|
2226
|
+
"meaning": "The stop or start command fleet.json declares under parking ran for the worker.",
|
|
2227
|
+
"severity": "required",
|
|
2228
|
+
"repair": {
|
|
2229
|
+
"manual": "Whether a worker runs is the operator’s choice: park it with fleet-node-park or resume it with fleet-node-resume."
|
|
2230
|
+
}
|
|
2231
|
+
},
|
|
2232
|
+
{
|
|
2233
|
+
"id": "worker:parked",
|
|
2234
|
+
"meaning": "A worker parked on purpose: listed with the time since, not contacted and never the canary (not-applicable). As a command result, the worker was parked or resumed.",
|
|
2235
|
+
"severity": "required",
|
|
2236
|
+
"repair": {
|
|
2237
|
+
"manual": "Whether a worker runs is the operator’s choice: park it with fleet-node-park or resume it with fleet-node-resume."
|
|
2238
|
+
}
|
|
2239
|
+
},
|
|
2240
|
+
{
|
|
2241
|
+
"id": "worker:parked-online",
|
|
2242
|
+
"meaning": "A parked worker is not online on the tailnet.",
|
|
2243
|
+
"severity": "advisory",
|
|
2244
|
+
"repair": {
|
|
2245
|
+
"manual": "Whether a worker runs is the operator’s choice: park it with fleet-node-park or resume it with fleet-node-resume."
|
|
2246
|
+
}
|
|
572
2247
|
},
|
|
573
2248
|
{
|
|
574
2249
|
"id": "worker:power-loss-recovery",
|
|
575
|
-
"meaning": "The worker powers on after AC loss."
|
|
2250
|
+
"meaning": "The worker powers on after AC loss.",
|
|
2251
|
+
"severity": "required",
|
|
2252
|
+
"repair": {
|
|
2253
|
+
"manual": "It is a property of the hardware, the firmware or the operating system release, which no command changes."
|
|
2254
|
+
}
|
|
576
2255
|
},
|
|
577
2256
|
{
|
|
578
2257
|
"id": "worker:proxy-authentication",
|
|
579
|
-
"meaning": "The worker authenticates to the shared proxy."
|
|
2258
|
+
"meaning": "The worker authenticates to the shared proxy.",
|
|
2259
|
+
"severity": "required",
|
|
2260
|
+
"repair": {
|
|
2261
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2262
|
+
}
|
|
580
2263
|
},
|
|
581
2264
|
{
|
|
582
2265
|
"id": "worker:proxy-singleton",
|
|
583
|
-
"meaning": "The worker is a proxy client, not a second gateway."
|
|
2266
|
+
"meaning": "The worker is a proxy client, not a second gateway.",
|
|
2267
|
+
"severity": "required",
|
|
2268
|
+
"repair": {
|
|
2269
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2270
|
+
}
|
|
2271
|
+
},
|
|
2272
|
+
{
|
|
2273
|
+
"id": "worker:public-reachability",
|
|
2274
|
+
"meaning": "From the manager, the worker's SSH, T3 and monitoring ports accept no connection on its public address; optional, and not applicable when Tailscale knows no public address for it.",
|
|
2275
|
+
"severity": "advisory",
|
|
2276
|
+
"repair": {
|
|
2277
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2278
|
+
},
|
|
2279
|
+
"requirement": true
|
|
584
2280
|
},
|
|
585
2281
|
{
|
|
586
2282
|
"id": "worker:readiness",
|
|
587
|
-
"meaning": "The worker readiness checks could run."
|
|
2283
|
+
"meaning": "The worker readiness checks could run.",
|
|
2284
|
+
"severity": "required",
|
|
2285
|
+
"repair": {
|
|
2286
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2287
|
+
}
|
|
2288
|
+
},
|
|
2289
|
+
{
|
|
2290
|
+
"id": "worker:reboot",
|
|
2291
|
+
"meaning": "The worker was rebooted while it ran no agent turn (after its first converge, or for maintenance), answered again and was converged once more.",
|
|
2292
|
+
"severity": "required",
|
|
2293
|
+
"repair": {
|
|
2294
|
+
"manual": "A reboot ends running agent turns, so it waits for them: rerun fleet-sync --maintenance-reboot once they end, or with --force."
|
|
2295
|
+
},
|
|
2296
|
+
"requirement": true
|
|
2297
|
+
},
|
|
2298
|
+
{
|
|
2299
|
+
"id": "worker:reboot-pending",
|
|
2300
|
+
"meaning": "The worker needs no reboot to finish an update.",
|
|
2301
|
+
"severity": "required",
|
|
2302
|
+
"repair": {
|
|
2303
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2304
|
+
}
|
|
588
2305
|
},
|
|
589
2306
|
{
|
|
590
2307
|
"id": "worker:service-recovery",
|
|
591
|
-
"meaning": "Worker services recover after failure."
|
|
2308
|
+
"meaning": "Worker services recover after failure.",
|
|
2309
|
+
"severity": "required",
|
|
2310
|
+
"repair": {
|
|
2311
|
+
"recipe": "recovery"
|
|
2312
|
+
}
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
"id": "worker:service:beszel-agent",
|
|
2316
|
+
"meaning": "A service every worker runs is active, enabled for boot and restarts unconditionally.",
|
|
2317
|
+
"severity": "required",
|
|
2318
|
+
"repair": {
|
|
2319
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2320
|
+
}
|
|
2321
|
+
},
|
|
2322
|
+
{
|
|
2323
|
+
"id": "worker:service:docker",
|
|
2324
|
+
"meaning": "A service every worker runs is active, enabled for boot and restarts unconditionally.",
|
|
2325
|
+
"severity": "required",
|
|
2326
|
+
"repair": {
|
|
2327
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2328
|
+
}
|
|
2329
|
+
},
|
|
2330
|
+
{
|
|
2331
|
+
"id": "worker:service:ssh",
|
|
2332
|
+
"meaning": "A service every worker runs is active, enabled for boot and restarts unconditionally.",
|
|
2333
|
+
"severity": "required",
|
|
2334
|
+
"repair": {
|
|
2335
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2336
|
+
}
|
|
2337
|
+
},
|
|
2338
|
+
{
|
|
2339
|
+
"id": "worker:service:tailscaled",
|
|
2340
|
+
"meaning": "A service every worker runs is active, enabled for boot and restarts unconditionally.",
|
|
2341
|
+
"severity": "required",
|
|
2342
|
+
"repair": {
|
|
2343
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2344
|
+
}
|
|
2345
|
+
},
|
|
2346
|
+
{
|
|
2347
|
+
"id": "worker:sudo",
|
|
2348
|
+
"meaning": "Designated worker user has noninteractive sudo.",
|
|
2349
|
+
"severity": "required",
|
|
2350
|
+
"repair": {
|
|
2351
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2352
|
+
}
|
|
2353
|
+
},
|
|
2354
|
+
{
|
|
2355
|
+
"id": "worker:t3-health",
|
|
2356
|
+
"meaning": "T3 local API answers with its environment identity within 10 seconds.",
|
|
2357
|
+
"severity": "required",
|
|
2358
|
+
"repair": {
|
|
2359
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2360
|
+
}
|
|
2361
|
+
},
|
|
2362
|
+
{
|
|
2363
|
+
"id": "worker:t3-recovery",
|
|
2364
|
+
"meaning": "The worker's T3 service is active, enabled for boot and restarts after a failure.",
|
|
2365
|
+
"severity": "required",
|
|
2366
|
+
"repair": {
|
|
2367
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2368
|
+
}
|
|
2369
|
+
},
|
|
2370
|
+
{
|
|
2371
|
+
"id": "worker:ubuntu",
|
|
2372
|
+
"meaning": "Required Ubuntu release and architecture.",
|
|
2373
|
+
"severity": "required",
|
|
2374
|
+
"repair": {
|
|
2375
|
+
"manual": "Re-converge the worker with fleet-sync: it applies the whole worker policy at the approved revision."
|
|
2376
|
+
}
|
|
592
2377
|
},
|
|
593
2378
|
{
|
|
594
2379
|
"id": "worker:vault-renewal",
|
|
595
|
-
"meaning": "The worker renews its Vault identity unattended."
|
|
2380
|
+
"meaning": "The worker renews its Vault identity unattended.",
|
|
2381
|
+
"severity": "required",
|
|
2382
|
+
"repair": {
|
|
2383
|
+
"manual": "It needs a person: a sign-in, an approval or a choice only the operator can make."
|
|
2384
|
+
}
|
|
596
2385
|
},
|
|
597
2386
|
{
|
|
598
2387
|
"id": "workstation:configuration",
|
|
599
|
-
"meaning": "The devfleet launcher is installed and linked."
|
|
2388
|
+
"meaning": "The devfleet launcher is installed and linked.",
|
|
2389
|
+
"severity": "required",
|
|
2390
|
+
"repair": {
|
|
2391
|
+
"recipe": "workstation"
|
|
2392
|
+
}
|
|
600
2393
|
},
|
|
601
2394
|
{
|
|
602
2395
|
"id": "workstation:installation",
|
|
603
|
-
"meaning": "The devfleet launcher could be installed."
|
|
2396
|
+
"meaning": "The devfleet launcher could be installed.",
|
|
2397
|
+
"severity": "required",
|
|
2398
|
+
"repair": {
|
|
2399
|
+
"recipe": "workstation"
|
|
2400
|
+
}
|
|
604
2401
|
}
|
|
605
2402
|
]
|
|
606
2403
|
}
|