Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

All notable changes to this project are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.0.6] - 2026-11-02

### Added

- Store channel filters can leave values out, such as kids' wear, a brand or a store, with a
  不看 toggle beside each option.

### Changed

- The store channel search field is narrower on wide screens.

## [1.0.5] - 2026-11-02

### Changed

- Store channels put search, filters and sort on one row. Filters and sort apply as soon as
  they are picked; the button only runs a typed search.
- Store channel headers show the last fetch and the sources on the meta line, and the page-size
  switch sits next to the list/gallery switch.
- Gallery cards lead with the brand and show the struck reference price, the current price and
  the discount. Scores and relevance buttons stay in the list view.

## [1.0.4] - 2026-10-30

### Changed

- Digest emails use compact dark entry blocks with prominent prices and deadlines,
  source links, and saved-brief links. The admin preview uses the same template.

### Fixed

- Long email links wrap on narrow screens, and English and Chinese digest punctuation
  clearly separates labels, details, and channel navigation.

## [1.0.3] - 2026-10-29

### Fixed

- Release cleanup removes numeric and commit-based image aliases individually. Images with
  other tags are retained, and obsolete untagged release images are removed.

## [1.0.2] - 2026-10-29

### Fixed

- Admin navigation wraps on narrow screens, keeping every action visible in longer languages.
  Global navigation uses 44px touch targets without enlarging pointer-based desktop controls.
- Research health checks the latest run and reply request in each unarchived session. Recovered
  and archived failures remain in history without raising current warnings.
- Research replies now have their own health row, including queued work and expired leases.
  System attention counts cover both queues, with links to the affected history or conversation.

## [1.0.1] - 2026-10-29

### Fixed

- Current news channels no longer rank months of history as current content. They share
  Featured's rolling time window, defaulting to 24 hours, using publication time or first
  collection when unavailable.
- News-window labels and bulk read actions now match that scope. Explicit searches and the
  archive keep historical content, and live product and auction listings remain unaffected.

## [1.0.0] - 2026-10-29

### Added

- Numeric releases from the canonical Python package version, immutable Git release tags,
  version-reuse and regression checks in CI, and version-labelled container images.
- Task-centered channel administration and clearer mobile reading, search recovery, single-item
  undo, price references and email return links.
- PartyMap Civic automation: Owner-approved Civic Watches gather New Zealand official, party and
  licensed media sources daily, generate and independently verify four-locale entries, and seal
  them into Civic Batches delivered through a local two-phase spool. Civic runs on two
  timer-started units with its own locked image (ADR-0013). Schema version 5. See
  [PartyMap Civic automation](docs/civic.md).
- Per-Channel fetch scheduling: each Channel now chooses either a fixed interval (every 3 or 6
  hours) or a daily wall-clock time in its own IANA timezone, defaulting to `Pacific/Auckland`. A
  daily schedule is anchored to its calendar slot instead of the last successful fetch, so a late
  run never pushes the next day's fetch later, and a manual "fetch now" does not move the
  automatic schedule. Existing Channels keep their current interval behavior on upgrade.
