software-defence-factory 0.15.5 → 0.15.6
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/docs/npm.md +37 -7
- package/docs/setup.md +74 -52
- package/factory/execution-profile.mjs +7 -5
- package/package.json +1 -1
package/docs/npm.md
CHANGED
|
@@ -116,8 +116,8 @@ installation or retained attempt needs them.
|
|
|
116
116
|
|
|
117
117
|
## Protected evidence compatibility
|
|
118
118
|
|
|
119
|
-
Factory 0.15.
|
|
120
|
-
**0.8.0, 0.9.0, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.11.2, 0.12.0, 0.13.0, 0.13.1, 0.14.0, 0.15.0, 0.15.1 and 0.15.
|
|
119
|
+
Factory 0.15.6 recognizes version-1 execution profiles emitted by native
|
|
120
|
+
**0.8.0, 0.9.0, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.11.2, 0.12.0, 0.13.0, 0.13.1, 0.14.0, 0.15.0, 0.15.1, 0.15.2, 0.15.3, 0.15.4, 0.15.5 and 0.15.6**. This is an exact allowlist in
|
|
121
121
|
`factory/execution-profile.mjs`, independent of the installed package version;
|
|
122
122
|
it is not a semver range or an automatic promise for later releases. Unknown
|
|
123
123
|
runtime strings, unknown profile formats and incomplete legacy acceptance
|
|
@@ -185,7 +185,8 @@ Verify evidence and cannot authorize acceptance or publication.
|
|
|
185
185
|
Version 0.14.0 preserves the v1 writer only for unchanged inherited installations:
|
|
186
186
|
policy bytes, candidate/check/review/acceptance bindings, mounts and credential
|
|
187
187
|
rules stay compatible. Adopted role overrides use **v2 from 0.14.0, 0.15.0, 0.15.1 and 0.15.2**, recording
|
|
188
|
-
role/provider/effort and an exact selection digest.
|
|
188
|
+
role/provider/effort and an exact selection digest. Later audited v2 writers are
|
|
189
|
+
**0.15.3, 0.15.4, 0.15.5 and 0.15.6**. The executor verifies the
|
|
189
190
|
frozen common configuration before phase selection; continuation and both delivery
|
|
190
191
|
validation paths require matching protected v2 evidence and private frozen config.
|
|
191
192
|
V1 cannot attest an override. Mixed roles share one policy across deterministic
|
|
@@ -220,9 +221,29 @@ that the release is not yet downloadable, retain the prior runtime and retry the
|
|
|
220
221
|
update later. This does not establish whether a particular delay came from a
|
|
221
222
|
local cache or registry propagation.
|
|
222
223
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
224
|
+
Before shipping any version, including a documentation-only patch:
|
|
225
|
+
|
|
226
|
+
1. Audit the diff from the previous release across profile/evidence writers,
|
|
227
|
+
schemas, isolation, frozen selection and policy hashes, checks, candidate
|
|
228
|
+
reconstruction, review and acceptance. Add only the exact audited writer to
|
|
229
|
+
the applicable v1/v2/v3 lists in `factory/execution-profile.mjs`. Never derive
|
|
230
|
+
compatibility from package `VERSION` or a semver range; an incompatible writer
|
|
231
|
+
blocks release until its evidence contract is resolved.
|
|
232
|
+
2. Align `package.json`, the lockfile root and `packages[""]` versions (for
|
|
233
|
+
example with `npm version patch --no-git-tag-version`). Run
|
|
234
|
+
`npm ci --ignore-scripts`, `npm run build:dashboard` and `npm run check` on the
|
|
235
|
+
final candidate, then inspect the packed artifact. Exercise the native current
|
|
236
|
+
writer, retained evidence, continuation and protected-evidence rejection
|
|
237
|
+
checks. Keep unknown-writer fixtures clearly unaudited (for example `99.0.0`),
|
|
238
|
+
and preserve historical bytes and every current-policy guard.
|
|
239
|
+
3. Obtain independent review of that exact candidate and qualify the installed
|
|
240
|
+
CLI/API with retained evidence. Deliver through the protected PR/main CI flow,
|
|
241
|
+
verify the public npm artifact against the reviewed package, then adopt only
|
|
242
|
+
while idle and reconciled with private configuration, history and rollback
|
|
243
|
+
data preserved. Source tests alone do not establish these delivery gates.
|
|
244
|
+
|
|
245
|
+
A code push without a version bump is tested but does not overwrite a published
|
|
246
|
+
package.
|
|
226
247
|
|
|
227
248
|
The current trusted-publisher identity is npm package `software-defence-factory`,
|
|
228
249
|
GitHub owner `arcitai`, repository `software-and-defence-factory`,
|
|
@@ -254,7 +275,7 @@ The 0.15.0 compatibility audit preserves unchanged v1/v2 policy construction,
|
|
|
254
275
|
protected checks, candidate reconstruction, read-only review and acceptance guards.
|
|
255
276
|
Historical 0.14.0 v2 validation compares its actual writer version rather than
|
|
256
277
|
relabeling it as the installed version. Local registry selection is a new execution
|
|
257
|
-
contract: every phase of a local/hybrid attempt requires **v3 from 0.15.0, 0.15.1 or 0.15.
|
|
278
|
+
contract: every phase of a local/hybrid attempt requires **v3 from 0.15.0, 0.15.1, 0.15.2, 0.15.3, 0.15.4, 0.15.5 or 0.15.6** and its
|
|
258
279
|
exact protected frozen configuration. v1/v2 cannot attest local binding fields,
|
|
259
280
|
providers or a common policy containing a selected local role. A selected endpoint,
|
|
260
281
|
model, limit or compatibility change invalidates the current policy; explicit
|
|
@@ -292,3 +313,12 @@ remain unchanged from 0.15.4. Profile tests exercise all phases and inherited,
|
|
|
292
313
|
cloud, hybrid and local definitions, reject changed selections and future writers,
|
|
293
314
|
and verify immutable readback. This does not upgrade or qualify historical local
|
|
294
315
|
attempts; installed image adoption and actual inference remain separate gates.
|
|
316
|
+
|
|
317
|
+
The 0.15.6 audit adds only that exact writer to the explicit v1/v2/v3 lists for
|
|
318
|
+
the packaged setup-guide correction. Compared with 0.15.5, profile/evidence
|
|
319
|
+
writers and schemas, isolation, frozen selection/policy hashes, checks,
|
|
320
|
+
reconstruction, review and acceptance are unchanged. The runtime emits its new
|
|
321
|
+
version even for a documentation-only release, so changing package metadata
|
|
322
|
+
alone is insufficient. Retained evidence keeps its original version and bytes;
|
|
323
|
+
unknown writers/schemas and altered selections remain blocked. This audit does
|
|
324
|
+
not qualify local model productivity or upgrade failed attempts.
|
package/docs/setup.md
CHANGED
|
@@ -393,43 +393,67 @@ local requests still use `issue start --file` or `--draft` without `--brief-file
|
|
|
393
393
|
|
|
394
394
|
## Optional keyless local or hybrid inference
|
|
395
395
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
396
|
+
Local profiles are opt-in. Follow the [local binding contract](definition.md#opt-in-local-bindings-0150-69)
|
|
397
|
+
for supported fields and commands; configuration is not qualification and starts
|
|
398
|
+
no jobs, downloads or inference services.
|
|
399
|
+
|
|
400
|
+
1. **Keep the working configuration.** Export portable roles with
|
|
401
|
+
`factory definition export --state PATH > factory-roles.json`. Export omits
|
|
402
|
+
private bindings: also retain the selected immutable image ID and a complete
|
|
403
|
+
stopped private-state backup using [recovery](recovery.md).
|
|
404
|
+
2. **Qualify the inference path.** From a disposable container using the selected
|
|
405
|
+
job image and network, verify the exact endpoint/model, tool calls/results and
|
|
406
|
+
report compatibility. Record server/harness versions, model digest and
|
|
407
|
+
quantization, GPU/backend and actual offload, available/peak memory and actual
|
|
408
|
+
context allocation, including request/model overrides. Host loopback is not
|
|
409
|
+
container loopback. Keep inference access separate from forge/controller
|
|
410
|
+
credentials; missing models/providers must fail without silent cloud fallback.
|
|
411
|
+
3. **Preview and explicitly apply roles.** Use the linked binding recipe to select
|
|
412
|
+
local Pi Implement and an independently chosen local or cloud Review. Preview
|
|
413
|
+
with `factory definition diff`, then use `factory definition apply` with the
|
|
414
|
+
same `--state`, `--file`, `--bindings-file` and the preview's `--expected-revision`.
|
|
415
|
+
Apply requires the
|
|
416
|
+
running controller to be idle and reconciled. Agents/Definition uses the same
|
|
417
|
+
diff/apply contract. Inspect the effective selections; each attempt freezes
|
|
418
|
+
them with its resource, timeout and skill policy. CLI upgrades and worker-image
|
|
419
|
+
selection are separate; use the [image procedure below](#local-context-budget-and-worker-image-0152-100)
|
|
420
|
+
if the selected image needs changing.
|
|
421
|
+
4. **Qualify bounded representative work before a real repository issue.** Use
|
|
422
|
+
pinned fixture bases, observable decisive tests independent of Implement, and
|
|
423
|
+
separate Review contexts. For a comparison, use two small software fixtures,
|
|
424
|
+
comparable prompts/contexts/trials, a measured local baseline and one selected
|
|
425
|
+
local/hybrid alternative. Build returns to Factory's checks, independent Review
|
|
426
|
+
and operator handoff; it does not launch another review pipeline. Set explicit
|
|
427
|
+
deadlines/resource budgets and exercise tool use, context recovery and reports.
|
|
428
|
+
5. **Inspect history and usage.** Use `factory status --state PATH` and the
|
|
429
|
+
dashboard's attempt history/Analytics. Retain raw failures, diagnostics,
|
|
430
|
+
unfinished work and repairs under [recovery](recovery.md). Record wall time,
|
|
431
|
+
observable prefill/decode throughput, memory/offload, token observations,
|
|
432
|
+
tool/report failures, checks/review outcomes and human time, including cloud
|
|
433
|
+
Review usage in hybrid totals. Unknown measurements stay unknown; see
|
|
434
|
+
[qualification evidence and limits](proof.md) before generalizing a result.
|
|
435
|
+
6. **Roll back explicitly when needed.** With the running controller idle,
|
|
436
|
+
`factory definition rollback --state PATH` previews the previous roles/bindings;
|
|
437
|
+
add `--expected-revision` from that preview to apply it. Image rollback is a
|
|
438
|
+
separate stopped-installation operation described below. Preserve attempts and
|
|
439
|
+
backups; rollback does not rewrite failed history or retry work.
|
|
440
|
+
|
|
441
|
+
Fresh Pi completed-message observations have **partial** coverage: input includes
|
|
442
|
+
cache reads/writes, with cached input, cache-write input and output shown separately;
|
|
443
|
+
cache subsets are not added again. Absent or old usage remains unknown, with no Pi
|
|
444
|
+
historical backfill. Summary and unreported error/retry usage remains unreported,
|
|
445
|
+
even when the attempt succeeds. See [Pi usage semantics](usage.md#pi-stdout-measurements-0154).
|
|
446
|
+
These observations establish neither total cost nor speed or quality. Local
|
|
447
|
+
inference avoids provider token billing, not electricity, hardware or operator cost.
|
|
448
|
+
|
|
449
|
+
Set context/output limits against actual allocation with headroom as described
|
|
450
|
+
below. Before recommending larger windows, test a bounded 64k/128k allocation
|
|
451
|
+
where supported, recording KV-cache/Flash Attention settings and memory separately from
|
|
452
|
+
long-context task quality. An advertised window or successful short prompt is
|
|
453
|
+
insufficient. Authenticated local endpoints, sampling overrides and custom thinking
|
|
454
|
+
maps are unsupported; supported reasoning-effort requests still need endpoint
|
|
455
|
+
qualification and do not prove a server honored them. No model/provider is chosen
|
|
456
|
+
automatically. Broader local/hybrid qualification remains open in #69.
|
|
433
457
|
|
|
434
458
|
|
|
435
459
|
## Local Pi project resources (0.15.3, #103)
|
|
@@ -455,13 +479,12 @@ extensions/packages and automatically discovered repository skills are not a
|
|
|
455
479
|
supported configuration path. Explicit task-driven file reads are still possible
|
|
456
480
|
within the sandbox and grant no additional authority.
|
|
457
481
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
attempt after qualification. Do not modify private installations from a job.
|
|
482
|
+
Qualify native local Build and separate read-only Review with the exact selected
|
|
483
|
+
image and model. `npm run qualify:pi` exercises actual Pi with **synthetic HTTP
|
|
484
|
+
inference**, not model judgment. See [trust-store proof and limits](proof.md#pi-project-trust-startup-0153-103)
|
|
485
|
+
and the later qualification records in [proof](proof.md). Preserve failed attempts
|
|
486
|
+
and use [recovery](recovery.md) before retrying; jobs must not modify private
|
|
487
|
+
installations.
|
|
465
488
|
|
|
466
489
|
## Local context budget and worker image (0.15.2, #100)
|
|
467
490
|
|
|
@@ -509,9 +532,8 @@ guessed or silently rewritten. Do not add project Pi settings to bypass
|
|
|
509
532
|
the admitted binding or rely on custom tuning that has not been qualified.
|
|
510
533
|
See [pinned compaction behavior](https://github.com/earendil-works/pi/blob/v0.87.1/packages/coding-agent/docs/compaction.md).
|
|
511
534
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
signal counts the system/task/tool envelope once, call arguments, non-tool text
|
|
535
|
+
The local adapter also checks history pressure at Pi's completed-tool-turn
|
|
536
|
+
boundary. This conservative byte signal counts the system/task/tool envelope once, call arguments, non-tool text
|
|
515
537
|
and capped tool excerpts, separately from provider-reported usage. At 65% of the
|
|
516
538
|
input budget it considers Pi's supported summary generator and append-only
|
|
517
539
|
compaction entry. The newest complete tool group is retained; up to three older
|
|
@@ -541,7 +563,7 @@ output on pinned Pi). `factory_context_recovery` JSONL events record only
|
|
|
541
563
|
pressure, envelope/floor sizes, group counts and recovery progress, without
|
|
542
564
|
prompts/content. Pi token accounting stays partial; this summary path is not
|
|
543
565
|
added to ordinary assistant usage totals. See
|
|
544
|
-
[
|
|
566
|
+
[context-recovery measurements, retained failures and qualification limits](proof.md#short-local-pi-history-recovery-0155-candidate-105).
|
|
545
567
|
|
|
546
568
|
Before adoption, stop and reconcile all work, retain the old immutable image ID
|
|
547
569
|
and a stopped private-state backup. Build/qualify the exact candidate image, then
|
|
@@ -556,7 +578,7 @@ readable and cloud profiles keep their existing wrapper. Roll back with the reta
|
|
|
556
578
|
path and restore the previously working role definition through revision-guarded
|
|
557
579
|
rollback. Do not change frozen attempts or relabel old failed results.
|
|
558
580
|
|
|
559
|
-
|
|
581
|
+
A bounded actual-inference fixture must include enough tool results to trigger
|
|
560
582
|
summarization, resumed useful tool work, the required report, checks and independent
|
|
561
583
|
Review. Record the exact image/model digest, harness/server versions, allocated
|
|
562
584
|
window, output/reasoning request, tool growth, compaction ordering, elapsed time,
|
|
@@ -564,6 +586,6 @@ quality outcome and peak memory; unknown measurements remain null. Set an explic
|
|
|
564
586
|
job deadline/resource budget and preserve any unfinished checkout and diagnostic
|
|
565
587
|
artifacts. A short successful prompt is insufficient. A larger actually allocated
|
|
566
588
|
window is a later measured comparison only if this evidence warrants it; do not
|
|
567
|
-
switch model or cloud provider automatically.
|
|
568
|
-
|
|
569
|
-
|
|
589
|
+
switch model or cloud provider automatically. An operator-selected fresh cloud
|
|
590
|
+
retry and unfinished-checkpoint recovery remain governed by [recovery](recovery.md); neither converts failed local work into local
|
|
591
|
+
delivery.
|
|
@@ -31,16 +31,18 @@ import { expectedWebStories, webPolicyHash } from './web-verification.mjs';
|
|
|
31
31
|
// execution selection, isolation and acceptance policy remain unchanged.
|
|
32
32
|
// 0.15.5 changes only local context recovery/projection; v1/v2/v3 schemas,
|
|
33
33
|
// frozen selection hashes, provenance, checks and acceptance guards are unchanged.
|
|
34
|
+
// 0.15.6 corrects packaged setup guidance and release metadata only; writers,
|
|
35
|
+
// schemas, isolation, frozen hashes, reconstruction and acceptance are unchanged.
|
|
34
36
|
// Older writers still require exact patch/tree reconstruction before publication.
|
|
35
37
|
// Deliberately independent of VERSION: a release bump is not
|
|
36
|
-
// evidence compatibility. Re-audit this list
|
|
37
|
-
// isolation
|
|
38
|
+
// evidence compatibility. Re-audit this list before every release, including
|
|
39
|
+
// writer, isolation and validation changes; remove versions whose guarantees no longer
|
|
38
40
|
// satisfy current policy. See docs/npm.md. This predicate alone grants no trust.
|
|
39
|
-
const SUPPORTED_EXECUTION_RUNTIMES_V1 = new Set(['0.8.0', '0.9.0', '0.9.1', '0.10.0', '0.11.0', '0.11.1', '0.11.2', '0.12.0', '0.13.0', '0.13.1', '0.14.0', '0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5']);
|
|
41
|
+
const SUPPORTED_EXECUTION_RUNTIMES_V1 = new Set(['0.8.0', '0.9.0', '0.9.1', '0.10.0', '0.11.0', '0.11.1', '0.11.2', '0.12.0', '0.13.0', '0.13.1', '0.14.0', '0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5', '0.15.6']);
|
|
40
42
|
|
|
41
43
|
export function isSupportedExecutionProfile(profile) {
|
|
42
|
-
if ([2, 3].includes(profile?.version)) return (profile.version === 3 ? ['0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5'].includes(profile.runtimeVersion) && Object.hasOwn(profile, 'localBinding')
|
|
43
|
-
: ['0.14.0', '0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5'].includes(profile.runtimeVersion) && !Object.hasOwn(profile, 'localBinding') && profile.inferenceProvider !== 'factory-local')
|
|
44
|
+
if ([2, 3].includes(profile?.version)) return (profile.version === 3 ? ['0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5', '0.15.6'].includes(profile.runtimeVersion) && Object.hasOwn(profile, 'localBinding')
|
|
45
|
+
: ['0.14.0', '0.15.0', '0.15.1', '0.15.2', '0.15.3', '0.15.4', '0.15.5', '0.15.6'].includes(profile.runtimeVersion) && !Object.hasOwn(profile, 'localBinding') && profile.inferenceProvider !== 'factory-local')
|
|
44
46
|
&& profile.role === (Object.keys(ROLE_PHASES).find(role => ROLE_PHASES[role] === profile.phase) || null)
|
|
45
47
|
&& (profile.reasoningEffort === null || ['low', 'medium', 'high'].includes(profile.reasoningEffort))
|
|
46
48
|
&& /^[a-f0-9]{64}$/.test(profile.selectionHash || '');
|
package/package.json
CHANGED