Commit Graph
368 Commits
Author SHA1 Message Date
renovate-bot-cbcoutinho[bot]andGitHub 90f7d1a72b chore(deps): update anthropics/claude-code-action action to v1.0.152 2026-06-19 04:30:18 +00:00
Chris CoutinhoandGitHub 8ac20a0bcd Merge pull request #899 from cbcoutinho/renovate/nextcloud-33-33.0.5
chore(deps): update nextcloud-33:33.0.5 docker digest to fe5166b
2026-06-18 18:01:38 +02:00
Chris CoutinhoandGitHub f0a4df1f34 Merge pull request #898 from cbcoutinho/renovate/nextcloud-32-32.0.11
chore(deps): update nextcloud-32:32.0.11 docker digest to adf183b
2026-06-18 18:01:26 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 2107af7ab1 chore(deps): update anthropics/claude-code-action action to v1.0.151 2026-06-18 04:27:07 +00:00
renovate-bot-cbcoutinho[bot]andGitHub fdf6c15c64 chore(deps): update nextcloud-33:33.0.5 docker digest to fe5166b 2026-06-18 04:27:00 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 5a583868a9 chore(deps): update nextcloud-32:32.0.11 docker digest to adf183b 2026-06-18 04:26:54 +00:00
Chris CoutinhoandClaude Opus 4.8 ec15cad234 ci: drop deprecated NC31 from matrix, enable NC33, stage NC34
Nextcloud 31 reached deprecation (02/2026), so remove it from the integration
matrix. Enable NC33 (previously disabled pending upstream app support) and add
NC34 as a commented, ready-to-enable entry.

- test.yml: nextcloud_version is now [32, 33]; 34 commented. Image pins updated
  to match (32.0.11, 33.0.5 active; 34.0.0 commented). The Renovate customManager
  regex already tracks commented entries, so 34 is digest-managed once present.
- renovate.json: drop the nextcloud-31 pin rule, add nextcloud-34 (/^34\./).

docker-compose.yml already defaults to 32.0.11 (Renovate-pinned to 32.x), so no
change there — the NC31 seen in local runs comes from a shell-exported
NEXTCLOUD_IMAGE override, not the compose default.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 01:23:52 +02:00
renovate-bot-cbcoutinho[bot]andGitHub f5947d9895 chore(deps): update anthropics/claude-code-action action to v1.0.149 2026-06-16 04:23:33 +00:00
Chris CoutinhoandClaude Opus 4.8 54a3589c27 ci(pact): scope record-deployment token at job level
Move 'permissions: contents: read' from workflow level to the record-deployment
job (GitHub Actions least-privilege, rule S8264), keeping this workflow uniform
with the astrolabe copy. Single-job workflow, but consistent and future-proof.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 18:37:10 +02:00
Chris CoutinhoandClaude Opus 4.8 23789107ab ci(pact): use $GITHUB_SHA env var, add concurrency + timeout
Review round 1 follow-ups:
- Reference the built-in $GITHUB_SHA env var in run scripts instead of
  interpolating ${{ github.sha }}, removing the GitHub Actions script-injection
  surface (SonarCloud security rating on new code).
- Add a concurrency group (cancel-in-progress: false) to
  pact-record-deployment.yml so back-to-back tag pushes don't race the recording.
- Add timeout-minutes: 5 to guard against a hung tailnet join.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 18:26:09 +02:00
Chris CoutinhoandClaude Opus 4.8 5a91b45f2a ci(pact): record production deployments + shadow can-i-deploy
Adds the missing record-deployment half of the Pact can-i-deploy loop and
stops can-i-deploy from failing every merge while the broker's production
environment is still empty.

- New pact-record-deployment.yml: on tag push, records a production
  deployment of nextcloud-mcp-server keyed by the tagged commit SHA, which
  matches the SHA pact.yml publishes consumer pacts / verification results
  with. Recording the tag string would not link to the verified pacts.
- pact.yml can-i-deploy: wrapped in shadow mode (runs for signal, emits a
  warning annotation on failure, always exits 0). can-i-deploy cannot pass
  until both nextcloud-mcp-server and astrolabe have recorded a production
  deployment, so gating now would block merges on a bootstrap gap.

Tracked on Deck card #325. Promotion to a hard gate is a follow-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 18:16:37 +02:00
Chris CoutinhoandGitHub fcbf6e1486 Merge pull request #886 from cbcoutinho/renovate/anthropics-claude-code-action-1.x
chore(deps): update anthropics/claude-code-action action to v1.0.143
2026-06-11 11:03:59 +02:00
Chris CoutinhoandGitHub bd15351b85 Merge pull request #888 from cbcoutinho/renovate/astral-sh-setup-uv-8.x
chore(deps): update astral-sh/setup-uv action to v8
2026-06-11 11:03:25 +02:00
renovate-bot-cbcoutinho[bot]andGitHub f10f6a70a0 chore(deps): update tailscale/github-action action to v4 2026-06-11 00:27:32 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 4127cbf013 chore(deps): update astral-sh/setup-uv action to v8 2026-06-11 00:27:19 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 7fb3b3ecff chore(deps): update anthropics/claude-code-action action to v1.0.143 2026-06-11 00:26:57 +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
Chris CoutinhoandClaude Opus 4.8 c474f62190 fix(ci): gate can-i-deploy broker steps individually, not at job level
The `env` context is not available in a job-level `if:` (only `github`/`needs`/
`vars`/`inputs` are), so `if: ... && env.PACT_BROKER != ''` on the job was an
invalid-context error that failed the whole workflow to parse. Move the broker
guard onto each step (matching the consumer/provider jobs) and keep the job
`if` on the master-branch check only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 21:00:10 +02:00
Chris CoutinhoandClaude Opus 4.8 18baa501c9 test: address round-2 claude-review on #883
- pact.yml: guard `can-i-deploy` job on `env.PACT_BROKER != ''` so a secret
  rotation/fork can't break every master merge (the CLI errors on empty URL)
- pact.yml: pin install.sh to the v2.6.1 commit SHA (immune to tag force-push)
- astrolabe_client.py: `_token_cache` Optional[dict] -> `dict | None` and drop
  the now-unused `Optional` import (CLAUDE.md union syntax)
- add tests/unit/test_astrolabe_client.py: mocked unit coverage for
  get_background_sync_status field mapping (200 provisioned / 200 not-provisioned
  / 404) — the layer that would have caught the original silent app_password bug
