freshcontext-mcp 0.3.20 → 0.3.22

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.
Files changed (69) hide show
  1. package/README.md +55 -9
  2. package/SECURITY.md +9 -7
  3. package/dist/adapters/arxiv.d.ts +15 -0
  4. package/dist/adapters/arxiv.js +1 -1
  5. package/dist/adapters/changelog.d.ts +2 -0
  6. package/dist/adapters/finance.d.ts +2 -0
  7. package/dist/adapters/finance.js +1 -1
  8. package/dist/adapters/gdelt.d.ts +2 -0
  9. package/dist/adapters/gdelt.js +1 -1
  10. package/dist/adapters/gebiz.d.ts +2 -0
  11. package/dist/adapters/gebiz.js +1 -1
  12. package/dist/adapters/github.d.ts +2 -0
  13. package/dist/adapters/govcontracts.d.ts +2 -0
  14. package/dist/adapters/hackernews.d.ts +2 -0
  15. package/dist/adapters/jobs.d.ts +2 -0
  16. package/dist/adapters/jobs.js +6 -6
  17. package/dist/adapters/packageTrends.d.ts +2 -0
  18. package/dist/adapters/productHunt.d.ts +2 -0
  19. package/dist/adapters/reddit.d.ts +8 -0
  20. package/dist/adapters/reddit.js +1 -1
  21. package/dist/adapters/registry.d.ts +19 -0
  22. package/dist/adapters/repoSearch.d.ts +2 -0
  23. package/dist/adapters/repoSearch.js +1 -1
  24. package/dist/adapters/scholar.d.ts +2 -0
  25. package/dist/adapters/secFilings.d.ts +2 -0
  26. package/dist/adapters/secFilings.js +1 -1
  27. package/dist/adapters/yc.d.ts +2 -0
  28. package/dist/core/decay.d.ts +5 -0
  29. package/dist/core/decision.d.ts +3 -0
  30. package/dist/core/decision.js +1 -3
  31. package/dist/core/envelope.d.ts +5 -0
  32. package/dist/core/explain.d.ts +12 -0
  33. package/dist/core/guards.d.ts +1 -0
  34. package/dist/core/index.d.ts +14 -0
  35. package/dist/core/index.js +2 -0
  36. package/dist/core/pipeline.d.ts +3 -0
  37. package/dist/core/pipeline.js +8 -0
  38. package/dist/core/provenance.d.ts +5 -0
  39. package/dist/core/provenanceReadiness.d.ts +2 -0
  40. package/dist/core/provenanceReadiness.js +220 -0
  41. package/dist/core/rank.d.ts +4 -0
  42. package/dist/core/readable.d.ts +2 -0
  43. package/dist/core/readable.js +75 -0
  44. package/dist/core/signal.d.ts +3 -0
  45. package/dist/core/sourceProfiles.d.ts +4 -0
  46. package/dist/core/sourceProfiles.js +20 -0
  47. package/dist/core/types.d.ts +239 -0
  48. package/dist/core/utility.d.ts +2 -0
  49. package/dist/rest/handler.d.ts +1 -0
  50. package/dist/security.d.ts +15 -0
  51. package/dist/server.d.ts +2 -0
  52. package/dist/server.js +2 -2
  53. package/dist/tools/evaluateContext.d.ts +21 -0
  54. package/dist/tools/evaluateContext.js +3 -1
  55. package/dist/tools/freshnessStamp.d.ts +1 -0
  56. package/dist/types.d.ts +1 -0
  57. package/docs/API_DESIGN.md +28 -1
  58. package/docs/CLIENT_SETUP.md +4 -4
  59. package/docs/CODEX_MCP_USAGE.md +3 -3
  60. package/docs/CORE_API.md +79 -15
  61. package/docs/CORE_MCP_BOUNDARY.md +13 -4
  62. package/docs/FUTURE_LANES.md +43 -43
  63. package/docs/HUMAN_READABLE_OUTPUT_CONTRACT.md +293 -0
  64. package/docs/RELEASE_NOTES.md +49 -5
  65. package/docs/SIGNAL_CONTRACT.md +215 -213
  66. package/docs/SOURCE_PROFILES.md +69 -24
  67. package/package-script-guard.mjs +84 -75
  68. package/package.json +16 -1
  69. package/server.json +2 -2
