@dsh-triage/core 0.1.0 → 0.3.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.
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Profile version exemptions (`compatibility.json`).
3
+ *
4
+ * Upstream 0.2.x lets a profile record "this exact plugin version may run on this exact DSH
5
+ * version" in `<profile>/compatibility.json`, and the loader honours it at boot. Our audit had
6
+ * never read that file, so a profile with an active exemption was reported as `blocked` while the
7
+ * real loader admitted it — the tool was wrong about the one thing it exists to answer.
8
+ *
9
+ * The format is not documented anywhere in the plugin manifest; it is the shape
10
+ * `@deepseek-ai/dsh-app-boot#setProfileVersionExemption` writes:
11
+ *
12
+ * { "<pkg>@<exact version>": ["<exact dsh version>", ...] }
13
+ *
14
+ * Unreadable or unparsable means "authorizes nothing" **and** "must not be rewritten", because
15
+ * rewriting would discard whatever the user actually has in there.
16
+ */
17
+ export declare const PROFILE_COMPATIBILITY_FILENAME = "compatibility.json";
18
+ export interface ProfileExemptions {
19
+ /** Accepted exact `name@version` keys mapped to the DSH versions they were granted for. */
20
+ readonly exemptions: Readonly<Record<string, readonly string[]>>;
21
+ /** False when the file exists but could not be parsed; writing would lose the user's content. */
22
+ readonly rewritable: boolean;
23
+ /** Human-readable problems; empty when the file was absent or fully valid. */
24
+ readonly warnings: readonly string[];
25
+ }
26
+ /** Canonical exact SemVer — the same rule upstream applies before granting anything. */
27
+ export declare function isExactVersion(value: string): boolean;
28
+ /** `name@version`, with the version exact. Returns null instead of guessing. */
29
+ export declare function parseExemptionKey(value: string): {
30
+ name: string;
31
+ version: string;
32
+ } | null;
33
+ export declare function readProfileExemptions(profileDir: string): ProfileExemptions;
34
+ /** Is this exact plugin version exempted for this exact runtime? Never a range comparison. */
35
+ export declare function isExempted(exemptions: Readonly<Record<string, readonly string[]>>, name: string, version: string | null, runtime: string | null): boolean;
36
+ //# sourceMappingURL=exemption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exemption.d.ts","sourceRoot":"","sources":["../src/exemption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,eAAO,MAAM,8BAA8B,uBAAuB,CAAA;AAElE,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAChE,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQzF;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CA0B3E;AAED,8FAA8F;AAC9F,wBAAgB,UAAU,CACxB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,EACvD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAIT"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Profile version exemptions (`compatibility.json`).
3
+ *
4
+ * Upstream 0.2.x lets a profile record "this exact plugin version may run on this exact DSH
5
+ * version" in `<profile>/compatibility.json`, and the loader honours it at boot. Our audit had
6
+ * never read that file, so a profile with an active exemption was reported as `blocked` while the
7
+ * real loader admitted it — the tool was wrong about the one thing it exists to answer.
8
+ *
9
+ * The format is not documented anywhere in the plugin manifest; it is the shape
10
+ * `@deepseek-ai/dsh-app-boot#setProfileVersionExemption` writes:
11
+ *
12
+ * { "<pkg>@<exact version>": ["<exact dsh version>", ...] }
13
+ *
14
+ * Unreadable or unparsable means "authorizes nothing" **and** "must not be rewritten", because
15
+ * rewriting would discard whatever the user actually has in there.
16
+ */
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { join } from 'node:path';
19
+ export const PROFILE_COMPATIBILITY_FILENAME = 'compatibility.json';
20
+ /** Canonical exact SemVer — the same rule upstream applies before granting anything. */
21
+ export function isExactVersion(value) {
22
+ return /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(value);
23
+ }
24
+ /** `name@version`, with the version exact. Returns null instead of guessing. */
25
+ export function parseExemptionKey(value) {
26
+ const at = value.lastIndexOf('@');
27
+ if (at <= 0)
28
+ return null;
29
+ const name = value.slice(0, at);
30
+ const version = value.slice(at + 1);
31
+ if (!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(name))
32
+ return null;
33
+ if (!isExactVersion(version))
34
+ return null;
35
+ return { name, version };
36
+ }
37
+ export function readProfileExemptions(profileDir) {
38
+ const file = join(profileDir, PROFILE_COMPATIBILITY_FILENAME);
39
+ if (!existsSync(file))
40
+ return { exemptions: {}, rewritable: true, warnings: [] };
41
+ const unreadable = (reason) => ({
42
+ exemptions: {},
43
+ rewritable: false,
44
+ warnings: [`${file} ${reason}; treating the profile as having no exemptions`],
45
+ });
46
+ let parsed;
47
+ try {
48
+ parsed = JSON.parse(readFileSync(file, 'utf8'));
49
+ }
50
+ catch (error) {
51
+ return unreadable(`cannot be read (${error instanceof Error ? error.message : String(error)})`);
52
+ }
53
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
54
+ return unreadable('does not contain an object of exemptions');
55
+ }
56
+ const out = {};
57
+ for (const [key, value] of Object.entries(parsed)) {
58
+ if (parseExemptionKey(key) === null)
59
+ return unreadable(`has a key that is not name@exact-version: ${key}`);
60
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string' || !isExactVersion(entry))) {
61
+ return unreadable(`has a non-exact runtime version for ${key}`);
62
+ }
63
+ out[key] = value;
64
+ }
65
+ return { exemptions: out, rewritable: true, warnings: [] };
66
+ }
67
+ /** Is this exact plugin version exempted for this exact runtime? Never a range comparison. */
68
+ export function isExempted(exemptions, name, version, runtime) {
69
+ if (version === null || runtime === null)
70
+ return false;
71
+ const granted = exemptions[`${name}@${version}`];
72
+ return granted !== undefined && granted.includes(runtime);
73
+ }
74
+ //# sourceMappingURL=exemption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exemption.js","sourceRoot":"","sources":["../src/exemption.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,13 +22,21 @@ export type { CopyLocation, DuplicateCopy, DuplicateCopyInput } from './duplicat
22
22
  export { verdictsFromDuplicateCopies } from './duplicates.js';