- Owner-only Research Sessions: a persistent, one-time question investigated with the existing
  credentialless connectors, a visible AI-proposed Research Plan, durable asynchronous evidence
  collection and clustering, a conclusion-first citation-backed Research Synthesis, stable
  per-session citation numbers, owner evidence curation (exclude or annotate an Evidence Item),
  and a durable long-running chat with versioned Conversation Memory. See
  [Research a question](docs/user-guide.md#research-a-question).
- An always-on durable Research worker for Research Runs and Research Chat replies. See
  [`deploy/README.md`](deploy/README.md#research-worker-adr-0009).
- Global English-default localization for the web interface, email delivery, alerts, and
  language-aware AI output, with Simplified Chinese, Japanese, Korean, Spanish, French, and
  German support.
- Owner-triggered, asynchronous full-article AI briefs with cached results, regeneration,
  partial-content warnings, and a dedicated responsive reading page.
- A safe, resumable, and reversible migration for rewriting existing unread summaries.
- An admin model selector that applies one validated Copilot model to future rankings, comment
  summaries, summary rewrites, and article briefs.
- Per-channel highlight-count and minimum-score settings for Channel pages and daily digests.
- Home-dashboard read/unread views, counts, and owner voting controls.
- All About Auctions upcoming-lot monitoring with public bids, descriptions, estimates,
  seller-stated RRP, fee-inclusive cost, stable-lot refreshes, and Tracker AI ranking.
- Immutable Editorial, Monitor, and Tracker Channel workflows with definition-driven ranking,
  persistence, lifecycle, events, navigation, and notification behavior.
- Dedicated Channel panels: Editorial reading and feedback, Monitor catalogue search and changes,
  and Tracker watched, ending-soon, upcoming, and permanent-history sections.
- Strict Source compatibility declarations enforced by admin forms, persistence, collection, and
  startup contract tests.
- Generic Tracker Watches and follow-up reminders, with All About Auctions as the first adapter and
  compatibility-preserving auction reminder storage and deployment names.
- Owner administration safety and operations: typed destructive confirmations, seven-day
  transactional recovery, recent activity, bounded non-persisting Source test samples, Channel
  onboarding, delivery history, and cross-worker System Health.
- Email Group calendar schedules with local weekdays, times, and IANA timezones, plus non-mutating
  email previews and test sends.
- Research Source management, enforced work-budget previews, run/snapshot/synthesis history,
  synthesis-only retries, unread completion state, and localized completion emails.
- International designer-clearance monitoring for THE OUTNET, Mytheresa, END., and YOOX, with
  verified markdown thresholds and listing-currency preservation.
- Every Channel in a digest email carries a status line (sources OK, listings tracked, or no
  changes), and a capped Channel says how many more events are waiting.
- A nightly host-side SQLite backup that restores each archive into a scratch file to verify it
  before keeping it, and `deploy/release.sh` for SHA-tagged releases from clean commits.
- CI that runs Ruff and the test suite on every push.
- A "Refresh list" button next to the LLM model picker in Global settings. The picker now lists
  the models your Copilot account offers instead of a built-in list that went stale. The web
  container still has no Copilot token, so the Research worker fetches the list within a few
  seconds and again every day. The row says when the list was fetched, and flags a refresh that
  failed or never started, or a saved model that is no longer offered.
- Reading pages carry Open Graph and Twitter card tags with a social card image, so a shared
  link previews with its title and description; a deep-read brief previews with its bottom line.
  The pages still send `noindex, nofollow`. An Apple touch icon joins a favicon redrawn in the new
  mark.

- Any RSS or Atom feed can be an Editorial source. Paste the feed or just the site's address:
  Beehive finds the site's feed and names the source after it. Feed URLs are fetched with the
  same DNS pinning and redirect checks as deep reads.
- **Who can read** in Global settings: keep the reading pages open to anyone with the link, or make
  them private so that only the signed-in Owner can read them. Signed-out visitors go to the sign-in
  page and come back to the page they asked for. See
  [ADR-0011](docs/adr/0011-optional-private-reading.md).

### Changed

- Background jobs run in one always-on jobs worker instead of timers, marker files and oneshot
  containers: scheduled fetching, **Fetch now**, deep reads, digests and reminders. **Fetch now**
  works on a local install, the admin's **System** chapter shows whether the worker is running and
  what is waiting, and there are three units to install instead of sixteen. A Channel's failure
  alert email is now really sent, at most once every six hours. See
  [ADR-0012](docs/adr/0012-one-jobs-worker.md) and the upgrade steps in
  [`deploy/README.md`](deploy/README.md#move-to-the-jobs-worker-adr-0012).
- The admin area is redesigned as a dark "datasheet" with its own shell and stylesheet
  (`admin.css`, self-hosted Archivo). The five tabs became four numbered chapters (Channels, Email
  groups, Global settings, System) in a contents rail that counts what needs attention. Forms are
  parameter tables with the setting and its note side by side, lists are banded tables whose long
  names, URLs and errors wrap instead of overflowing, and failing or paused Sources are listed
  first on the Channels chapter. Fields for URLs, queries, addresses and subjects wrap and grow, so
  the whole value stays visible, and table cells never split a count, time or address. Unsaved
  changes are marked and counted in a sticky save bar, including after a rejected save.
  Removing a Source now asks for its name or shop domain instead of its connector type, and the
  activity log names Sources by their current label. The Chinese UI says 频道 instead of Channel.
  Old `?tab=ai` and `?tab=delivery` links still work.
- The reading pages (home, channel pages, archive, search and deep-read briefs) and the Owner's
  workspace (Research, Watch List) share the admin's dark datasheet design, and the old
  `beehive.css` stylesheet is gone. The home page is a desk with a section per Channel. Every
  page numbers its sections in the contents rail and states each one's count or state in its
  heading. The sheet has no width cap: on wide screens sections sit side by side and long tables
  set their rows in newspaper columns. The archive groups and filters by Auckland day, search
  sorts each page of hits into a section per Channel, and `/channels/` redirects home.
- Email Groups now consume actionable Channel events and may render mixed Editorial, Monitor, and
  Tracker sections without sending empty scheduled messages.
- The digest timer now evaluates Email Group schedules and Research completion notifications every
  15 minutes. Individual groups remain governed by their own interval or calendar schedule.
- The fetch timer now runs every 15 minutes as well. Individual Channels remain governed by their
  own interval or daily calendar schedule. A Source whose last automatic attempt failed waits an
  hour before its first retry, and the wait doubles with each further failure up to 24 hours.
- New ranking summaries state the strongest evidence-supported conclusion in one sentence instead
  of only describing the article topic.
- Failed article briefs now identify the failing stage, explain whether the LLM ran, and provide a
  safe next step without exposing internal error details.
- Reddit deep reads fall back to stored self-post text when Reddit blocks automated page access,
  with an explicit warning about missing comments, edits, links, and truncated long posts.
- Featured now ranks only content published during a configurable Auckland calendar-day window,
  defaulting to three days and falling back to fetch time when publication time is unavailable.
- The SQLite schema is versioned with `PRAGMA user_version`. `init_schema` only migrates a database
  that is behind and refuses one that a newer, incompatible release migrated; `--mode migrate` is
  the explicit release step.
- Digest events expire: Editorial news after 3 days, Monitor discoveries after 7 days, and price
  drops and restocks after 3 days, but never before the group's next scheduled email, so a weekly
  group still gets the whole week. Listings from a Source whose data is stale are held back from
  email until it recovers. A new catalogue Source's first snapshot is a baseline and sends no
  discovery emails.
- Every fetch outcome is logged to the journal, and digest warnings name the Source the way the
  admin UI does, say how long it has been failing, and flag a Source that silently stopped
  fetching.
- SQLite runs with `synchronous=NORMAL`, and each fetch is ingested in a single transaction.
- Container units log each line once and keep Podman lifecycle events out of the journal. The
  research-reconcile and deep-read backstop timers run hourly and every 30 minutes.

### Fixed

- The brand displays the numeric application version instead of a commit hash. Commit IDs
  remain diagnostic metadata, and the redundant Reading label is removed.
- Certificates that chain to the compromised eMudhra intermediate CAs are rejected. The shared
  image upgrades `ca-certificates` when it is built, and the Civic image pins patched Python and
  uv images and certifi 2026.10.19.
- Civic notices are now emailed (one combined message at most every six hours) instead of
  piling up unsent. Notices older than 48 hours are suppressed.
- A Civic Candidate backed only by Stuff or The Post is rejected at once instead of being held
  and retried daily for 14 days.
- A party site that refuses detail pages no longer uses up a Civic Run's hydration budget.
- The Spinoff source reads its politics article sitemap; its RSS feed was removed.
- Editorial digests permanently suppress repeated stories with the same publisher and exact
  headline, even when Google News republishes them under a new GUID on a later day.
- Digest subjects and channel delivery dates now use each Email Group's configured timezone
  instead of the UTC date.
- Failed manual fetches no longer delay the next automatic Channel slot, and paused Sources no
  longer distort the next-fetch preview.
- Shopify collections with more than 1,000 products are fetched completely instead of retiring
  every listing past the fourth page, and Land & Sea no longer truncates listings past 100 pages.
- A Monitor snapshot that would retire most listings at once is held until a second snapshot in a
  row confirms it, so a briefly empty storefront response no longer retires the catalogue.
- A discount change on a clearance listing reranks it again.
- A clearance Channel's Sources line names each retailer instead of repeating
  `international_clearance`.
- An official feed description ending in an unfinished `&` sequence, such as "R&D", no longer
  loses its last paragraph.
- The sign-in return path refuses `/\host` and paths with tabs or newlines, which browsers turn
  into a link to another site.
- Article fetches for research (and now deep reads and feeds) keep their 20-second limit when
  they run on a worker thread. A server that trickled its response one byte at a time could hold
  them far longer.

## 0.1.0 - 2026-07-14

Initial public alpha release.

### Added

- Self-hosted, single-user AI news aggregator with per-channel interests, fetch
  intervals, and email recipients.
- AI ranking, concise summaries, and optional comment summaries.
- Read/unread state and owner-only feedback controls.
- Scheduled and manual collection cycles.
- Daily email digests via Azure Communication Services.
- SQLite storage and rootless Podman Quadlet deployment units.
- Source adapters for six supported source families:
  - Reddit public subreddit Atom feeds
  - Google News search-query RSS feeds
  - Hacker News official Firebase API
  - Reserve Bank of New Zealand official RSS
  - New Zealand Government official RSS
  - Federal Reserve official RSS

[Unreleased]: https://github.com/sinmentis/beehive/compare/v1.0.3...HEAD
[1.0.3]: https://github.com/sinmentis/beehive/releases/tag/v1.0.3
[1.0.2]: https://github.com/sinmentis/beehive/releases/tag/v1.0.2
[1.0.1]: https://github.com/sinmentis/beehive/releases/tag/v1.0.1
[1.0.0]: https://github.com/sinmentis/beehive/releases/tag/v1.0.0