@@ -0,0 +1 @@
1
+ export type { FreshContext, ExtractOptions, AdapterResult } from "./core/types.js";
@@ -12,7 +12,7 @@ The REST host should expose the simplest useful path:
12
12
 
13
13
  1. User has raw retrieved signals.
14
14
  2. User sends those signals to FreshContext.
15
- 3. Core evaluates freshness, confidence, ranking, explanation, optional envelope, and optional provenance.
15
+ 3. Core evaluates freshness, confidence, ranking, explanation, provenance readiness, optional envelope, and optional provenance.
16
16
  4. Host returns ranked context.
17
17
  5. Agent or app uses best context first.
18
18
 
@@ -122,6 +122,27 @@ Shape: `CoreSignalEvaluationResult`.
122
122
  "reason": "Strong semantic match and current freshness for blog."
123
123
  },
124
124
  "explanation": "Strong semantic match and current freshness for blog.",
125
+ "provenance_readiness": {
126
+ "state": "complete",
127
+ "source_identity": {
128
+ "source": "https://example.com/article",
129
+ "source_type": "blog",
130
+ "result_id": "sig_001",
131
+ "completeness": "complete"
132
+ },
133
+ "source_type": "blog",
134
+ "published_at": "2026-05-24T12:00:00.000Z",
135
+ "retrieved_at": "2026-05-24T13:00:00.000Z",
136
+ "timing_confidence": "high",
137
+ "timing_completeness": "complete",
138
+ "canonical_content_sha256": "abc123...",
139
+ "semantic_fingerprint_sha256": null,
140
+ "ha_pri_v2": null,
141
+ "warnings": [],
142
+ "reasons": [
143
+ "semantic fingerprint was not provided"
144
+ ]
145
+ },
125
146
  "envelope": {
126
147
  "context": {},
127
148
  "text": "[FRESHCONTEXT]...",
@@ -131,6 +152,8 @@ Shape: `CoreSignalEvaluationResult`.
131
152
  }
132
153
  ```
133
154
 
155
+ `provenance_readiness` is always a Core judgment sidecar. It classifies source identity and timing completeness. It must not be used by the REST host to fetch, verify truth, reject context by policy, or change ranking.
156
+
134
157
  The REST host must not fetch upstream data, cache results, write D1, enforce Ha-Pri, or alter ranking policy.
135
158
 
136
159
  ## POST /v1/evaluate-batch
@@ -181,6 +204,9 @@ Evaluates and ranks multiple signals.
181
204
  "final_score": 0.85
182
205
  },
183
206
  "explanation": "Strong semantic match and current freshness for blog.",
207
+ "provenance_readiness": {
208
+ "state": "complete"
209
+ },
184
210
  "reasons": []
185
211
  }
186
212
  ]
@@ -342,6 +368,7 @@ Core owns:
342
368
  - timestamp/future-date/failure guards
343
369
  - freshness scoring
344
370
  - context utility sidecar
371
+ - provenance readiness sidecar
345
372
  - default rank/explain behavior
346
373
  - optional envelope generation
347
374
  - optional Ha-Pri v2 material preparation
@@ -6,7 +6,7 @@ Use this guide when connecting Claude Desktop, Codex, or another MCP-compatible
6
6
 
7
7
  ## What You Should See
8
8
 
9
- FreshContext `0.3.19` exposes:
9
+ FreshContext `0.3.22` exposes:
10
10
 
11
11
  ```text
