{
  "schemaVersion": "1.0",
  "lastUpdated": "2026-11-13",
  "site": "https://appreadylab.com",
  "methodology": "https://appreadylab.com/methodology/",
  "protocol": {
    "slug": "operating-evidence-v0-1",
    "version": "0.1",
    "status": "Published draft",
    "title": "Operating evidence protocol v0.1",
    "publishedAt": "2026-11-13",
    "lastReviewedAt": "2026-11-13",
    "summary": "The first public protocol for comparing complete operating setups for ten client WordPress sites and a small client portal.",
    "directComparisonRule": "Results enter a direct comparison only when fixture, protocol, tool meaning, main conditions, and cost cutoff are equivalent.",
    "defaultConfigurationRule": "Test the configuration a new customer receives. Record every generally available onboarding or one-click change; separate expert tuning from the default batch.",
    "fixtures": [
      {
        "code": "WL-WP",
        "version": "0.1",
        "title": "Ten-site WordPress fixture",
        "href": "/lab/wordpress-ten-site-fixture/"
      },
      {
        "code": "WL-PORTAL",
        "version": "0.1",
        "title": "Small client portal fixture",
        "href": "/lab/small-client-portal-fixture/"
      }
    ],
    "url": "https://appreadylab.com/research/protocols/operating-evidence-v0-1/",
    "tasks": [
      {
        "code": "T01",
        "title": "Cost & billing boundary",
        "decisionQuestion": "What must be paid to run the complete workload now, over 12 months, and at renewal?",
        "successRule": "Every required component has a price state, billing unit, quantity assumption, cash timing, and source date; unknown cost is not treated as zero.",
        "record": [
          "First cash payment",
          "12- and 24-month cash cost",
          "Renewal and usage assumptions",
          "Required add-ons",
          "Operator time kept separate"
        ],
        "limit": "A price snapshot does not predict future vendor pricing or a visitor’s exact usage."
      },
      {
        "code": "T02",
        "title": "Bad update & code rollback",
        "decisionQuestion": "Can the operator return application code or site files to the last accepted release after a controlled bad update?",
        "successRule": "The reference workload returns to the accepted code version and its critical path completes without silently claiming that data or uploaded files were also restored.",
        "record": [
          "Change introduced",
          "Rollback operator and steps",
          "Elapsed time",
          "Failed steps",
          "Application state after rollback"
        ],
        "limit": "Code rollback is reported separately from database, file, and configuration recovery."
      },
      {
        "code": "T03",
        "title": "Database recovery",
        "decisionQuestion": "Can deleted or damaged synthetic records be recovered to a known restore point?",
        "successRule": "The expected records and relationships are present after recovery, with the restore point, elapsed time, help required, and data-loss window recorded.",
        "record": [
          "Restore-point age",
          "Self-service or assisted path",
          "Elapsed time",
          "Record reconciliation",
          "Observed data loss"
        ],
        "limit": "The task uses synthetic data and does not certify a visitor’s database design or legal retention process."
      },
      {
        "code": "T04",
        "title": "Uploaded-file recovery",
        "decisionQuestion": "Can a deleted or damaged synthetic upload be recovered independently of application code?",
        "successRule": "The expected file is readable after recovery and its metadata, restore source, elapsed time, and any overwrite risk are recorded.",
        "record": [
          "File set and size",
          "Restore mechanism",
          "Elapsed time",
          "Reconciliation result",
          "Production overwrite risk"
        ],
        "limit": "A successful small-file task does not establish performance or recovery behaviour for every storage volume."
      },
      {
        "code": "T05",
        "title": "Access boundary",
        "decisionQuestion": "Can one synthetic customer read another customer’s records or files through normal or direct paths?",
        "successRule": "Authorised paths work and attempted cross-customer record and file access is denied without exposing protected content.",
        "record": [
          "Roles and tenants",
          "Normal path",
          "Direct record request",
          "Copied file link",
          "Administrator path"
        ],
        "limit": "The result applies to the versioned fixture and configuration, not to arbitrary customer-written application rules."
      },
      {
        "code": "T06",
        "title": "Ownership & handover",
        "decisionQuestion": "Can a second authorised owner take control of accounts, billing, code, data, files, and credentials?",
        "successRule": "The new owner completes the documented administrator path and the original operator can be removed or their remaining dependency is explicitly recorded.",
        "record": [
          "Transferable assets",
          "Non-transferable dependencies",
          "Billing control",
          "Credential rotation",
          "Acceptance checks"
        ],
        "limit": "Actual ownership changes are performed only on authorised test accounts and do not prove contractual ownership for a visitor."
      },
      {
        "code": "T07",
        "title": "Routine operation",
        "decisionQuestion": "What recurring work remains for a small team without a dedicated infrastructure engineer?",
        "successRule": "A defined operator completes the representative update, alert review, user change, and support path while time and required expertise are recorded.",
        "record": [
          "Task steps",
          "Active operator time",
          "Waiting time",
          "Documentation used",
          "Provider or developer escalation"
        ],
        "limit": "A short observed task does not predict every incident or long-term staffing requirement."
      },
      {
        "code": "T08",
        "title": "Dependency boundary",
        "decisionQuestion": "Which builder, platform, account, integration, or paid service must remain for the workload to keep operating?",
        "successRule": "Every runtime dependency is classified as required, replaceable, exportable, or unknown, with an owner and exit consequence.",
        "record": [
          "Runtime components",
          "Account owner",
          "Export path",
          "Replacement path",
          "Cancellation consequence"
        ],
        "limit": "Documented portability is not treated as a completed migration until the replacement path is tested."
      },
      {
        "code": "T09",
        "title": "Critical path & loading",
        "decisionQuestion": "Do the important end-user paths complete under the fixed lab conditions, and what loading observations are repeatable?",
        "successRule": "Every critical step succeeds before loading observations are interpreted; five formal runs record median, minimum, maximum, and failures under the same stated conditions.",
        "record": [
          "Fixture and release",
          "Location and network condition",
          "Critical-path outcome",
          "Five formal observations",
          "Mobile and reduced-network checks"
        ],
        "limit": "This is a limited lab observation, not end-user field data, a long-term uptime percentage, or a high-concurrency load test."
      }
    ]
  },
  "batches": [
    {
      "slug": "wp-2026-001",
      "batchId": "WP-2026-001",
      "workload": "WL-WP",
      "fixtureSlug": "wordpress-ten-site-fixture",
      "fixtureTitle": "Ten-site WordPress fixture",
      "fixtureVersion": "0.1",
      "protocolSlug": "operating-evidence-v0-1",
      "protocolVersion": "0.1",
      "title": "Ten-site WordPress operating batch 001",
      "status": "Planned",
      "comparisonState": "Not eligible for ranking",
      "candidates": [
        "WP-A · Managed WordPress suite",
        "WP-B · Managed cloud + WordPress operations"
      ],
      "plannedConditions": [
        [
          "Test window",
          "Not yet scheduled"
        ],
        [
          "Primary location",
          "Not yet selected; one location will be disclosed"
        ],
        [
          "Configuration rule",
          "New-customer default first; changes logged"
        ],
        [
          "Cost cutoff",
          "Not yet frozen"
        ],
        [
          "Long-term observation",
          "Not included unless a separate 14-day record is started"
        ]
      ],
      "releaseGates": [
        "Specific plans and required components are frozen",
        "Complete cost assumptions share one cutoff",
        "Both configurations complete the required tasks",
        "Failures and unknowns remain visible",
        "Commercial relationships are disclosed"
      ],
      "resultSummary": null,
      "evidenceCutoff": null,
      "url": "https://appreadylab.com/research/batches/wp-2026-001/"
    },
    {
      "slug": "portal-2026-001",
      "batchId": "PORTAL-2026-001",
      "workload": "WL-PORTAL",
      "fixtureSlug": "small-client-portal-fixture",
      "fixtureTitle": "Small client portal fixture",
      "fixtureVersion": "0.1",
      "protocolSlug": "operating-evidence-v0-1",
      "protocolVersion": "0.1",
      "title": "Small client portal operating batch 001",
      "status": "Planned",
      "comparisonState": "Not eligible for ranking",
      "candidates": [
        "APP-A · Integrated application platform",
        "APP-B · Composable managed application stack"
      ],
      "plannedConditions": [
        [
          "Test window",
          "Not yet scheduled"
        ],
        [
          "Primary location",
          "Not yet selected; one location will be disclosed"
        ],
        [
          "Configuration rule",
          "New-customer default first; changes logged"
        ],
        [
          "Cost cutoff",
          "Not yet frozen"
        ],
        [
          "Long-term observation",
          "Not included unless a separate 14-day record is started"
        ]
      ],
      "releaseGates": [
        "Compatible runtime and required services are frozen",
        "Two synthetic tenants complete the same critical paths",
        "Database, file, access, and handover tasks are recorded",
        "Complete cost assumptions share one cutoff",
        "Commercial relationships are disclosed"
      ],
      "resultSummary": null,
      "evidenceCutoff": null,
      "url": "https://appreadylab.com/research/batches/portal-2026-001/"
    }
  ],
  "changesUrl": "https://appreadylab.com/research/changes/",
  "correctionsUrl": "https://appreadylab.com/research/corrections/",
  "resultsArchiveUrl": "https://appreadylab.com/research/results/"
}