Skip to content

Chore/canonical unified proof gate - #57

Open
outlaw-dame wants to merge 130 commits into
activitypods:masterfrom
AmoreTechLllc:chore/canonical-unified-proof-gate
Open

outlaw-dame wants to merge 130 commits into
activitypods:masterfrom
AmoreTechLllc:chore/canonical-unified-proof-gate

Conversation

@outlaw-dame

Copy link
Copy Markdown

No description provided.

outlaw-dame and others added 30 commits December 18, 2024 15:16
Update local branch to master
…ell as now displaying and associating with a link to `/tags/<tag>`
rename public to isPublic so it does not conflict with some programming laguages
turns out not to be needed
honjes and others added 30 commits January 27, 2025 09:09
add basic Frontend and Api to interact with the podprovider
also update the readme with instructions
make it possible to build the app with ionic
…chitecture

Connects the memory UI to the mastopod Phase 5.5 AT firehose ingress pipeline.

API additions (api/src/):
  db/atBridgeSchema.ts          - at_identities, at_posts, at_firehose_cursors tables + unified_feed_view
  db/migrations/0001_at_bridge.sql - SQL migration for all AT bridge tables and views
  routes/atBridge.ts            - GET /at/feed, /at/posts, /at/identities, /at/status, POST /at/subscribe
  routes/atBridgeWebhook.ts     - POST /at/webhook/ingress (receives trusted at.ingress.v1 events)
  services/AtBridgeIngestionService.ts - Writes ingress events to DB (idempotent upserts)
  index.ts                      - Registers atBridgePlugin + atBridgeWebhookPlugin

Frontend additions (frontend/src/):
  stores/atBridgeStore.ts       - Pinia store for unified feed, AT posts, firehose status
  components/UnifiedFeedItem.vue - Renders AT + ActivityPods posts with source badges
  components/UnifiedFeedList.vue - Unified feed with source filter tabs + infinite scroll

Integration architecture:
  mastopod at.ingress.v1 → AtIngressWebhookForwarder → POST /at/webhook/ingress
  → AtBridgeIngestionService → at_posts / at_identities tables
  → GET /at/feed → UnifiedFeedList (memory UI)

Security:
  - FIREHOSE_BRIDGE_SECRET env var for webhook authentication (constant-time compare)
  - DID and AT URI validation before storage
  - Idempotent upserts prevent duplicate content
AT Protocol Bridge: Phase 5.5 integration with mastopod-federation-ar…
docker-compose.local.yml:
  - Complete local stack: PostgreSQL + Memory API + Vite frontend + Mastopod sidecar
  - All services wired together via Docker internal network
  - Shared FIREHOSE_BRIDGE_SECRET for HMAC-authenticated webhook
  - Health checks on API before Mastopod starts forwarding events

api/src/index.ts:
  - Added GET /health endpoint for Docker healthcheck and Mastopod wait-for-api

api/drizzle.config.ts:
  - Include atBridgeSchema.ts in schema array so drizzle:push creates AT tables

frontend/src/views/HomeView.vue:
  - Added tab navigation: 'Federated Feed' (default) and 'My Posts'
  - Federated Feed tab renders UnifiedFeedList (AT Protocol + ActivityPods)
  - My Posts tab retains existing CreatePostForm + PostList
Phase 5.5: Full local stack setup + HomeView federated feed tab
…atus, unified feed, OIDC auth, new specs and utils
…, reply root reconciliation

Sprint 1:
- Add i18n keys for popular feed heading/subtitle
- Carousel navigation via navigateToPost with URI filter
- DB indexes 0007 (engagement), 0008 (ap_remote quoted_post_uri)
- AP quote_counts CTE: fan-out-safe UNION with outer GROUP BY
- Engagement weight constants in feedMetrics utils

Sprint 2 (test coverage + migrations + self-healing):
- extractQuotedPostUri: 18 unit tests (vendor precedence, scheme security, length boundary)
- UnifiedFeedList carousel: navigateToPost and no-URI exclusion tests
- atBridge UNION fan-out integration test (5th test, mode=chronological)
- Migration 0009: partial index on ap_remote_posts(reply_parent_uri)
- reconcileApRemoteReplyRoots(): chain-walk (max depth 50, cycle-safe), idempotent batch UPDATE
- startApRemoteReconciliationService(): 5-min background sweep, wired in index.ts

All tests pass: 61 API / 27 frontend. Typecheck clean.
useKeywordRules composable: typed CRUD wrappers for the sidecar
GET/POST/PUT/DELETE /internal/admin/spam/keyword-rules endpoints with
pending/error reactive state and consistent error message extraction.

DashboardFederationView: keyword rules panel slides in when the
Keyword Reject MRF module card is toggled on — shows the live rule
list (semantic/literal badge, threshold, whole-word/case flags) and
an add/edit form with a semantic toggle, threshold slider, and literal
options. Rules refresh automatically after every mutation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- switch moderation reads to /api/dashboard/apps/moderation/{blocks,mutes,filters}
- switch block/mute writes to delegated app moderation endpoints
- keep existing retry/backoff behavior and auth headers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants