Commit Graph
378 Commits
Author SHA1 Message Date
github-actions[bot] a818b49b3f bump: version 0.117.0 → 0.117.1 2026-06-14 15:44:18 +00:00
github-actions[bot] 4cf31b1472 bump: version 0.116.0 → 0.117.0 2026-06-13 15:53:28 +00:00
github-actions[bot] 6db48830af bump: version 0.115.1 → 0.116.0 2026-06-13 12:42:44 +00:00
github-actions[bot] b356eb3b49 bump: version 0.115.0 → 0.115.1 2026-06-13 10:03:02 +00:00
github-actions[bot] c79389a224 bump: version 0.114.0 → 0.115.0 2026-06-12 14:00:08 +00:00
github-actions[bot] 4688f2f95a bump: version 0.113.1 → 0.114.0 2026-06-11 13:46:59 +00:00
github-actions[bot] 45ebe83045 bump: version 0.113.0 → 0.113.1 2026-06-11 09:02:11 +00:00
github-actions[bot] e7cb697146 bump: version 0.112.0 → 0.113.0 2026-06-11 08:41:23 +00:00
github-actions[bot] 4767312ad7 bump: version 0.111.0 → 0.112.0 2026-06-11 08:39:11 +00:00
github-actions[bot] 457c115ef4 bump: version 0.110.2 → 0.111.0 2026-06-10 22:24:38 +00:00
github-actions[bot] ec075b4ed9 bump: version 0.110.1 → 0.110.2 2026-06-10 20:27:02 +00:00
Chris CoutinhoandGitHub a336b8eb0d Merge pull request #883 from cbcoutinho/worktree-tender-stargazing-sundae
test: Pact consumer contract for astrolabe credentials status (ADR-029)
2026-06-10 22:26:39 +02:00
github-actions[bot] ee21dc1ed0 bump: version 0.110.0 → 0.110.1 2026-06-10 20:24:37 +00:00
Chris CoutinhoandClaude Opus 4.8 d33832aba9 test: add Pact consumer contract for astrolabe credentials status (ADR-029)
Introduce consumer-driven contract testing between nextcloud-mcp-server and the
astrolabe Nextcloud app, published to the homelab Pact Broker and verified in CI.

- pact-python dev dep + `contract` pytest marker
- tests/contract/test_astrolabe_credentials_consumer.py: consumer pact for the
  background-sync *status* call (provisioned -> has_background_access:true,
  sync_type:"app_password", integer provisioned_at; unprovisioned -> false/null)
- tests/contract/test_mcp_provider_verification.py: env-gated Verifier harness
  for this server's /api/v1/* provider role (provider-state handlers stubbed
  pending astrolabe's published pacts)
- .github/workflows/pact.yml: join tailnet -> publish pacts -> provider verify
  -> can-i-deploy; broker steps skip when PACT_BROKER is unset (forks)
- docs/ADR-029-pact-contract-testing.md

Fix astrolabe_client.get_background_sync_status: it previously read a
non-existent `app_password` field (always reporting no-access). Rewrite it to
read the real status contract (has_background_access / sync_type /
provisioned_at) and drop the unsatisfiable get_user_app_password.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 20:22:07 +02:00
github-actions[bot] 2d691225b2 bump: version 0.109.1 → 0.110.0 2026-06-08 20:49:56 +00:00
github-actions[bot] 20ce2a1845 bump: version 0.109.0 → 0.109.1 2026-06-08 14:23:09 +00:00
github-actions[bot] 24fd85949e bump: version 0.108.3 → 0.109.0 2026-06-08 13:19:00 +00:00
github-actions[bot] 96c0491f14 bump: version 0.108.2 → 0.108.3 2026-06-08 00:24:45 +00:00
github-actions[bot] fe17994c4d bump: version 0.108.1 → 0.108.2 2026-06-07 19:15:06 +00:00
github-actions[bot] 90d2192347 bump: version 0.108.0 → 0.108.1 2026-06-07 16:55:16 +00:00
github-actions[bot] 792c536802 bump: version 0.107.0 → 0.108.0 2026-06-07 15:22:22 +00:00
github-actions[bot] 42505f8f87 bump: version 0.106.0 → 0.107.0 2026-06-06 12:25:28 +00:00
github-actions[bot] 74b864354f bump: version 0.105.0 → 0.106.0 2026-06-06 07:33:10 +00:00
github-actions[bot] 78f3f284a6 bump: version 0.104.1 → 0.105.0 2026-06-05 03:22:24 +00:00
github-actions[bot] d421bf6953 bump: version 0.104.0 → 0.104.1 2026-06-05 01:28:03 +00:00
github-actions[bot] 3e681ef2ee bump: version 0.103.0 → 0.104.0 2026-06-05 00:47:32 +00:00
Chris CoutinhoandGitHub c67b998784 Merge pull request #858 from cbcoutinho/feat/tiered-doc-processor-b2-tier1
feat: tiered PDF processor — pypdfium2 fast path (deprecate pymupdf4llm)
2026-06-05 02:43:11 +02:00
github-actions[bot] ccff5389b0 bump: version 0.102.0 → 0.103.0 2026-06-04 23:43:48 +00:00
Chris CoutinhoandClaude Opus 4.8 c48a797896 feat: tiered PDF processor with pypdfium2 fast path (deprecate pymupdf4llm)
Replaces single-engine pymupdf4llm extraction with a tiered pipeline (Deck #205,
follows the tier-0 classifier #855). pypdfium2 becomes the default and only
hot-path PDF extractor; pymupdf4llm is deprecated to a rollback toggle.

Why: pymupdf4llm's O(n^2) find_tables drove the OOM (#852) and the form-PDF
parse timeouts (#856), carries AGPL/commercial licensing liability, and -- per
the benchmarks -- recovers near-zero usable tables on the real corpus. pypdfium2
(Apache/BSD) extracts the same text far faster (Student 1a.pdf: 120s timeout ->
0.2s) with no table-detection bomb.

- document_processors/pypdfium2_fast.py: tier-1 "fast" processor emitting text +
  exact page_boundaries (the pdf_highlighter contract). pymupdf processor is now
  tier "structured" (the rollback engine), registered but not default.
- registry: tiered routing in ProcessorRegistry. tier-1 fast extracts, then
  classification is DERIVED from that text (classifier.classify_from_text -- no
  PDF re-open), records the classification metrics, and escalates scanned /
  no-text-layer docs to the "ocr" tier when document_ocr_enabled (default off;
  no provider yet, so fast is terminal). Wires record_document_escalation + the
  real "escalated" span attribute (was hardcoded False).
- Removes the separate _shadow_classify pass from vector/processor.py -- it
  re-opened every PDF and re-extracted text (~0.5-1.3s/doc of pure duplicated
  CPU that lowered throughput); classification now rides the tier-1 extraction.
- Settings: document_tier1_engine ("pypdfium2" default | "pymupdf" rollback,
  enum-validated), document_ocr_enabled (default false).

Tests: pypdfium2 extractor, registry tiering (fast routing, rollback, classify
recording, OCR escalation on/off), classify_from_text. Full unit suite green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 01:32:14 +02:00
github-actions[bot] 967298ddbe bump: version 0.101.4 → 0.102.0 2026-06-04 22:47:40 +00:00
github-actions[bot] dd335275ac bump: version 0.101.3 → 0.101.4 2026-06-04 22:09:33 +00:00
github-actions[bot] dc01e55b60 bump: version 0.101.2 → 0.101.3 2026-06-04 22:06:48 +00:00
github-actions[bot] eb5f59f085 bump: version 0.101.1 → 0.101.2 2026-06-04 20:43:01 +00:00
github-actions[bot] 09e84783e5 bump: version 0.101.0 → 0.101.1 2026-06-04 20:32:07 +00:00
github-actions[bot] af4a264aa3 bump: version 0.100.0 → 0.101.0 2026-06-04 19:27:41 +00:00
github-actions[bot] b84ac24d10 bump: version 0.99.0 → 0.100.0 2026-06-04 19:22:47 +00:00
github-actions[bot] 55ea8dd358 bump: version 0.98.1 → 0.99.0 2026-06-04 16:00:02 +00:00
github-actions[bot] 0919513f21 bump: version 0.98.0 → 0.98.1 2026-06-04 00:01:09 +00:00
github-actions[bot] 08318c8ea6 bump: version 0.97.0 → 0.98.0 2026-06-03 21:44:27 +00:00
Chris CoutinhoandGitHub 4e983e98f6 Merge pull request #836 from cbcoutinho/feat/183-procrastinate-ingest-queue
feat: replace NATS ingest with procrastinate Postgres queue (#183)
2026-06-03 23:44:06 +02:00
github-actions[bot] 1b37089beb bump: version 0.96.0 → 0.97.0 2026-06-03 12:12:24 +00:00
Chris CoutinhoandClaude Opus 4.8 63e073c224 fix(ci): install procrastinate in the dev group so ty + unit tests resolve it
CI runs `uv run --frozen ty check -- nextcloud_mcp_server` and `uv run pytest -m
unit`, which install the default + dev groups but not the `[postgres]` optional
extra. vector/queue/procrastinate.py imports procrastinate at module scope (the
task registration needs App/Blueprint), so without it installed ty fails on
unresolved imports and the procrastinate unit tests fail to collect.

Add procrastinate + psycopg to the dev group (kept in the [postgres] extra for
production opt-in) so dev/CI always type-check and test against them, while
SQLite/personal installs stay free of the Postgres deps. Matches the repo's
optional-DB-driver philosophy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 04:25:30 +02:00
Chris CoutinhoandClaude Opus 4.8 21b7922bac feat: replace NATS ingest with procrastinate Postgres queue (#183)
Re-architect document ingest from the shared NATS-glued document-processor to a
per-tenant, in-process model owned by nextcloud-mcp-server (Deck #183). The MCP
server now owns both sides of ingest:

- Producer (api role): the scanner defers one job per changed document into the
  app's Postgres via procrastinate (queueing_lock dedup; no execution lock, so a
  crashed worker can't deadlock a doc — Qdrant upserts are idempotent).
- Consumer (worker role): `nextcloud-mcp-server worker` drains the queue and runs
  the existing process_document pipeline; a periodic task reclaims jobs orphaned
  in `doing` by a crash.

INGEST_QUEUE selects the transport (auto: postgres when DATABASE_URL is Postgres,
else the in-process anyio queue for SQLite/dev). procrastinate manages its own
tables (applied on a fresh DB at startup and by `db upgrade`). The vector-sync
status surface reads job counts from Postgres in postgres mode. procrastinate +
psycopg3 ship in the [postgres] extra; the app's own engine still uses asyncpg
(driver unification is a follow-up handled in the rendered Helm chart).

NATS JetStream, the Postgres-queue stub, the bus status subscriber, and nats-py
are removed.

BREAKING CHANGE: the external-NATS-ingest env vars are removed
(INGEST_MODE, STATUS_BACKEND, INGEST_BUS_URL, INGEST_BUS_NUM_REPLICAS,
FACT_EVENT_EMITTER). Use INGEST_QUEUE (memory|postgres) and the `worker`
command instead. TENANT_ID is retained (no longer NATS-subject-charset-validated).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 04:11:11 +02:00
github-actions[bot] db04ae3bcc bump: version 0.95.0 → 0.96.0 2026-06-03 00:09:08 +00:00
github-actions[bot] e39574e5d6 bump: version 0.94.1 → 0.95.0 2026-06-03 00:04:46 +00:00
github-actions[bot] 4c024b7f97 bump: version 0.94.0 → 0.94.1 2026-06-03 00:00:55 +00:00
github-actions[bot] f8afde0751 bump: version 0.93.0 → 0.94.0 2026-06-02 23:46:05 +00:00
github-actions[bot] 56ae9aeb0e bump: version 0.92.1 → 0.93.0 2026-06-01 15:57:21 +00:00
github-actions[bot] 4f1a42f171 bump: version 0.92.0 → 0.92.1 2026-06-01 15:56:17 +00:00
github-actions[bot] 2d191b4055 bump: version 0.91.3 → 0.92.0 2026-06-01 14:10:34 +00:00