woostack
ConfigurationArtifacts

GitHub

Reference for GitHub Projects and repository issues artifact mirroring, configuration fields, hierarchy, and lifecycle behavior.

Select GitHub artifact mirroring with artifacts.provider: "github". The local run remains authoritative.

Configuration

{
  "artifacts": {
    "provider": "github",
    "github": {
      "owner": "acme",
      "ownerType": "organization",
      "statusField": "Status",
      "visibility": "private",
      "projectStatuses": {
        "planned": "Todo",
        "executing": "In Progress",
        "inReview": "In Review",
        "done": "Done",
        "blocked": "Blocked"
      }
    }
  }
}
FieldTypeConstraint
artifacts.github.ownerstringRequired nonempty GitHub organization or user login.
artifacts.github.ownerTypestringOptional "organization" or "user". Resolved via discovery when omitted.
artifacts.github.statusFieldstringOptional exact case-sensitive single-select field name. Defaults to "Status".
artifacts.github.visibilitystringOptional "private" or "public". Defaults to "private"; applies only to newly created Projects.
artifacts.github.projectStatusesobjectRequired mapping of five exact keys (planned, executing, inReview, done, blocked) to nonempty, pairwise unique option names on the Status field.

Credentials belong in the host's authenticated gh environment, never in repository configuration. Projects v2 and native dependencies use gh api graphql; repository issue operations use GitHub issue APIs through gh. Custom HTTP/GraphQL clients, credential reads, and token forwarding are forbidden.

Transport capabilities and boundaries

The GitHub provider requires host-authenticated gh with these verified capabilities:

  • Projects: projectRead, projectWrite, and projectDelete (for smoke testing);
  • Issues: issueRead, issueWrite, issueClose, and issueDelete (for smoke testing);
  • Dependencies: dependencyRead and dependencyWrite;
  • Status field: statusFieldRead and statusFieldWrite;
  • Operations: complete pagination and independentReadBack.

Missing capabilities, unauthorized scopes, foreign markers, drift, or partial responses fail closed at the provider boundary.

Identities, hierarchy, and graph

Accepted canonical URL forms are:

  • Projects: https://github.com/orgs/<owner>/projects/<N> (organizations) or https://github.com/users/<owner>/projects/<N> (users);
  • Issues: https://github.com/<owner>/<repo>/issues/<N>.

Canonical URLs are user-facing references and Commit attribution targets. Native GraphQL node IDs and Project item IDs remain separate mutation identities.

Build and project-backed Fix resolve an exact supplied Project URL or create one [Build]/[Fix] <goal> Project under the configured owner. The complete specification is written inside ProjectV2.readme between markers <!-- woostack-spec-start --> and <!-- woostack-spec-end -->, preserving unrelated README bytes. shortDescription contains a concise goal summary.

Plan increments are normal parentless repository issues (parent = null) added directly as Project items. No synthetic parent plan issue or draft item is created. Preallocated external mutation IDs (<!-- woostack-project-mutation:<UUID> --> and <!-- woostack-issue-mutation:<UUID> -->) enable duplicate-safe recovery across pagination.

An admitted sequence of $N$ increments creates $N-1$ native blocked-by dependencies (predecessor blocks successor). Project item ordering or prose never substitutes for the native graph.

Lifecycle and closure

Execute transitions Project item status from planned to executing during implementation, inReview at PR delivery, and done (closing the issue) at completion. Recorded blockers set blocked without closing the issue. Nonterminal states keep issues open.

When local runs are mirrored to GitHub (artifacts.provider: "github"), the local manifest remains the authoritative execution and resume checkpoint. Execute delivery associates the PR with the exact mapped canonical issue (Resolves https://github.com/<owner>/<repo>/issues/<N>), verified live against the admitted repository. An aggregate failed mirror status does not suppress issue association when an exact task mapping exists. If issue verification or association fails, Execute warns and continues repository delivery and local manifest CAS persistence without blocking. When --recheck encounters an already-delivered task whose verified open PR lacks the exact association, it repairs the PR body without rerunning implementation, creating Git/Graphite objects, or modifying issue lifecycle state.

Completing all increments leaves the Project open. Explicit provider-backed Plan/Execute closure closes the exact admitted Project after a fresh read and independent read-back. Local-run abandonment records status: "abandoned" in the manifest and retains all local artifacts in .woostack/tmp/runs/<run-id>/ without mutating or closing the mirrored Project or its issues.

Workflow matrix

SkillGitHub provider behavior
woostack-buildResolves an exact supplied Project or creates one [Build] <goal> Project; writes specification to managed README; creates parentless issues with direct Project membership; and wires $N-1$ native blocked-by edges.
woostack-fixBounded Fix is provider-free. Project-backed Fix proves root cause before provider access, preserves an exact source --issue as context with a direct Project link, and creates/reconciles a separate strict increment chain.
woostack-planStandalone Plan requires an exact existing canonical Project URL (orgs/<owner>/projects/<N> or users/<owner>/projects/<N>) and synchronizes the direct issue graph; delegated Plan is provider-free.
woostack-executeProvider mode: consumes exact Project/issue URLs, validates ancestry/graph, transitions Project item status (plannedexecutinginReviewdone), and closes issue only at done; all-done leaves Project open. Mirrored local runs: consumes local run manifest, associates PR to exact mapped issue (Resolves <url>) without Project status transitions or issue closure, uses authoritative local CAS checkpoints, emits nonblocking warnings on mirror/association failure, and supports existing-open-PR --recheck repair without duplicate work.
woostack-commitExact --issue <url> attribution; writes optional requested delivery note with read-back; note failure is nonblocking.
woostack-statusRead-only enrichment joined through independently verified repository/PR identity; cannot create rows or override repository evidence.
woostack-bootstrapOptional persistence only after explicit approved design and filesystem barrier.
woostack-initGated read-only discovery (owner, ownerType, canonical repository, status options) via gh only when artifacts.provider: "github"; never selects persistence or probes writes.
woostack-doctorValidates typed config statically; live mode proves authenticated identity, required capability set, and smoke deletion preflight without storing secrets.
woostack-changeProvider-free; never contacts GitHub artifact APIs.

On this page