Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
292 commits
Select commit Hold shift + click to select a range
1e2edba
AKO-84: validate discovered Slurm feature constraint syntax
ovvesley Oct 7, 2026
6442f10
AKO-84: initialize root activity workspace before shared access proof
ovvesley Oct 7, 2026
7553da4
AKO-88: isolate recovered task observations from earlier runtime handles
ovvesley Oct 7, 2026
38db7f2
AKO-88: align stopped-handle fixture with exact task attempt identity
ovvesley Oct 7, 2026
e93c54a
AKO-89: resolve Slurm workspace home from connection-scoped catalog s…
ovvesley Oct 7, 2026
477fb0e
AKO-90 select workspace routes per dependency and validate mixed merges
ovvesley Oct 7, 2026
0fee958
AKO-90 Record verified shared filesystem and safe dependency route ev…
ovvesley Oct 7, 2026
944b9a6
AKO-90 Test mixed-route interruption barrier and recovery reuse
ovvesley Oct 7, 2026
d7096c2
AKO-90 Exclude verified shared copies from network traffic and cost
ovvesley Oct 7, 2026
7ec471f
AKO-90 Verify mixed dependency route persistence and release barrier
ovvesley Oct 7, 2026
ba688cf
AKO-91 Replace obsolete provision operations after instance destruction
ovvesley Oct 7, 2026
9180018
AKO-91 Reject concurrent supervisors for the same execution run
ovvesley Oct 7, 2026
d611fa1
AKO-92 Retry transient workspace rsync disconnects with bounded check…
ovvesley Oct 7, 2026
311aece
AKO-92 Verify real rsync reuses checksum-valid files after disconnect
ovvesley Oct 7, 2026
a36f24a
AKO-93 Enforce lease attempt limits and preserve execution cancellati…
ovvesley Oct 7, 2026
415fd78
AKO-94 Diagnose lost leases and renew from current time
ovvesley Oct 7, 2026
b70b866
AKO-95 Support real and simulated capabilities in calibrated workflows
ovvesley Oct 7, 2026
87ad3fd
AKO-95 Persist concrete cloud allocations in workspace lifecycle
ovvesley Oct 7, 2026
ce1f99d
AKO-95 Restore capacity targets and replace their configurations atom…
ovvesley Oct 7, 2026
d075a77
AKO-95 Document required issue branch contribution workflow
ovvesley Oct 7, 2026
f0beefb
AKO-96 Keep verified NFS and BeeGFS dependency merges inside HPC
ovvesley Oct 7, 2026
a2dba92
Merge documentation refresh preserving current Mermaid and task guides
ovvesley Oct 7, 2026
13cbc85
Merge branch 'AKO-59'
ovvesley Oct 7, 2026
3aad1ec
Merge external example CI preserving runtime ownership and current im…
ovvesley Oct 7, 2026
e3aca51
AKO-99 preserve explicit instance identity during cloud reprovision
ovvesley Oct 7, 2026
25482f4
AKO-100 replace destroyed terminal provision generations in recovery
ovvesley Oct 7, 2026
db3afae
AKO-101 relay uncompressed workspace archives with bounded parallel p…
ovvesley Oct 8, 2026
66ccd24
AKO-101 relay uncompressed workspace archives with bounded parallel p…
ovvesley Oct 8, 2026
218602f
Integrate AKO-99 and AKO-100 cloud provisioning recovery fixes
ovvesley Oct 8, 2026
c88c985
Record AKO-101 archive relay branch integration
ovvesley Oct 8, 2026
4685414
AKO-102 configure up to eight concurrent workspace preparations
ovvesley Oct 8, 2026
f7e4727
Integrate AKO-102 configurable workspace transfer concurrency
ovvesley Oct 8, 2026
046c75d
AKO-103 reject create replace and delete in cloud lifecycle plans
ovvesley Oct 8, 2026
d2c13fb
Integrate AKO-103 safe cloud lifecycle plan validation
ovvesley Oct 8, 2026
4a57e1b
AKO-104 verify cloud host identity through authenticated provider reads
ovvesley Oct 8, 2026
cf2ce79
AKO-104 preserve SSH trust per verified cloud generation
ovvesley Oct 8, 2026
6420b8d
AKO-104 gate machine configuration on provider verified SSH trust
ovvesley Oct 8, 2026
bf6541e
AKO-104 require verified generation trust for cloud console and runtime
ovvesley Oct 8, 2026
c843415
AKO-104 test provision readiness requires verified host generation
ovvesley Oct 8, 2026
e564bf3
Merge AKO-104 provider verified cloud SSH trust
ovvesley Oct 8, 2026
3062736
AKO-104 publish existing host public keys via GCP startup metadata
ovvesley Oct 8, 2026
c61f76c
AKO-105 safely suspend materialized failed cloud configurations
ovvesley Oct 8, 2026
491c75e
Merge AKO-105 guarded failed configuration stop and AKO-104 key publi…
ovvesley Oct 8, 2026
f3e6cc7
AKO-104 bound read-only polling for guest host key publication
ovvesley Oct 8, 2026
d0e8499
Merge AKO-104 bounded host key publication polling
ovvesley Oct 8, 2026
b24f460
AKO-106 Require verified cloud host trust for workspace transfers
ovvesley Oct 8, 2026
90a8e63
Merge AKO-106 verified workspace transfer trust
ovvesley Oct 8, 2026
0749a31
AKO-107 Follow canonical cloud queue operations and reconcile unpubli…
ovvesley Oct 8, 2026
ebbf446
Merge AKO-107 cloud operation deduplication
ovvesley Oct 8, 2026
bb4619f
AKO-108 Batch ready cloud allocations before parallel launch
ovvesley Oct 8, 2026
e8648e8
Merge AKO-108 ready cloud allocation batching
ovvesley Oct 8, 2026
d8e4d53
AKO-109 Coordinate handle inspection and cancellation cleanup
ovvesley Oct 8, 2026
e26e692
Merge AKO-109 safe cancellation coordination
ovvesley Oct 8, 2026
fce147b
AKO-110 Measure workspace relay phases and shared publication barrier
ovvesley Oct 8, 2026
8facf69
Merge AKO-110 workspace transfer phase metrics locally
ovvesley Oct 8, 2026
d4ec6ed
AKO-111 Compress verified whole-workspace relay snapshots
ovvesley Oct 8, 2026
df7b4cb
Merge AKO-111 compressed workspace relay locally
ovvesley Oct 8, 2026
7207853
AKO-112 Ready exact producer instances and scope starts to stop cycles
ovvesley Oct 8, 2026
95ac901
Merge AKO-112 recovery lifecycle generation locally
ovvesley Oct 8, 2026
4990d97
AKO-113 Preserve native remote Docker completion timestamps
ovvesley Oct 8, 2026
20af768
Merge AKO-113 native completion timestamps locally
ovvesley Oct 8, 2026
b88b484
AKO-114 Isolate Docker telemetry by execution attempt
ovvesley Oct 8, 2026
5bcfe58
Merge AKO-114 Docker telemetry attempt isolation locally
ovvesley Oct 8, 2026
f32adf4
AKO-115 Verify unique workspace destination paths once
ovvesley Oct 8, 2026
725399d
Merge AKO-115 workspace verification locally
ovvesley Oct 8, 2026
ed966c3
AKO-116 Reserve SSH channel capacity for runtime control
ovvesley Oct 8, 2026
4aee973
Merge AKO-116 SSH control channel reservation
ovvesley Oct 8, 2026
8be2eba
AKO-117 Keep idle cloud stops outside activity observation loop
ovvesley Oct 8, 2026
171b65f
Merge AKO-117 independent idle cloud stops
ovvesley Oct 8, 2026
06ec248
AKO-118 Audit Montage58 stage evidence and safe scientific comparison
ovvesley Oct 8, 2026
d68cb03
Merge AKO-118 Montage scientific audit
ovvesley Oct 8, 2026
4f9d83a
AKO-118 Distinguish plan work and recovered wall time
ovvesley Oct 8, 2026
61ad972
Merge AKO-118 comparison time semantics
ovvesley Oct 8, 2026
0035205
AKO-119 Release independent activity starts without batch barrier
ovvesley Oct 8, 2026
f3efbfe
AKO-119 Merge independent activity admission and cleanup safety
ovvesley Oct 8, 2026
a2ac846
AKO-120 Respect explicit CPU capacity across planning simulation and …
ovvesley Oct 8, 2026
ffdc22d
AKO-120 Merge single-lane capacity enforcement
ovvesley Oct 8, 2026
891533f
AKO-120 Record corrected single-lane plan and SimGrid validation
ovvesley Oct 8, 2026
b63f090
AKO-121 Export retained cloud workspaces with bounded verified API ch…
ovvesley Oct 8, 2026
40c83dc
AKO-121 Record verified preservation before obsolete disk destruction
ovvesley Oct 8, 2026
04dfc90
AKO-122 Derive attempt history and exact-handle timing in Montage audits
ovvesley Oct 8, 2026
f047bfa
AKO-122 Record measured initial provisioning stage evidence
ovvesley Oct 8, 2026
17c9f1e
AKO-120 Audit single-lane micro execution interval safety
ovvesley Oct 8, 2026
5c15d45
AKO-123 Recognize verified same-instance cloud workspace routes
ovvesley Oct 8, 2026
969c882
AKO-123 Validate mixed same-cloud routes conflicts and recovery
ovvesley Oct 8, 2026
dbdb6b6
AKO-124 Stream provisioning progress before playbook exit
ovvesley Oct 8, 2026
f6b2596
AKO-124 Record separated recovery provisioning stage evidence
ovvesley Oct 8, 2026
ba87e8e
AKO-120 Compare first completed single-lane micro runtime with plan
ovvesley Oct 8, 2026
ceaa644
AKO-123 Verify real mixed same-instance routing and consumer barrier
ovvesley Oct 8, 2026
4cc7d4d
AKO-125 Gate cloud peer eligibility on trusted concrete private endpo…
ovvesley Oct 8, 2026
35fbbae
AKO-125 Restrict temporary peer credentials to expiring receive commands
ovvesley Oct 8, 2026
7df6d1f
AKO-125 Transfer eligible cloud workspaces over authenticated private…
ovvesley Oct 8, 2026
c33744a
AKO-126 Correct nested POSIX quoting and verify concurrent credential…
ovvesley Oct 8, 2026
e1ef774
AKO-127 Correct OpenSSH peer authorization expiry and credential format
ovvesley Oct 8, 2026
5d07ed9
AKO-127 Record real private peer transfer and consumer barrier evidence
ovvesley Oct 8, 2026
0d35fcd
AKO-128 Measure remote workspace snapshot and Docker launch stages
ovvesley Oct 8, 2026
6c406a7
AKO-128 Validate stage attribution and record post-peer launch evidence
ovvesley Oct 8, 2026
7630792
AKO-129 Record repeated micro peer packing and verified recovery safe…
ovvesley Oct 8, 2026
2f2b5f5
AKO-129 Bind archive reuse identity to complete sealed producer manif…
ovvesley Oct 8, 2026
4792f17
AKO-129 Share verified peer snapshots with reader-safe bounded cleanup
ovvesley Oct 8, 2026
26ec4a7
AKO-129 Record real snapshot reuse and consumer barrier evidence
ovvesley Oct 8, 2026
2393a60
AKO-130 Separate SSH channel wait from rsync execution timing
ovvesley Oct 8, 2026
21f9c79
AKO-130 Verify separate rsync process execution timing
ovvesley Oct 8, 2026
8039744
AKO-130 Record gateway upload bottleneck and diagnostic limits
ovvesley Oct 8, 2026
d891da1
AKO-131 Reduce workspace merge subprocess and metadata overhead
ovvesley Oct 8, 2026
e722531
AKO-131 Record real merge stages and consumer barrier evidence
ovvesley Oct 8, 2026
415a941
AKO-130 Record actual rsync bottleneck and negligible channel wait
ovvesley Oct 8, 2026
b6b9d2e
AKO-132: isolate peer preparation stdout from SSH diagnostics
ovvesley Oct 8, 2026
1e45e76
AKO-133: isolate snapshot protocol output and categorize SSH failures
ovvesley Oct 8, 2026
a4fe20d
AKO-134: safely prune verified root-owned cloud inputs
ovvesley Oct 8, 2026
2a067e0
AKO-135 Audit completed Montage58 routes stages product and cleanup
ovvesley Oct 8, 2026
e7f2357
AKO-136 Add guarded worker image capture and preinstalled Docker vali…
ovvesley Oct 10, 2026
8711439
AKO-136 Prepare isolated image identity and first-boot host keys
ovvesley Oct 10, 2026
77ccbba
AKO-137 Honor published worker baseline versions without order collis…
ovvesley Oct 10, 2026
6facbf3
AKO-138 Guard direct cloud release before lifecycle mutations
ovvesley Oct 10, 2026
675e2b0
AKO-138 Protect sealed cloud producer workspaces until consumer lease…
ovvesley Oct 10, 2026
fdca2e1
AKO-138 Retain exact producer instances using pending workspace lease…
ovvesley Oct 10, 2026
5875c69
AKO-139 Resolve bounded cloud workspace storage by exact trusted gene…
ovvesley Oct 10, 2026
87dfcba
AKO-139 Persist concrete cloud storage identity for archive download …
ovvesley Oct 10, 2026
104c111
AKO-139 Support existing draft environment catalogs for workspace pre…
ovvesley Oct 10, 2026
386df37
AKO-140 Price shared-core E2 using billable fractional CPU allocation
ovvesley Oct 10, 2026
ec837f7
AKO-139 Preserve binary stdin in remote storage writes
ovvesley Oct 10, 2026
1beec97
AKO-139 Test binary shell transport independently of Linux filesystem…
ovvesley Oct 10, 2026
9ac4d97
AKO-139 Pack and validate source workspace archives in one SSH command
ovvesley Oct 10, 2026
32caf0d
AKO-139 Use decoded relative path and validate canonical archive root
ovvesley Oct 10, 2026
1a39d7a
AKO-139 Verify native archive against actual Linux filesystem
ovvesley Oct 10, 2026
74f8fa2
AKO-140 Expose incomplete VM tariffs and estimated cost provenance
ovvesley Oct 10, 2026
8e073a0
AKO-140 Carry tariff provenance and completeness into planning resources
ovvesley Oct 10, 2026
f547a48
AKO-140 Report unique cloud generation lifecycle estimates in executi…
ovvesley Oct 10, 2026
f9e54ca
AKO-140 Exclude regional and unrelated storage SKUs from boot disk ta…
ovvesley Oct 10, 2026
c4589f7
AKO-139 Preserve verified cloud archives on relay before releasing ca…
ovvesley Oct 10, 2026
a14bfd8
AKO-140 Select paid marginal disk tariffs and state lifecycle estimat…
ovvesley Oct 10, 2026
6d05947
AKO-140 Refresh experimental tariffs without changing micro CPU chara…
ovvesley Oct 10, 2026
1f92943
AKO-136 Submit fresh Docker image experiment with verified priced plan
ovvesley Oct 10, 2026
29ecd29
AKO-140 Record verified regional tariffs and cost accounting limitations
ovvesley Oct 10, 2026
f811a67
AKO-140 Audit fresh exact-attempt success and export safe lifecycle c…
ovvesley Oct 10, 2026
ea1a819
AKO-136 Verify actual worker boot disk image through read-only GCP API
ovvesley Oct 10, 2026
e6792e0
AKO-136 Record initial fresh VM boot image provenance without addresses
ovvesley Oct 10, 2026
dd7480a
AKO-140 Bind fresh audit to canonical handle IDs across all adapters
ovvesley Oct 10, 2026
587948f
AKO-140 Preserve validated HPC runtime timing through canonical handl…
ovvesley Oct 10, 2026
f36dd2c
AKO-136 Verify first later worker boot image
ovvesley Oct 10, 2026
8ac6bb1
AKO-136 Verify second later worker boot image
ovvesley Oct 10, 2026
1e2ff7e
AKO-136 Verify third later worker boot image
ovvesley Oct 10, 2026
5d6286c
AKO-136 Verify all twelve worker boot images
ovvesley Oct 10, 2026
5ad9762
AKO-136 AKO-140 Record uninterrupted Montage58 image run and priced r…
ovvesley Oct 11, 2026
ce027f7
AKO-141 share whole-workspace projection and extract audited calibrat…
ovvesley Oct 11, 2026
617162e
AKO-141 project runtime-specific workspace manifests and calibrate fu…
ovvesley Oct 11, 2026
8ef8479
AKO-141 define causal relay stages and unique consumer merge volume c…
ovvesley Oct 11, 2026
c46c38a
AKO-141 Model native SimGrid workspace routes and preparation barriers
ovvesley Oct 11, 2026
d056c34
AKO-141 Evaluate candidate plans with staged relay and consumer merge
ovvesley Oct 11, 2026
e00331d
AKO-141 Freeze measured workspace rates and reference-normalized comp…
ovvesley Oct 11, 2026
e2e404b
AKO-141 Preserve calibration entities through API and stage-aware pla…
ovvesley Oct 11, 2026
69e02a8
AKO-141 Preserve per-activity runtime packaging in measured plans
ovvesley Oct 11, 2026
7aca377
AKO-141 Align simulation lifecycle billing and avoid duplicate idle c…
ovvesley Oct 11, 2026
9564c46
AKO-141 Test runtime packaging under cloud and HPC reassignment
ovvesley Oct 11, 2026
7362c82
AKO-141 Separate workspace merge preparation from simulation queue
ovvesley Oct 11, 2026
97a570b
AKO-141 Support independent compute work instead of old predicted sec…
ovvesley Oct 11, 2026
472af80
AKO-142 Restrict Slurm fallback to verified eligible inventory
ovvesley Oct 11, 2026
5755362
AKO-141 Extract independent FITS input work from immutable dataset
ovvesley Oct 11, 2026
1c0b62a
AKO-141 Calibrate independent work by input band and observed resource
ovvesley Oct 11, 2026
bed0056
AKO-141 Validate independent work and canonical band type identities
ovvesley Oct 11, 2026
c6be7ee
AKO-142 Ignore non-inventory diagnostics in eligibility discovery
ovvesley Oct 11, 2026
51b85c2
AKO-143 reconcile interrupted Slurm submissions by exact attempt
ovvesley Oct 11, 2026
e539058
AKO-144 guard planning and submission with shared workspace quota bud…
ovvesley Oct 11, 2026
9475e18
AKO-144 discover mounted user quotas for planning and execution prefl…
ovvesley Oct 11, 2026
cb7f659
AKO-144 record live quota admission rejection before workload creation
ovvesley Oct 11, 2026
dee27bd
AKO-145 Account for verified producer release in scheduled quota admi…
ovvesley Oct 11, 2026
026ff18
AKO-147 Bound read-only Slurm inspection and atomically publish termi…
ovvesley Oct 11, 2026
58170f2
AKO-148 Separate source archive preflight, SSH queue and execution ti…
ovvesley Oct 11, 2026
7212071
AKO-148 model shared SSH bulk service pools in planning and SimGrid
ovvesley Oct 11, 2026
4c42798
AKO-148 verify six-source service waves and expose simulated slot wait
ovvesley Oct 11, 2026
c080a52
AKO-148 test rejection of native runners lacking bulk pool support
ovvesley Oct 11, 2026
75c658a
AKO-146 separate remote merge channel wait and command overhead
ovvesley Oct 11, 2026
863fb92
AKO-146 export measured merge and source service timing safely
ovvesley Oct 11, 2026
ae8a58a
AKO-148 distinguish queue-free source service measurements from legac…
ovvesley Oct 11, 2026
ff26b2c
AKO-148 assign private peer extraction to destination service pool
ovvesley Oct 11, 2026
43cb617
AKO-148 validate peer destination extraction without extra network pa…
ovvesley Oct 11, 2026
1a38f91
AKO-148 separate preflight service from SSH queue in measured calibra…
ovvesley Oct 11, 2026
b622079
AKO-149 aggregate evidenced network bytes instead of filesystem copy …
ovvesley Oct 11, 2026
e9275ff
AKO-141 audit fresh Montage holdout and preserve comparable traffic e…
ovvesley Oct 11, 2026
e222c9c
AKO-146 model fixed merge command service separately from channel queue
ovvesley Oct 11, 2026
8426dff
AKO-148 reject queue-contaminated pack rates when freezing bulk pools
ovvesley Oct 11, 2026
49b570e
AKO-148 separate receiver SSH queue from extraction command service
ovvesley Oct 11, 2026
12ab599
AKO-148 preserve upload service timing and require receiver queue evi…
ovvesley Oct 11, 2026
a5187e5
AKO-150 expose bounded shared-storage proof rejection categories
ovvesley Oct 11, 2026
a222448
AKO-148 fit byte-weighted service coefficients without pooling wall time
ovvesley Oct 11, 2026
8447662
AKO-151 validate transfer calibration offline before releasing new pl…
ovvesley Oct 11, 2026
29b53a7
AKO-152 support independently evidenced preparation and relay ingress
ovvesley Oct 11, 2026
313b7c3
AKO-153 port Montage auxiliary tooling and tests to Go
ovvesley Oct 11, 2026
557f825
AKO-154 generate offline PRISM-time plan and simulate calibrated tran…
ovvesley Oct 11, 2026
99a1879
AKO-154 freeze quota-aware forecast before independent real run
ovvesley Oct 11, 2026
e14cac3
AKO-155 Stream extraction after complete peer archive validation
ovvesley Oct 11, 2026
44776cf
AKO-156 Measure shared peer snapshot build and acquisition wait
ovvesley Oct 11, 2026
9de3548
AKO-156 Preserve independent peer preparation residuals and recovery …
ovvesley Oct 11, 2026
bbc9a35
AKO-157 Filter execution feed by workflow before pagination
ovvesley Oct 11, 2026
4787909
AKO-157 Verify workflow filter propagation in execution API
ovvesley Oct 11, 2026
1c1d5c8
AKO-158 Measure terminal artifact observation without inflating compute
ovvesley Oct 11, 2026
5c22d49
AKO-158 Preserve recovered completion audit without accepting forecast
ovvesley Oct 11, 2026
915f08d
AKO-158 Publish bounded remote timing evidence in task metrics
ovvesley Oct 11, 2026
4a87ffe
AKO-158 Model input observation once in PRISM and SimGrid
ovvesley Oct 11, 2026
eb20d3e
AKO-158 Preserve input observation reference and calibration limits
ovvesley Oct 11, 2026
71fa70d
AKO-158 Measure snapshot service on remote host separately from SSH w…
ovvesley Oct 11, 2026
af47cc0
AKO-158 Reject invalid snapshot service measurements
ovvesley Oct 11, 2026
942dc72
AKO-158 Separate terminal snapshot service from SSH observation wall
ovvesley Oct 11, 2026
d192002
AKO-158 Record verified final product preservation and cleanup inventory
ovvesley Oct 11, 2026
7285a2d
AKO-158 Add explicit exploratory input observation forecast sensitivity
ovvesley Oct 11, 2026
bc6a950
AKO-158 Verify micro profile applicability and preserve sensitivity f…
ovvesley Oct 11, 2026
ccfeb38
AKO-158 Verify fixed-placement sensitivity and terminal cloud cleanup
ovvesley Oct 11, 2026
94afd78
AKO-158 Model workspace publication after compute in PRISM and native…
ovvesley Oct 11, 2026
2f557ee
AKO-158 Distinguish observed pre-prune scan volume from exported work…
ovvesley Oct 11, 2026
87fa37c
AKO-158 Extract attempt-matched publication wall reference excluding …
ovvesley Oct 11, 2026
eb61efe
AKO-158 Compare input and publication wall sensitivities with measure…
ovvesley Oct 11, 2026
39c30a5
AKO-158 Separate final publication cleanup from scan and later worksp…
ovvesley Oct 11, 2026
996feec
AKO-158 Expose dominant dependency residuals without repeated shared …
ovvesley Oct 11, 2026
1a0edbf
AKO-158 Separate peer snapshot SSH admission from command wall and pr…
ovvesley Oct 11, 2026
c633b8f
AKO-158 Measure remote snapshot and receiver wall and CPU service sep…
ovvesley Oct 11, 2026
1f9ab85
AKO-158 Record safe deployment and remote service measurement readiness
ovvesley Oct 11, 2026
298ddd0
AKO-158 Compare aligned activity stages and simulate whole-workspace …
ovvesley Oct 11, 2026
643b7b2
AKO-159 Version simulation inputs with explicitly retired HPC storage…
ovvesley Oct 11, 2026
8ef2ba5
AKO-160 Complete offline compute profiles using explicit speedup extr…
ovvesley Oct 11, 2026
aa97f3f
AKO-161 Bound preparation scratch lifetime under consumer-safe cleanup
ovvesley Oct 11, 2026
2c0ed77
AKO-161 Expose projected workspace and duplicate-input storage volumes
ovvesley Oct 11, 2026
0fe8cf2
AKO-162 Scope explicit HPC quota preflight exception to authorized run
ovvesley Oct 11, 2026
63053e7
AKO-163 Separate workspace protocol stdout from SSH diagnostics
ovvesley Oct 11, 2026
4623213
AKO-164 Preserve completed HPC run products through checksum-verified…
ovvesley Oct 11, 2026
f01baf3
AKO-165 Calibrate class-scoped preparation and publication stages wit…
ovvesley Oct 11, 2026
95d16af
AKO-166 Calibrate cloud stages and reevaluate fixed forecasts against…
ovvesley Oct 11, 2026
acab213
AKO-167 Model runtime-scoped external admission without inflating com…
ovvesley Oct 11, 2026
c5ad908
AKO-168 Version calibrated stages and verify native runtime conformance
ovvesley Oct 11, 2026
4bacc87
AKO-168 Record registered medium disk pricing and pending holdout app…
ovvesley Oct 11, 2026
587acea
AKO-169 Enforce explicitly reduced capacity for Slurm admission
ovvesley Oct 12, 2026
6b1c80e
AKO-170 Honor explicit cloud capacity at physical core count
ovvesley Oct 12, 2026
42812c9
Remove generated server binary from source control
ovvesley Oct 13, 2026
4e51a5e
AKO-171 Expand inline structures and separate execution responsibilities
ovvesley Oct 13, 2026
5fce2d7
AKO-171 Separate planning snapshots and execution provenance loading
ovvesley Oct 13, 2026
8e27cbe
AKO-171 Separate native runner capability validation from execution
ovvesley Oct 13, 2026
fbfa583
AKO-171 Extract cloud pricing and remote Docker command assembly
ovvesley Oct 13, 2026
0b86c45
AKO-171 Isolate completed stop-cycle selection for cloud allocation
ovvesley Oct 13, 2026
13100bd
AKO-171 Scope formatting changes and decompose CLI and route validation
ovvesley Oct 13, 2026
5564e53
AKO-171 Separate runtime admission, recovery and transfer contracts
ovvesley Oct 14, 2026
36bdce0
AKO-171 Separate workspace forecasts, PRISM stages and scientific ana…
ovvesley Oct 14, 2026
784aaa8
AKO-171 Separate execution audit and runtime calibration evidence
ovvesley Oct 14, 2026
9a09b59
AKO-172 Align relay documentation and preserve temporary analysis pri…
ovvesley Oct 14, 2026
8bbee3a
AKO-172 Document compressed relay and per-dependency route policy
ovvesley Oct 14, 2026
415d4d5
AKO-173 Generate checked API docs from complete handler package
ovvesley Oct 14, 2026
8eac7ab
Merge AKO-157 workflow-scoped execution pagination
ovvesley Oct 14, 2026
01bc5e5
AKO-157 Document workflow-filtered execution pagination
ovvesley Oct 14, 2026
0914a1b
fix(AKO-174): fence recovery until exact Slurm submission cleanup is …
ovvesley Oct 14, 2026
28068bb
test(AKO-176): assert completion barrier without global startup ordering
ovvesley Oct 14, 2026
b590a78
Merge pull request #177 from UFFeScience/AKO-176
ovvesley Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .github/ai/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Akoflow Agent Guide

