CI and images / extension-version (push) Successful in 3s
CI and images / lint (push) Successful in 3s
CI and images / frontend-build (push) Successful in 19s
CI and images / backend-lint-and-test (push) Successful in 40s
CI and images / integration (push) Failing after 2m17s
CI and images / sign-extension (push) Skipped
CI and images / build-web (push) Skipped
CI and images / smoke-web (push) Skipped
CI and images / promote (push) Skipped
CI and images / build-agent (push) Skipped
Operator, 2026-09-23, on a Floppystack post: "this post has been updated as he implements hot fixes — any chance we have a way to scan for or see updated posts so we can update ours to match and pull the new attachments and pictures etc." The download half already worked: extract_media reads the media list off the LIVE feed response every walk, so a newly attached hotfix build is a ledger key we have never seen. Only REACHING the post was missing — a tick stopped after 20 contiguous already-have-it items, and a post edited three days after publication sits well below twenty. Not a bug in the early-out; a count cannot express "recent". The early-out now needs BOTH conditions: the run of seen items AND a post published before the horizon. Strictly a widening — window 0 is exactly the old behaviour, and no window can make a tick stop EARLIER than it used to, so a source paused for months still walks its whole unseen backlog. The horizon is a floor on how far to look, never a ceiling. Inside the window the post-record gate is bypassed too (write_post_record revisit=True): the body is re-read from the feed response already in hand, so a revisit costs zero requests, and a body that comes back empty writes NOTHING rather than blanking one a detail-fetch had filled. Revisits are kept out of the #862 body-drift canary's sample for the same reason — an empty revisit is healthy, and counting it would walk the alarm toward firing on good ticks. The run summary names what changed ("3 post(s) updated (5 new file(s))") with a line per post; the ask was to SEE updated posts, not only to end up with their bytes. download_revisit_days is a settings row, not a constant (rule 25) — how long a creator keeps editing is a property of the creator. Default 30, 0 turns it off. Migration 0108. Also corrects two stale docstrings: both clients described post_meta as feeding an Ingester.preview that no longer calls it. It had no consumer at all until this change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVjrnpQjRgHdvq95rASoiR
55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
"""download_revisit_days — how far back a tick keeps looking for EDITED posts.
|
|
|
|
Operator, 2026-09-23, pointing at a Floppystack post: *"this post has been
|
|
updated as he implements hot fixes — any chance we have a way to scan for or
|
|
see updated posts so we can update ours to match and pull the new attachments
|
|
and pictures etc."*
|
|
|
|
A tick stopped after 20 contiguous already-have-it items. That is the right
|
|
instinct and the wrong unit: a post edited three days after publication sits
|
|
well below twenty seen items, so the walk turned around before reaching it. The
|
|
walk now needs BOTH a run of seen items and a post older than this many days
|
|
before it stops.
|
|
|
|
A settings row rather than a constant (rule 25) because the right window is a
|
|
property of the CREATOR, not of FabledCurator — one artist appends hotfix
|
|
builds for a fortnight, another never touches a post again. 0 turns the revisit
|
|
off entirely and restores the pure count early-out.
|
|
|
|
30 days is the operator's own number, 2026-09-23.
|
|
|
|
Revision ID: 0108
|
|
Revises: 0107
|
|
Create Date: 2026-09-23
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision: str = "0108"
|
|
down_revision: Union[str, None] = "0107"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# server_default so the existing single settings row gets the window without
|
|
# a data migration — and so an install that predates this column reads 30
|
|
# rather than 0. 0 is a real, meaningful value here (revisit off), so the
|
|
# column must never be allowed to arrive at it by omission.
|
|
op.add_column(
|
|
"import_settings",
|
|
sa.Column(
|
|
"download_revisit_days",
|
|
sa.Integer(),
|
|
nullable=False,
|
|
server_default="30",
|
|
),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column("import_settings", "download_revisit_days")
|