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>
30 lines
512 B
Plaintext
30 lines
512 B
Plaintext
__pycache__/
|
|
.coverage
|
|
.env
|
|
*.env
|
|
.env.local
|
|
.env.*.local
|
|
|
|
# Dynaconf (ADR-024)
|
|
.secrets.toml
|
|
settings.toml
|
|
settings.local.toml
|
|
|
|
# Claude Code runtime artifacts (the rest of .claude/ is tracked)
|
|
.claude/scheduled_tasks.lock
|
|
|
|
# Git
|
|
worktrees/
|
|
|
|
docker-compose.override.yml
|
|
|
|
# Generated by pytest used to login users
|
|
.nextcloud_oauth_*.json
|
|
.playwright-mcp/
|
|
|
|
# RAG Evaluation
|
|
tests/rag_evaluation/fixtures/
|
|
|
|
# Pact contract tests — generated pacts are published to the broker, not committed
|
|
tests/contract/pacts/
|