12
12
  22 tools = evaluate_context + 21 read-only reference adapters
@@ -105,8 +105,8 @@ Expected smoke result:
105
105
  ```json
106
106
  {
107
107
  "ok": true,
108
- "package_version": "0.3.19",
109
- "server_version": "0.3.19",
108
+ "package_version": "0.3.22",
109
+ "server_version": "0.3.22",
110
110
  "tool_count": 22
111
111
  }
112
112
  ```
@@ -132,7 +132,7 @@ Some clients can use `mcp-remote`:
132
132
  }
133
133
  ```
134
134
 
135
- The npm/local stdio package remains the safest default client path. The hosted Worker endpoint was verified on 2026-06-11 at `0.3.19 / 22 tools` with `evaluate_context` present and returning decision-first output. Because the Worker is a separate deployment surface, re-run remote verification before claiming future package interfaces are live there.
135
+ The npm/local stdio package remains the safest default client path. The hosted Worker endpoint was last verified on 2026-06-14 at `0.3.21 / 22 tools` with `evaluate_context` present and returning decision-first output, including `provenance_readiness`, `readable`, and `readable.handoff`. Because the Worker is a separate deployment surface, re-run remote verification before claiming future package interfaces are live there.
136
136
 
137
137
  ## ChatGPT / OpenAI Connector Boundary
138
138
 
@@ -67,7 +67,7 @@ command = "npx"
67
67
  args = ["-y", "mcp-remote", "https://freshcontext-mcp.gimmanuel73.workers.dev/mcp"]
68
68
  ```
69
69
 
70
- This remote path was verified on 2026-06-11 as a live Worker MCP endpoint exposing `0.3.19 / 22 tools`, including `evaluate_context`. That confirms Worker availability and MCP tool discovery. It does not by itself claim Codex Cloud support or guarantee every MCP client can use the remote bridge without its own client-specific setup check.
70
+ This remote path was last verified on 2026-06-14 as a live Worker MCP endpoint exposing `0.3.21 / 22 tools`, including `evaluate_context`, `provenance_readiness`, `readable`, and `readable.handoff`. That confirms Worker availability and MCP tool discovery. It does not by itself claim Codex Cloud support or guarantee every MCP client can use the remote bridge without its own client-specific setup check.
71
71
 
72
72
  ## Verification steps
73
73
 
@@ -83,8 +83,8 @@ Expected result:
83
83
  ```json
84
84
  {
85
85
  "ok": true,
86
- "package_version": "0.3.19",
87
- "server_version": "0.3.19",
86
+ "package_version": "0.3.22",
87
+ "server_version": "0.3.22",
88
88
  "tool_count": 22
89
89
  }
90
90
  ```
package/docs/CORE_API.md CHANGED
@@ -13,14 +13,21 @@ Import stable Core functions from:
13
13
  ```ts
14
14
  import {
15
15
  calculateFreshnessScore,
16
+ evaluateSignals,
16
17
  formatForLLM,
18
+ getSourceProfile,
19
+ interpretEvaluations,
17
20
  looksLikeFailedAdapterContent,
21
+ normalizeSignal,
22
+ prepareProvenanceReadiness,
18
23
  scoreLabel,
19
24
  stampFreshness,
20
25
  toStructuredJSON,
21
- } from "./src/core/index.js";
26
+ } from "freshcontext-mcp/core";
22
27
  ```
23
28
 
29
+ The `freshcontext-mcp/core` subpath is the direct Core import boundary inside the current MCP package. It does not create a standalone `freshcontext-core` package yet; that remains a future package-split lane.
30
+
24
31
  ### Envelope
25
32
 
26
33
  - `stampFreshness(result, options, adapter)` creates a `FreshContext` object from adapter output.
@@ -55,7 +62,7 @@ It does not fetch, cache, write D1, inspect Worker bindings, know MCP tool schem
55
62
 
