Skip to content

chore(operations): prove external hourly scheduler continuation and error recovery #96

Description

@seonghobae

Problem and owner boundary

Noema repository source can prove its own work-conserving/manual-dispatch contract, exact-head safeguards and fail-closed publisher behavior. It cannot by itself prove the identity, enablement, cadence, failure/recovery history or duplicate suppression of the external scheduler that invokes the commercial loop. External scheduler evidence stays access-controlled and separate from GitHub checks, formal review, protected merge, release/deployment and acquisition evidence.

This issue owns that external control-plane evidence gap. It does not duplicate the repository workflow implementation, central .github scheduler authority, live App/ruleset provisioning, provider routing, or Noema product-domain source.

Current protected repository authority — 2026-09-18 KST

Fresh protected Noema is GitHub-verified main@f38962869307a45b3b6e65692b2acbabb075e0eb. The only open Noema source lane is Draft #722 on exact b4563512dce9ce9084548cad29f247911949c359; it repairs private-vulnerability-reporting audit authentication and does not modify external-scheduler authority.

Fresh protected read of .github/workflows/hourly-product-development.yml still shows the repository workflow is manual-dispatch only (workflow_dispatch), not repository-scheduled. The protected work-conserving gate remains current: the workflow reads live open PR inventory but does not globally starve while a PR exists; it permits a new proposal only if later publication proves path isolation from every live PR and the protected base remains current. It also fails closed when contextual-orchestrator gateway configuration or the repository-scoped Maintainer App publication path is unavailable.

The same workflow still routes the model session only through contextual-orchestrator (orchestrator/free), strips GitHub/runtime credential variables before the OpenCode process, bounds changed files/diff size, and separates credential-bearing proposal/publication authority from uncredentialed verification. These are protected source contracts, not evidence that the external scheduler itself is enabled, unique, healthy or correctly scoped.

Current protected package.json still exposes operations:external-scheduler-evidence = node scripts/external-scheduler-evidence-audit.mjs, so repository-owned validation remains available without inventing a second scheduler truth.

#722's current hosted wait is also useful negative evidence for scheduler semantics: application CI/reviewer/image are terminal SUCCESS on unchanged b4563512..., while Security fan-out trivy-fs and scorecard remain positively unassigned in the same generation. The external scheduler must not respond to such waits by blind rerun, no-op commit, force-restack or parallel duplicate writer creation.

External scheduler evidence requirement

Retain the scheduler record outside public repository prose or in another approved access-controlled evidence store. Minimum bounded fields remain:

{
  "schema_version": 1,
  "scheduler_task_identity": "provider-scoped opaque identity",
  "prompt_sha256": "64 lowercase hex",
  "scheduled_at": "ISO-8601 UTC",
  "started_at": "ISO-8601 UTC",
  "repository_full_name": "ContextualWisdomLab/noema",
  "protected_main_sha": "40 lowercase hex",
  "generic_error_observed": false,
  "github_actions_performed": [],
  "deferred_lanes": [],
  "exit_sweep_count": 2,
  "remaining_non_actionable_reasons": []
}

Do not put secrets, raw tokens, private keys, hidden model reasoning, vulnerability details or unnecessary personal data in that record.

Acceptance criteria

Scheduler identity/configuration

  • Retain one enabled external Noema scheduler identity, owner, cadence/timezone, observation time and prompt digest in access-controlled operational evidence.
  • Prove duplicate/obsolete Noema scheduler tasks are disabled rather than concurrently writing.
  • Prove the task is scoped to ContextualWisdomLab/noema; .github, contextual-orchestrator and other canonical-owner repositories remain read-only dependencies except through their own owner path.
  • Protected repository source still carries no repository-local hourly cron for this workflow; invocation is external.
  • Protected work-conserving PR-scoped admission/supersession behavior remains current repository workflow authority.

Generic-error recovery

  • Retain one bounded external generic-task-failure observation without inventing hidden provider error codes.
  • Bind the next successful invocation to a fresh scheduler-state read, fresh GitHub protected/open-lane read and exact resulting GitHub mutations.
  • Prove prompt/task repair earns no repository-completion credit by itself when another safe source/issue lane exists.
  • Preserve failure and recovery identities/timestamps in access-controlled evidence rather than issue prose.

Work-conserving execution

  • Repository workflow source expresses work-conserving admission rather than global open-PR starvation.
  • Retain an access-controlled external-run receipt showing a waiting CI/review lane rotated to at least one materially distinct safe action.
  • Retain a run showing documentation/authority work handed off to another safe operational/source lane where one exists.
  • Retain test-first RED→causal GREEN evidence without ending on a safe repairable RED.
  • Retain two consecutive fresh whole-Noema exit sweeps or a falsifiable invocation-budget boundary.

Writer safety/authority

  • Retain exact pre-write target/base/blob/ref/review/writer reads for a representative external run and any detected competing-writer freeze/rotation.
  • Prove no force push, self-approval, gate weakening, synthetic authority, self-modifying repair workflow or credential fallback occurs.
  • Keep scheduler evidence separate from required GitHub checks, review, merge, immutable release, deployment and production evidence.

Non-goals

No second repository schedule, no mutable scheduler prose as architecture authority, no central .github source mutation from this Noema owner, no provider routing duplication, no weakening of #27/#29 governance, and no inference that a running external task proves release/deployment/KPI/acquisition readiness.

Related: #5, #27, #29, #30, #227, #722.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: dependenciesDependency or lockfile maintenancearea: securitySecurity boundary, hardening, or vulnerability preventionbugSomething isn't workingpriority: mediumNormal-priority or P2 workscope: researchResearch, statistical validation, or scientific evidencestatus: triagedOpen issue has an organization taxonomy assignmenttype: bugDefect or incorrect behaviortype: maintenanceMaintenance, build, dependency, or operational upkeep

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions