{
  "schemaVersion": 1,
  "generatedAt": "2026-07-18T13:46:27.760Z",
  "status": "VERSION_CONTROL_WAITING_ON_HANDOFFS",
  "label": "Version Control Waiting On Handoffs",
  "local": {
    "packageVersion": "0.1.0-alpha.83",
    "gitAvailable": true,
    "gitVersion": "git version 2.45.1.windows.1",
    "gitError": "",
    "gitExecutable": "git",
    "hasGitDirectory": true,
    "hasGitHubDirectory": true,
    "hasGitHubWorkflows": true,
    "gitHubWorkflowFiles": [
      "nyra-command-center-ci.yml",
      "nyra-release-rehearsal.yml"
    ],
    "githubCliAvailable": true,
    "githubCliExecutable": "C:\\Users\\porte\\AppData\\Local\\NyrA\\tools\\gh\\gh.exe",
    "githubCliVersion": "gh version 2.93.0 (2026-05-27)",
    "githubCliAuthenticated": false,
    "githubCliAuthSummary": "You are not logged into any GitHub hosts. To log in, run: gh auth login",
    "currentBranch": "main",
    "currentHeadCommit": "f209dbd6f377c9a6d36e850429b1b5ca3230cced",
    "currentHeadShort": "f209dbd",
    "remoteUrl": "",
    "pushDryRunReady": false,
    "pushDryRunStatus": "blocked",
    "pushDryRunDetail": "Skipped because no local origin remote is configured.",
    "statusSummary": "## main; 1235 changed path(s). Sample: A \".env for nyra.txt\"; M .env.example; MM .gitignore; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal; A .wrangler/state/...",
    "statusBranch": "## main",
    "statusChangedPathCount": 1235,
    "statusSampleChangedPaths": [
      "A \".env for nyra.txt\"",
      "M .env.example",
      "MM .gitignore",
      "A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite",
      "A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm",
      "A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal",
      "A .wrangler/state/v3/r2/miniflare-R2BucketObject/bfdcad5a3a1b4abcd3582fe7a31e40450384be48edd5a689f5a9776893de8bbf.sqlite",
      "A .wrangler/state/v3/r2/miniflare-R2BucketObject/bfdcad5a3a1b4abcd3582fe7a31e40450384be48edd5a689f5a9776893de8bbf.sql..."
    ],
    "recentReleaseHistory": [
      "f209dbd (HEAD -> main) fix: scope vite dev dependency scan",
      "d74613d docs: refresh clean release blocker dashboard",
      "336e27a docs: surface release candidate blocker queue",
      "fafe897 docs: refresh clean no-trial dashboard",
      "782dd31 fix: enforce no-trial billing entitlement",
      "12b01a6 docs: refresh clean cloud publish dashboard",
      "a266c70 chore: publish refreshed dashboard state to cloud",
      "9180b37 docs: refresh clean standup dashboard",
      "6478f82 feat: add daily standup fill-in workbench",
      "002412f docs: refresh clean version control dashboard",
      "a93e126 chore: require cloud ingest in daily automations",
      "98abb5e docs: refresh command center after cloud ingest",
      "c2aefc3 feat: safely ingest cloud dashboard handoffs",
      "afcd9c0 docs: refresh command center after cloud upload routing",
      "d03f88d feat: route cloud uploads into agent review",
      "07f8d8e docs: refresh clean command center after upload brief routing",
      "1fae7a2 docs: refresh command center after upload daily brief routing",
      "36e0a31 feat: preserve upload routing in daily brief",
      "4ecd965 docs: refresh command center after upload review routing",
      "432bc2b chore: queue agent review for dashboard uploads"
    ],
    "recentReleaseTags": [],
    "releaseHistoryReadable": true,
    "releaseTagsReadable": true,
    "releaseNotesPath": "docs/release/RELEASE_NOTES_0.1.0-alpha.83.md",
    "knownIssuesPath": "docs/release/KNOWN_ISSUES_0.1.0-alpha.83.md",
    "releaseNotesExists": true,
    "knownIssuesExists": true
  },
  "releaseHistory": {
    "handoffRule": "Before paid beta, record branch, commit, tag, manifest path, SHA256SUMS path, and signing/store trust evidence. Do not push, tag, or rewrite history from automation until the dirty tree has been reviewed.",
    "releaseHandoffChecklist": [
      {
        "order": 1,
        "label": "Review dirty working tree",
        "status": "blocked",
        "detail": "1235 changed path(s) need review before tag, push, or signing.",
        "requiredEvidence": "Reviewed git status and intentional commit plan for every release-bound change.",
        "noGoRule": "Do not tag, push, or sign from an unreviewed dirty tree."
      },
      {
        "order": 2,
        "label": "Save GitHub remote",
        "status": "blocked",
        "detail": "No local origin remote or saved repo URL is available.",
        "requiredEvidence": "Dashboard versionControl.repoRemoteUrl or local origin remote points to the intended private GitHub repo.",
        "noGoRule": "Do not run push or tag handoffs against an unknown remote."
      },
      {
        "order": 3,
        "label": "Authenticate GitHub push path",
        "status": "blocked",
        "detail": "You are not logged into any GitHub hosts. To log in, run: gh auth login",
        "requiredEvidence": "GitHub CLI auth status or browser-created repo access is confirmed without storing tokens in repo files.",
        "noGoRule": "Do not mark GitHub push ready until auth or a saved browser-created remote path is proven."
      },
      {
        "order": 4,
        "label": "Capture push dry-run",
        "status": "blocked",
        "detail": "Skipped because no local origin remote is configured.",
        "requiredEvidence": "Output from git push --dry-run origin HEAD is copied into release handoff evidence.",
        "noGoRule": "Do not push, tag, or sign until a non-mutating push dry-run succeeds for the chosen remote."
      },
      {
        "order": 5,
        "label": "Refresh release evidence",
        "status": "pass",
        "detail": "Release notes, known issues, manifest, and SHA256SUMS exist for 0.1.0-alpha.83.",
        "requiredEvidence": "docs/release/RELEASE_NOTES_0.1.0-alpha.83.md, docs/release/KNOWN_ISSUES_0.1.0-alpha.83.md, docs/release/builds/0.1.0-alpha.83/release-manifest.json, and docs/release/builds/0.1.0-alpha.83/SHA256SUMS.txt.",
        "noGoRule": "Do not create a release tag unless release notes, known issues, manifest, and checksums match the shipped version."
      },
      {
        "order": 6,
        "label": "Produce signing or store-trust evidence",
        "status": "blocked",
        "detail": "Microsoft Artifact Signing Handoffs Missing; current release evidence is unsigned internal-alpha only or not saved.",
        "requiredEvidence": "Sanitized Authenticode/store listing evidence in the code-signing upload slot; no private keys or signing secrets.",
        "noGoRule": "Do not mark paid beta ready until the installer is signed or store-trusted."
      },
      {
        "order": 7,
        "label": "Create release tag after blockers clear",
        "status": "blocked",
        "detail": "No v* release tag is present on HEAD.",
        "requiredEvidence": "Annotated release tag for 0.1.0-alpha.83 created only after dirty-tree, remote, dry-run, evidence, and signing gates pass.",
        "noGoRule": "Do not create or move release tags from automation while any prior checklist item is blocked."
      }
    ],
    "releaseBlockerSummary": [
      {
        "order": 1,
        "label": "Review dirty working tree",
        "status": "blocked",
        "detail": "1235 changed path(s) need review before tag, push, or signing.",
        "nextAction": "Reviewed git status and intentional commit plan for every release-bound change.",
        "noGoRule": "Do not tag, push, or sign from an unreviewed dirty tree."
      },
      {
        "order": 2,
        "label": "Save GitHub remote",
        "status": "blocked",
        "detail": "No local origin remote or saved repo URL is available.",
        "nextAction": "Dashboard versionControl.repoRemoteUrl or local origin remote points to the intended private GitHub repo.",
        "noGoRule": "Do not run push or tag handoffs against an unknown remote."
      },
      {
        "order": 3,
        "label": "Authenticate GitHub push path",
        "status": "blocked",
        "detail": "You are not logged into any GitHub hosts. To log in, run: gh auth login",
        "nextAction": "GitHub CLI auth status or browser-created repo access is confirmed without storing tokens in repo files.",
        "noGoRule": "Do not mark GitHub push ready until auth or a saved browser-created remote path is proven."
      },
      {
        "order": 4,
        "label": "Capture push dry-run",
        "status": "blocked",
        "detail": "Skipped because no local origin remote is configured.",
        "nextAction": "Output from git push --dry-run origin HEAD is copied into release handoff evidence.",
        "noGoRule": "Do not push, tag, or sign until a non-mutating push dry-run succeeds for the chosen remote."
      },
      {
        "order": 6,
        "label": "Produce signing or store-trust evidence",
        "status": "blocked",
        "detail": "Microsoft Artifact Signing Handoffs Missing; current release evidence is unsigned internal-alpha only or not saved.",
        "nextAction": "Sanitized Authenticode/store listing evidence in the code-signing upload slot; no private keys or signing secrets.",
        "noGoRule": "Do not mark paid beta ready until the installer is signed or store-trusted."
      },
      {
        "order": 7,
        "label": "Create release tag after blockers clear",
        "status": "blocked",
        "detail": "No v* release tag is present on HEAD.",
        "nextAction": "Annotated release tag for 0.1.0-alpha.83 created only after dirty-tree, remote, dry-run, evidence, and signing gates pass.",
        "noGoRule": "Do not create or move release tags from automation while any prior checklist item is blocked."
      }
    ],
    "currentHandoffSnapshot": {
      "packageVersion": "0.1.0-alpha.83",
      "branch": "main",
      "headCommit": "f209dbd6f377c9a6d36e850429b1b5ca3230cced",
      "headShort": "f209dbd",
      "tagOnHead": "",
      "hasReleaseTagOnHead": false,
      "workingTreeClean": false,
      "changedPathCount": 1235,
      "dirtyTreeReviewRequired": true,
      "manifestPath": "docs/release/builds/0.1.0-alpha.83/release-manifest.json",
      "sha256SumsPath": "docs/release/builds/0.1.0-alpha.83/SHA256SUMS.txt",
      "signingEvidenceRule": "Paid beta requires signed or store-trusted installer evidence before tag/push/signing handoff can be marked ready."
    },
    "signingReadiness": {
      "status": "ARTIFACT_SIGNING_HANDOFFS_MISSING",
      "label": "Microsoft Artifact Signing Handoffs Missing",
      "readyForSignedBuild": false,
      "mode": "artifact-signing",
      "missingHandoffCount": 5,
      "evidencePath": "docs/launch_command_center/windows-signing-readiness.json",
      "preflightCommand": "npm run release:windows-signing:preflight",
      "signedBuildCommand": "npm run build:windows:signed",
      "noGoRule": "Do not create a release tag or mark paid beta ready until the signing preflight is ready and sanitized signed/store-trusted installer evidence exists."
    },
    "recentCommits": [
      "f209dbd (HEAD -> main) fix: scope vite dev dependency scan",
      "d74613d docs: refresh clean release blocker dashboard",
      "336e27a docs: surface release candidate blocker queue",
      "fafe897 docs: refresh clean no-trial dashboard",
      "782dd31 fix: enforce no-trial billing entitlement",
      "12b01a6 docs: refresh clean cloud publish dashboard",
      "a266c70 chore: publish refreshed dashboard state to cloud",
      "9180b37 docs: refresh clean standup dashboard",
      "6478f82 feat: add daily standup fill-in workbench",
      "002412f docs: refresh clean version control dashboard",
      "a93e126 chore: require cloud ingest in daily automations",
      "98abb5e docs: refresh command center after cloud ingest",
      "c2aefc3 feat: safely ingest cloud dashboard handoffs",
      "afcd9c0 docs: refresh command center after cloud upload routing",
      "d03f88d feat: route cloud uploads into agent review",
      "07f8d8e docs: refresh clean command center after upload brief routing",
      "1fae7a2 docs: refresh command center after upload daily brief routing",
      "36e0a31 feat: preserve upload routing in daily brief",
      "4ecd965 docs: refresh command center after upload review routing",
      "432bc2b chore: queue agent review for dashboard uploads"
    ],
    "recentTags": [],
    "pushReadiness": {
      "command": "git push --dry-run origin HEAD",
      "status": "blocked",
      "ready": false,
      "detail": "Skipped because no local origin remote is configured.",
      "noGoRule": "Capture a successful dry-run push against the chosen remote before tag, push, or signing handoff is marked ready."
    },
    "handoffDocuments": [
      {
        "label": "Release notes",
        "path": "docs/release/RELEASE_NOTES_0.1.0-alpha.83.md",
        "status": "present"
      },
      {
        "label": "Known issues",
        "path": "docs/release/KNOWN_ISSUES_0.1.0-alpha.83.md",
        "status": "present"
      },
      {
        "label": "Release manifest",
        "path": "docs/release/builds/0.1.0-alpha.83/release-manifest.json",
        "status": "present"
      },
      {
        "label": "SHA256 sums",
        "path": "docs/release/builds/0.1.0-alpha.83/SHA256SUMS.txt",
        "status": "present"
      }
    ],
    "requiredCommands": [
      "git status --short --branch",
      "git log --oneline --decorate -n 20",
      "git tag --list \"v*\" --sort=-v:refname",
      "git push --dry-run origin HEAD"
    ]
  },
  "checks": [
    {
      "id": "git-cli",
      "phase": "1. Local Tooling",
      "owner": "User",
      "status": "pass",
      "label": "Git CLI available in this shell",
      "detail": "git version 2.45.1.windows.1",
      "action": "Git is available for release history checks.",
      "dashboardField": "versionControl.gitInstallStatus",
      "noGoRule": "Paid release work must have git available so tags, remotes, and branch state can be verified."
    },
    {
      "id": "git-repository",
      "phase": "2. Repository Baseline",
      "owner": "User + Codex",
      "status": "pass",
      "label": ".git repository exists",
      "detail": "Local repository metadata exists.",
      "action": "Keep the working tree auditable and commit intentionally.",
      "dashboardField": "versionControl.sourceControlDecision",
      "noGoRule": "No paid beta release without traceable source-control history for the shipped build."
    },
    {
      "id": "github-remote",
      "phase": "2. Repository Baseline",
      "owner": "User",
      "status": "blocked",
      "label": "GitHub remote or repo URL saved",
      "detail": "No remote URL is detectable or saved.",
      "action": "Save the intended GitHub repository owner/name or remote URL in the dashboard.",
      "dashboardField": "versionControl.repoRemoteUrl",
      "noGoRule": "No public paid release until the source repo and release evidence location are known."
    },
    {
      "id": "github-cli-auth",
      "phase": "2. Repository Baseline",
      "owner": "User + Codex",
      "status": "blocked",
      "label": "GitHub repo creation or push path available",
      "detail": "You are not logged into any GitHub hosts. To log in, run: gh auth login",
      "action": "Authenticate GitHub CLI or save an existing remote URL in the dashboard.",
      "dashboardField": "versionControl.repoRemoteUrl",
      "noGoRule": "No paid beta release until source history can be pushed to the chosen GitHub repository."
    },
    {
      "id": "push-dry-run-readiness",
      "phase": "2. Repository Baseline",
      "owner": "User + Codex",
      "status": "blocked",
      "label": "Push dry-run readiness captured",
      "detail": "Skipped because no local origin remote is configured.",
      "action": "Save or configure the intended GitHub origin remote, then rerun the dry-run push check before any tag or signing handoff.",
      "dashboardField": "versionControl.repoRemoteUrl",
      "noGoRule": "No release tag or signed package handoff is complete until a non-mutating push dry-run has been captured for the chosen remote."
    },
    {
      "id": "github-workflows",
      "phase": "3. CI Release Gates",
      "owner": "Codex",
      "status": "pass",
      "label": ".github/workflows release gates exist",
      "detail": ".github/workflows contains nyra-command-center-ci.yml, nyra-release-rehearsal.yml.",
      "action": "Keep CI wired to build/test release gates.",
      "dashboardField": "versionControl.ciProvider",
      "noGoRule": "No paid beta release without a repeatable CI or documented release verification path."
    },
    {
      "id": "release-tag-strategy",
      "phase": "4. Release Policy",
      "owner": "User + Codex",
      "status": "pass",
      "label": "Branch and tag strategy saved",
      "detail": "branch=Use main for active development and release/x.y branches for paid beta release stabilization.; tag=Use semantic version tags such as v0.1.0-alpha.1, v0.1.0-beta.1, and v1.0.0 for customer-facing release builds.",
      "action": "Choose release branch and tag rules, for example release/x.y branches and v0.1.0-beta.1 tags.",
      "dashboardField": "versionControl.releaseBranchStrategy",
      "noGoRule": "No customer build is published without a retraceable branch/tag policy."
    },
    {
      "id": "release-history-readable",
      "phase": "4. Release Policy",
      "owner": "Codex",
      "status": "pass",
      "label": "Release history handoff is readable",
      "detail": "Recent commits: f209dbd (HEAD -> main) fix: scope vite dev dependency scan / d74613d docs: refresh clean release blocker dashboard / 336e27a docs: surface release candidate blocker queue / fafe897 docs: refresh clean no-trial dashboard / 782dd31 fix: enforce no-trial billing entitlement",
      "action": "Keep release handoffs tied to specific commits, tags, manifests, and checksums.",
      "dashboardField": "versionControl.workingTreePolicy",
      "noGoRule": "No release notes or handoff packet is treated as traceable unless it names the exact commit/tag and matching release evidence."
    },
    {
      "id": "release-head-snapshot",
      "phase": "4. Release Policy",
      "owner": "Codex",
      "status": "pass",
      "label": "Current release HEAD is captured",
      "detail": "HEAD=f209dbd6f377c9a6d36e850429b1b5ca3230cced; branch=main; changedPaths=1235",
      "action": "Use this exact commit in the release handoff before any tag, push, or signing step.",
      "dashboardField": "versionControl.workingTreePolicy",
      "noGoRule": "No release tag or signed package handoff is complete without the exact source commit captured."
    },
    {
      "id": "release-tag-audit",
      "phase": "4. Release Policy",
      "owner": "Codex",
      "status": "info",
      "label": "Existing release tags are auditable",
      "detail": "Recent tags: No v* release tags found yet.",
      "action": "Before beta, create signed or annotated release tags only after release evidence is regenerated.",
      "dashboardField": "versionControl.tagStrategy",
      "noGoRule": "No paid beta handoff should rely on an untagged or unverified release build."
    },
    {
      "id": "release-evidence",
      "phase": "5. Release Evidence",
      "owner": "Codex",
      "status": "pass",
      "label": "Release manifest and checksums exist",
      "detail": "Release evidence exists for 0.1.0-alpha.83.",
      "action": "Run release evidence generation after each clean release candidate build.",
      "dashboardField": "releasePackage.lastExecutableSha256",
      "verificationCommand": "npm run release:evidence && npm run release:candidate:preflight",
      "noGoRule": "No release candidate is handed to a customer without manifest and checksum evidence."
    },
    {
      "id": "release-notes-known-issues",
      "phase": "5. Release Evidence",
      "owner": "Codex",
      "status": "pass",
      "label": "Release notes and known issues exist",
      "detail": "Release history docs exist for 0.1.0-alpha.83: docs/release/RELEASE_NOTES_0.1.0-alpha.83.md; docs/release/KNOWN_ISSUES_0.1.0-alpha.83.md.",
      "action": "Keep the current release notes and known issues tied to the exact package version, manifest, checksums, and no-go boundary.",
      "dashboardField": "appVersion.currentVersion",
      "verificationCommand": "npm run release:evidence && npm run version:control-pack",
      "noGoRule": "No release handoff is complete unless the shipped version has matching release notes and known issues."
    },
    {
      "id": "release-docs",
      "phase": "5. Release Evidence",
      "owner": "Codex",
      "status": "pass",
      "label": "Release trust and version docs exist",
      "detail": "signingDoc=true; appRoadmap=true",
      "action": "Keep signing/distribution and app-version docs current with dashboard decisions.",
      "dashboardField": "appVersion.nextVersion",
      "noGoRule": "Release decisions must be visible in the dashboard and generated docs before paid launch."
    },
    {
      "id": "working-tree-state",
      "phase": "6. Daily Audit",
      "owner": "Codex",
      "status": "info",
      "label": "Working tree status readable",
      "detail": "## main; 1235 changed path(s). Sample: A \".env for nyra.txt\"; M .env.example; MM .gitignore; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm; A .wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal; A .wrangler/state/...",
      "action": "Daily agents can audit changed files.",
      "dashboardField": "versionControl.workingTreePolicy",
      "noGoRule": "Do not publish a build when changed files are unaudited or outside the intended release scope."
    },
    {
      "id": "backup-archive",
      "phase": "7. Backup",
      "owner": "User + Codex",
      "status": "pass",
      "label": "Backup/archive path saved",
      "detail": "G:\\My Drive\\AI Stuff\\NyrA Release Evidence Archive",
      "action": "Save where release evidence and dashboard backups should live outside the local machine.",
      "dashboardField": "versionControl.backupPath",
      "noGoRule": "Do not rely on a single local folder for business-critical launch evidence."
    }
  ],
  "actions": [
    {
      "id": "github-remote",
      "source": "version-control-pack",
      "phase": "2. Repository Baseline",
      "priority": "P0",
      "owner": "User",
      "status": "Waiting on handoff",
      "label": "GitHub remote or repo URL saved",
      "detail": "No remote URL is detectable or saved.",
      "action": "Save the intended GitHub repository owner/name or remote URL in the dashboard.",
      "evidenceNeeded": "Save versionControl.repoRemoteUrl in the dashboard and upload sanitized repo/CI evidence to version-control.",
      "dashboardPage": "pages/version-control.html",
      "dashboardField": "versionControl.repoRemoteUrl",
      "uploadSlot": "version-control",
      "verificationCommand": "npm run version:control-pack && npm run test:version-control-pack",
      "noGoRule": "No public paid release until the source repo and release evidence location are known."
    },
    {
      "id": "github-cli-auth",
      "source": "version-control-pack",
      "phase": "2. Repository Baseline",
      "priority": "P0",
      "owner": "User + Codex",
      "status": "Waiting on handoff",
      "label": "GitHub repo creation or push path available",
      "detail": "You are not logged into any GitHub hosts. To log in, run: gh auth login",
      "action": "Authenticate GitHub CLI or save an existing remote URL in the dashboard.",
      "evidenceNeeded": "Save versionControl.repoRemoteUrl in the dashboard and upload sanitized repo/CI evidence to version-control.",
      "dashboardPage": "pages/version-control.html",
      "dashboardField": "versionControl.repoRemoteUrl",
      "uploadSlot": "version-control",
      "verificationCommand": "npm run version:control-pack && npm run test:version-control-pack",
      "noGoRule": "No paid beta release until source history can be pushed to the chosen GitHub repository."
    },
    {
      "id": "push-dry-run-readiness",
      "source": "version-control-pack",
      "phase": "2. Repository Baseline",
      "priority": "P0",
      "owner": "User + Codex",
      "status": "Waiting on handoff",
      "label": "Push dry-run readiness captured",
      "detail": "Skipped because no local origin remote is configured.",
      "action": "Save or configure the intended GitHub origin remote, then rerun the dry-run push check before any tag or signing handoff.",
      "evidenceNeeded": "Save versionControl.repoRemoteUrl in the dashboard and upload sanitized repo/CI evidence to version-control.",
      "dashboardPage": "pages/version-control.html",
      "dashboardField": "versionControl.repoRemoteUrl",
      "uploadSlot": "version-control",
      "verificationCommand": "npm run version:control-pack && npm run test:version-control-pack",
      "noGoRule": "No release tag or signed package handoff is complete until a non-mutating push dry-run has been captured for the chosen remote."
    }
  ],
  "safeCommands": [
    {
      "id": "refresh-version-control-pack",
      "phase": "0. Dashboard Sync",
      "owner": "Codex",
      "command": "npm run version:control-pack && npm run test:version-control-pack",
      "purpose": "Refresh local git/GitHub/CI evidence and command-center state.",
      "noGoRule": "Do not rely on old repo status before release work."
    },
    {
      "id": "install-git-check",
      "phase": "1. Local Tooling",
      "owner": "User",
      "command": "git --version",
      "purpose": "Confirm Git is available in the shell that builds release evidence.",
      "noGoRule": "If git is missing, leave repo creation/commit/tag work blocked."
    },
    {
      "id": "repo-status-check",
      "phase": "2. Repository Baseline",
      "owner": "Codex",
      "command": "git status --short --branch",
      "purpose": "Verify branch, remote tracking, and changed files before release work.",
      "noGoRule": "Do not publish customer builds from unaudited local changes."
    },
    {
      "id": "recent-release-history",
      "phase": "2. Repository Baseline",
      "owner": "Codex",
      "command": "git log --oneline --decorate -n 20",
      "purpose": "Capture the bounded commit history used for release notes, handoff packets, and tag decisions.",
      "noGoRule": "Do not summarize release history from memory; read the current local commits first."
    },
    {
      "id": "release-tag-audit",
      "phase": "2. Repository Baseline",
      "owner": "Codex",
      "command": "git tag --list \"v*\" --sort=-v:refname",
      "purpose": "List existing release tags before choosing the next alpha, beta, or customer-facing tag.",
      "noGoRule": "Do not reuse or overwrite an existing release tag."
    },
    {
      "id": "push-dry-run",
      "phase": "2. Repository Baseline",
      "owner": "User + Codex",
      "command": "git push --dry-run origin HEAD",
      "purpose": "Check whether the chosen remote can accept the current branch without pushing code.",
      "noGoRule": "Only run after the intended remote URL is saved; dry-run output is evidence, not a substitute for review."
    },
    {
      "id": "github-cli-auth-check",
      "phase": "2. Repository Baseline",
      "owner": "User + Codex",
      "command": "& 'C:\\Users\\porte\\AppData\\Local\\NyrA\\tools\\gh\\gh.exe' auth status",
      "purpose": "Confirm local GitHub CLI can create/push the selected private repository.",
      "noGoRule": "If gh is missing or unauthenticated, keep remote creation/push blocked until a browser-created repo URL is saved."
    },
    {
      "id": "portable-github-cli-install",
      "phase": "2. Repository Baseline",
      "owner": "Codex",
      "command": "npm run tools:install-gh",
      "purpose": "Install or refresh the portable GitHub CLI under the NyrA local tools folder without requiring admin rights.",
      "noGoRule": "Do not call the GitHub remote path ready until gh is authenticated or a browser-created remote URL is saved."
    },
    {
      "id": "ci-release-gate",
      "phase": "3. CI Release Gates",
      "owner": "Codex",
      "command": "npm run command-center:build && npm run build:clean",
      "purpose": "Keep generated dashboard evidence and clean release gates reproducible before CI is wired.",
      "noGoRule": "No paid beta until clean release gates pass locally and the CI path is approved."
    },
    {
      "id": "github-actions-workflow-check",
      "phase": "3. CI Release Gates",
      "owner": "Codex",
      "command": "npm run test:github-actions-workflows",
      "purpose": "Verify GitHub Actions CI/release rehearsal workflows match the command-center release gates.",
      "noGoRule": "Do not treat CI as configured unless workflow files are present and checked for required gates."
    }
  ],
  "dashboardFields": [
    "versionControl.sourceControlDecision",
    "versionControl.gitInstallStatus",
    "versionControl.repoProvider",
    "versionControl.repoOwner",
    "versionControl.repoName",
    "versionControl.repoRemoteUrl",
    "versionControl.ciProvider",
    "versionControl.releaseBranchStrategy",
    "versionControl.tagStrategy",
    "versionControl.workingTreePolicy",
    "versionControl.backupPath",
    "versionControl.repoConnectedDate"
  ],
  "handoffs": {
    "waitingOnUser": 3,
    "waitingOnCodex": 0,
    "requiredBlockedChecks": 3
  },
  "counts": {
    "checks": 15,
    "passedChecks": 10,
    "blockedChecks": 3,
    "totalActions": 3,
    "userActions": 3,
    "codexActions": 2,
    "safeCommands": 10
  },
  "outputs": {
    "json": "docs/launch_command_center/version-control-pack.json",
    "csv": "docs/launch_command_center/version-control-pack.csv",
    "report": "docs/launch_command_center/VERSION_CONTROL_PACK.md",
    "dashboard": "docs/launch_command_center/pages/version-control.html"
  }
}