- consumer pact test: note the 404 branch is internal defensive handling (covered
  by the unit test), not a contract obligation

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 20:53:54 +02:00
Chris CoutinhoandClaude Opus 4.8 72592c3bca test: address claude-review on Pact consumer contract (#883)
- pact.yml: pin tailscale/github-action@v3 to commit SHA (3 jobs) and
  pact-ruby-standalone install.sh to v2.6.1 (2 jobs) — supply-chain hardening
- pact.yml: drop redundant `-o "addopts=..."` override (pyproject.toml already
  sets the same addopts; the override would silently mask future additions)
- test_mcp_provider_verification.py: remove dead `pytestmark` shadowed by the
  list assignment; gate the module skip on PACT_USERNAME/PACT_PASSWORD too so a
  broker-set-but-creds-missing CI skips cleanly instead of raising KeyError
- conftest.py: drop the unused `pact_dir` fixture

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 20:44:53 +02: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
Chris CoutinhoandGitHub 86ed15f466 Merge pull request #668 from cbcoutinho/renovate/astral-sh-setup-uv-8.x
chore(deps): update astral-sh/setup-uv action to v8
2026-06-10 08:57:39 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 3fa1e2a4f4 chore(deps): update anthropics/claude-code-action action to v1.0.142 2026-06-09 17:54:40 +00:00
Chris CoutinhoandGitHub 6454c6cc77 Merge pull request #605 from cbcoutinho/renovate/major-github-artifact-actions
chore(deps): update github artifact actions (major)
2026-06-09 08:11:01 +02:00
Chris CoutinhoandGitHub d903f233d2 Merge pull request #869 from cbcoutinho/renovate/nextcloud-33-33.0.5
chore(deps): update nextcloud-33:33.0.5 docker digest to 56bdc45
2026-06-09 06:56:33 +02:00
Chris CoutinhoandGitHub 83842deceb Merge pull request #880 from cbcoutinho/renovate/anthropics-claude-code-action-1.x
chore(deps): update anthropics/claude-code-action action to v1.0.141
2026-06-09 06:56:21 +02:00
renovate-bot-cbcoutinho[bot]andGitHub e854840c77 chore(deps): update github artifact actions 2026-06-09 04:21:19 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 3aba38f1ef chore(deps): update astral-sh/setup-uv action to v8 2026-06-09 04:21:05 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 219ef89b93 chore(deps): update shivammathur/setup-php action to v2.37.2 2026-06-09 04:20:51 +00:00
renovate-bot-cbcoutinho[bot]andGitHub b847106541 chore(deps): update anthropics/claude-code-action action to v1.0.141 2026-06-09 04:20:44 +00:00
Chris CoutinhoandClaude Opus 4.8 62274069de refactor(documents): fully decouple document stack from server startup; Windows-safe tests
Addresses round-1 review on #878:

- Move the eager `document_processors` imports out of the API startup graph:
  `app.py` (get_registry now imported inside initialize_document_processors,
  after the disabled early-return) and `vector/processor.py` (get_registry now
  imported at its single use site). Importing `app` + `cli` no longer loads
  `document_processors` / `_isolation` at all -- the #877 stack is fully out of
  startup (pymupdf still loads via search/pdf_highlighter, a Windows-compatible
  and separately-tracked concern).
- Make `tests/unit/test_pdf_parse_isolation.py` importable on Windows: guard the
  top-level `import resource` with try/except and skip the three rlimit
  computation tests via a `requires_resource` marker when the module is absent.
  The Windows no-op / import-guard tests don't use the real module and still run.
- Fix the `# pragma: no cover` comment on the win32 branch to be accurate.
- Add `enable-cache: true` to the package-smoke setup-uv step.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 15:11:18 +02:00
Chris CoutinhoandClaude Opus 4.8 fc8a4e4dfa fix(documents): guard Unix-only resource import for Windows (#877)
`document_processors/_isolation.py` did an unconditional module-level
`import resource`, a POSIX-only stdlib module absent on Windows. It was
pulled into the API startup path via
`server/webdav.py -> utils/document_parser -> document_processors`, so
the MCP server failed to start on Windows since 0.101.2 with
`ModuleNotFoundError: No module named 'resource'`.

- Guard the import behind `sys.platform`; bind `resource = None` on
  win32. `_apply_mem_limit()` degrades to a logged no-op when the module
  is unavailable (the RLIMIT_AS cap is a Linux-pod safety measure, not a
  correctness requirement).
- Make the document-parser import in `server/webdav.py` lazy so server
  startup never loads the ingest document stack
  (document_processors -> pymupdf -> _isolation) at all -- it is only
  needed when a file is actually read and parsed. This both fixes #877
  and decouples the API layer from ingest-only deps.
- Add unit regressions for the no-op path and the win32 import guard.
- Add a cross-platform `package-smoke` CI job (ubuntu + windows) that
  installs the package isolated and runs the CLI, exercising the
  cli -> server -> webdav import chain that crashed in #877.

Fixes #877

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 14:59:03 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 8598ddb345 chore(deps): update anthropics/claude-code-action action to v1.0.140 2026-06-07 04:14:24 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 8eaf46e7be chore(deps): update nextcloud-33:33.0.5 docker digest to 56bdc45 2026-06-07 04:14:18 +00:00
Chris CoutinhoandGitHub ad5d54ea99 Merge pull request #866 from cbcoutinho/renovate/nextcloud-33-33.0.5
chore(deps): update nextcloud-33:33.0.5 docker digest to 96f8b6a
2026-06-06 09:13:20 +02:00
renovate-bot-cbcoutinho[bot]andGitHub fe0ac9d2a9 chore(deps): update anthropics/claude-code-action action to v1.0.139 2026-06-06 04:23:28 +00:00
renovate-bot-cbcoutinho[bot]andGitHub faefd46b49 chore(deps): update nextcloud-33:33.0.5 docker digest to 96f8b6a 2026-06-06 04:23:20 +00:00
Chris CoutinhoandGitHub ba3cb575fe Merge pull request #859 from cbcoutinho/renovate/anthropics-claude-code-action-1.x
chore(deps): update anthropics/claude-code-action action to v1.0.136
2026-06-05 02:50:41 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 157b1bb9d3 chore(deps): update hoverkraft-tech/compose-action action to v3 2026-06-05 00:36:32 +00:00
renovate-bot-cbcoutinho[bot]andGitHub c6d36a8e64 chore(deps): update anthropics/claude-code-action action to v1.0.136 2026-06-05 00:35:47 +00:00
Chris CoutinhoandGitHub c3684f8558 Merge pull request #838 from cbcoutinho/renovate/actions-checkout-6.x
chore(deps): update actions/checkout action to v6.0.3
2026-06-05 01:55:07 +02:00
Chris CoutinhoandGitHub 1937de7e85 Merge pull request #839 from cbcoutinho/renovate/anthropics-claude-code-action-1.x
chore(deps): update anthropics/claude-code-action action to v1.0.135
2026-06-05 01:54:42 +02:00
Chris CoutinhoandGitHub ec9c6b01f8 Merge pull request #846 from cbcoutinho/renovate/nextcloud-32-32.x
chore(deps): update nextcloud-32 docker tag to v32.0.11
2026-06-05 01:54:11 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 085971f54a chore(deps): update nextcloud-33 docker tag to v33.0.5 2026-06-04 04:32:09 +00:00
renovate-bot-cbcoutinho[bot]andGitHub db0c7345a2 chore(deps): update nextcloud-32 docker tag to v32.0.11 2026-06-04 04:32:01 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 8d5d612b63 chore(deps): update anthropics/claude-code-action action to v1.0.135 2026-06-04 04:31:30 +00:00
renovate-bot-cbcoutinho[bot]andGitHub eed90bdb9b chore(deps): update actions/checkout action to v6.0.3 2026-06-03 04:20:33 +00:00
Chris CoutinhoandGitHub b91af923d2 Merge pull request #609 from cbcoutinho/renovate/actions-setup-node-6.x
chore(deps): update actions/setup-node action to v6
2026-06-03 02:30:36 +02:00
Chris CoutinhoandGitHub e34025593f Merge pull request #618 from cbcoutinho/renovate/docker-build-push-action-7.x
chore(deps): update docker/build-push-action action to v7
2026-06-03 02:30:28 +02:00
Chris CoutinhoandGitHub 9899d6525a Merge pull request #616 from cbcoutinho/renovate/docker-setup-buildx-action-4.x
chore(deps): update docker/setup-buildx-action action to v4
2026-06-03 02:30:21 +02:00