23
23
  export type { CompatChannel, CompatReading, CompatRelease, CompatStanding } from './compat-channel.js';
24
24
  export { judgeCompatChannel, readCompatChannel } from './compat-channel.js';
25
+ export type { ProfileExemptions } from './exemption.js';
26
+ export { PROFILE_COMPATIBILITY_FILENAME, isExactVersion as isExactExemptionVersion, isExempted, parseExemptionKey, readProfileExemptions, } from './exemption.js';
25
27
  export type { DriftStanding, RangeShape, RangeShapeReading, RegistryFacts, VersionDrift } from './version-drift.js';
26
28
  export { judgeRangeShape, judgeVersionDrift } from './version-drift.js';
27
29
  export type { DeclaredRow, FiberPhase, InventoryEntry, InventoryMeta, InventoryPreset, InventoryPresetRow, InventorySnapshot, InventoryTransport, InventoryVerdictInput, PhaseConclusion, } from './inventory.js';
28
30
  export { FIBER_PHASES, INVENTORY_TRANSPORTS, compareInventory, evidenceMethod, findPresetDivergence, indexRuntimeIds, isFiberPhase, parseInventorySnapshot, phaseConclusion, resolveRuntimeId, verdictsFromInventory, } from './inventory.js';
29
31
  export type { Locale, MessageCatalog } from './messages.js';
30
32
  export { catalogFor, format } from './messages.js';
33
+ export type { LocalPrior, OutcomeArch, OutcomeKey, OutcomeLineRejection, OutcomeLineResult, OutcomeOs, OutcomeProbe, OutcomeProfileKind, OutcomeRecord, OutcomeRejection, OutcomeSanitizeResult, OutcomeSource, TimingBucket, } from './outcome.js';
34
+ export { EVIDENCE_TIER_VALUES, MAX_OUTCOME_BYTES, OUTCOME_ARCH_VALUES, OUTCOME_OS_VALUES, OUTCOME_PROFILE_KIND_VALUES, OUTCOME_SOURCE_VALUES, TIMING_BUCKET_VALUES, assertOutcomeLine, computeLocalPrior, isCompleteOutcomeKey, outcomeKeyOf, sameOutcomeKey, sanitizeOutcome, } from './outcome.js';
31
35
  export type { CapabilityDiff, CapabilityMeta, CapabilitySnapshot, CapabilityTool } from './capabilities.js';
32
36
  export { diffCapabilities, parseCapabilitySnapshot } from './capabilities.js';