## Required Contribution Workflow

- Every repository change follows `ISSUE -> BRANCH -> PR`.
- Create or identify the GitHub issue before implementation.
- Create a dedicated branch linked to that issue; do not implement directly on `main`.
- Open a pull request from that branch and link it to the issue.
- Do not bypass this sequence unless the user explicitly instructs otherwise for a specific change.

## Core Shape

- Go project with CLI and server binaries.
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/docs-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ jobs:
run: npm ci --prefix docs
- name: Type-check documentation code
run: npm run typecheck --prefix docs
- name: Test API handler contract extraction
run: npm run test:api-generator --prefix docs
- name: Build the documentation site
run: npm run build --prefix docs
- name: Verify repository-owned documentation links
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
db.sqlite
/server
storage/database.sqlite
storage/*
*/.DS_Store
Expand Down
14 changes: 14 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# AkôFlow repository guidance

## Auxiliary tooling language

- Use Go for repository tooling, scientific analysis, calibration, data exports, and their tests.
- Do not introduce new Ruby scripts or require Ruby to run these tools. Maintain or migrate existing functionality in Go while preserving scientific contracts, provenance, and safety checks.
- This is the user's persistent repository preference; do not replace Go tooling with Ruby in future work.

## Contribution workflow

- Every repository change follows `ISSUE -> BRANCH -> PR`.
- Create or identify the GitHub issue before implementation.
- Create a dedicated branch linked to that issue; do not implement directly on `main`.
- Open a pull request from that branch and link it to the issue.
- Do not bypass this sequence unless the user explicitly instructs otherwise for a specific change.

