@microck/raft 0.3.0 → 0.5.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 +23 -10
- package/deploy/deploy.py +112 -19
- package/deploy/install-incus.sh +10 -0
- package/deploy/verify-controls.py +34 -48
- package/deploy/verify-features.py +350 -4
- package/deploy/verify-fresh-host.py +64 -1
- package/deploy/verify-limits.py +325 -71
- package/deploy/verify-live.py +38 -29
- package/deploy/verify-self-update.py +372 -0
- package/docs/boat-capabilities.md +8 -7
- package/docs/boot-performance.mdx +1 -1
- package/docs/contract.md +28 -17
- package/docs/guides/backup-recovery.mdx +1 -1
- package/docs/guides/config-policy.mdx +179 -0
- package/docs/guides/docker.mdx +9 -1
- package/docs/guides/long-running-services.mdx +2 -2
- package/docs/guides/meta.json +1 -0
- package/docs/guides/project-setup.mdx +4 -3
- package/docs/guides/scripting-ci.mdx +25 -10
- package/docs/guides/snapshots-forks.mdx +9 -3
- package/docs/guides/troubleshooting.mdx +18 -6
- package/docs/guides/upgrades.mdx +13 -3
- package/docs/index.mdx +1 -0
- package/docs/operations.mdx +16 -14
- package/docs/reference/capacity.mdx +198 -0
- package/docs/reference/cli.md +166 -29
- package/docs/reference/configuration.mdx +36 -2
- package/docs/reference/meta.json +1 -1
- package/docs/releases/0.4.0.md +15 -0
- package/docs/releases/0.5.0.md +19 -0
- package/docs/requirements.mdx +2 -2
- package/docs/verification.mdx +14 -8
- package/package.json +1 -1
- package/raft.py +1105 -125
- package/skills/raft-cli/SKILL.md +76 -12
- package/docs/reference/capacity-limits.mdx +0 -92
package/docs/verification.mdx
CHANGED
|
@@ -18,11 +18,12 @@ Storage accounting covers shared pools rather than per-box quotas. Large backup
|
|
|
18
18
|
| --- | --- |
|
|
19
19
|
| Create/list/info/delete | Qualified handle, native state, ownership and cleanup |
|
|
20
20
|
| Root terminal/exec | Real PTY, workspace directory, literal arguments and exit code |
|
|
21
|
-
| Resource sizing | Effective CPU affinity and cgroup memory limit |
|
|
22
|
-
| Host capacity |
|
|
21
|
+
| Resource sizing | Effective CPU affinity and cgroup memory limit for free-form sizes, and refusal of CPU or RAM beyond the host |
|
|
22
|
+
| Host capacity | Advisory notice, arbitrary sizes, no box count limit, example shapes, stopped/frozen boxes, low RAM/disk, hosts without own box disks and thin pool metadata warnings; live create/stop/resume/destroy changes in CPU/memory allocations |
|
|
23
|
+
| Own box disks | Guest and Docker writes stop at the disk size without changing pool reservations or taking shared-pool space; too-small disks and requests beyond the unreserved pool space fail before leaving anything behind; new boxes, forks and templates are thin snapshots of their source, and a template copy writes under 1 GiB; each reserves exactly its size; fork, template, resized template, snapshot and backup/recover keep the disk; on a fresh host, own box disks are off until a redeploy with `--disk-pool` enables them |
|
|
23
24
|
| Background jobs | Journal output, nonzero exit status, cancellation of child processes, inspection after cancellation or log rotation, and rejection of unknown job IDs |
|
|
24
25
|
| TTL/extend/resume | Host-enforced stop, manual `gc`, retained files, uninterrupted lifetime extension and 30-day resume |
|
|
25
|
-
| Usage | Real cgroup counters and
|
|
26
|
+
| Usage | Real cgroup counters and shared-pool or own-disk scope |
|
|
26
27
|
| File transfer | Binary content, paths containing spaces, stopped-workspace transfers, preservation of the destination after a failed download, and real controller write-error rejection |
|
|
27
28
|
| Docker | Real image build and container execution |
|
|
28
29
|
| Snapshot/restore/fork | File rollback, independent copy, retained network identity and deterministic concurrent-resume rejection under the real host lock |
|
|
@@ -33,7 +34,7 @@ Storage accounting covers shared pools rather than per-box quotas. Large backup
|
|
|
33
34
|
| Development image | Real developer-user tool checks, immutable selection and credential-path archive rejection |
|
|
34
35
|
| Deployment/firewall | Repeat deployment removes stale rules without restarting Incus; failed filtering blocks normal and socket startup; boot timestamps prove filtering precedes Incus |
|
|
35
36
|
| Storage contract | Disposable oversized pool is rejected without automatic resizing |
|
|
36
|
-
| CLI options and errors | Help for all
|
|
37
|
+
| CLI options and errors | Help for all 34 commands and `host add`; default location, TTL and desktop port; all eight sizing profiles; global and per-location reports; invalid TTLs, sizes, required arguments, handles, paths, snapshot names, jobs and ports |
|
|
37
38
|
|
|
38
39
|
## Command and option audit (2026-10-06)
|
|
39
40
|
|
|
@@ -57,7 +58,7 @@ The [final runtime validation](https://github.com/Microck/raft/actions/runs/3754
|
|
|
57
58
|
|
|
58
59
|
## New workspace controls
|
|
59
60
|
|
|
60
|
-
`python3 deploy/verify-features.py --location lab` verifies `doctor` readiness against the installed worker, recursive trees and unsafe-archive rejection, templates from a running source, snapshot deletion, CPU/RAM overrides, disposable timer deletion,
|
|
61
|
+
`python3 deploy/verify-features.py --location lab` verifies `doctor` readiness against the installed worker, recursive trees and unsafe-archive rejection, templates from a running source, snapshot deletion, CPU/RAM overrides, disposable timer deletion, retention preview/apply, and host note policies for `new`, `fork`, `note` and `recover` (it sets a policy on the host and clears it at the end). It uses only its own fixtures. Run the archive, controller-default and policy-message checks without `--location` to avoid allocating boxes.
|
|
61
62
|
|
|
62
63
|
The live suite also holds a controller stdin pipe open while running real remote
|
|
63
64
|
readers through both captured and streamed lifecycle transactions. Both must
|
|
@@ -87,8 +88,9 @@ The source-race fix also passed a real concurrent writer test that swaps files a
|
|
|
87
88
|
Test commands require configured hosts and immutable image fingerprints. Suites destroy only the fixtures they create.
|
|
88
89
|
|
|
89
90
|
Allocation and archive inspection:
|
|
90
|
-
- `python3 deploy/verify-limits.py`: Checks
|
|
91
|
+
- `python3 deploy/verify-limits.py`: Checks advisory capacity policies without a host. Add `--location lab` to verify live create, stop, resume, and destroy reporting, oversized-request refusal, and own box disks (needs a `raft-disks` pool with 42 GiB unreserved).
|
|
91
92
|
- `python3 deploy/verify-image-tests.py`: Inspects archive structures, including symlinks, hardlinks, FIFOs, and credential detection.
|
|
93
|
+
- `python3 deploy/verify-self-update.py`: Upgrades real npm and uv installs in temporary directories from a local release server and npm registry. Checks SHA256SUMS refusals, install-channel detection, version comparison and the passive notice. Needs npm and uv, but no network or host.
|
|
92
94
|
|
|
93
95
|
Live host suites (expand the check you need):
|
|
94
96
|
|
|
@@ -137,6 +139,8 @@ python3 deploy/verify-controls.py --source lab --target second-host --directory
|
|
|
137
139
|
|
|
138
140
|
</details>
|
|
139
141
|
|
|
142
|
+
Recovery verification also sets a note policy on the target, proves that a backup without the required note is rejected and its imported box removed, recovers it with a note, then clears the policy.
|
|
143
|
+
|
|
140
144
|
`verify-tools.py <qualified-box>` executes 31 tool checks as the unprivileged `developer` user inside a running workspace. It compiles and runs code across installed runtimes and package managers without external agent authentication.
|
|
141
145
|
|
|
142
146
|
## Extended lifecycle results (2026-10-05)
|
|
@@ -152,6 +156,8 @@ Desktop testing validated keyboard input, exact clipboard synchronization, point
|
|
|
152
156
|
|
|
153
157
|
**Admission and backup runs**
|
|
154
158
|
|
|
159
|
+
These runs predate the removal of the saved-box admission cap.
|
|
160
|
+
|
|
155
161
|
The four-saved-box admission test passed, including rejection of a fifth create, fork, or recovery attempt. Full development-image recovery succeeded with a 5,254,224,965-byte archive, verifying inventories, tool checks, permissions, fresh MACs, and snapshot rollback.
|
|
156
162
|
|
|
157
163
|
The execution wrapper reported exit 143 after the success message; independent native inventory and archive checks confirmed that all fixtures and temporary archives were removed.
|
|
@@ -210,7 +216,7 @@ The [release run](https://github.com/Microck/raft/actions/runs/37469540182) vali
|
|
|
210
216
|
|
|
211
217
|
Following a VM reboot, changed kernel boot IDs and active services were verified alongside retained files, snapshots, container states, Docker, and bridge isolation. The host test uses a sparse 100 GiB virtual disk and accessible KVM.
|
|
212
218
|
|
|
213
|
-
It preserves the production deployer's 80 GiB free-disk check but does not prove physical storage capacity. ARM64 host reboot, host loss, and cross-architecture recovery remain unverified. The VM, SSH keys, and controller configuration were disposable; existing operator hosts were not rebooted or reconfigured.
|
|
219
|
+
It preserves the production deployer's 80 GiB free-disk check, and after enabling own box disks by redeploy checks that the pool is thin, does not pass discards to its file and has that file fully allocated, but does not prove physical storage capacity. ARM64 host reboot, host loss, and cross-architecture recovery remain unverified. The VM, SSH keys, and controller configuration were disposable; existing operator hosts were not rebooted or reconfigured.
|
|
214
220
|
|
|
215
221
|
</details>
|
|
216
222
|
|
|
@@ -230,7 +236,7 @@ Packaging workflows passed on Python 3.11 and 3.14. Guidelines for visibility ch
|
|
|
230
236
|
<details>
|
|
231
237
|
<summary>Test evidence and run details</summary>
|
|
232
238
|
|
|
233
|
-
On 2026-10-06, `raft limits` passed read-only text and JSON inspection and live lifecycle tests on two ARM64 Ubuntu hosts. Tests verified allocation adjustments during create, stop, resume, and destroy cycles.
|
|
239
|
+
On 2026-10-06, `raft limits` (since renamed `raft capacity`, with the admission cap removed) passed read-only text and JSON inspection and live lifecycle tests on two ARM64 Ubuntu hosts. Tests verified allocation adjustments during create, stop, resume, and destroy cycles.
|
|
234
240
|
|
|
235
241
|
Allocation fixtures validated mixed sizing budgets, frozen containers, low RAM and disk conditions, host reserves, and admission limits. The four-stopped-box admission test verified that creation, forking, and recovery reject a fifth container when slots are exhausted. These are conservative allocation checks, not workload saturation benchmarks.
|
|
236
242
|
|