Files
molecule-ai-plugin-scheduler/.gitea/workflows/ci.yml
T
hongming-personal d9bf1ea358
ci / validate (pull_request) Successful in 14s
ci / validate (push) Successful in 15s
meta-ci-advisory / meta (advisory) (pull_request) Successful in 7s
feat(scheduler)!: regenerate from the activity-aware SDK trigger scaffold
Materialized instance of molecule-ai-sdk#205. `scheduler.py`,
`channel_sdk.py` and `trigger_schedule.py` are byte-gated against a fresh
SDK render (scripts/check_scaffold_drift.py), so this repo carries no
hand-authored logic — only the regeneration, the SDK pin, the README, and
the instance tests.

What the regeneration brings, and why it matters HERE: this is the plugin
that abandoned 15 of 38 fires on the live client SEO agent at a fixed 600s
and logged `status: unknown`, every one clustered at 622-628s while every
`fired` sat at 33-60s. Delivery now has no read deadline, and the watchdog
asks the runtime's turn lease — touched on every tool call — whether the
turn is WORKING before cancelling anything. A working turn is never killed
by elapsed time; an idle one, one past the runtime's absolute per-turn cap,
or one the daemon can get no signal about past the 3600s fallback ceiling
is cancelled AND RE-QUEUED, and each records its own cause.

BREAKING: MOLECULE_TRIGGER_DELIVERY_WATCHDOG_SECONDS is gone. New optional
MOLECULE_TRIGGER_DELIVERY_ABSOLUTE_CAP_SECONDS (default 3600 = the runtime's
own 4 x 900s cap) applies ONLY when no liveness signal can be obtained.

CI SDK_VERSION 0.5.6 -> 0.6.0: the drift gate byte-compares against the
INSTALLED released wheel, so this cannot go green until sdk-v0.6.0 is
published. That ordering is the gate working as designed.

Verified on Linux (docker python:3.11-slim):
  - 29 tests, OK (1 skipped: the httpx timeout materialization, which is an
    optional SDK extra and is asserted in the runtime suite instead)
  - `python -m molecule_plugin validate plugin .` -> valid
  - `python scripts/check_scaffold_drift.py` -> DRIFT-GATE: OK, byte-identical
    to a fresh render from the local SDK branch

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 00:40:30 -07:00

42 lines
1.8 KiB
YAML

name: ci
on: [push, pull_request]
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.11"
# No `cache: pip` — this plugin ships no requirements.txt/pyproject.toml
# (it vendors channel_sdk and installs the authoring SDK ad-hoc below),
# and setup-python's pip cache hard-fails without a deps file to hash.
- name: Install authoring SDK (scaffold SSOT)
# This plugin is a materialized instance of the SDK trigger scaffold, so
# `validate` and the drift gate need the SDK. Install it from its git
# RELEASED-wheel pin: bumped to sdk 0.6.0, which replaces the trigger
# scaffold's FIXED 600s delivery watchdog with the activity-aware one
# that reads the runtime turn lease (drift gate byte-identical vs the
# 0.6.0 wheel). Bump SDK_VERSION (and regenerate this plugin) whenever
# the SDK trigger scaffold changes.
env:
SDK_VERSION: 0.6.0
run: |
# --extra-index-url (not --index-url): the Gitea registry hosts only
# molecule packages; deps (pyyaml) must still resolve from PyPI.
python -m pip install "molecule-ai-sdk==${SDK_VERSION}" \
--extra-index-url https://git.moleculesai.app/api/packages/molecule-ai/pypi/simple/
- name: Manifest validation
run: python -m molecule_plugin validate plugin .
- name: SSOT drift gate (daemon logic == SDK scaffold)
run: python scripts/check_scaffold_drift.py
- name: Daemon unit tests
run: python -m unittest discover -s tests -v