docs: capture protocol and implementation gaps
This commit is contained in:
10
notes/discrepancies.md
Normal file
10
notes/discrepancies.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Documentation Discrepancies
|
||||
|
||||
## 2026-04-28
|
||||
|
||||
1. The plan and ADRs repeatedly describe a single Go binary, while Milestone 1 also requires `apps/web/` as a separate Vite/Preact app. The current implementation treats the web app as build-time static assets served by the Go binary.
|
||||
2. Milestone 1 asks for `packages/protocol/` with a protobuf schema, but the sync ADR and protocol spec describe JSON messages over WebSocket. The protocol package currently preserves both a `.proto` placeholder and TypeScript-facing JSON model notes.
|
||||
3. ADR-005 stores content under `data/files/...`, while Milestone 2 examples use `store/...`. The implementation follows ADR-005 and uses `data/files`.
|
||||
4. ADR-007 says "No build scripts: Makefile only — no npm install," but the chosen frontend stack requires a Node package install step. The Makefile centralizes it, but the dependency policy needs clarification.
|
||||
5. The foundation milestone specifies `golang-migrate`, but `go-libsql` integration constraints need a clean validation path. A lightweight internal migrator is used now so the project can move forward.
|
||||
|
||||
9
notes/problems.md
Normal file
9
notes/problems.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Implementation Problems Log
|
||||
|
||||
## 2026-04-28
|
||||
|
||||
- `go-libsql` is the active official Go binding, but it requires CGO and precompiled native libraries. That weakens the "same source -> same binary hash" goal until the exact build environment is locked down.
|
||||
- The embedded-replica connector in `go-libsql` rejects an empty primary URL. The foundation therefore uses the local `file:` libsql driver path when no primary is configured, and reserves embedded-replica setup for later sync work.
|
||||
- Docker verification is currently blocked by the local environment because the daemon socket at `/Users/tim/.orbstack/run/docker.sock` was not reachable during `docker build`.
|
||||
- The docs do not define a config file format. This implementation uses JSON to keep the bootstrap dependency-free.
|
||||
- The docs require "all Markdown extensions" but do not define a canonical sample corpus. A representative content sample is included and should be expanded as renderer coverage grows.
|
||||
56
openapi/openapi.yaml
Normal file
56
openapi/openapi.yaml
Normal file
@@ -0,0 +1,56 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: MD Hub Secure Foundation API
|
||||
version: 0.1.0
|
||||
servers:
|
||||
- url: http://localhost:8080
|
||||
paths:
|
||||
/health:
|
||||
get:
|
||||
summary: Health check
|
||||
operationId: getHealth
|
||||
responses:
|
||||
"200":
|
||||
description: Healthy
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
database:
|
||||
type: string
|
||||
contentStore:
|
||||
type: string
|
||||
/api/uploads:
|
||||
post:
|
||||
summary: Upload a single attachment
|
||||
operationId: uploadAttachment
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
multipart/form-data:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
file:
|
||||
type: string
|
||||
format: binary
|
||||
responses:
|
||||
"201":
|
||||
description: Attachment stored
|
||||
/attachments/{hash}:
|
||||
get:
|
||||
summary: Download an attachment by content hash
|
||||
operationId: getAttachment
|
||||
parameters:
|
||||
- in: path
|
||||
name: hash
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: Attachment content
|
||||
|
||||
11
packages/protocol/README.md
Normal file
11
packages/protocol/README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Protocol Package
|
||||
|
||||
This directory exists because the milestone plan expects a shared protocol package.
|
||||
|
||||
For now:
|
||||
|
||||
- `simplesync.proto` captures an eventual strongly typed schema
|
||||
- `docs/specs/simplesync-protocol.md` remains the more complete behavioral reference
|
||||
|
||||
The current docs still need a final decision on whether wire messages are JSON, protobuf-over-WebSocket, or JSON generated from protobuf definitions.
|
||||
|
||||
28
packages/protocol/simplesync.proto
Normal file
28
packages/protocol/simplesync.proto
Normal file
@@ -0,0 +1,28 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package mdhub.protocol.v1;
|
||||
|
||||
option go_package = "github.com/tim/md-hub-secure/packages/protocol/gen/go/mdhub/protocol/v1;protocolv1";
|
||||
|
||||
message SyncRequest {
|
||||
string client_id = 1;
|
||||
string root_hash = 2;
|
||||
map<string, string> files = 3;
|
||||
}
|
||||
|
||||
message SyncResponse {
|
||||
string server_root_hash = 1;
|
||||
repeated string missing_from_client = 2;
|
||||
repeated string missing_from_server = 3;
|
||||
repeated string conflicts = 4;
|
||||
}
|
||||
|
||||
message ContentRequest {
|
||||
string hash = 1;
|
||||
}
|
||||
|
||||
message ContentResponse {
|
||||
string hash = 1;
|
||||
bytes content = 2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user