@microck/raft 0.5.0 → 0.7.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 +27 -15
- package/deploy/build-image.py +4 -2
- package/deploy/raft-expire.py +109 -31
- package/deploy/verify-controls.py +6 -6
- package/deploy/verify-features.py +329 -19
- package/deploy/verify-jobs.py +264 -0
- package/deploy/verify-limits.py +22 -3
- package/deploy/verify-live.py +31 -6
- package/deploy/verify-output.py +208 -0
- package/deploy/verify-release.py +33 -4
- package/deploy/verify-run.py +571 -0
- package/deploy/verify-self-update.py +9 -1
- package/deploy/verify-sync.py +122 -0
- package/docs/benchmarks/read-latency-2026-10-29.json +70 -0
- package/docs/boat-capabilities.md +60 -7
- package/docs/boat-parity-design.md +1 -0
- package/docs/boot-performance.mdx +21 -0
- package/docs/contract.md +88 -13
- package/docs/first-box.mdx +22 -19
- package/docs/guides/background-jobs.mdx +38 -31
- package/docs/guides/backup-recovery.mdx +4 -3
- package/docs/guides/ci-jobs.mdx +209 -0
- package/docs/guides/config-policy.mdx +109 -35
- package/docs/guides/files.mdx +2 -2
- package/docs/guides/index.mdx +31 -0
- package/docs/guides/long-running-services.mdx +9 -3
- package/docs/guides/meta.json +7 -2
- package/docs/guides/project-setup.mdx +1 -1
- package/docs/guides/scripting-ci.mdx +36 -14
- package/docs/guides/snapshots-forks.mdx +4 -2
- package/docs/guides/troubleshooting.mdx +19 -2
- package/docs/guides/upgrades.mdx +11 -9
- package/docs/index.mdx +26 -28
- package/docs/maintainers/index.mdx +18 -0
- package/docs/maintainers/meta.json +12 -0
- package/docs/meta.json +5 -9
- package/docs/operations.mdx +17 -10
- package/docs/publishing.md +14 -4
- package/docs/reference/capacity.mdx +2 -1
- package/docs/reference/cli.md +135 -43
- package/docs/reference/configuration.mdx +10 -6
- package/docs/reference/meta.json +3 -1
- package/docs/releases/0.2.0.md +1 -0
- package/docs/releases/0.2.1.md +1 -0
- package/docs/releases/0.3.0.md +1 -0
- package/docs/releases/0.4.0.md +1 -0
- package/docs/releases/0.5.0.md +1 -0
- package/docs/releases/0.6.0.md +17 -0
- package/docs/releases/0.7.0.md +23 -0
- package/docs/releases/index.mdx +21 -0
- package/docs/releases/meta.json +15 -0
- package/docs/requirements.mdx +1 -1
- package/docs/reviews/docs-audit-2026-10-24.md +92 -0
- package/docs/reviews/performance-audit-2026-10-29.md +90 -0
- package/docs/site-development.md +1 -0
- package/docs/verification.mdx +22 -4
- package/package.json +3 -1
- package/raft.py +526 -193
- package/raft_files.py +13 -1
- package/raft_jobs.py +390 -0
- package/raft_output.py +166 -0
- package/raft_run.py +330 -0
- package/skills/raft-cli/SKILL.md +78 -182
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Performance and discovery audit, 2026-10-29
|
|
2
|
+
|
|
3
|
+
## Scope and execution
|
|
4
|
+
|
|
5
|
+
The user approved performance fixes, confirmed dead-code removal, documentation
|
|
6
|
+
corrections, a discovery-driven Raft skill, current Boat parity research, and
|
|
7
|
+
verification in disposable task-owned workspaces. The follow-up request
|
|
8
|
+
authorizes committing, pushing, opening a ready-for-review PR and addressing
|
|
9
|
+
review feedback until ready. Production deployment, merging, releases and paid
|
|
10
|
+
provisioning remain outside scope.
|
|
11
|
+
Paid provisioning/research spending: not authorized.
|
|
12
|
+
|
|
13
|
+
Initial checkout was clean at `1fd6d62f`; Jujutsu was initialized colocated.
|
|
14
|
+
Primary agent: gpt-6-astra, high reasoning effort. Three read-only simplification
|
|
15
|
+
reviewers used gpt-6.1-sol with default reasoning. All reviewer jobs are complete.
|
|
16
|
+
|
|
17
|
+
## Delivered changes
|
|
18
|
+
|
|
19
|
+
- List and capacity collect their data in one SSH connection per host. Doctor
|
|
20
|
+
runs its sequential checks in one connection and retains the worker lock.
|
|
21
|
+
Existing lifecycle and archive safety checks remain in place.
|
|
22
|
+
- Config and doctor accept a location filter, so an unrelated offline host does
|
|
23
|
+
not prevent inspection. Location-filtered default edits are refused.
|
|
24
|
+
- Command help explains behavior and operational constraints. All 38 command
|
|
25
|
+
help paths ran without configuration or writes to an empty controller home.
|
|
26
|
+
- The skill teaches version/help discovery, source lookup, host inspection,
|
|
27
|
+
ownership and cleanup rather than maintaining a command/software catalog.
|
|
28
|
+
The installed skill symlink now targets this repository's canonical skill;
|
|
29
|
+
the old openboat checkout was not edited. Discovery found run in the checkout
|
|
30
|
+
while the installed 0.6.0 command tree correctly omitted it.
|
|
31
|
+
- README examples select persistence explicitly and provide ownership notes.
|
|
32
|
+
Sizing, release notice timing and unreleased run status are corrected.
|
|
33
|
+
- The Boat comparison was refreshed from current official documentation,
|
|
34
|
+
including team sharing, environment versions, AI proxying, telemetry,
|
|
35
|
+
automatic snapshots and retained command history.
|
|
36
|
+
|
|
37
|
+
## Measurements and verification
|
|
38
|
+
|
|
39
|
+
[Raw timings](../benchmarks/read-latency-2026-10-29.json) record five samples per
|
|
40
|
+
command/version on the same ARM64 Incus 6.0.6 host. Median reductions were 44%
|
|
41
|
+
for list, 43% for capacity and 76% for doctor. These are controller-visible read
|
|
42
|
+
latencies, not boot or guest workload speedups. Update checks were disabled.
|
|
43
|
+
|
|
44
|
+
Passed in the disposable workspace:
|
|
45
|
+
|
|
46
|
+
- Ruff lint and format checks across all Python sources and deployment scripts.
|
|
47
|
+
- Limits, image fixtures, CI orchestration and feature verifiers.
|
|
48
|
+
- Self-update verification through real temporary npm and uv installations.
|
|
49
|
+
- Source, wheel and npm packaging and isolated installation checks.
|
|
50
|
+
- Website Oxlint, Next.js build including TypeScript, search tests, and 37-page
|
|
51
|
+
export/link/search/download verification with 52 local links.
|
|
52
|
+
|
|
53
|
+
Real host checks also passed: batched versus independent native inventory and
|
|
54
|
+
policy reads; doctor and config scoped away from an unreachable inventory entry;
|
|
55
|
+
refusal of location-scoped controller-default edits without creating a file.
|
|
56
|
+
The discovery-guided one-shot job returned exit 7, collected its result file and
|
|
57
|
+
confirmed cleanup. No new mocks were introduced.
|
|
58
|
+
|
|
59
|
+
The initial test source archive omitted images and Git checkout metadata.
|
|
60
|
+
Correcting that disposable fixture fixed packaging and checkout-detection tests;
|
|
61
|
+
no assertions were weakened. A self-update HTTP timeout fixture logged an
|
|
62
|
+
expected broken pipe after its client disconnected; the verifier passed.
|
|
63
|
+
|
|
64
|
+
## Cleanup and review
|
|
65
|
+
|
|
66
|
+
Task-owned workspaces `paris:rf-bf5bab8180464898` and
|
|
67
|
+
`paris:rf-61cc02e89fc54677` are confirmed absent. Paris inventory was empty after
|
|
68
|
+
cleanup. No background verification jobs or delegates remain active.
|
|
69
|
+
|
|
70
|
+
The reuse and efficiency reviewers reported no actionable findings. The quality
|
|
71
|
+
reviewer found two duplicated-constant sites; both now use the existing project
|
|
72
|
+
and storage constants. Superseded per-call SSH code was removed. Ruff and a
|
|
73
|
+
structural/reference scan found no additional safely removable Python functions;
|
|
74
|
+
graph candidates were parser callbacks, tests or framework entry points.
|
|
75
|
+
|
|
76
|
+
The passive update notice still has its documented bounded wait. Removing it
|
|
77
|
+
would change whether short commands display release notices. Metadata checks
|
|
78
|
+
before mutations remain because they establish ownership and eligibility.
|
|
79
|
+
|
|
80
|
+
## Evidence limits
|
|
81
|
+
|
|
82
|
+
- Timings are a five-sample exploratory result from one host and network path.
|
|
83
|
+
- Boat capabilities were checked against official documentation, not its live
|
|
84
|
+
infrastructure. Dedicated organization docs describe sharing that older
|
|
85
|
+
overview/API text still describes as creator-private; the comparison notes it.
|
|
86
|
+
- Authenticated GitHub inspection confirmed v0.6.0 remains the latest published
|
|
87
|
+
release. These changes and run are development-branch work, not deployed.
|
|
88
|
+
- The shared fff index returned stale and unrelated results. Exact local reads
|
|
89
|
+
and the freshly built home-ubuntu-raft graph supplied code evidence instead.
|
|
90
|
+
- An unrelated configured host was unreachable; no configuration was changed.
|
package/docs/site-development.md
CHANGED
package/docs/verification.mdx
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Verification
|
|
3
|
+
description: Read test evidence and run dedicated verification suites with explicit limits.
|
|
3
4
|
---
|
|
4
5
|
|
|
5
6
|
# Verification
|
|
6
7
|
|
|
7
|
-
Raft is verified using real disposable Incus workspaces, guest processes, files, Docker builds, and network connections.
|
|
8
|
+
Raft is verified using real disposable Incus workspaces, guest processes, files, Docker builds, and network connections. Native suites exercise real services and verify Raft behavior rather than conformance with the hosted Boat service. Separate local worker and CI-orchestration fault fixtures are labeled below; they do not establish native-host behavior.
|
|
8
9
|
|
|
9
10
|
## Verification boundaries
|
|
10
11
|
|
|
11
12
|
Tests do not certify arbitrary long-running workloads, host loss, multi-tenant security boundaries, or exact Boat image/version parity. ARM64 host reboot and physical storage capacity are not certified by the AMD64 VM test. Containers share the host kernel and do not offer VM isolation.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
Shared-pool boxes have no per-box quota. Own-disk boxes have enforced ext4 limits
|
|
15
|
+
and reservation accounting; the coverage matrix distinguishes both modes. Large backup transfers hold the host lifecycle lock, which delays expiration checks.
|
|
14
16
|
|
|
15
17
|
## Coverage matrix
|
|
16
18
|
|
|
@@ -34,7 +36,7 @@ Storage accounting covers shared pools rather than per-box quotas. Large backup
|
|
|
34
36
|
| Development image | Real developer-user tool checks, immutable selection and credential-path archive rejection |
|
|
35
37
|
| Deployment/firewall | Repeat deployment removes stale rules without restarting Incus; failed filtering blocks normal and socket startup; boot timestamps prove filtering precedes Incus |
|
|
36
38
|
| Storage contract | Disposable oversized pool is rejected without automatic resizing |
|
|
37
|
-
| CLI options and errors |
|
|
39
|
+
| CLI options and errors | Command help, including `run` 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 |
|
|
38
40
|
|
|
39
41
|
## Command and option audit (2026-10-06)
|
|
40
42
|
|
|
@@ -58,7 +60,7 @@ The [final runtime validation](https://github.com/Microck/raft/actions/runs/3754
|
|
|
58
60
|
|
|
59
61
|
## New workspace controls
|
|
60
62
|
|
|
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,
|
|
63
|
+
`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, prune preview/apply, host note policies for `new`, `fork`, `note` and `recover`, and stopped-box retention: it sets a 1-hour policy, backdates one stopped box and the policy start, and checks that the next timer run deletes only that box, records the stop time of a box stopped natively and logs to the journal. It sets policies on the host and clears them at the end, and uses only its own fixtures. Every live suite runs the CLI in a private `HOME` holding only `incus.json`, so controller defaults such as `disposable true` never change their boxes. Run the archive, controller-default, policy-message and host worker retention checks without `--location` to avoid allocating boxes; the worker check runs the real worker against a fake `incus` on `PATH`.
|
|
62
64
|
|
|
63
65
|
The live suite also holds a controller stdin pipe open while running real remote
|
|
64
66
|
readers through both captured and streamed lifecycle transactions. Both must
|
|
@@ -241,3 +243,19 @@ On 2026-10-06, `raft limits` (since renamed `raft capacity`, with the admission
|
|
|
241
243
|
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.
|
|
242
244
|
|
|
243
245
|
</details>
|
|
246
|
+
|
|
247
|
+
## Disposable CI command verification
|
|
248
|
+
|
|
249
|
+
`python3 deploy/verify-run.py` runs explicit orchestration fault-injection tests,
|
|
250
|
+
real Linux signal/deadline handling, real Git filtering and safe archive traversal,
|
|
251
|
+
and the actual ownership-check cleanup program against an isolated fake Incus
|
|
252
|
+
executable. These are not native-host evidence. They cover failed/uncertain
|
|
253
|
+
creation, upload failures, nonzero payload preservation, artifacts, cleanup
|
|
254
|
+
failures, cancellation, timeouts, existing destinations and ignored credentials.
|
|
255
|
+
|
|
256
|
+
`python3 deploy/verify-run.py --location lab` additionally creates real temporary
|
|
257
|
+
boxes on the explicitly selected host, uploads a source tree, executes successful
|
|
258
|
+
and failing commands, retrieves result directories, checks timeout cleanup and
|
|
259
|
+
compares the host inventory before/after. Native AMD64 and ARM64 image CI runs
|
|
260
|
+
this suite. A new PR must have those actual runs pass before claiming native
|
|
261
|
+
verification; local fault-injection success alone does not establish it.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microck/raft",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Self-hosted Linux workspaces powered by Incus, an open-source alternative to boat.dev",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"raft.py",
|
|
22
22
|
"raft_files.py",
|
|
23
|
+
"raft_run.py",
|
|
24
|
+
"raft_jobs.py", "raft_output.py",
|
|
23
25
|
"deploy/*.py",
|
|
24
26
|
"deploy/*.sh",
|
|
25
27
|
"deploy/*.conf",
|