56
63
  `evaluateSignals` evaluates each input and returns evaluations sorted by existing `rankSignal` final score, preserving input order when scores tie. Context utility is returned as a sidecar and does not replace `final_score`.
57
64
 
58
- Context utility is returned as sidecar output in the current pipeline; it does not replace or modify the default `rankSignal` / `evaluateSignals` ordering. A future pass may add an explicit utility-weighted ranking mode.
65
+ Context utility is returned as sidecar output in the current pipeline. It does not replace or modify the default `rankSignal` / `evaluateSignals` ordering, and it does not control default decision labels. A future pass may add an explicit utility-weighted ranking or decision-support mode.
59
66
 
60
67
  Local demo:
61
68
 
@@ -76,9 +83,9 @@ The demo reads caller-provided JSON with `profile`, `intent`, and `signals`, the
76
83
 
77
84
  These types describe the stable envelope and adapter result contract.
78
85
 
79
- ## Signal Contract v1
80
-
81
- Signal Contract v1 is the current FreshContext input standard: the stable shape for candidate context before it is ranked, wrapped, stored, judged by `evaluate_context`, or passed to an agent workflow.
86
+ ## Signal Contract v1
87
+
88
+ Signal Contract v1 is the current FreshContext input standard: the stable shape for candidate context before it is ranked, wrapped, stored, judged by `evaluate_context`, or passed to an agent workflow.
82
89
 
83
90
  Public exports:
84
91
 
@@ -90,11 +97,11 @@ Public exports:
90
97
  - `SignalContractVersion`
91
98
  - `SignalNormalizeOptions`
92
99
 
93
- `published_at` is the canonical signal timestamp. `content_date` is accepted as an adapter/envelope compatibility alias. Normalization clears invalid or meaningfully future-dated timestamps, marks failed/error-looking content as `status: "failed"`, clamps `semantic_score` into `0..1`, and records normalization reasons.
94
-
95
- Future context signals and control signals are optional future metadata layers, not replacements for Signal Contract v1 and not required public input fields today.
96
-
97
- See [Signal Contract v1](./SIGNAL_CONTRACT.md).
100
+ `published_at` is the canonical signal timestamp. `content_date` is accepted as an adapter/envelope compatibility alias. Normalization clears invalid or meaningfully future-dated timestamps, marks failed/error-looking content as `status: "failed"`, clamps `semantic_score` into `0..1`, and records normalization reasons.
101
+
102
+ Future context signals and control signals are optional future metadata layers, not replacements for Signal Contract v1 and not required public input fields today.
103
+
104
+ See [Signal Contract v1](./SIGNAL_CONTRACT.md).
98
105
 
99
106
  ## Source Profiles
100
107
 
@@ -112,9 +119,11 @@ Public exports:
112
119
  - `SourceFailurePolicy`
113
120
  - `SourceSurface`
114
121
 
115
- They reframe the 21 named adapter tools as reference adapters and source-profile examples instead of the product identity. The MCP server also exposes `evaluate_context` as the generic caller-provided context evaluation path. Source Profiles do not implement `retrieve(...)`, Operator mode, adapter selection, crawling, local file search, or any host/runtime behavior.
116
-
117
- ## Decision Helper
122
+ They reframe the 21 named adapter tools as reference adapters and source-profile examples instead of the product identity. The MCP server also exposes `evaluate_context` as the generic caller-provided context evaluation path. Source Profiles do not implement `retrieve(...)`, Operator mode, adapter selection, crawling, local file search, or any host/runtime behavior.
123
+
124
+ Current built-in profiles include canonical docs, code activity, social pulse, academic research, market/finance, jobs, government/regulatory material, company intelligence, product research, composite landscapes, multi-agent handoff context, and local/custom caller-provided context.
125
+
126
+ ## Decision Helper
118
127
 
119
128
  The decision helper translates a Core evaluation result into user-facing action meaning.
120
129
 
