{
  "schema_version": "1.0.0",
  "issue_ref": "JaddaHelpifyr/jhf-web#56",
  "owner_repo": "jhf-web",
  "updated_at": "2026-04-29T18:30:00Z",
  "presentation_rules": {
    "mode": "read-only-readout",
    "local_shadow_truth_allowed": false,
    "fail_closed_on_missing_upstream_truth": true,
    "visible_gap_on_conflict": true
  },
  "machine_readable_supporting_surfaces": [
    "/assets/data/operator-readout.v1.json",
    "/status.json",
    "/contracts/fabric-contract-consumption.contract.json",
    "/artifacts/fabric-contracts-evidence.json",
    "/artifacts/access-model-deep-dive.truth.json",
    "/artifacts/live-runtime-ports.json"
  ],
  "upstream_surfaces": [
    {
      "surface_key": "fabric_contracts_matrix",
      "kind": "api",
      "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/tree/main/docs",
      "owner_repo": "JaddaHelpifyr/helpifyr-fabric"
    },
    {
      "surface_key": "fabric_combination_profiles",
      "kind": "api",
      "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/tree/main/docs",
      "owner_repo": "JaddaHelpifyr/helpifyr-fabric"
    },
    {
      "surface_key": "fabric_identity_contracts",
      "kind": "api",
      "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/tree/main/docs",
      "owner_repo": "JaddaHelpifyr/helpifyr-fabric"
    }
  ],
  "readouts": [
    {
      "id": "task-state",
      "state_label": "visible",
      "state_tone": "ok",
      "operator_question": "Wo sehe ich, ob eine Aufgabe offen, blockiert oder sauber übergeben ist?",
      "canonical_owner": "JaddaHelpifyr/helpifyr-fabric + openclaw-mission-control-v2",
      "source_of_truth_rule": "Task state remains upstream; jhf-web only reads and links the canonical projections.",
      "readout_refs": [
        {
          "label": "Master case program",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/83"
        },
        {
          "label": "Case projection",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/98"
        },
        {
          "label": "Work projection",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/openclaw-mission-control-v2/issues/73"
        }
      ],
      "machine_refs": [
        "/status.json",
        "/assets/data/operator-readout.v1.json"
      ],
      "denial_rule": "If case and work state diverge, the UI must present an upstream gap instead of a local success."
    },
    {
      "id": "agent-actions",
      "state_label": "evidence-linked",
      "state_tone": "ok",
      "operator_question": "Wo sehe ich vorgeschlagene oder ausgeführte Agentenaktionen nachvollziehbar?",
      "canonical_owner": "JaddaHelpifyr/jhf-warp",
      "source_of_truth_rule": "Action state and approvals stay in Warp-owned projections; jhf-web exposes a stable readout only.",
      "readout_refs": [
        {
          "label": "Action projection",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/jhf-warp/issues/59"
        },
        {
          "label": "Run projection",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/90"
        }
      ],
      "machine_refs": [
        "/artifacts/fabric-contracts-evidence.json",
        "/assets/data/operator-readout.v1.json"
      ],
      "denial_rule": "Denied or unapproved actions must stay visible as denials, never as silently accepted work."
    },
    {
      "id": "handoff-state",
      "state_label": "ownership-explicit",
      "state_tone": "ok",
      "operator_question": "Wo wird sichtbar, wer gerade trägt und wohin der Handoff als Nächstes geht?",
      "canonical_owner": "JaddaHelpifyr/helpifyr-fabric",
      "source_of_truth_rule": "Handoffs, ownership and escalation semantics remain upstream and fail closed on missing truth.",
      "readout_refs": [
        {
          "label": "Case projection",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/98"
        },
        {
          "label": "Master program",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/83"
        }
      ],
      "machine_refs": [
        "/artifacts/access-model-deep-dive.truth.json",
        "/assets/data/helpifyr-system-modules.v1.json"
      ],
      "denial_rule": "Missing or conflicting handoff ownership remains a visible operator signal and blocks optimistic closure."
    },
    {
      "id": "denials-verdicts",
      "state_label": "fail-closed",
      "state_tone": "warn",
      "operator_question": "Wo sehe ich Denials, Konflikte und Abschlussregeln ohne Schönfärberei?",
      "canonical_owner": "JaddaHelpifyr/helpifyr-fabric",
      "source_of_truth_rule": "Verdicts, conflicts and closure semantics stay upstream and must remain visibly fail-closed.",
      "readout_refs": [
        {
          "label": "Conflict logic",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/87"
        },
        {
          "label": "Degraded rules",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/91"
        },
        {
          "label": "Closure and evidence rules",
          "kind": "issue",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/issues/96"
        }
      ],
      "machine_refs": [
        "/artifacts/access-model-deep-dive.truth.json",
        "/contracts/fabric-contract-consumption.contract.json"
      ],
      "denial_rule": "If upstream truth is stale, conflicting or missing, the UI must show a visible gap and no green verdict."
    },
    {
      "id": "swatch-verdicts",
      "state_label": "upstream-linked",
      "state_tone": "ok",
      "operator_question": "Wo landen Swatch-Szenarioverdicts und woran hängen die Nachweise?",
      "canonical_owner": "JaddaHelpifyr/helpifyr-fabric",
      "source_of_truth_rule": "Swatch verdicts remain part of the upstream ACP/Fabric projection set and are linked, not re-authored, in jhf-web.",
      "readout_refs": [
        {
          "label": "ACP capability and verdict truth",
          "kind": "module",
          "url": "/helpifyr-fabric.html"
        },
        {
          "label": "Combination profile feed",
          "kind": "api",
          "url": "https://github.com/JaddaHelpifyr/helpifyr-fabric/tree/main/docs"
        }
      ],
      "machine_refs": [
        "/assets/data/helpifyr-system-modules.v1.json",
        "/assets/data/operator-readout.v1.json"
      ],
      "denial_rule": "If no upstream Swatch verdict source is available, the UI must show the missing upstream state instead of inventing verdicts locally."
    }
  ]
}
