Release 0.2.0: replay, source enforcement, period rule, selective retry (WEBFETCH-WP-0002)

- --replay DIR / replay_dir: offline replay from the cache, hash-verified
- ok values without source become error; Last-Modified recorded as published
- latest period by parsed order (web_fetcher/periods.py); mixed formats refused
- non-numeric values not_found unless value_type: string
- retry only connection errors, timeouts, 429/5xx; honour Retry-After
- opt-in live smoke test; 18 offline tests
- CHANGELOG, README install docs, SCOPE update, capability D2/A3/C2/R2
- WEBFETCH-WP-0003 (repo hygiene) added

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 153021@bnt-lap001
Assistant-Session: 46917be4-6400-4106-b8b7-61953a0caf24
This commit is contained in:
tegwick 2026-10-19 14:08:35 +02:00
parent 5f4467dad8
commit 96fe5b022b
16 changed files with 696 additions and 133 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Versioned release and fetch hardening"
domain: infotech
repo: web-fetcher
status: proposed
status: finished
flavor: implementation
depends_on: [WEBFETCH-WP-0001]
owner: codex
@ -25,7 +25,7 @@ assessment. No third-party dependencies.
```task
id: WEBFETCH-WP-0002-T01
status: todo
status: done
priority: high
state_hub_task_id: "e64ddb81-3d56-5e09-9744-5c0a7c26005b"
```
@ -41,7 +41,7 @@ that succeeded. Offline tests with a fake getter.
```task
id: WEBFETCH-WP-0002-T02
status: todo
status: done
priority: medium
state_hub_task_id: "4cd456c7-6bd3-50a5-b267-ef9223d85e2b"
```
@ -54,7 +54,7 @@ fixtures cannot.
```task
id: WEBFETCH-WP-0002-T05
status: todo
status: done
priority: high
state_hub_task_id: "80e43999-0884-52c1-a49d-b6bd494f898d"
```
@ -69,7 +69,7 @@ Also capture `Last-Modified` as `published` in the HTTP adapters where present.
```task
id: WEBFETCH-WP-0002-T06
status: todo
status: done
priority: high
state_hub_task_id: "7716b978-995e-58cc-8375-40700e28da96"
```
@ -84,7 +84,7 @@ run produces identical observations, `retrieved_at` included.
```task
id: WEBFETCH-WP-0002-T07
status: todo
status: done
priority: medium
state_hub_task_id: "193ee646-ecd8-52ca-b924-2d0502039d9d"
```
@ -100,23 +100,38 @@ stay `ok`.
```task
id: WEBFETCH-WP-0002-T03
status: todo
status: done
priority: high
state_hub_task_id: "54db7c59-b27a-59f9-b7a3-04042e3087a2"
```
Add a CHANGELOG, tag `v0.1.0` (or `v0.2.0` with T01), and document
`pip install git+https://forgejo.coulomb.social/coulomb/web-fetcher@<tag>`.
Point assembly-economics at the tag instead of `WEB_FETCHER_PATH`.
Repointing assembly-economics at the tag is handed off to
`WEBFETCH-WP-0003-T03` and the assembly-economics agent (cross-repo change).
## Update Capability Record
```task
id: WEBFETCH-WP-0002-T04
status: todo
status: done
priority: medium
state_hub_task_id: "35f54169-764e-54a7-a1c2-7513dbafea37"
```
Promote availability A2 → A3 with evidence citations and a `promotion_history`
entry; update `SCOPE.md` current state.
## Outcome (2026-10-19)
Released v0.2.0. Replay (`--replay`), source enforcement, `Last-Modified` as
`published`, parsed latest-period rule with stated note, numeric-value check,
selective retry with `Retry-After`, opt-in live smoke test, CHANGELOG, README
install docs, capability record promoted to D2 / A3 / C2 / R2.
Verification: 18 offline tests pass; live smoke test passes for all four
adapters; all 31 assembly-economics specs give identical status/value/period
under 0.1.0 and 0.2.0, and the replay of the cached run is byte-identical.
Residuals: consumer pinning to the tag → `WEBFETCH-WP-0003-T03` (and a hub
message to assembly-economics); CI → `WEBFETCH-WP-0003-T01`.

View file

@ -0,0 +1,94 @@
---
id: WEBFETCH-WP-0003
type: workplan
title: "Repository hygiene: CI, licence, deployment pinning, records"
domain: infotech
repo: web-fetcher
status: ready
flavor: implementation
depends_on: []
owner: codex
topic_slug: stack
created: "2026-10-19"
updated: "2026-10-19"
---
# Repository hygiene: CI, licence, deployment pinning, records
Smaller gaps found in the 2026-10-19 repo review, outside the
scope-vs-intent work of `WEBFETCH-WP-0002`.
## Continuous Test Run on Forgejo
```task
id: WEBFETCH-WP-0003-T01
status: todo
priority: medium
```
Tests only run when someone remembers. Add a minimal Forgejo Actions workflow
(`.forgejo/workflows/test.yml`) running
`python3 -B -m unittest discover -s tests` on Python 3.10 and the newest
supported version, plus `reuse-surface validate` if the runner can reach it.
First confirm that the Forgejo instance has runners available for
`coulomb/web-fetcher`; if not, record that and set this task to `wait`.
## Choose and Add a Licence
```task
id: WEBFETCH-WP-0003-T02
status: wait
priority: medium
```
The repo is offered for reuse via reuse-surface and pip installs from Forgejo
but has no `LICENSE`. Licence choice is the founder's decision; once made, add
`LICENSE` and the `license` field in `pyproject.toml`.
## Pin the railiance01 Deployment to a Release
```task
id: WEBFETCH-WP-0003-T03
status: todo
priority: medium
```
rein-aharness reads a railiance01 checkout that tracks `main` at whatever
commit it was last pulled (`5fd7ec7` on 2026-10-13). Release `v0.2.0` exists
(`WEBFETCH-WP-0002-T03`); coordinate with assembly-economics so the checkpoint
run consumes a pinned tag instead of a moving checkout.
## Refresh the Custodian Brief
```task
id: WEBFETCH-WP-0003-T04
status: todo
priority: low
```
`.custodian-brief.md` still lists the WP-0001 tasks as open. It is generated;
regenerate it with `statehub fix-consistency` rather than editing it by hand.
## Federate web-fetcher in the reuse-surface Checkout
```task
id: WEBFETCH-WP-0003-T05
status: wait
priority: low
```
reuse-surface commit `be5c006` adds web-fetcher to
`registry/federation/sources.yaml`. It is committed but not pushed; pushing to
reuse-surface `main` needs founder approval. The hosted service already lists
the capability.
## Acknowledge Inbox Notices
```task
id: WEBFETCH-WP-0003-T06
status: todo
priority: low
```
Mark the two news items read and acknowledge the two standing notices
(build-mode security layer, safe secret-check helper) for agent `web-fetcher`.