37
+ export type { UpgradeBucket, UpgradeBundleInput, UpgradeCause, UpgradeCounts, UpgradeImpact, UpgradeImpactInput, UpgradeJudgement, UpgradeRegistryFact, UpgradeRegistryFailure, UpgradeRegistryNote, UpgradeRelation, UpgradeStanding, UpgradeStandingStatus, UpgradeUnit, } from './upgrade.js';
38
+ export { UPGRADE_BUCKETS, compareUnits, hasNewDenials, judgeUpgradeImpact, registryFactFor, renderUpgradeImpact, upgradeTargetProblem, } from './upgrade.js';
39
+ export { MAX_UNITS_PER_BUCKET, renderUpgradeCard, scrubCardText, type UpgradeCardOptions } from './upgrade-card.js';
40
+ export { DIST_TAG_PACKAGE, DIST_TAG_TARGETS, distTagTargetOf, resolveDistTagTarget, type DistTagResolution, type DistTagTarget, } from './upgrade-target.js';
33
41
  export { redactEnv, redactPath, redactVerdict } from './redact.js';
34
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,cAAc,EACd,WAAW,EACX,eAAe,EACf,OAAO,EACP,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAErC,YAAY,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAElG,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEzG,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC3F,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnH,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAErB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAE7D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACtG,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEvE,YAAY,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAElD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC3G,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,9 +13,14 @@ export { extractEntryClaims, extractPresetDeclarations, findEntryIdCollisions, g
13
13
  export { conclusionRank, mergeVerdicts, renderVerdict, verdictFromAdmission, verdictsFromCollisions, verdictsFromRowAdmission, } from './verdict.js';
14
14
  export { verdictsFromDuplicateCopies } from './duplicates.js';
15
15
  export { judgeCompatChannel, readCompatChannel } from './compat-channel.js';
16
+ export { PROFILE_COMPATIBILITY_FILENAME, isExactVersion as isExactExemptionVersion, isExempted, parseExemptionKey, readProfileExemptions, } from './exemption.js';
16
17
  export { judgeRangeShape, judgeVersionDrift } from './version-drift.js';
17
18
  export { FIBER_PHASES, INVENTORY_TRANSPORTS, compareInventory, evidenceMethod, findPresetDivergence, indexRuntimeIds, isFiberPhase, parseInventorySnapshot, phaseConclusion, resolveRuntimeId, verdictsFromInventory, } from './inventory.js';
18
19
  export { catalogFor, format } from './messages.js';
20
+ export { EVIDENCE_TIER_VALUES, MAX_OUTCOME_BYTES, OUTCOME_ARCH_VALUES, OUTCOME_OS_VALUES, OUTCOME_PROFILE_KIND_VALUES, OUTCOME_SOURCE_VALUES, TIMING_BUCKET_VALUES, assertOutcomeLine, computeLocalPrior, isCompleteOutcomeKey, outcomeKeyOf, sameOutcomeKey, sanitizeOutcome, } from './outcome.js';
19
21
  export { diffCapabilities, parseCapabilitySnapshot } from './capabilities.js';
22
+ export { UPGRADE_BUCKETS, compareUnits, hasNewDenials, judgeUpgradeImpact, registryFactFor, renderUpgradeImpact, upgradeTargetProblem, } from './upgrade.js';
23
+ export { MAX_UNITS_PER_BUCKET, renderUpgradeCard, scrubCardText } from './upgrade-card.js';
24
+ export { DIST_TAG_PACKAGE, DIST_TAG_TARGETS, distTagTargetOf, resolveDistTagTarget, } from './upgrade-target.js';
20
25
  export { redactEnv, redactPath, redactVerdict } from './redact.js';
21
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG9C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AASrC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGlG,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAGzG,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG3E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAcvE,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAGlD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG9C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AASrC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGlG,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAGzG,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,OAAO,EACL,8BAA8B,EAC9B,cAAc,IAAI,uBAAuB,EACzC,UAAU,EACV,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAcvE,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAiBlD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAkB7E,OAAO,EACL,eAAe,EACf,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAA2B,MAAM,mBAAmB,CAAA;AACnH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GAGrB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;AAEhC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD;AAgND,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAEzD;AAED,wHAAwH;AACxH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAMnG"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;AAEhC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD;AA2QD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAEzD;AAED,wHAAwH;AACxH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAMnG"}
package/dist/messages.js CHANGED
@@ -19,6 +19,7 @@ const EN = {
19
19
  'admission.indeterminate': 'runtime version unknown — admission cannot be judged',
20
20
  'admission.declared-only': 'declaration passes only; runtime behaviour is unproven (run a probe)',
21
21
  'admission.row-scope': 'loader row {rows} imports {module} (declared in {source})',
22
+ 'admission.exempted': 'this exact version was exempted for {runtime} in compatibility.json ({module}@{version}) — the loader admits it, but the behaviour is unproven',
22
23
  'admission.row-declared-by': 'the "{module}" copy in this profile is there because {by} lists it under {fields}',
23
24
  'admission.row-missing': 'row {rows} imports {module}, which is not installed under this profile',
24
25
  'admission.row-unconstrained': 'row {rows} imports {module}, which declares no @deepseek-ai/dsh* range — silence here is not a pass',
@@ -105,6 +106,30 @@ const EN = {
105
106
  'probe.profile-link-dangling': '{count} local dependency/dependencies of the copied profile point at nothing ({links}) — the package manager reports this install as successful, which is why it is checked separately',
106
107
  'probe.profile-build-refused': "the copied profile's dependencies installed but the package manager refused to run their build scripts ({detail}) — the sandbox is not the same composition you run",
107
108
  'ui.more-reasons': '…{count} more reason(s); pass --json for the full list',
109
+ 'prior.annotation-only': 'this machine judged this exact key before; the prior is an annotation only and does not change the conclusion',
110
+ 'upgrade.header': 'target dsh {target} · {units} unit(s) read ({bundles} bundle(s), {rows} row(s))',
111
+ 'upgrade.relation.same': 'the target is the runtime this profile already runs ({target})',
112
+ 'upgrade.relation.newer': '{target} is newer than the running {current}',
113
+ 'upgrade.relation.older': '{target} is older than the running {current}',
114
+ 'upgrade.relation.unknown': 'the running runtime could not be read, so the direction of the move is unknown',
115
+ 'upgrade.profile-scope': 'this answer is about profile "{profile}" only (source: {source}); it says nothing about any other profile',
116
+ 'upgrade.admitted-only': 'admitted ≠ works: this list compares declared ranges against {target}; nothing here booted {target}',
117
+ 'upgrade.bucket.would-be-denied': 'would-be-denied · {count} unit(s) declare a range that excludes {target}',
118
+ 'upgrade.bucket.cannot-tell': 'cannot-tell · {count} unit(s) cannot be judged from declarations',
119
+ 'upgrade.bucket.improved': 'improved · {count} unit(s) are denied today and admitted by {target}',
120
+ 'upgrade.bucket.likely-fine': 'likely-fine · {count} unit(s) declare a range that includes {target}',
121
+ 'upgrade.already-denied': 'already denied by the running {current}: the upgrade did not cause this',
122
+ 'upgrade.unusable-declaration': 'the declaration can never be satisfied (empty / not semver / workspace:), so no runtime admits it — not even {target}',
123
+ 'upgrade.registry-annotation': 'secondary evidence only: {package}@{version} declares {range}, which {verdict} {target} — this does not move the unit',
124
+ 'upgrade.more-units': '… {count} more unit(s) in this bucket; pass --json for the full list',
125
+ 'upgrade.more-fixes': '… {count} more fix(es); pass --json for the full list',
126
+ 'upgrade.nothing-sampled': 'nothing was sampled: profile "{profile}" has no bundle layer and no loader row, so there is no impact to report (this is not a clean bill of health)',
127
+ 'upgrade.guidance.headline': 'nothing was judged: upgrade needs a target before it can produce any bucket (exit 2)',
128
+ 'upgrade.guidance.current': 'current {version} · profile {profile}',
129
+ 'upgrade.guidance.current-unknown': 'current unknown · {detail}',
130
+ 'upgrade.guidance.targets': 'targets next {next} · latest {latest} · read from npm {package}',
131
+ 'upgrade.guidance.targets-unknown': 'targets unknown · {detail} (no guess is made here)',
132
+ 'upgrade.guidance.next-step': 'next dsh-triage upgrade --to next (or --to latest, or --to <exact version>, which stays fully offline)',
108
133
  },
109
134
  };