@@ -154,6 +163,51 @@ FreshContext decisions judge citation readiness, context usefulness, freshness,
154
163
 
155
164
  Demo output will be updated separately so presentation stays separate from Core decision logic.
156
165
 
166
+ ## Human-Readable Output
167
+
168
+ The human-readable output helper adds a small reader-facing layer on top of existing Core evaluations and decisions.
169
+
170
+ Public exports:
171
+
172
+ - `toReadableContextResult(evaluation, decision)`
173
+ - `HumanReadableContextResult`
174
+
175
+ The helper returns a bounded object with:
176
+
177
+ - `label`
178
+ - `summary`
179
+ - `why`
180
+ - `action`
181
+ - `warnings`
182
+
183
+ This is additive. It does not change machine decisions, ranking, freshness math, utility math, Source Profiles, envelopes, provenance, or host behavior. Utility may appear in `why` when it is already part of the decision reasons, but utility still does not control default decision labels.
184
+
185
+ Example structured result fragment:
186
+
187
+ ```json
188
+ {
189
+ "decision": "cite_as_primary",
190
+ "label": "Cite as primary",
191
+ "readable": {
192
+ "label": "Primary source",
193
+ "summary": "This source is strong enough to use as main evidence.",
194
+ "why": [
195
+ "Strong semantic match and current freshness for arxiv.",
196
+ "source profile academic_research uses lenient date policy",
197
+ "intent profile citation_check selected"
198
+ ],
199
+ "action": "Use this as main evidence while preserving citation and provenance.",
200
+ "warnings": [
201
+ "FreshContext judges citation readiness and context usefulness; it does not certify truth."
202
+ ]
203
+ }
204
+ }
205
+ ```
206
+
207
+ FreshContext does not certify truth. It records why context was used, supported, questioned, refreshed, watched, or excluded before it reaches a model.
208
+
209
+ See [Human-Readable Output Contract](./HUMAN_READABLE_OUTPUT_CONTRACT.md).
210
+
157
211
  ## Public Ranking Primitives
158
212
 
159
213
  The ranking primitives are public, but consumers should treat their score scales carefully:
@@ -175,7 +229,7 @@ Ranking combines semantic relevance and freshness into a deterministic order. It
175
229
 
176
230
  ## Experimental Utility Primitive
177
231
 
178
- The context-conditioned utility primitive is pure and tested, but it is not production-wired into MCP ranking, Worker feeds, Store scoring, or runtime behavior.
232
+ The context-conditioned utility primitive is pure and tested. It is surfaced in Core evaluation output and decision reasons, but it does not control default ranking or decision labels.
179
233
 
180
234
  Experimental exports:
181
235
 
@@ -184,7 +238,7 @@ Experimental exports:
184
238
  - `ContextUtilityInput`
185
239
  - `ContextUtilityResult`
186
240
 
187
- These are pure Core math. They are now connected inside `evaluateSignal` as sidecar utility output, but they are not production-wired into MCP ranking, Worker feeds, Store scoring, or runtime behavior.
241
+ These are pure Core math. They are now connected inside `evaluateSignal` as sidecar utility output and explanatory material, but they are not production-wired into MCP ranking, Worker feeds, Store scoring, or default decision thresholds.
188
242
 
189
243
  ## Provenance Helpers
190
244
 
@@ -200,6 +254,16 @@ Ha-Pri v2 is available as pure Core helper functionality:
200
254
 
201
255
  `evaluateSignal` can optionally prepare Ha-Pri v2 material when `includeProvenance` is set and required input material is present. Core does not persist provenance, add D1 columns, verify rows on read, reject rows, or replace Worker Ha-Pri v1 behavior.
202
256
 
