@happyvertical/smrt-ingestion 0.57.30 → 0.57.31

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/PROPOSALS.md CHANGED
@@ -186,7 +186,8 @@ Model output can contain only offered handler versions, schema-valid arguments,
186
186
  retained evidence locations and offered alternative handler/candidate keys.
187
187
  Candidate IDs must occur in the offered set, and evidence IDs in retained source
188
188
  results. Unknown enums, invented IDs, extra authority/tool/approval fields and
189
- malformed structures fail closed. Missing required fields are retained as
189
+ malformed structures fail closed (an invented candidate target alone is dropped
190
+ for review instead, see below). Missing required fields are retained as
190
191
  `missingFields`, with `needs_review`; values are never invented to satisfy a
191
192
  schema. Observed page/time/source granularity is preserved. Logical scan splits
192
193
  use `proposeDocumentSplits`; originals and hashes remain intact.
@@ -237,6 +238,34 @@ rejected, even when the earlier split on that evidence was dropped. Like
237
238
  reply. Stored output is never re-validated, so earlier attempts and their
238
239
  digests replay unchanged.
239
240
 
241
+ An invented target — a value in an offered handler's candidate reference field
242
+ that is not among the offered candidates for that field's model — no longer
243
+ rejects the attempt (#4289). The validator drops the key from the arguments
244
+ (no placeholder) and revalidates what remains through the required-only path
245
+ above: a dropped required field becomes a computed `missingFields` entry, a
246
+ dropped optional field is simply absent, and either way the suggestion is
247
+ `needs_review` for the reviewer to choose an offered target.
248
+ `provenance.unofferedTargetsDropped` records `{suggestions, fields}` counts
249
+ only, never IDs, labels or field names; it is absent when nothing was dropped
250
+ and removed whenever the suggestions are discarded. Every candidate field that
251
+ stays in the arguments has been checked against the offered set, so no
252
+ unoffered value survives as a target. The attempt still rejects as before for
253
+ an unoffered handler or alternative, unknown evidence (argument or reference),
254
+ a non-string target, a target field the handler schema does not declare in
255
+ `properties`, any other argument error, or a drop that exposes a refusal other
256
+ than `required`.
257
+
258
+ The exact dropped value is also searched for in the kept suggestions and splits
259
+ (JSON-escaped, keys included); an exact echo, such as the ID repeated in an
260
+ explanation or another argument, rejects the attempt. This guard fails closed
261
+ on short or common values: a dropped `"1"` or `"a"` almost always occurs
262
+ somewhere else in the output, so such a reply rejects rather than being kept.
263
+ It is an exact-match check, not a general leak filter: a case variant, a
264
+ reformatted copy or a fragment of the ID in free text (an explanation or a
265
+ text argument) is not detected and may reach the reviewer as ordinary model
266
+ prose. Free text is never a target and never authority; only the checked
267
+ candidate fields are.
268
+
240
269
  A rejected reply ends the attempt as `provider_error` with the `malformed_output`
241
270
  warning and a bounded, value-free `provenance.failure` `{category, reason}` (#4207).
242
271
  The reason lists schema-owned paths, keywords and schema constants, for example
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-ingestion",
5
- "packageVersion": "0.57.30",
5
+ "packageVersion": "0.57.31",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-ingestion:IntakeItem": {
8
8
  "name": "intakeitem",