d9bf1ea358
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>
42 lines
1.8 KiB
YAML
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
|