257
+ Provenance readiness is available as a pure Core sidecar:
258
+
259
+ - `prepareProvenanceReadiness(input, options?)`
260
+ - `ProvenanceReadinessState`
261
+ - `ProvenanceReadinessResult`
262
+
263
+ It classifies caller-provided signal provenance as `complete`, `partial`, `incomplete`, `unknown`, or `derived`. The result exposes source identity completeness, timing completeness, normalized source and timestamp fields, canonical content hash material, optional semantic fingerprint hash material, optional Ha-Pri v2 identity material when the caller supplies enough inputs, warnings, and reasons.
264
+
265
+ `provenance_readiness` is included additively on `evaluateSignal` results and in the structured `evaluate_context` JSON result. It does not fetch, crawl, scrape, read folders, call adapters, change ranking, change decisions, certify truth, or enforce rejection policy.
266
+
203
267
  ## Internal, Policy, and Compatibility Exports
204
268
 
205
269
  - `clampScore` is an internal ranking helper. It is currently exported for tests and utility use, but it should not be presented as a primary buyer-facing API.
@@ -50,18 +50,27 @@ Worker/site surfaces own deployment concerns:
50
50
 
51
51
  Live today:
52
52
 
53
- - npm package: `freshcontext-mcp@0.3.19`
53
+ - npm package: `freshcontext-mcp@0.3.21`
54
54
  - MCP stdio server and published binary: `freshcontext-mcp`
55
+ - Core subpath export: `freshcontext-mcp/core`
55
56
  - `evaluate_context` MCP tool for caller-provided candidate context
56
57
  - 21 named read-only reference adapters
57
58
  - Core signal evaluation
58
59
  - Source Profiles
59
- - Decision Helper
60
- - adapter registry metadata
60
+ - Decision Helper
61
+ - human-readable `readable` output on structured `evaluate_context` results
62
+ - provenance readiness and readable handoff safety
63
+ - adapter registry metadata
61
64
  - arXiv signal-to-decision proof
62
65
  - bring-your-own-context local demos
63
66
  - Trust Scanner release gate
64
67
 
68
+ Network boundary:
69
+
70
+ - `evaluate_context` does not fetch, crawl, scrape, browse, read folders, or call adapters.
71
+ - The 21 named reference adapters are optional read-only network tools and use network access only when invoked.
72
+ - FreshContext Core remains the no-network judgment layer.
73
+
65
74
  Not live today:
66
75
 
67
76
  - standalone Core npm package
@@ -78,7 +87,7 @@ Not live today:
78
87
  The safe split path is staged:
79
88
 
80
89
  1. Keep `freshcontext-mcp` stable for current users.
81
- 2. Maintain Core as a pure internal export surface.
90
+ 2. Maintain Core as a pure package subpath export surface.
82
91
  3. Audit Core dependencies, Node/browser compatibility, and API stability.
83
92
  4. Publish a standalone Core package only after compatibility tests exist.
84
93
  5. Make `freshcontext-mcp` depend on the standalone Core package.
@@ -6,16 +6,16 @@ FreshContext is live today as an integrated MCP/Core package. Future work should
6
6
 
7
7
  The current package boundary is documented in [Core / MCP Boundary](./CORE_MCP_BOUNDARY.md). Treat MCP as the first live host over FreshContext Core, not as the whole product identity.
8
8
 
9
- ## Current Live Boundary
10
-
11
- Live today:
12
-
13
- - npm package: `freshcontext-mcp@0.3.19`
14
- - MCP stdio server
15
- - `evaluate_context` MCP tool for caller-provided candidate context
16
- - Signal Contract v1 as the stable candidate-context input shape
17
- - 21 read-only reference adapters
18
- - Core signal evaluation
9
+ ## Current Live Boundary
10
+
11
+ Live today:
12
+
13
+ - npm package: `freshcontext-mcp@0.3.21`
14
+ - MCP stdio server
15
+ - `evaluate_context` MCP tool for caller-provided candidate context
16
+ - Signal Contract v1 as the stable candidate-context input shape
17
+ - 21 read-only reference adapters
18
+ - Core signal evaluation
19
19
  - Source Profiles
