@ashlr/hub 3.3.0 → 3.3.2
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/CHANGELOG.md +46 -2
- package/README.md +51 -38
- package/dist/build-identity.json +2 -2
- package/dist/cli/completions.js +1 -2
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/dashboard.js +5 -4
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/help.js +7 -10
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +0 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/serve.js +7 -3
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/setup.d.ts +5 -3
- package/dist/cli/setup.js +14 -7
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/update.js +3 -1
- package/dist/cli/update.js.map +1 -1
- package/dist/core/daemon/activation-permit.d.ts +33 -268
- package/dist/core/daemon/activation-permit.js +106 -1111
- package/dist/core/daemon/activation-permit.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +1 -13
- package/dist/core/daemon/loop.js +10 -113
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/service-install-authority.d.ts +5 -1
- package/dist/core/daemon/service-install-authority.js +7 -20
- package/dist/core/daemon/service-install-authority.js.map +1 -1
- package/dist/core/fleet/automerge-pass.js +28 -77
- package/dist/core/fleet/automerge-pass.js.map +1 -1
- package/dist/core/fleet/decisions-ledger.js +1 -1
- package/dist/core/fleet/decisions-ledger.js.map +1 -1
- package/dist/core/fleet/judge-trace.js +2 -1
- package/dist/core/fleet/judge-trace.js.map +1 -1
- package/dist/core/fleet/manager.d.ts +6 -0
- package/dist/core/fleet/manager.js +35 -17
- package/dist/core/fleet/manager.js.map +1 -1
- package/dist/core/fleet/post-merge-credit-label.d.ts +10 -0
- package/dist/core/fleet/post-merge-credit-label.js +13 -0
- package/dist/core/fleet/post-merge-credit-label.js.map +1 -0
- package/dist/core/fleet/post-merge-credit.d.ts +20 -38
- package/dist/core/fleet/post-merge-credit.js +38 -39
- package/dist/core/fleet/post-merge-credit.js.map +1 -1
- package/dist/core/fleet/self-improve.d.ts +7 -7
- package/dist/core/fleet/self-improve.js +104 -20
- package/dist/core/fleet/self-improve.js.map +1 -1
- package/dist/core/fleet/status.js +0 -1
- package/dist/core/fleet/status.js.map +1 -1
- package/dist/core/foundry/automerge-scope-policy.d.ts +2 -2
- package/dist/core/foundry/automerge-scope-policy.js +2 -9
- package/dist/core/foundry/automerge-scope-policy.js.map +1 -1
- package/dist/core/goals/store.js +60 -20
- package/dist/core/goals/store.js.map +1 -1
- package/dist/core/inbox/apply.js +3 -5
- package/dist/core/inbox/apply.js.map +1 -1
- package/dist/core/inbox/merge.d.ts +0 -84
- package/dist/core/inbox/merge.js +23 -277
- package/dist/core/inbox/merge.js.map +1 -1
- package/dist/core/learn/reflect.js +10 -0
- package/dist/core/learn/reflect.js.map +1 -1
- package/dist/core/onboard.d.ts +2 -0
- package/dist/core/onboard.js +9 -3
- package/dist/core/onboard.js.map +1 -1
- package/dist/core/run/orchestrator.js +2 -0
- package/dist/core/run/orchestrator.js.map +1 -1
- package/dist/core/types.d.ts +5 -4
- package/dist/core/types.js.map +1 -1
- package/dist/core/web/api.d.ts +6 -0
- package/dist/core/web/api.js +69 -11
- package/dist/core/web/api.js.map +1 -1
- package/dist/core/web/public/app.js +5 -1
- package/dist/core/web/public/next/assets/index-CDHQraxS.css +1 -0
- package/dist/core/web/public/next/assets/index-zVKD9krw.js +69 -0
- package/dist/core/web/public/next/assets/{index-Ct0mf8n4.js.map → index-zVKD9krw.js.map} +1 -1
- package/dist/core/web/public/next/index.html +2 -2
- package/dist/core/web/read-session-revocations.d.ts +26 -0
- package/dist/core/web/read-session-revocations.js +48 -0
- package/dist/core/web/read-session-revocations.js.map +1 -0
- package/dist/core/web/server.js +73 -27
- package/dist/core/web/server.js.map +1 -1
- package/dist/core/web/static.d.ts +1 -1
- package/dist/core/web/static.js +54 -20
- package/dist/core/web/static.js.map +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/docs/RUNTIME_ACTIVATION_AUTHORITY.md +0 -11
- package/node_modules/fast-uri/index.js +201 -48
- package/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/fast-uri/lib/utils.js +388 -91
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +105 -0
- package/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +90 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/fast-uri/test/security.test.js +75 -3
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/qs/CHANGELOG.md +26 -0
- package/node_modules/qs/README.md +19 -1
- package/node_modules/qs/dist/qs.js +25 -25
- package/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/qs/lib/parse.js +16 -6
- package/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/qs/lib/utils.js +57 -11
- package/node_modules/qs/package.json +8 -7
- package/node_modules/qs/test/parse.js +419 -0
- package/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/qs/test/utils.js +206 -0
- package/package.json +5 -4
- package/schema/config.schema.json +7 -7
- package/dist/cli/activation.d.ts +0 -41
- package/dist/cli/activation.js +0 -485
- package/dist/cli/activation.js.map +0 -1
- package/dist/core/web/public/next/assets/index-CY0U241s.css +0 -1
- package/dist/core/web/public/next/assets/index-Ct0mf8n4.js +0 -69
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Post-merge learning evidence — report-only release protocol.
|
|
3
3
|
*
|
|
4
4
|
* A realized merge is an immutable operational fact, not proof that the
|
|
5
|
-
* change remained beneficial. This module is the
|
|
6
|
-
*
|
|
5
|
+
* change remained beneficial. This module is the only prospective release
|
|
6
|
+
* boundary, but it mints no operational authority while the observation source
|
|
7
|
+
* remains adverse-only:
|
|
7
8
|
*
|
|
8
9
|
* 1. The proposal must carry an AUTHENTICATED realized-merge witness
|
|
9
10
|
* (authenticatedRealizedMergeOf — binds to this exact proposal via a
|
|
@@ -21,20 +22,13 @@
|
|
|
21
22
|
* back healthy/complete (a degraded read fails closed — we never treat
|
|
22
23
|
* "couldn't check" as "checked clean").
|
|
23
24
|
*
|
|
24
|
-
* That ledger
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* known, documented limitation — see sweepPostMergeCreditReleases' doc
|
|
28
|
-
* comment — not an oversight.
|
|
25
|
+
* That ledger never records a positive "we checked, it's clean" row. Silence
|
|
26
|
+
* after a conservative window is diagnostic only, not positive confirmation;
|
|
27
|
+
* evaluation returns report-only and does not mint a label.
|
|
29
28
|
*
|
|
30
|
-
*
|
|
31
|
-
* HMAC-
|
|
32
|
-
*
|
|
33
|
-
* consumers persist labelBasis-shaped fields on structures that are, at least
|
|
34
|
-
* in tests and in caller-authored proposal/ledger data, fully attacker/
|
|
35
|
-
* test-controlled. A bare literal is trivially replayable; only a value
|
|
36
|
-
* carrying a valid local-key HMAC over the specific (repo, proposalId,
|
|
37
|
-
* mergeCommit) event can pass. isPostMergeCreditReleaseLabel() remains
|
|
29
|
+
* HISTORICAL TOKEN SHAPE: the verifier remains fail-closed even for formerly
|
|
30
|
+
* valid HMAC-shaped values while operational release is disabled.
|
|
31
|
+
* isPostMergeCreditReleaseLabel() remains
|
|
38
32
|
* "structural recognition only" — matching the bare literal — for the
|
|
39
33
|
* existing defensive filters elsewhere that specifically reject the
|
|
40
34
|
* unauthenticated literal (e.g. skill-records.ts, decisions-ledger.ts).
|
|
@@ -48,15 +42,18 @@ import { causalMetadataFromProposal } from '../learning/causal.js';
|
|
|
48
42
|
import { readDecisions, recordDecision } from './decisions-ledger.js';
|
|
49
43
|
import { postMergeObservationEventId, readPostMergeObservations } from './post-merge-observations.js';
|
|
50
44
|
import { skillCardContentHash } from './skill-attestation.js';
|
|
45
|
+
import { POST_MERGE_CREDIT_RELEASE_LABEL } from './post-merge-credit-label.js';
|
|
46
|
+
export { POST_MERGE_CREDIT_RELEASE_LABEL, isPostMergeCreditReleaseLabel, } from './post-merge-credit-label.js';
|
|
51
47
|
// ---------------------------------------------------------------------------
|
|
52
48
|
// Structural constants
|
|
53
49
|
// ---------------------------------------------------------------------------
|
|
54
50
|
export const POST_MERGE_CREDIT_POLICY_VERSION = 'post-merge-credit-v1';
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Operational release remains disabled until a positive, complete stability
|
|
53
|
+
* witness exists. The current adverse-only ledger supports reporting, not
|
|
54
|
+
* authority to steer routing or promote reusable skills.
|
|
55
|
+
*/
|
|
56
|
+
const POST_MERGE_CREDIT_OPERATIONAL_RELEASE = false;
|
|
60
57
|
/**
|
|
61
58
|
* Minimum wall-clock time since the realized merge before credit MAY be
|
|
62
59
|
* released. See module doc for rationale (~2x the outcome-watcher follow-up
|
|
@@ -123,6 +120,8 @@ function equalHex(left, right) {
|
|
|
123
120
|
*/
|
|
124
121
|
export function hasReleasedPostMergeCredit(labelBasis) {
|
|
125
122
|
try {
|
|
123
|
+
if (!POST_MERGE_CREDIT_OPERATIONAL_RELEASE)
|
|
124
|
+
return false;
|
|
126
125
|
if (typeof labelBasis !== 'string')
|
|
127
126
|
return false;
|
|
128
127
|
const match = CREDIT_TOKEN_RE.exec(labelBasis);
|
|
@@ -140,8 +139,9 @@ export function hasReleasedPostMergeCredit(labelBasis) {
|
|
|
140
139
|
}
|
|
141
140
|
}
|
|
142
141
|
/**
|
|
143
|
-
* Determine whether `proposal`
|
|
144
|
-
*
|
|
142
|
+
* Determine whether `proposal` has reportable post-merge evidence RIGHT NOW.
|
|
143
|
+
* Operational eligibility remains false until a positive stability witness
|
|
144
|
+
* exists. Fail-closed on every
|
|
145
145
|
* ambiguous path (missing witness, unparseable timestamp, window not yet
|
|
146
146
|
* elapsed, degraded/incomplete observation-ledger read, any adverse
|
|
147
147
|
* observation for this exact merge event, signing failure). Never throws.
|
|
@@ -190,6 +190,16 @@ export function evaluatePostMergeCreditRelease(proposal, opts = {}) {
|
|
|
190
190
|
if (read.observations.some((observation) => observation.eventId === eventId)) {
|
|
191
191
|
return { eligible: false, label: null, reason: 'adverse-outcome-observed' };
|
|
192
192
|
}
|
|
193
|
+
// Silence in an adverse-only ledger is useful diagnostic evidence, but it
|
|
194
|
+
// is not positive proof that this exact merge was observed stable. Keep
|
|
195
|
+
// the entire release path report-only until such a witness exists.
|
|
196
|
+
if (!POST_MERGE_CREDIT_OPERATIONAL_RELEASE) {
|
|
197
|
+
return {
|
|
198
|
+
eligible: false,
|
|
199
|
+
label: null,
|
|
200
|
+
reason: 'report-only-no-positive-stability-witness',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
193
203
|
const eventRef = creditEventRef(eventId);
|
|
194
204
|
const mac = computeCreditMac(eventRef);
|
|
195
205
|
if (!mac)
|
|
@@ -213,23 +223,12 @@ export function evaluatePostMergeCreditRelease(proposal, opts = {}) {
|
|
|
213
223
|
*/
|
|
214
224
|
const MAX_SWEEP_CANDIDATES = 200;
|
|
215
225
|
/**
|
|
216
|
-
* Sweep applied proposals for
|
|
217
|
-
*
|
|
218
|
-
* token — decisions-ledger.ts's own newest-row-wins semantics let this
|
|
219
|
-
* supersede the plain merge-fact row written at merge time). Idempotent: a
|
|
220
|
-
* proposal that already carries a released decision row is left alone.
|
|
226
|
+
* Sweep applied proposals for post-merge diagnostics. No operational release
|
|
227
|
+
* row is recorded while positive stability witnesses are unavailable.
|
|
221
228
|
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
* "actively confirmed clean" signal — there is no such positive signal
|
|
226
|
-
* anywhere in the fleet today. If a repo's outcome-watcher coverage were
|
|
227
|
-
* somehow disabled for a specific proposal's repo (not enrolled, or the local
|
|
228
|
-
* clone was deleted), this sweep cannot detect that and would release credit
|
|
229
|
-
* on elapsed time alone. The MIN_POST_MERGE_OBSERVATION_WINDOW_MS margin
|
|
230
|
-
* exists specifically to bound that risk; closing it fully would require
|
|
231
|
-
* outcome-watcher.ts (unowned here) to also persist a positive "swept clean"
|
|
232
|
-
* marker per merge event.
|
|
229
|
+
* The post-merge-observations ledger only records adverse outcomes. Closing
|
|
230
|
+
* the release path requires a positive, complete "swept clean" witness bound
|
|
231
|
+
* to the exact merge event; elapsed time and silence are insufficient.
|
|
233
232
|
*
|
|
234
233
|
* SCALING NOTE: unlike outcome-watcher.ts, this sweep has no persistent
|
|
235
234
|
* cursor — it re-scans applied proposals from the top of listProposalsDetailed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-merge-credit.js","sourceRoot":"","sources":["../../../src/core/fleet/post-merge-credit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"post-merge-credit.js","sourceRoot":"","sources":["../../../src/core/fleet/post-merge-credit.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* policy file.
|
|
11
11
|
* - FIRE-AND-FORGET: learnFromRejection() never throws, never awaits
|
|
12
12
|
* anything on the critical path. All I/O is wrapped in try/catch.
|
|
13
|
-
* - GATED: every code path checks cfg.foundry?.selfImprove
|
|
14
|
-
* (default
|
|
13
|
+
* - GATED: every code path checks cfg.foundry?.selfImprove === true
|
|
14
|
+
* (default OFF). Unless the flag is explicitly true the function returns
|
|
15
15
|
* immediately — byte-identical to having no call at all.
|
|
16
16
|
* - ADDITIVE: the genome entry is informational grounding for future runs.
|
|
17
17
|
* It is NOT an execution directive; it does not alter the merge gate,
|
|
@@ -42,7 +42,7 @@ export declare function deriveLesson(verdict: RejectionVerdict, _reasoning: stri
|
|
|
42
42
|
* 2. A decisions-ledger entry for telemetry/observability.
|
|
43
43
|
*
|
|
44
44
|
* NEVER THROWS. NEVER BLOCKS (all I/O is synchronous JSONL append behind
|
|
45
|
-
* try/catch). Gated on cfg.foundry?.selfImprove
|
|
45
|
+
* try/catch). Gated on cfg.foundry?.selfImprove === true.
|
|
46
46
|
*
|
|
47
47
|
* @param proposalId The proposal id (for ledger correlation).
|
|
48
48
|
* @param proposalTitle Legacy compatibility input; deliberately discarded.
|
|
@@ -50,7 +50,7 @@ export declare function deriveLesson(verdict: RejectionVerdict, _reasoning: stri
|
|
|
50
50
|
* @param reasoning Legacy compatibility input; deliberately discarded.
|
|
51
51
|
* @param cfg Fleet config.
|
|
52
52
|
*/
|
|
53
|
-
export declare function learnFromRejection(proposalId: string, proposalTitle: string, verdict: string, reasoning: string, cfg: AshlrConfig):
|
|
53
|
+
export declare function learnFromRejection(proposalId: string, proposalTitle: string, verdict: string, reasoning: string, cfg: AshlrConfig): boolean;
|
|
54
54
|
export interface RejectionLearningSweepResult {
|
|
55
55
|
/** Distinct proposals with a rejection-shaped judge verdict inspected. */
|
|
56
56
|
scanned: number;
|
|
@@ -63,9 +63,9 @@ export interface RejectionLearningSweepResult {
|
|
|
63
63
|
sourceComplete: boolean;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* Sweep the decisions ledger for judged rejection verdicts (review
|
|
67
|
-
*
|
|
68
|
-
* produced a
|
|
66
|
+
* Sweep the decisions ledger for considered judged rejection verdicts (review
|
|
67
|
+
* | noise | harmful with their matching judgeReasonCode) and call
|
|
68
|
+
* learnFromRejection() for each one that hasn't already produced a lesson.
|
|
69
69
|
*
|
|
70
70
|
* learnFromRejection's ONLY prior caller was automerge-pass.ts, reached
|
|
71
71
|
* exclusively from inside the auto-merge pass (cfg.foundry.autoMerge.enabled
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* policy file.
|
|
11
11
|
* - FIRE-AND-FORGET: learnFromRejection() never throws, never awaits
|
|
12
12
|
* anything on the critical path. All I/O is wrapped in try/catch.
|
|
13
|
-
* - GATED: every code path checks cfg.foundry?.selfImprove
|
|
14
|
-
* (default
|
|
13
|
+
* - GATED: every code path checks cfg.foundry?.selfImprove === true
|
|
14
|
+
* (default OFF). Unless the flag is explicitly true the function returns
|
|
15
15
|
* immediately — byte-identical to having no call at all.
|
|
16
16
|
* - ADDITIVE: the genome entry is informational grounding for future runs.
|
|
17
17
|
* It is NOT an execution directive; it does not alter the merge gate,
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
* - TELEMETRY: a usage counter is appended to the decisions ledger under
|
|
24
24
|
* action 'self-improve:written' for observability (no PII, no secrets).
|
|
25
25
|
*/
|
|
26
|
-
import
|
|
26
|
+
import fs from 'node:fs';
|
|
27
|
+
import { appendHubEntry, hubStorePath } from '../genome/store.js';
|
|
27
28
|
import { readDecisions, readDecisionsDetailed, recordDecision } from './decisions-ledger.js';
|
|
28
29
|
// ---------------------------------------------------------------------------
|
|
29
30
|
// Constants
|
|
@@ -35,9 +36,80 @@ const STALE_DAYS = 90;
|
|
|
35
36
|
export const ANTI_PLAYBOOK_INJECT_CAP = 800;
|
|
36
37
|
/** Tag prefix for all genome entries written by this module. */
|
|
37
38
|
const TAG = 'm235:anti-playbook';
|
|
39
|
+
/** Maximum newly appended bytes inspected to acknowledge one lesson write. */
|
|
40
|
+
const APPEND_ACK_MAX_BYTES = 1024 * 1024;
|
|
41
|
+
function hubSizeBeforeAppend() {
|
|
42
|
+
const file = hubStorePath();
|
|
43
|
+
try {
|
|
44
|
+
return fs.statSync(file).size;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return fs.existsSync(file) ? null : 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function appendedBytesContainEntry(entry, offset) {
|
|
51
|
+
const file = hubStorePath();
|
|
52
|
+
let fd;
|
|
53
|
+
try {
|
|
54
|
+
const noFollow = typeof fs.constants.O_NOFOLLOW === 'number' ? fs.constants.O_NOFOLLOW : 0;
|
|
55
|
+
fd = fs.openSync(file, fs.constants.O_RDONLY | noFollow);
|
|
56
|
+
const openedBefore = fs.fstatSync(fd);
|
|
57
|
+
const namedBefore = fs.lstatSync(file);
|
|
58
|
+
if (!openedBefore.isFile() || namedBefore.isSymbolicLink() || !namedBefore.isFile() ||
|
|
59
|
+
openedBefore.dev !== namedBefore.dev || openedBefore.ino !== namedBefore.ino)
|
|
60
|
+
return false;
|
|
61
|
+
const size = openedBefore.size;
|
|
62
|
+
const growth = size - offset;
|
|
63
|
+
if (growth <= 0 || growth > APPEND_ACK_MAX_BYTES)
|
|
64
|
+
return false;
|
|
65
|
+
const bytes = Buffer.alloc(growth);
|
|
66
|
+
if (fs.readSync(fd, bytes, 0, growth, offset) !== growth)
|
|
67
|
+
return false;
|
|
68
|
+
const openedAfter = fs.fstatSync(fd);
|
|
69
|
+
const namedAfter = fs.lstatSync(file);
|
|
70
|
+
if (!openedAfter.isFile() || namedAfter.isSymbolicLink() || !namedAfter.isFile() ||
|
|
71
|
+
openedBefore.dev !== openedAfter.dev || openedBefore.ino !== openedAfter.ino ||
|
|
72
|
+
openedAfter.dev !== namedAfter.dev || openedAfter.ino !== namedAfter.ino ||
|
|
73
|
+
openedBefore.size !== openedAfter.size ||
|
|
74
|
+
openedBefore.mtimeMs !== openedAfter.mtimeMs ||
|
|
75
|
+
openedBefore.ctimeMs !== openedAfter.ctimeMs ||
|
|
76
|
+
openedAfter.size !== namedAfter.size ||
|
|
77
|
+
openedAfter.mtimeMs !== namedAfter.mtimeMs ||
|
|
78
|
+
openedAfter.ctimeMs !== namedAfter.ctimeMs)
|
|
79
|
+
return false;
|
|
80
|
+
return bytes.toString('utf8').split('\n').some((line) => {
|
|
81
|
+
if (!line.trim())
|
|
82
|
+
return false;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(line).id === entry.id;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
if (fd !== undefined) {
|
|
96
|
+
try {
|
|
97
|
+
fs.closeSync(fd);
|
|
98
|
+
}
|
|
99
|
+
catch { /* best-effort close */ }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
38
103
|
function isRejection(v) {
|
|
39
104
|
return v === 'review' || v === 'noise' || v === 'harmful';
|
|
40
105
|
}
|
|
106
|
+
function isConsideredRejection(entry) {
|
|
107
|
+
const verdict = (entry.verdict ?? '').toLowerCase();
|
|
108
|
+
if (!isRejection(verdict))
|
|
109
|
+
return false;
|
|
110
|
+
const expectedReason = `judge-${verdict}`;
|
|
111
|
+
return entry.judgeReasonCode === expectedReason;
|
|
112
|
+
}
|
|
41
113
|
// ---------------------------------------------------------------------------
|
|
42
114
|
// Lesson derivation (pure, deterministic, no LLM)
|
|
43
115
|
// ---------------------------------------------------------------------------
|
|
@@ -66,7 +138,7 @@ export function deriveLesson(verdict, _reasoning, _proposalTitle) {
|
|
|
66
138
|
* 2. A decisions-ledger entry for telemetry/observability.
|
|
67
139
|
*
|
|
68
140
|
* NEVER THROWS. NEVER BLOCKS (all I/O is synchronous JSONL append behind
|
|
69
|
-
* try/catch). Gated on cfg.foundry?.selfImprove
|
|
141
|
+
* try/catch). Gated on cfg.foundry?.selfImprove === true.
|
|
70
142
|
*
|
|
71
143
|
* @param proposalId The proposal id (for ledger correlation).
|
|
72
144
|
* @param proposalTitle Legacy compatibility input; deliberately discarded.
|
|
@@ -75,31 +147,38 @@ export function deriveLesson(verdict, _reasoning, _proposalTitle) {
|
|
|
75
147
|
* @param cfg Fleet config.
|
|
76
148
|
*/
|
|
77
149
|
export function learnFromRejection(proposalId, proposalTitle, verdict, reasoning, cfg) {
|
|
78
|
-
// Gate: default
|
|
150
|
+
// Gate: default OFF; only explicit true authorizes durable learning.
|
|
79
151
|
try {
|
|
80
152
|
const foundry = cfg.foundry;
|
|
81
|
-
if (foundry?.['selfImprove']
|
|
82
|
-
return;
|
|
153
|
+
if (foundry?.['selfImprove'] !== true)
|
|
154
|
+
return false;
|
|
83
155
|
}
|
|
84
156
|
catch {
|
|
85
|
-
return;
|
|
157
|
+
return false;
|
|
86
158
|
}
|
|
87
159
|
// Only act on rejection verdicts.
|
|
88
160
|
if (!isRejection(verdict))
|
|
89
|
-
return;
|
|
161
|
+
return false;
|
|
90
162
|
// Derive and write the lesson.
|
|
91
163
|
try {
|
|
164
|
+
const appendOffset = hubSizeBeforeAppend();
|
|
165
|
+
if (appendOffset === null)
|
|
166
|
+
return false;
|
|
92
167
|
const lesson = deriveLesson(verdict, reasoning, proposalTitle);
|
|
93
168
|
const title = `Anti-playbook observation: ${verdict}`;
|
|
94
|
-
appendHubEntry({
|
|
169
|
+
const entry = appendHubEntry({
|
|
95
170
|
title,
|
|
96
171
|
text: lesson,
|
|
97
172
|
tags: [TAG, `verdict:${verdict}`, `proposal:${proposalId.slice(0, 24)}`],
|
|
98
173
|
hubOnly: true,
|
|
99
174
|
});
|
|
175
|
+
if (!appendedBytesContainEntry(entry, appendOffset))
|
|
176
|
+
return false;
|
|
100
177
|
}
|
|
101
178
|
catch {
|
|
102
|
-
//
|
|
179
|
+
// No durable lesson means no success acknowledgment and no idempotency
|
|
180
|
+
// telemetry. The sweep may safely retry on a later pass.
|
|
181
|
+
return false;
|
|
103
182
|
}
|
|
104
183
|
// Telemetry: record to decisions ledger (action 'self-improve:written').
|
|
105
184
|
try {
|
|
@@ -116,6 +195,7 @@ export function learnFromRejection(proposalId, proposalTitle, verdict, reasoning
|
|
|
116
195
|
catch {
|
|
117
196
|
// Ledger write is best-effort observability only.
|
|
118
197
|
}
|
|
198
|
+
return true;
|
|
119
199
|
}
|
|
120
200
|
// ---------------------------------------------------------------------------
|
|
121
201
|
// Public: sweepRejectionLearning — auto-merge-independent reachability
|
|
@@ -125,9 +205,9 @@ export function learnFromRejection(proposalId, proposalTitle, verdict, reasoning
|
|
|
125
205
|
*/
|
|
126
206
|
const MAX_REJECTION_SWEEP_CANDIDATES = 200;
|
|
127
207
|
/**
|
|
128
|
-
* Sweep the decisions ledger for judged rejection verdicts (review
|
|
129
|
-
*
|
|
130
|
-
* produced a
|
|
208
|
+
* Sweep the decisions ledger for considered judged rejection verdicts (review
|
|
209
|
+
* | noise | harmful with their matching judgeReasonCode) and call
|
|
210
|
+
* learnFromRejection() for each one that hasn't already produced a lesson.
|
|
131
211
|
*
|
|
132
212
|
* learnFromRejection's ONLY prior caller was automerge-pass.ts, reached
|
|
133
213
|
* exclusively from inside the auto-merge pass (cfg.foundry.autoMerge.enabled
|
|
@@ -148,7 +228,7 @@ export function sweepRejectionLearning(cfg, opts = {}) {
|
|
|
148
228
|
};
|
|
149
229
|
try {
|
|
150
230
|
const foundry = cfg.foundry;
|
|
151
|
-
if (foundry?.['selfImprove']
|
|
231
|
+
if (foundry?.['selfImprove'] !== true)
|
|
152
232
|
return result;
|
|
153
233
|
let decisions;
|
|
154
234
|
if (typeof opts.listDecisions === 'function') {
|
|
@@ -156,7 +236,8 @@ export function sweepRejectionLearning(cfg, opts = {}) {
|
|
|
156
236
|
decisions = opts.listDecisions();
|
|
157
237
|
}
|
|
158
238
|
catch {
|
|
159
|
-
|
|
239
|
+
result.sourceComplete = false;
|
|
240
|
+
return result;
|
|
160
241
|
}
|
|
161
242
|
}
|
|
162
243
|
else {
|
|
@@ -187,8 +268,7 @@ export function sweepRejectionLearning(cfg, opts = {}) {
|
|
|
187
268
|
}
|
|
188
269
|
const latestRejection = new Map();
|
|
189
270
|
for (const [proposalId, entry] of latestJudged) {
|
|
190
|
-
|
|
191
|
-
if (isRejection(verdict))
|
|
271
|
+
if (isConsideredRejection(entry))
|
|
192
272
|
latestRejection.set(proposalId, entry);
|
|
193
273
|
}
|
|
194
274
|
let inspected = 0;
|
|
@@ -209,8 +289,12 @@ export function sweepRejectionLearning(cfg, opts = {}) {
|
|
|
209
289
|
}
|
|
210
290
|
if (existing.some((row) => row.action === 'self-improve:written'))
|
|
211
291
|
continue;
|
|
212
|
-
learnFromRejection(proposalId, '', entry.verdict ?? 'review', '', cfg)
|
|
213
|
-
|
|
292
|
+
if (learnFromRejection(proposalId, '', entry.verdict ?? 'review', '', cfg)) {
|
|
293
|
+
result.written++;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
result.skipped++;
|
|
297
|
+
}
|
|
214
298
|
}
|
|
215
299
|
catch {
|
|
216
300
|
result.skipped++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-improve.js","sourceRoot":"","sources":["../../../src/core/fleet/self-improve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"self-improve.js","sourceRoot":"","sources":["../../../src/core/fleet/self-improve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1271,7 +1271,6 @@ export async function buildFleetStatus(cfg) {
|
|
|
1271
1271
|
requestedShape: 'proposal-once',
|
|
1272
1272
|
trustRootCount: 0,
|
|
1273
1273
|
residentAuthorized: false,
|
|
1274
|
-
residentStandingAuthorized: false,
|
|
1275
1274
|
installAuthorized: false,
|
|
1276
1275
|
repairAuthorized: false,
|
|
1277
1276
|
reason: 'activation-readiness-unavailable',
|