Files
exo/PROGRESS.md
Kyle Isom b64177baa8 Add Phase 2 artifact repository: types, blob store, gRPC service
Build the complete artifact pillar with five packages:
- artifacts: Artifact, Snapshot, Citation, Publisher types with Get/Store
  DB methods, tag/category management, metadata ops, YAML import
- blob: content-addressable store (SHA256, hierarchical dir layout)
- proto: protobuf definitions (common.proto, artifacts.proto) with buf
  linting and code generation
- server: gRPC ArtifactService implementation (create/get artifacts,
  store/retrieve blobs, manage tags/categories, search by tag)

All FK insertion ordering is correct (parent rows before children).
Full test coverage across artifacts, blob, and server packages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:56:34 -07:00

2.9 KiB

Progress

Tracks implementation progress against the phases in PROJECT_PLAN.md.

Phase 1: Foundation — COMPLETE

Deliverables:

  • Go module (go.mod) at git.wntrmute.dev/kyle/exo
  • core package: Header, Metadata, Value, ObjectType, NewUUID, MapFromList/ListFromMap
  • SQLite migration framework with embedded SQL files (db/migrations/)
  • Initial schema migration (001_initial.sql): 13 tables covering shared infrastructure, bibliographic, and artifact repository
  • Database access layer: Open (with WAL, foreign keys, busy timeout), StartTX/EndTX, ToDBTime/FromDBTime
  • config package: Config struct with paths for database, blob store, Minio endpoint, gRPC listen address
  • .golangci.yaml — strict linting (errcheck, govet, gosec, staticcheck, revive, errorlint)
  • Makefile — vet, lint, test, build targets
  • Full test coverage for all packages (core, db, config)

Files created:

  • go.mod, go.sum
  • core/core.go, core/core_test.go
  • db/db.go, db/db_test.go, db/migrations/001_initial.sql
  • config/config.go, config/config_test.go
  • .golangci.yaml, Makefile

Phase 2: Artifact Repository — COMPLETE

Deliverables:

  • artifacts package: Artifact, Snapshot, BlobRef, Citation, Publisher types with Get/Store methods
  • MIME type alias for clarity
  • Tag and category management: CreateTag/GetTag/GetAllTags, CreateCategory/GetCategory/GetAllCategories, GetArtifactIDsForTag
  • Metadata store/retrieve operations (StoreMetadata/GetMetadata)
  • blob package: Content-addressable blob store (SHA256 hashing, hierarchical directory layout, read/write/exists)
  • YAML import: ArtifactYAML, SnapshotYAML, CitationYAML with ToStd() conversions and LoadArtifactFromYAML
  • Protobuf message definitions for all artifact types (proto/exo/v1/common.proto, proto/exo/v1/artifacts.proto)
  • gRPC service: ArtifactService with create/get artifacts, store/retrieve blobs, manage tags/categories, search by tag
  • server package: Full gRPC service implementation with proto-domain conversion helpers
  • buf.yaml for proto linting, buf.gen.yaml for code generation
  • Full test coverage for all packages (artifacts, blob, server)

Files created:

  • blob/blob.go, blob/blob_test.go
  • artifacts/artifact.go, artifacts/citation.go, artifacts/publisher.go, artifacts/snapshot.go
  • artifacts/metadata.go, artifacts/tagcat.go, artifacts/yaml.go, artifacts/artifacts_test.go
  • proto/exo/v1/common.proto, proto/exo/v1/artifacts.proto
  • proto/buf.yaml, proto/buf.gen.yaml
  • proto/exo/v1/*.pb.go (generated)
  • server/server.go, server/server_test.go

Phase 3: CLI Tools — NOT STARTED

Phase 4: Knowledge Graph — NOT STARTED

Phase 5: Desktop Application — NOT STARTED (Kotlin, out of scope for Go backend)

Phase 6: Remote Access & Backup — NOT STARTED