20
20
  - Decision Helper
21
21
  - adapter registry metadata
@@ -30,32 +30,32 @@ Not live today:
30
30
  - automatic local file, folder, or PDF scanning
31
31
  - hosted dashboard or billing
32
32
  - hard Ha-Pri v2 production enforcement
33
- - standalone Core SDK package
34
- - full adapter ingestion
35
-
36
- ## Phase 0: Stabilize The Signal Contract
37
-
38
- Goal:
39
-
40
- ```text
41
- Treat Signal Contract v1 as the stable input boundary for FreshContext.
42
- ```
43
-
44
- Current contract:
45
-
46
- ```text
47
- title + content + source + source_type + published_at + retrieved_at + semantic_score
48
- ```
49
-
50
- This is live today. It is not the same thing as future context signals or control signals.
51
-
52
- Tasks in this lane should document examples, invalid-input behavior, and normalization expectations. Do not expand required fields unless tests prove the new metadata improves decisions.
53
-
54
- Future context signals, control signals, ingestion quality signals, structure preservation signals, and provenance confidence signals belong to later Decision Layer upgrades. They should remain optional metadata, not public required fields.
55
-
56
- ## Lane 1: Client Setup Reliability
57
-
58
- Goal:
33
+ - standalone Core SDK package
34
+ - full adapter ingestion
35
+
36
+ ## Phase 0: Stabilize The Signal Contract
37
+
38
+ Goal:
39
+
40
+ ```text
41
+ Treat Signal Contract v1 as the stable input boundary for FreshContext.
42
+ ```
43
+
44
+ Current contract:
45
+
46
+ ```text
47
+ title + content + source + source_type + published_at + retrieved_at + semantic_score
48
+ ```
49
+
50
+ This is live today. It is not the same thing as future context signals or control signals.
51
+
52
+ Tasks in this lane should document examples, invalid-input behavior, and normalization expectations. Do not expand required fields unless tests prove the new metadata improves decisions.
53
+
54
+ Future context signals, control signals, ingestion quality signals, structure preservation signals, and provenance confidence signals belong to later Decision Layer upgrades. They should remain optional metadata, not public required fields.
55
+
56
+ ## Lane 1: Client Setup Reliability
57
+
58
+ Goal:
59
59
 
60
60
  ```text
61
61
  Make Claude, Codex, and MCP-compatible clients connect reliably to the published package.
@@ -134,19 +134,19 @@ Hard boundary:
134
134
  Consent-first design. No automatic folder scanning or background file reading.
135
135
  ```
136
136
 
137
- ## Lane 6: Decision Layer Upgrade
138
-
139
- Goal:
137
+ ## Lane 6: Decision Layer Upgrade
138
+
139
+ Goal:
140
140
 
141
141
  ```text
142
142
  Make decisions more useful without silently changing ranking.
143
143
  ```
144
144
 
145
- Possible inputs include context utility, control signal, future context signal, ingestion quality, structure preservation, provenance confidence, confidence tiers, and source-profile-specific thresholds.
146
-
147
- These are optional future metadata upgrades on top of Signal Contract v1. They should only be exposed when they make decisions clearer without making the caller-facing contract harder to use.
145
+ Possible inputs include context utility, control signal, future context signal, ingestion quality, structure preservation, provenance confidence, confidence tiers, and source-profile-specific thresholds.
146
+
147
+ These are optional future metadata upgrades on top of Signal Contract v1. They should only be exposed when they make decisions clearer without making the caller-facing contract harder to use.
148
148
 
149
- Do not make `utility.score` affect ranking by default without a dedicated ranking policy pass.
149
+ Do not make `utility.score` affect ranking or decision labels by default without a dedicated policy pass.
150
150
 
151
151
  ## Lane 7: Ha-Pri v2 Production Path
152
152