Skip to content

feat: multi-project support, contradiction detection, synthesis, open-source polish#3

Merged
adbarc92 merged 75 commits intomainfrom
feat/multiple-projects
Apr 14, 2026
Merged

feat: multi-project support, contradiction detection, synthesis, open-source polish#3
adbarc92 merged 75 commits intomainfrom
feat/multiple-projects

Conversation

@adbarc92
Copy link
Copy Markdown
Owner

Summary

This PR rolls up all work on feat/multiple-projects and polishes WorldForge for public open-source release.

Major features

  • Multi-project support — documents are scoped to projects; project selector in sidebar; per-project document/contradiction/synthesis views
  • Contradiction detection — scan a project's canon for contradictions between chunks, review them grouped by document pair, resolve or dismiss individually or in bulk
  • World synthesis — generate outlines and long-form synthesis from a project's canon with approval gates and retry support
  • Per-section logging and retry endpoint for stuck syntheses
  • Bulk upload script for loading existing folders of .md, .txt, .pdf files

Open-source polish pass

  • Frontend test suite (Vitest + React Testing Library + MSW) — 170 tests, 91% line coverage, covering API client, hooks, components, pages
  • Backend test expansion — 87 tests total; added route coverage for Projects API (5 routes), Documents API (4 routes), Settings PUT, Contradiction reopen/bulk, Synthesis retry
  • CI/CD pipelinesbackend.yml (UV + pytest matrix on 3.11/3.12), frontend.yml (lint/typecheck/test/build), docker.yml (GHCR publishing), ci.yml umbrella
  • Contributor infrastructureCONTRIBUTING.md, issue templates (bug report, feature request), PR template
  • Metadata cleanup — frontend package.json and backend pyproject.toml filled out with proper open-source fields; version bumped to 1.0.0
  • Documentation — committed docs/ARCHITECTURE.md, design specs for contradiction detection and world synthesis

Test plan

  • Backend tests pass (uv run pytest tests/ -v -m "not integration") — 87/87
  • Frontend tests pass with coverage (npm run test:coverage) — 170/170, coverage thresholds exceeded
  • Frontend typecheck clean (npm run typecheck)
  • Frontend lint clean (npm run lint)
  • Frontend production build succeeds (npm run build)
  • CI workflows pass on GitHub Actions (first run on this PR)

Merge strategy

Squash merge. After merge, tag v1.0.0 as the initial open-source release.

adbarc92 added 30 commits March 3, 2026 15:21
15-task TDD plan covering backend models, migrations, services,
API endpoints, and frontend project context/UI.
Switch from legacy Column API to Mapped/mapped_column, add String lengths
(36 for IDs, 500 for titles, 50 for status), use plain DateTime without
timezone, add updated_at column, and add index on project_id.
adbarc92 added 27 commits April 11, 2026 21:50
Add 39 new tests across 8 test files covering:
- SettingsPage: save settings, toggle key visibility, form editing
- ProjectsPage: create/delete projects, select project, dialog flow
- ContradictionsPage: tab switching, scan, collapse/expand, bulk actions
- SynthesisPage: all status states (completed, failed, generating, pending)
- OutlineEditor: move/remove sections, edit fields
- UploadDropzone: drag and drop interactions
- ContradictionCard: both-selection flow, deselect, dismissed state
- Sidebar: synthesis status icon states (spinner, check, error)
Exclude App.tsx (router glue), src/components/ui/** (shadcn/ui
auto-generated primitives), and src/index.css from coverage metrics.
These files contain no testable application logic.
- Refactor SettingsPage to derive form state from query data instead
  of syncing via useEffect (fixes react-hooks/set-state-in-effect)
- Refactor SynthesisPage to use state-based comparison for project
  change detection (fixes react-hooks/set-state-in-effect and refs)
- Add eslint ignores for coverage dir, test files, shadcn/ui
  components, and context files (react-refresh/only-export-components)
- Add coverage/ to .gitignore
@adbarc92 adbarc92 merged commit b6127ae into main Apr 14, 2026
8 checks passed
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.

1 participant