Benjamin Admin
98d616d82b
feat: Observation Model — the empirical learning unit, defined BEFORE persistence (Task 59a)
...
The learning point is not the hypothesis, it is the QUESTION — and confirmed/refuted is too coarse.
"partial, only critical suppliers" or "certified but not lived" are not "wrong", they are valuable
knowledge. So the chain is Hypothesis -> Question -> Observation -> (Review) -> Hypothesis, and the
observation model must be defined cleanly before any store/API (else thousands of too-coarse
observations get migrated later).
compliance/onboarding/observations.py:
- ObservationType: confirmed / partial / refuted / not_applicable / unknown (richer than binary).
- Observation: {hypothesis_id, capability, question, answer (free text), observation_type,
scope_note ("only critical suppliers"), evidence_uploaded, reviewed, reviewed_by}.
- empirical_distribution() -> a DISTRIBUTION (confirmed 61 / partial 31 / refuted 8), not one %.
- empirical_confidence() -> (confirmed + 0.5*partial) / (confirmed+partial+refuted); n.a./unknown
excluded; None until calibrated.
- REVIEW GATE: only reviewed observations calibrate — a raw answer never changes a hypothesis (no
learning from outliers).
Refactor: the hypothesis is now PURE curated knowledge — the binary observations counter and any
confidence are removed from CapabilityHypothesis and the YAML; confidence is COMPUTED from the separate
reviewed observation stream. Pure, mypy --strict clean. Persistence/aggregation/calibration are 59b/c/d.
Non-runtime -> no deploy. 12 tests pass, check-loc 0.
2026-06-28 13:31:43 +02:00
..
2026-04-09 20:50:30 +02:00
2026-06-09 11:30:16 +02:00
2026-03-02 08:57:39 +01:00
2026-04-27 23:28:21 +02:00
2026-06-07 00:15:08 +02:00
2026-03-23 17:15:45 +01:00
2026-03-23 17:15:45 +01:00
2026-03-23 17:15:45 +01:00
2026-03-23 17:15:45 +01:00
2026-06-28 11:10:07 +02:00
2026-04-07 18:39:40 +02:00
2026-06-28 11:30:30 +02:00
2026-06-07 17:32:34 +02:00
2026-06-07 18:41:54 +02:00
2026-05-02 19:41:22 +02:00
2026-03-24 07:24:02 +01:00
2026-06-13 16:38:38 +02:00
2026-03-26 20:13:00 +01:00
2026-06-28 12:26:22 +02:00
2026-06-26 21:35:12 +02:00
2026-06-28 13:31:43 +02:00
2026-03-07 14:12:34 +01:00
2026-06-07 18:41:54 +02:00
2026-06-22 17:37:48 +02:00
2026-03-21 11:49:43 +01:00
2026-03-24 06:40:42 +01:00
2026-03-24 06:40:42 +01:00
2026-06-26 14:59:42 +02:00
2026-06-27 14:16:12 +02:00
2026-03-04 17:43:29 +01:00
2026-06-06 14:47:25 +02:00
2026-03-03 12:48:43 +01:00
2026-03-17 09:00:37 +01:00
2026-03-21 11:49:43 +01:00
2026-03-21 11:49:43 +01:00
2026-03-17 09:00:37 +01:00
2026-03-23 17:15:45 +01:00
2026-06-22 17:37:48 +02:00
2026-06-07 23:48:04 +02:00
2026-06-07 21:29:21 +02:00
2026-06-07 23:48:04 +02:00
2026-06-09 11:30:16 +02:00
2026-06-22 17:37:48 +02:00
2026-06-14 21:49:22 +02:00
2026-06-16 18:48:52 +02:00
2026-06-14 08:21:56 +02:00
2026-06-14 12:37:22 +02:00
2026-06-15 13:49:00 +02:00
2026-06-17 07:39:39 +02:00
2026-06-17 13:17:51 +02:00
2026-06-16 07:44:13 +02:00
2026-06-17 21:21:28 +02:00
2026-06-14 08:21:56 +02:00
2026-06-16 10:10:45 +02:00
2026-06-14 15:39:39 +02:00
2026-06-14 08:59:41 +02:00
2026-06-15 18:30:47 +02:00
2026-06-14 09:27:09 +02:00
2026-06-17 13:17:51 +02:00
2026-06-08 11:35:55 +02:00
2026-06-09 08:19:57 +02:00
2026-03-17 09:00:37 +01:00
2026-06-28 09:00:51 +02:00
2026-06-28 09:30:28 +02:00
2026-06-28 09:42:31 +02:00
2026-06-28 10:18:28 +02:00
2026-06-28 08:39:26 +02:00
2026-03-14 21:03:04 +01:00
2026-03-28 17:24:19 +01:00
2026-03-07 14:12:34 +01:00
2026-06-27 23:48:45 +02:00
2026-04-16 16:26:48 +02:00
2026-04-07 13:18:29 +02:00
2026-04-07 13:18:29 +02:00
2026-06-07 00:28:29 +02:00
2026-03-05 00:36:24 +01:00
2026-06-28 11:10:07 +02:00
2026-03-07 17:07:43 +01:00
2026-03-14 21:03:04 +01:00
2026-03-23 17:15:45 +01:00
2026-03-25 21:53:40 +01:00
2026-03-05 15:11:10 +01:00
2026-05-21 18:49:10 +02:00
2026-03-23 12:11:55 +01:00
2026-03-07 19:00:33 +01:00
2026-03-05 12:07:01 +01:00
2026-06-09 11:30:16 +02:00
2026-06-07 08:50:46 +02:00
2026-06-09 13:15:34 +02:00
2026-03-06 20:50:00 +01:00
2026-06-26 10:58:00 +02:00
2026-04-07 13:18:29 +02:00
2026-06-28 10:36:43 +02:00
2026-06-28 10:36:43 +02:00
2026-06-27 13:58:59 +02:00
2026-06-27 13:31:31 +02:00
2026-06-09 12:33:34 +02:00
2026-04-16 16:26:48 +02:00
2026-04-09 08:47:56 +02:00
2026-03-24 06:40:42 +01:00
2026-03-12 19:55:06 +01:00
2026-04-29 16:56:38 +02:00
2026-06-22 17:37:48 +02:00
2026-03-19 13:59:43 +01:00
2026-06-06 21:19:49 +02:00
2026-05-22 11:51:03 +02:00
2026-06-28 12:09:52 +02:00
2026-06-15 18:30:47 +02:00
2026-06-28 12:09:52 +02:00
2026-03-17 09:00:37 +01:00
2026-05-17 14:06:28 +02:00
2026-05-17 14:06:28 +02:00
2026-03-05 11:42:19 +01:00
2026-06-26 10:05:27 +02:00
2026-06-16 10:10:20 +02:00
2026-03-03 18:04:53 +01:00
2026-06-24 12:28:03 +02:00
2026-06-24 12:43:42 +02:00
2026-06-25 07:41:45 +02:00
2026-03-21 11:49:43 +01:00
2026-03-19 13:59:43 +01:00
2026-06-24 20:15:45 +02:00
2026-06-24 13:46:21 +02:00
2026-06-28 12:45:49 +02:00
2026-06-27 09:49:38 +02:00
2026-06-09 08:16:21 +02:00
2026-03-17 09:00:37 +01:00
2026-03-17 09:00:37 +01:00
2026-06-27 10:38:13 +02:00
2026-03-24 06:40:42 +01:00
2026-03-14 21:03:04 +01:00
2026-06-26 10:21:27 +02:00
2026-06-26 09:52:46 +02:00
2026-03-09 14:53:50 +01:00
2026-03-24 10:38:34 +01:00
2026-03-07 17:07:43 +01:00
2026-03-02 08:57:39 +01:00
2026-03-25 23:01:49 +01:00
2026-06-26 13:45:23 +02:00
2026-06-26 00:37:57 +02:00
2026-06-26 10:36:06 +02:00
2026-03-05 13:43:02 +01:00
2026-03-21 11:49:43 +01:00
2026-06-06 14:47:25 +02:00
2026-06-07 00:12:00 +02:00
2026-03-05 13:43:02 +01:00
2026-03-02 09:26:57 +01:00
2026-05-18 23:48:34 +02:00
2026-06-15 19:05:44 +02:00
2026-06-18 12:05:05 +02:00
2026-03-05 11:42:19 +01:00
2026-03-07 17:07:43 +01:00
2026-03-14 21:03:04 +01:00
2026-06-09 11:30:16 +02:00
2026-06-12 23:03:28 +02:00
2026-03-02 18:48:55 +01:00
2026-03-25 08:35:16 +01:00
2026-06-09 11:30:16 +02:00
2026-06-09 09:23:12 +02:00
2026-06-08 17:40:05 +02:00
2026-06-08 18:24:01 +02:00
2026-06-06 23:19:22 +02:00
2026-06-22 17:37:48 +02:00
2026-03-19 11:56:53 +01:00
2026-03-06 17:35:44 +01:00
2026-06-27 09:12:30 +02:00
2026-06-07 00:23:25 +02:00
2026-06-15 00:20:40 +02:00
2026-03-26 10:52:41 +01:00
2026-03-12 19:55:06 +01:00
2026-04-07 13:18:29 +02:00
2026-06-28 08:11:30 +02:00
2026-03-19 11:56:25 +01:00
2026-04-07 13:18:29 +02:00
2026-04-16 16:26:48 +02:00
2026-06-07 18:41:54 +02:00