## Documentation diagrams

- Use Mermaid for architecture, lifecycle, hierarchy, relationship, state, and flow diagrams in the documentation.
Expand Down
84 changes: 84 additions & 0 deletions cmd/montage-hpc-budget/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// montage-hpc-budget versions simulation inputs after an explicit user decision.
// It never changes a live catalog, provisions resources, or submits executions.
package main

import (
"encoding/json"
"flag"
"fmt"
"os"
"time"
)

func removeCap(request map[string]any, at string) (int, error) {
run, ok := request["Run"].(map[string]any)
if !ok || run["mode"] != "simulation" {
return 0, fmt.Errorf("simulation-only request required")
}
resources, ok := request["Resources"].([]any)
if !ok {
return 0, fmt.Errorf("resources missing")
}
count := 0
for _, raw := range resources {
r, ok := raw.(map[string]any)
if !ok || r["type"] != "hpc_machine" {
continue
}
m, ok := r["metadata"].(map[string]any)
if !ok {
m = map[string]any{}
r["metadata"] = m
}
previous := m["workspaceStorageBudget"]
delete(m, "workspaceStorageBudget")
m["workspaceStorageBudgetDecision"] = map[string]any{
"status": "cap-removed", "source": "explicit-user-decision-20261011",
"recordedAt": at, "previousBudget": previous,
"meaning": "No enforced HPC storage cap in this forecast; not a measurement of unlimited physical capacity.",
}
count++
}
if count == 0 {
return 0, fmt.Errorf("no HPC resources")
}
return count, nil
}

