feat: add featured/locked columns and auto-rotation logic to news pipeline

- Add `ai_grade`, `featured`, `featured_locked`, `landing_locked`, `author`, `article_published`, `image_url`, `has_unique_image` columns to news table
- Extend `news_images` schema with `alt_text`, `phash`, `width`, `height`, `is_placeholder` columns
- Create `idx_news_featured` index for efficient featured queries
- Update admin toggle endpoints to set `featured_locked`/`landing_locked` when manually toggling
- Propagate `featured` and `image_url` fields through landing page, news list, and detail page rendering
- Update `get_featured_news` to return `featured` and `image_url` fields
- Document in AGENTS.md the full zero-maintenance pipeline: image perceptual hashing, placeholder detection, AI grading on cleaned text, reliability gate, effective score computation, and post-loop landing rotation
- Update README.md service description to reflect automatic image comparison and landing rotation capabilities
- Clarify docs_api.py summaries that toggling featured/landing now locks articles from auto-rotation
This commit is contained in:
2026-06-18 22:08:41 +00:00
parent 0a554ebc32
commit 217210e02f
30 changed files with 1296 additions and 235 deletions
+14
View File
@@ -98,6 +98,20 @@
color: var(--warning);
}
.news-featured-badge {
font-size: 0.625rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 0.125rem 0.5rem;
border-radius: 999px;
background: var(--accent);
color: var(--bg-primary);
display: inline-flex;
align-items: center;
gap: 0.25rem;
}
.news-time {
font-size: 0.75rem;
color: var(--text-muted);
+24
View File
@@ -307,6 +307,30 @@
max-width: 70ch;
}
.service-detail-details {
margin: 0 0 0.75rem;
max-width: 80ch;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--surface-2, var(--surface));
padding: 0.5rem 0.75rem;
}
.service-detail-details > summary {
cursor: pointer;
font-weight: 600;
color: var(--text-primary);
font-size: 0.875rem;
}
.service-detail-details-body {
white-space: pre-line;
color: var(--text-secondary);
font-size: 0.8125rem;
line-height: 1.5;
margin-top: 0.5rem;
}
/* ---- Tabs ---- */
.svc-tabbar {
display: flex;