Tasks: PyYAML is a required runtime dependency of the CLI
Phase 3 of 3, derived from requirements.md and design.md. A DAG — tasks with no unmet dependency can run in parallel.
DAG
mermaid
graph TD
T1["T1 declaration<br/>pyproject + uv.lock"] --> T2["T2 cli_config.py"]
T1 --> T3["T3 eventlog.py"]
T1 --> T4["T4 scenarios.py"]
T2 --> T5["T5 metadata test"]
T3 --> T5
T4 --> T5
T1 --> T6["T6 decision-038 + pointers"]
T6 --> T7["T7 prose fixes"]
T6 --> T8["T8 capability doc"]
T5 --> T9["T9 make check"]
T7 --> T9
T8 --> T9
T9 --> T10["T10 self-review ×3"]
T10 --> T11["T11 PR + briefing"]Tasks
- [x] T1 — Declare PyYAML as required.
cli/pyproject.toml:dependencies = ["pyyaml>=6"],config = []as a deprecated no-op extra, comments updated. Refreshuv.lockviauv sync. (R1.1, R1.2, R1.3, R1.4) - [x] T2 —
cli_config.py. Module-levelimport yaml; delete thetry/except ImportErrorinload_cli_config; keep the file/parse leniency and thestrictsemantics; rewrite the module docstring's zero-dep reasoning. (R2.1, R2.2, R2.3, R3.3) - [x] T3 —
eventlog.py. Same removal inload_config; update its docstring ("{}without PyYAML" is no longer how it can return{}). (R2.1, R2.2, R3.3) - [x] T4 —
commands/scenarios.py. Same removal in_load_config_globs; update the module and function docstrings. (R2.1, R2.2, R3.3) - [x] T5 — Metadata test.
test_pyyaml_is_a_required_runtime_dependencyincli/tests/test_cli.py:importlib.metadata.requires("the-loopy-one")carries a barepyyamlrequirement with noextra ==marker. (R4.1) - [x] T6 — decision-038 + supersede pointers. New
docs/decisions/decision-038.md; index row indecisions.md; a superseded-in-part pointer on decision-005 and decision-030. (R3.1, R3.2) - [x] T7 — Prose fixes.
README.md,cli/README.md(intro + both install blocks),docs/architecture/architecture.md,skills/the-loop/reference/automation.md, and thewebhook/__init__.py/commands/gh_webhook.pydocstrings. (R3.3, R3.4) - [x] T8 — Capability doc.
docs/capabilities/cli.md: correct the zero-dep behaviour bullet and the header line; add the issue-97 history row. (R3.5) - [x] T9 — Local gate.
make checkgreen: ruff, markdownlint,ruff format --check, pyright, config validation, pytest — including the pre-existing YAML tests unmodified. (R2.4, R4.2) - [x] T10 — Self-review cycles (
reviews.selfReviewCount: 3, one with the security lens), findings recorded in the execution log. - [x] T11 — PR + reviewer briefing, phase label →
loop:needs-review.