func main() {
in := flag.String("request", "", "existing simulation input")
out := flag.String("output", "", "new input; refuses overwrite")
flag.Parse()
err := func() error {
data, err := os.ReadFile(*in)
if err != nil {
return err
}
var request map[string]any
if err := json.Unmarshal(data, &request); err != nil {
return err
}
n, err := removeCap(request, time.Now().UTC().Format(time.RFC3339))
if err != nil {
return err
}
data, err = json.MarshalIndent(request, "", " ")
if err != nil {
return err
}
f, err := os.OpenFile(*out, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0600)
if err != nil {
return err
}
defer f.Close()
if _, err := f.Write(data); err != nil {
return err
}
fmt.Printf("Versioned simulation input: %d HPC caps explicitly removed; other resources unchanged.\n", n)
return nil
}()
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
25 changes: 25 additions & 0 deletions cmd/montage-hpc-budget/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package main

import (
"github.com/stretchr/testify/require"
"testing"
)

func TestRemoveOnlyHPCCapAndPreserveDecision(t *testing.T) {
hpc := map[string]any{"type": "hpc_machine", "metadata": map[string]any{"workspaceStorageBudget": 123, "runtime": "sif"}}
cloud := map[string]any{"type": "cloud_vm", "metadata": map[string]any{"workspaceStorageBudget": 456}}
r := map[string]any{"Run": map[string]any{"mode": "simulation"}, "Resources": []any{hpc, cloud}}
n, err := removeCap(r, "2026-10-11")
require.NoError(t, err)
require.Equal(t, 1, n)
m := hpc["metadata"].(map[string]any)
require.NotContains(t, m, "workspaceStorageBudget")
require.Equal(t, "sif", m["runtime"])
require.Equal(t, 123, m["workspaceStorageBudgetDecision"].(map[string]any)["previousBudget"])
require.Equal(t, 456, cloud["metadata"].(map[string]any)["workspaceStorageBudget"])
}

func TestRejectReal(t *testing.T) {
_, err := removeCap(map[string]any{"Run": map[string]any{"mode": "real"}}, "now")
require.ErrorContains(t, err, "simulation-only")
}
63 changes: 63 additions & 0 deletions cmd/montage-storage-check/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Offline storage bound diagnostic. No API submission or filesystem deletion.
package main

import (
"encoding/json"
"fmt"
"github.com/UFFeScience/akoflow/internal/application/ports"
"github.com/UFFeScience/akoflow/internal/domain/storagebudget"
"github.com/UFFeScience/akoflow/internal/domain/workflow"
"os"
)

func main() {
if len(os.Args) != 2 {
panic("request path required")
}
b, err := os.ReadFile(os.Args[1])
if err != nil {
panic(err)
}
var r ports.ExecutionRequest
if err = json.Unmarshal(b, &r); err != nil {
panic(err)
}
for i := range r.Resources {
if string(r.Resources[i].Type) != "hpc_machine" {
continue
}
m := r.Resources[i].Metadata
decision, _ := m["workspaceStorageBudgetDecision"].(map[string]any)
if previous := decision["previousBudget"]; previous != nil {
m["workspaceStorageBudget"] = previous
}
m["workspaceStorageLifecycle"] = "consumer-barrier-v1"
}
t := []storagebudget.Timing{}
for _, a := range r.Plan.Assignments {
t = append(t, storagebudget.Timing{ActivityID: a.ActivityID, ResourceID: a.ResourceID, Start: a.PredictedStartAt, Finish: a.PredictedFinishAt})
}
rows, missing, err := storagebudget.CheckScheduled(r.Workflow, r.Resources, t)
result := map[string]any{"reservations": rows, "missing": missing}
types := map[string]string{}
for _, a := range r.Plan.Assignments {
for _, resource := range r.Resources {
if resource.ID == a.ResourceID {
types[a.ActivityID] = string(resource.Type)
}
}
}
projected, projectionErr := workflow.ProjectWorkspaceDependenciesForResourceTypes(r.Workflow, types)
if projectionErr == nil {
volumes := []map[string]any{}
for _, a := range projected.Activities {
volumes = append(volumes, map[string]any{"activityId": a.ID, "volumes": a.Metadata["workspaceProjectionVolumes"]})
}
result["projectedVolumes"] = volumes
}
if err != nil {
result["error"] = err.Error()
}
b, _ = json.MarshalIndent(result, "", " ")
fmt.Println(string(b))
}
43 changes: 43 additions & 0 deletions cmd/montage-tools/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Montage tooling in Go

Run from the repository root:

```sh
go run ./cmd/montage-tools <command> <arguments>
go test -race ./internal/montagetools ./cmd/montage-tools
```

Alternatively, build once with `go build -o /tmp/akoflow-montage-tools ./cmd/montage-tools`.

The migrated commands preserve the positional arguments of the former scripts;
use the former basename without `.rb` as the command:

- `audit_montage_results`
- `build_montage_execution_calibration`
- `build_montage_workspace_projection`
- `build_montage_work_features`
- `extract_montage_compute_work`
- `freeze_montage_compute_profiles`
- `freeze_montage_materialization`
- `prepare_montage_measured_requests`
- `supplement_montage_root_compute`
- `validate_montage_transfer_model`
- `export_cloud_workspace`

Missing or invalid arguments produce a usage error and nonzero exit status.
Validation modes are `calibrate`, `supplement`, `request`, `compare`,
`shared-capacity`, and `report`. Request generation accepts simulation requests
only; it does not submit a real execution.

Scientific JSON exports are private (0600). Historical evidence and predictions
are not rewritten. Newly serialized JSON may have a different SHA256 because Go
orders object keys deterministically; source-file digests remain provenance of
the original input bytes. Numerical equivalence tests allow only floating-point
rounding tolerance, not changes to routes, volumes, or model contracts.

Only the explicitly requested cloud workspace export calls the daemon API,
using `AKOFLOW_API_TOKEN` without printing it. It verifies chunk lengths and the
archive checksum and refuses to overwrite an existing archive. Compute-input
extraction reads an existing container image via Docker; it does not execute a
workflow. None of these tools accesses the database directly or restarts the
daemon. Ruby is no longer required for these repository tools or their tests.
14 changes: 14 additions & 0 deletions cmd/montage-tools/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package main

import (
"fmt"
"github.com/UFFeScience/akoflow/internal/montagetools"
"os"
)

func main() {
if err := montagetools.Run(os.Args[1:]); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
7 changes: 4 additions & 3 deletions cmd/server/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"os"
"path/filepath"
"strings"
"time"

Expand Down Expand Up @@ -48,7 +49,7 @@ func buildCloudProvisioner(
sshKeys,
terraformcloud.Runner{Root: settings.TerraformWorkspace, Binary: settings.TerraformBinary},
ansiblecloud.Runner{Root: settings.TerraformWorkspace, Binary: settings.AnsiblePlaybookBinary},
)
).WithHostTrustVerifier(gcpcloud.HostVerifier{Catalog: gcpcloud.New(nil), Root: filepath.Join("storage", "credentials", "ssh", "cloud-generations")})
}