110
135
  const ZH = {
@@ -120,6 +145,7 @@ const ZH = {
120
145
  'admission.indeterminate': '运行时版本未知——admission 无法判定',
121
146
  'admission.declared-only': '仅在声明层通过;运行期行为未实测(需 probe)',
122
147
  'admission.row-scope': 'loader row {rows} 引入 {module}(声明于 {source})',
148
+ 'admission.exempted': '这个精确版本已在 compatibility.json 里对 {runtime} 记录过豁免({module}@{version})——加载器会放行,但行为未经验证',
123
149
  'admission.row-declared-by': 'profile 里的「{module}」这份副本来自 {by} 的 {fields} 声明',
124
150
  'admission.row-missing': 'row {rows} 引入的 {module} 在本 profile 下未安装',
125
151
  'admission.row-unconstrained': 'row {rows} 引入的 {module} 没有声明任何 @deepseek-ai/dsh* 区间——沉默不等于通过',
@@ -206,6 +232,30 @@ const ZH = {
206
232
  'probe.profile-link-dangling': '复制的组合里有 {count} 个本地依赖指向不存在的位置({links})——包管理器会把这种安装报告成成功,所以要单独检查',
207
233
  'probe.profile-build-refused': '复制组合的依赖装上了,但包管理器拒绝运行它们的构建脚本({detail})——这里的组合不等于你实际跑的那一份',
208
234
  'ui.more-reasons': '…还有 {count} 条原因;加 --json 看完整列表',
235
+ 'prior.annotation-only': '这台机器过去对这个精确键判过;此处只作注解,不改变结论',
236
+ 'upgrade.header': '目标 dsh {target} · 读到 {units} 个单元({bundles} 个 bundle,{rows} 条 row)',
237
+ 'upgrade.relation.same': '目标就是这个 profile 正在跑的运行时({target})',
238
+ 'upgrade.relation.newer': '{target} 比正在跑的 {current} 新',
239
+ 'upgrade.relation.older': '{target} 比正在跑的 {current} 旧',
240
+ 'upgrade.relation.unknown': '读不到正在跑的运行时,所以这次移动的方向未知',
241
+ 'upgrade.profile-scope': '本结论只关于 profile「{profile}」(来源:{source}),对其它 profile 不成立',
242
+ 'upgrade.admitted-only': '放行 ≠ 能用:这份清单只比对声明区间与 {target},没有任何一次 {target} 上的真实启动',
243
+ 'upgrade.bucket.would-be-denied': 'would-be-denied · {count} 个单元的声明区间不含 {target}',
244
+ 'upgrade.bucket.cannot-tell': 'cannot-tell · {count} 个单元无法从声明判断',
245
+ 'upgrade.bucket.improved': 'improved · {count} 个单元现在被拒、{target} 会放行',
246
+ 'upgrade.bucket.likely-fine': 'likely-fine · {count} 个单元的声明区间含 {target}',
247
+ 'upgrade.already-denied': '现在跑着的 {current} 就已经拒了它:这次升级不是原因',
248
+ 'upgrade.unusable-declaration': '声明永远不可能被满足(空 / 不是 semver / workspace:),任何运行时都不放行——包括 {target}',
249
+ 'upgrade.registry-annotation': '仅次要证据:{package}@{version} 声明了 {range},在 {target} 上{verdict}——它不会改变这个单元的分桶',
250
+ 'upgrade.more-units': '…这个桶里还有 {count} 个单元;加 --json 看完整列表',
251
+ 'upgrade.more-fixes': '…还有 {count} 条修复建议;加 --json 看完整列表',
252
+ 'upgrade.nothing-sampled': '什么都没采到:profile「{profile}」既没有 bundle 层也没有 loader row,因此没有影响可报(这不是「一切正常」)',
253
+ 'upgrade.guidance.headline': '不判定:upgrade 需要目标版本才会产出任何桶(exit 2)',
254
+ 'upgrade.guidance.current': '当前 {version} · profile {profile}',
255
+ 'upgrade.guidance.current-unknown': '当前 读不到 · {detail}',
256
+ 'upgrade.guidance.targets': '可选目标 next {next} · latest {latest} · 来源 npm {package}',
257
+ 'upgrade.guidance.targets-unknown': '可选目标 未知 · {detail}(这里不猜)',
258
+ 'upgrade.guidance.next-step': '下一步 dsh-triage upgrade --to next (或 --to latest,或 --to <精确版本>;精确版本全程离线)',
209
259
  },
210
260
  };
211
261
  const CATALOGS = { en: EN, zh: ZH };
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Local outcome records: the whitelist that proves a record carries no PII.
3
+ *
4
+ * WHY THIS MODULE EXISTS (spec `docs/specs/M5-reflow.md` §3–§5, `T-501`):
5
+ * "we only store the four-state conclusion" is a claim; a whitelist projection that
6
+ * *rejects* the whole line when one unknown key appears is an enforcement. Everything
7
+ * the local store can hold is declared here, and there is exactly one function that
8
+ * decides whether a candidate record is allowed to reach disk (`sanitizeOutcome`) and
9
+ * one that decides whether an existing line may be read back (`assertOutcomeLine`).
10
+ *
11
+ * WHAT THIS MODULE MUST NEVER DO (§12 of the spec, machine-checked by the
12
+ * `outcome-privacy` check of `scripts/gate_governance.mjs`):
13
+ * - no network client of any kind, no `fs`, no clock, no `process.env`;
14
+ * - no randomness: `id` and `at` are injected by the caller, exactly like `generatedAt`
15
+ * in `verdict.ts`;
16
+ * - no repair: a rejected record is rejected, never "cleaned up and written anyway".
17
+ *
18
+ * TIER DISCIPLINE (`ADR-0011` option A): a `LocalPrior` is an *annotation*. It never
19
+ * enters `conclusion` / `confidence` / `evidence[]`, and there is no evidence tier for
20
+ * it (`measured-local` is reused as a label for "this machine measured this before").
21
+ */
22
+ import { type Conclusion, type EvidenceTier } from './types.js';
23
+ /** Why a candidate record was refused. Closed set; `sanitizeOutcome` never invents one. */
24
+ export type OutcomeRejection = 'not-an-object' | 'unknown-field' | 'value-shape' | 'too-long' | 'bad-timestamp';
25
+ /** Why a stored line could not be read back. Adds the parse step to {@link OutcomeRejection}. */
26
+ export type OutcomeLineRejection = OutcomeRejection | 'not-json';
27
+ export type OutcomeOs = 'win32' | 'darwin' | 'linux' | 'freebsd' | 'other';
28
+ export type OutcomeArch = 'x64' | 'arm64' | 'ia32' | 'other';
29
+ export type OutcomeProfileKind = 'web' | 'tui' | 'headless' | 'unknown';
30
+ export type OutcomeSource = 'check' | 'probe';
31
+ /** Coarse timing bucket. Milliseconds are a high-entropy fingerprint (`BS-32`, spec §3.2). */
32
+ export type TimingBucket = 'lt5s' | '5to20s' | '20to60s' | 'gte60s';
33
+ export declare const OUTCOME_OS_VALUES: readonly ["win32", "darwin", "linux", "freebsd", "other"];
34
+ export declare const OUTCOME_ARCH_VALUES: readonly ["x64", "arm64", "ia32", "other"];
35
+ export declare const OUTCOME_PROFILE_KIND_VALUES: readonly ["web", "tui", "headless", "unknown"];
36
+ export declare const OUTCOME_SOURCE_VALUES: readonly ["check", "probe"];
37
+ export declare const TIMING_BUCKET_VALUES: readonly ["lt5s", "5to20s", "20to60s", "gte60s"];
38
+ /** The five evidence tiers, as a value list, so the sanitizer does not have to trust a cast. */
39
+ export declare const EVIDENCE_TIER_VALUES: readonly ["inferred", "declared", "scanned", "measured-registry", "measured-local"];
40
+ /** One line of `outcomes.jsonl`. Field order here is the serialization order (determinism). */
41
+ export interface OutcomeRecord {
42
+ readonly schema_version: 1;
43
+ /** 32 lowercase hex characters. Local bookkeeping only; never enters the repository (§3.1). */
44
+ readonly id: string;
45
+ readonly at: string;
46
+ readonly source: OutcomeSource;
47
+ readonly package: string;
48
+ readonly version: string;
49
+ readonly dsh_version: string | null;
50
+ readonly os: OutcomeOs;
51
+ readonly arch: OutcomeArch;
52
+ readonly node_major: number;
53
+ readonly profile_kind: OutcomeProfileKind;
54
+ readonly conclusion: Conclusion;
55
+ readonly reason_message_ids: readonly string[];
56
+ readonly evidence_tiers: readonly EvidenceTier[];
57
+ readonly probe: OutcomeProbe | null;
58
+ }
59
+ export interface OutcomeProbe {
60
+ readonly total_ms_bucket: TimingBucket;
61
+ /** `null` for a surface without HTTP + render (`BS-23`: `tui` / `headless`). */
62
+ readonly boot_ms_bucket: TimingBucket | null;
63
+ }
64
+ /** The seven-tuple a record is valid for (§2). Any differing position is a different key. */
65
+ export interface OutcomeKey {
66
+ readonly package: string;
67
+ readonly version: string;
68
+ readonly dsh: string | null;
69
+ readonly os: OutcomeOs;
70
+ readonly arch: OutcomeArch;
71
+ readonly node_major: number;
72
+ readonly profile_kind: OutcomeProfileKind;
73
+ }
74
+ /**
75
+ * The `prior` annotation block (`check --explain`). Shape is pinned by spec §10.2; it is
76
+ * deliberately NOT part of `Verdict` — it is a sibling object the CLI renders.
77
+ */
78
+ export interface LocalPrior {
79
+ readonly schema_version: 1;
80
+ readonly annotation_only: true;
81
+ readonly key: OutcomeKey;
82
+ readonly source: 'local-outcomes';
83
+ readonly method: 'outcome-log';
84
+ readonly n: number;
85
+ readonly counts: Readonly<Record<Conclusion, number>>;
86
+ readonly majority: Conclusion | null;
87
+ readonly agreement: number | null;
88
+ readonly tier: 'measured-local';
89
+ readonly evidence_id: 'prior-local';
90
+ readonly note_id: 'prior.annotation-only';
91
+ }
92
+ export type OutcomeSanitizeResult = {
93
+ readonly ok: true;
94
+ readonly record: OutcomeRecord;
95
+ } | {
96
+ readonly ok: false;
97
+ readonly reason: OutcomeRejection;
98
+ readonly field: string | null;
99
+ };
100
+ export type OutcomeLineResult = {
101
+ readonly ok: true;
102
+ readonly record: OutcomeRecord;
103
+ } | {
104
+ readonly ok: false;
105
+ readonly reason: OutcomeLineRejection;
106
+ readonly field: string | null;
107
+ };
108
+ /** One line, 1024 bytes. A defence line, not a formatting preference (§5.5). */
109
+ export declare const MAX_OUTCOME_BYTES = 1024;
110
+ /**
111
+ * Project a candidate record onto the whitelist, or refuse it.
112
+ *
113
+ * Order of operations is the contract (§5): unknown keys → value domains → forbidden
114
+ * shapes over the *assembled* record → byte cap. A rejection never mutates the input and
115
+ * never returns a partially cleaned record.
116
+ */
117
+ export declare function sanitizeOutcome(input: unknown): OutcomeSanitizeResult;
118
+ /**
119
+ * Read back one stored line.
120
+ *
121
+ * WHY A SECOND FUNCTION: reading is where a hand-edited or corrupted library turns into fake
122
+ * evidence. A line that does not validate is dropped by the caller and counted as
123
+ * `rejected_lines`; it is never repaired, and it never aborts the whole read.
124
+ */
125
+ export declare function assertOutcomeLine(line: string): OutcomeLineResult;
126
+ /** The seven-tuple of a record (§2). One definition, so the store, the prior and D4 agree. */
127
+ export declare function outcomeKeyOf(record: OutcomeRecord): OutcomeKey;
128
+ /** A key is usable for prior matching only when all seven positions are known (§2, B10). */
129
+ export declare function isCompleteOutcomeKey(key: OutcomeKey): boolean;
130
+ export declare function sameOutcomeKey(left: OutcomeKey, right: OutcomeKey): boolean;
131
+ /**
132
+ * The local prior for one key: counts, strict majority, agreement.
133
+ *
134
+ * `majority` is a **strict majority** (`counts[majority] * 2 > n`), so a tie - and any
135
+ * plurality that does not exceed half - reads as "no majority" rather than as a winner.
136
+ * Stricter than a plain mode on purpose: this number is shown to a user next to a verdict
137
+ * that it must not influence (`ADR-0011` §4.1), and "2 of 4 said go" is not a majority.
138
+ *
139
+ * Returns `null` when the key is incomplete or `n = 0`, and the caller then omits the whole
140
+ * `prior` key (§10.2: "nothing" must be distinguishable from "empty").
141
+ */
142
+ export declare function computeLocalPrior(records: readonly OutcomeRecord[], key: OutcomeKey): LocalPrior | null;
143
+ //# sourceMappingURL=outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"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"}