Skip to content
Merged
32 changes: 32 additions & 0 deletions .github/workflows/inkspan-hourly-review-repair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Inkspan Hourly Review Repair
Comment thread
seonghobae marked this conversation as resolved.

on:
schedule:
# Minute 56 avoids every existing hourly heartbeat minute and the
# half-hourly merge scheduler ticks.
- cron: "56 * * * *"
Comment thread
seonghobae marked this conversation as resolved.
Comment thread
seonghobae marked this conversation as resolved.

concurrency:
group: inkspan-hourly-review-repair
# The queue scan is bounded and the worker has its own exact-head lease. Do not
# discard an in-flight RCA merely because the next hourly heartbeat arrives.
cancel-in-progress: false

permissions:
contents: read
Comment thread
seonghobae marked this conversation as resolved.

jobs:
dispatch-review-repair:
uses: ./.github/workflows/pr-review-fix-scheduler.yml
Comment thread
seonghobae marked this conversation as resolved.
with:
target_repository: ContextualWisdomLab/inkspan
base_branch: main
max_prs: "50"
max_dispatches: "1"
# Central OpenCode/NVIDIA NIM work can legitimately approach two hours.
# A two-hour same-head floor avoids duplicate writers without freezing the
# next eligible PR or confusing provider latency with a source-code defect.
retry_hours: "2"
Comment thread
seonghobae marked this conversation as resolved.
secrets:
PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }}
OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }}
47 changes: 47 additions & 0 deletions docs/doctoring/inkspan-hourly-review-caller.md
Comment thread
seonghobae marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Inkspan hourly review-repair caller

검토 기준일: **2026-08-25**

## Decision

ContextualWisdomLab operates one protected hourly caller for
`ContextualWisdomLab/inkspan` (deterministic Markdown/HTML authoring and
bounded document/evidence contracts). The caller runs at minute 56, delegates
to the product-neutral central review-fix scheduler, inspects at most 50 open
pull requests targeting protected `main`, and dispatches at most one bounded
repair per heartbeat.

A paying buyer of commercial-grade editor tooling would feel live Inkspan pull
requests stalling while the hourly NVIDIA NIM repair loop scanned only other
products in the organization. Live heads such as inkspan#299 (stacked-PR CI
gates), inkspan#362 (editor contrast and keyboard focus), and the
Comment thread
seonghobae marked this conversation as resolved.
Outdated
writing-diagnostics stack sit in exactly that blind spot when their checks are
green but central review evidence is missing or stale.

The caller does not implement review or mutation logic itself. Inkspan remains
standalone and embeddable; hosts consume `@contextualwisdomlab/cwl-editor`
without owning privileged automation. All mutation authority stays sealed in
`ContextualWisdomLab/.github` behind `PR_REVIEW_MERGE_TOKEN` /
`OPENCODE_APPROVE_TOKEN`.

## Root-cause analysis and remediation feasibility

The reusable worker performs exact-head root-cause analysis, tests remediation
feasibility, and edits only when one small reversible action can change the
diagnosed cause inside its sealed writer authority. It follows the shared
transitions documented in the central scheduler contract: refetch live state,
establish the causal chain, enumerate materially distinct minimal remedies,
reject infeasible ones, and dispatch at most one repair per heartbeat.

Minute 56 avoids every existing hourly heartbeat minute (2, 10, 14, 16, 21,
23, 27, 37, 43, 49, 53, 58) so runner capacity is not contested at dispatch
time.
Comment thread
seonghobae marked this conversation as resolved.
Outdated

## Consequences

- Inkspan gains parity with disksage, nonnest2, Clearfolio, afipc, and
fast-mlsirm for bounded hourly unattended review-repair throughput.
- The two-hour same-head retry floor prevents duplicate writers while keeping
unrelated PR lanes moving every hour.
- No COPILOT_GITHUB_TOKEN is used; existing review-agent key chains are
untouched.
Loading