func buildAPI(
Expand All @@ -75,7 +76,7 @@ func buildAPI(
}
browsers[domain.StorageLocal], browsers[domain.StoragePVC], browsers[domain.StorageNFS], browsers[domain.StorageLustre] = fs, fs, fs, fs
}
ssh := sshfilesystem.New(storage.environments, provider.OSCommandExecutor{})
ssh := sshfilesystem.New(storage.environments, provider.OSCommandExecutor{}).WithCloudStore(storage.cloud)
browsers[domain.StorageSSH] = ssh
manager := appbuild.Manager{Root: settings.ArtifactStoreRoot, MaxBytes: settings.BuildContextMaxBytes, Catalog: storage.data}
manager.Executor = appbuild.Executor{Catalog: storage.data, Contexts: manager, Runner: provider.OSCommandExecutor{}, Buildctl: settings.Buildctl, Apptainer: settings.Apptainer, ArtifactStoreRoot: settings.ArtifactStoreRoot}
Expand Down Expand Up @@ -118,7 +119,7 @@ func buildAPI(
Audit: storage.audit,
Console: console,
Terminal: terminal,
Storage: appstorage.NewBrowserCoordinator(storage.storage, browsers),
Storage: appstorage.NewBrowserCoordinator(appstorage.CloudWorkspaceCatalog{Catalog: storage.storage, Cloud: storage.cloud}, browsers),
Build: manager,
Planning: planning,
PlanningStore: storage.plans,
Expand Down
7 changes: 6 additions & 1 deletion cmd/server/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"os"
"strconv"
"time"

applicationexecution "github.com/UFFeScience/akoflow/internal/application/execution"
Expand Down Expand Up @@ -84,7 +85,11 @@ func registerExecutionHandlers(
}
verifiedArtifacts := &applicationtransfer.VerifiedArtifactCache{}
kubernetesTransfer := &infratransfer.KubernetesExec{BufferSize: bufferSize}
preparer := applicationtransfer.Coordinator{Catalog: data, WorkspaceSyncer: infratransfer.WorkspaceRsync{Resolver: resolver}, Materializer: applicationtransfer.Materializer{Resolver: resolver, Progress: data, VerifiedArtifacts: verifiedArtifacts, Connectors: []ports.TransferConnector{
parallelism, err := strconv.Atoi(os.Getenv("AKOFLOW_WORKSPACE_TRANSFER_PARALLELISM"))
if err != nil || parallelism <= 0 {
parallelism = 8
}
preparer := applicationtransfer.Coordinator{Catalog: data, WorkspaceSyncer: infratransfer.WorkspaceRsync{Resolver: resolver, Parallelism: parallelism}, Materializer: applicationtransfer.Materializer{Resolver: resolver, Progress: data, VerifiedArtifacts: verifiedArtifacts, Connectors: []ports.TransferConnector{
infratransfer.ArtifactStore{Root: artifactStoreRoot}, infratransfer.LocalFilesystem{BufferSize: bufferSize}, infratransfer.RsyncSSH{BufferSize: bufferSize}, kubernetesTransfer, infratransfer.HTTPDownload{}, infratransfer.S3Compatible{BufferSize: bufferSize}, infratransfer.GCS{},
}}}
supervisor, err := controlexecution.New(
Expand Down
26 changes: 26 additions & 0 deletions cmd/simgrid-case/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Offline planning and simulation export

Export an existing simulation request without submitting it:

```sh
go run ./cmd/simgrid-case --request private-request.json --output new-case-dir
```

Generate experimental PRISM-time candidates first, requiring measured compute
profiles, then export the first time-ranked candidate for native SimGrid:

```sh
go run ./cmd/simgrid-case --prism-time --request private-request.json --output new-case-dir
```

Input must be simulation-only. The caller supplies the complete resource scope,
topology, evidenced materialization profiles, compute profiles and runtimes.
Missing materialization route profiles do not acquire guessed rates. Both the
planner and simulation exporter consume the same request model. Timeout is ten
minutes; beam width and candidate count use PRISM defaults (120 and 25).
Private exports include candidates, selected request, platform and native input.
The output directory must not exist. This tool does not contact the daemon,
access the database, provision cloud resources or start a real execution.

Model agreement is not independent real validation. This command does not
estimate missing physical interference or validate unobserved route classes.
Loading
Loading