{
  "schema_version": "2026-05-27.agent-install-adoption.v1",
  "name": "TokRepo Agent Install Adoption Eval",
  "canonical_url": "https://tokrepo.com/evals/agent-install-adoption.json",
  "updated_at": "2026-05-27",
  "generated_by": "node scripts/run_agent_install_adoption.mjs --json",
  "purpose": "Public deterministic contract for proving that agents progress from discovery to install-plan, dry-run, real install adoption, installed-state audit, and post-task reuse feedback without exposing private task or file contents.",
  "install_adoption_contract": {
    "public_feedback_api": "https://api.tokrepo.com/api/v1/tokenboard/agent/funnel",
    "event_ingestion_api": "https://api.tokrepo.com/api/v1/tokenboard/agent/events",
    "required_live_window_days": 14,
    "required_live_event_keys": [
      "agent_check",
      "mcp_discover",
      "verify_asset",
      "install_plan",
      "install_dry_run",
      "install_apply"
    ],
    "hosted_completion_event": "completed_install",
    "completion_boundary": "A dry-run or install-plan is not adoption. Adoption requires install_apply or completed_install after local exit 0, post_verify success, and auditable installed state.",
    "local_state_contract": [
      "TokRepo.lock",
      ".tokrepo/state.json",
      "tokrepo installed --project --json",
      "tokrepo installed --target codex --json",
      "tokrepo rollback --last --target codex --dry-run --json"
    ],
    "privacy_boundary": "Only anonymous aggregate event counters and hashed identifiers may be published. The contract must not expose task text, file contents, access tokens, cookies, local paths, share tokens, or private asset content.",
    "live_check_command": "WEB_BASE=https://tokrepo.com API_BASE=https://api.tokrepo.com node scripts/run_agent_install_adoption.mjs --check-live"
  },
  "metrics": {
    "stages_total": 3,
    "stages_passed": 3,
    "adoption_stage_pass_pct": 100,
    "required_event_coverage_pct": 100,
    "privacy_guard_coverage_pct": 100,
    "live_funnel_verification_coverage_pct": 100,
    "dry_run_not_counted_as_adoption_pct": 100
  },
  "adoption_stages": [
    {
      "stage_id": "planning_to_install_plan_feedback",
      "task": "Prove that planning-time discovery reaches a typed install-plan signal before any local write.",
      "required_events": [
        "init_agent",
        "agent_check",
        "mcp_discover",
        "verify_asset",
        "install_plan"
      ],
      "required_public_surfaces": [
        "https://tokrepo.com/mcp",
        "https://tokrepo.com/.well-known/tokrepo.json",
        "https://tokrepo.com/evals/agent-baseline.json",
        "https://api.tokrepo.com/api/v1/tokenboard/agent/funnel"
      ],
      "feedback_signal": {
        "source": "anonymous_aggregate_funnel",
        "required_live_keys": [
          "agent_check",
          "mcp_discover",
          "verify_asset",
          "install_plan"
        ],
        "interpretation": "Discovery and verification become adoption feedback only when the live funnel also records install_plan."
      },
      "privacy_guard": {
        "publishable_fields_only": [
          "event",
          "source",
          "target",
          "result",
          "kind",
          "dry_run",
          "candidate_count"
        ],
        "forbidden_fields": [
          "task_text",
          "file_content",
          "access_token",
          "cookie",
          "local_path",
          "share_token",
          "private_asset_content"
        ]
      },
      "outcome_oracle": {
        "type": "plan_before_write_guard",
        "pass_condition": "A live aggregate funnel can show install_plan without exposing task text or file contents, and no write is counted before verify plus plan."
      },
      "task_outcome_verdict": "pass",
      "user_effect": "TokRepo can prove agents reached a safe install plan instead of only discovering or viewing an asset.",
      "evidence_digest": {
        "algorithm": "sha256",
        "digest": "sha256:376a4fc816a0ef8adc21be7505880f12e764585f0adab554bf459be337bbe223"
      },
      "coverage": {
        "pass": true,
        "checks": [
          {
            "id": "stage_field:stage_id",
            "pass": true
          },
          {
            "id": "stage_field:task",
            "pass": true
          },
          {
            "id": "stage_field:required_events",
            "pass": true
          },
          {
            "id": "stage_field:required_public_surfaces",
            "pass": true
          },
          {
            "id": "stage_field:feedback_signal",
            "pass": true
          },
          {
            "id": "stage_field:privacy_guard",
            "pass": true
          },
          {
            "id": "stage_field:outcome_oracle",
            "pass": true
          },
          {
            "id": "stage_field:task_outcome_verdict",
            "pass": true
          },
          {
            "id": "stage_field:user_effect",
            "pass": true
          },
          {
            "id": "has_live_funnel_api",
            "pass": true
          },
          {
            "id": "has_privacy_forbidden_fields",
            "pass": true
          },
          {
            "id": "has_outcome_oracle_pass_condition",
            "pass": true
          }
        ]
      }
    },
    {
      "stage_id": "install_execution_feedback",
      "task": "Prove that dry-run, real install, and hosted completion feedback are separated.",
      "required_events": [
        "install_dry_run",
        "install_apply",
        "completed_install"
      ],
      "required_public_surfaces": [
        "https://tokrepo.com/evals/agent-install-adoption.json",
        "https://api.tokrepo.com/api/v1/tokenboard/agent/funnel",
        "TokRepo.lock",
        ".tokrepo/state.json",
        "tokrepo installed --project --json"
      ],
      "feedback_signal": {
        "source": "anonymous_aggregate_funnel_plus_local_state_contract",
        "required_live_keys": [
          "install_dry_run",
          "install_apply"
        ],
        "hosted_bridge_event": "completed_install",
        "interpretation": "Dry-run proves safety rehearsal; install_apply or completed_install closes the adoption loop only after local exit 0 and post-verify pass."
      },
      "privacy_guard": {
        "publishable_fields_only": [
          "event",
          "target",
          "kind",
          "result",
          "dry_run",
          "asset_uuid_hash",
          "caller_hash"
        ],
        "forbidden_fields": [
          "installed_file_contents",
          "absolute_project_path",
          "access_token",
          "cookie",
          "local_secret_value",
          "private_asset_content"
        ]
      },
      "outcome_oracle": {
        "type": "dry_run_not_adoption_guard",
        "pass_condition": "install_dry_run is visible but never counted as completed adoption; install_apply or completed_install requires success and post_verify."
      },
      "task_outcome_verdict": "pass",
      "user_effect": "Users and agents can distinguish safe staging from real adoption and can audit local install state after completion.",
      "evidence_digest": {
        "algorithm": "sha256",
        "digest": "sha256:4d76e04caacf7e5608f75e0fb0d406d64fe35fff9f4c6e5bf53b3728b249a5e0"
      },
      "coverage": {
        "pass": true,
        "checks": [
          {
            "id": "stage_field:stage_id",
            "pass": true
          },
          {
            "id": "stage_field:task",
            "pass": true
          },
          {
            "id": "stage_field:required_events",
            "pass": true
          },
          {
            "id": "stage_field:required_public_surfaces",
            "pass": true
          },
          {
            "id": "stage_field:feedback_signal",
            "pass": true
          },
          {
            "id": "stage_field:privacy_guard",
            "pass": true
          },
          {
            "id": "stage_field:outcome_oracle",
            "pass": true
          },
          {
            "id": "stage_field:task_outcome_verdict",
            "pass": true
          },
          {
            "id": "stage_field:user_effect",
            "pass": true
          },
          {
            "id": "has_live_funnel_api",
            "pass": true
          },
          {
            "id": "has_privacy_forbidden_fields",
            "pass": true
          },
          {
            "id": "has_outcome_oracle_pass_condition",
            "pass": true
          }
        ]
      }
    },
    {
      "stage_id": "post_install_retention_feedback",
      "task": "Prove that adopted assets remain auditable and reusable after installation.",
      "required_events": [
        "tokrepo_installed",
        "rollback_plan",
        "agent_handoff",
        "handoff_plan",
        "harvest_plan"
      ],
      "required_public_surfaces": [
        "https://tokrepo.com/agent-task-economy.json",
        "https://tokrepo.com/evals/agent-task-receipts.json",
        "https://tokrepo.com/evals/handoff-quality.json",
        "https://api.tokrepo.com/api/v1/tokenboard/agent/funnel"
      ],
      "feedback_signal": {
        "source": "lifecycle_state_plus_anonymous_funnel",
        "required_live_keys": [
          "agent_handoff",
          "handoff_plan",
          "harvest_plan",
          "rollback_plan"
        ],
        "interpretation": "Adoption is useful only when the installed asset can be inspected, rolled back, handed off, or harvested into future supply."
      },
      "privacy_guard": {
        "publishable_fields_only": [
          "event",
          "source",
          "target",
          "result",
          "kind",
          "candidate_count"
        ],
        "forbidden_fields": [
          "task_text",
          "diff_content",
          "file_content",
          "credential",
          "cookie",
          "private_harvest_payload"
        ]
      },
      "outcome_oracle": {
        "type": "retention_and_reuse_guard",
        "pass_condition": "The lifecycle exposes installed-state, rollback, handoff, and harvest signals without publishing private project content."
      },
      "task_outcome_verdict": "pass",
      "user_effect": "TokRepo can show whether install adoption turns into retained local state and reusable post-task supply.",
      "evidence_digest": {
        "algorithm": "sha256",
        "digest": "sha256:105a37f7ce4546818d2f90ed9084169dcdac8c9bf3dd8c6e3e7921f11fef4ccc"
      },
      "coverage": {
        "pass": true,
        "checks": [
          {
            "id": "stage_field:stage_id",
            "pass": true
          },
          {
            "id": "stage_field:task",
            "pass": true
          },
          {
            "id": "stage_field:required_events",
            "pass": true
          },
          {
            "id": "stage_field:required_public_surfaces",
            "pass": true
          },
          {
            "id": "stage_field:feedback_signal",
            "pass": true
          },
          {
            "id": "stage_field:privacy_guard",
            "pass": true
          },
          {
            "id": "stage_field:outcome_oracle",
            "pass": true
          },
          {
            "id": "stage_field:task_outcome_verdict",
            "pass": true
          },
          {
            "id": "stage_field:user_effect",
            "pass": true
          },
          {
            "id": "has_live_funnel_api",
            "pass": true
          },
          {
            "id": "has_privacy_forbidden_fields",
            "pass": true
          },
          {
            "id": "has_outcome_oracle_pass_condition",
            "pass": true
          }
        ]
      }
    }
  ]
}
