|
1042 | 1042 | {"id":"webrun-vcs-wig0","title":"[VCS] Phase 5: Update Transport Layer","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T15:50:50.369106202+01:00","created_by":"kotelnikov","updated_at":"2026-01-10T17:59:10.776517759+01:00","closed_at":"2026-01-10T17:59:10.776517759+01:00","close_reason":"All epics completed: delta compression architecture with core interfaces, implementations, transport layer updates, GC integration, tests, and documentation","dependencies":[{"issue_id":"webrun-vcs-wig0","depends_on_id":"webrun-vcs-8mdy","type":"blocks","created_at":"2026-01-10T15:52:24.677496025+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wig0","depends_on_id":"webrun-vcs-l12p","type":"blocks","created_at":"2026-01-10T15:52:24.713569114+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wig0","depends_on_id":"webrun-vcs-bs0u","type":"blocks","created_at":"2026-01-10T15:52:24.750966057+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wig0","depends_on_id":"webrun-vcs-o4t8","type":"blocks","created_at":"2026-01-10T15:52:24.788988014+01:00","created_by":"kotelnikov"}]} |
1043 | 1043 | {"id":"webrun-vcs-wm7","title":"Implement binary storage interface tests","description":"## Overview\n\nImplement unit tests for the binary storage interfaces (RawStore, VolatileStore) in packages/core.\n\n## Target Files to Test\n\n| Source File | Interface | Key Methods |\n|-------------|-----------|-------------|\n| binary/raw-store.ts | RawStore | store, load (with range), has, delete, keys, size |\n| binary/volatile-store.ts | VolatileStore | store → VolatileContent |\n\n## Test Files to Create\n\n### packages/core/tests/binary/\n\n**raw-store.test.ts**\n```typescript\ndescribe(\"RawStore interface\", () =\u003e {\n describe(\"store\", () =\u003e {\n it(\"should store byte stream by key\")\n it(\"should handle large streams (\u003e1MB)\")\n it(\"should overwrite existing content\")\n it(\"should accept async iterable of Uint8Array\")\n })\n\n describe(\"load\", () =\u003e {\n it(\"should retrieve stored content as async iterable\")\n it(\"should support offset option for partial reads\")\n it(\"should support length option for partial reads\")\n it(\"should support combined offset+length\")\n it(\"should throw for non-existent key\")\n })\n\n describe(\"has\", () =\u003e {\n it(\"should return true for existing key\")\n it(\"should return false for missing key\")\n })\n\n describe(\"delete\", () =\u003e {\n it(\"should remove stored content\")\n it(\"should handle non-existent key gracefully\")\n })\n\n describe(\"keys\", () =\u003e {\n it(\"should iterate all stored keys\")\n it(\"should return empty iterator when empty\")\n })\n\n describe(\"size\", () =\u003e {\n it(\"should return uncompressed content size\")\n it(\"should throw for non-existent key\")\n })\n})\n```\n\n**volatile-store.test.ts** (existing: memory-volatile-store.test.ts)\n```typescript\ndescribe(\"VolatileStore interface\", () =\u003e {\n describe(\"store\", () =\u003e {\n it(\"should buffer incoming stream\")\n it(\"should return VolatileContent handle\")\n })\n\n describe(\"VolatileContent\", () =\u003e {\n it(\"should report correct size after buffering\")\n it(\"should allow multiple reads of same content\")\n it(\"should release resources on dispose\")\n })\n})\n```\n\n## Migration from store-mem\n\nEvaluate [packages/store-mem/tests/binary-storage.test.ts](packages/store-mem/tests/binary-storage.test.ts) (513 lines) for interface-level tests that could be extracted to core.\n\nKey tests to consider:\n- MemRawStore async key-value storage\n- MemDeltaStore delta storage operations\n- Streaming stores interface compliance\n\n## JGit Test References\n\n**ObjectDirectoryTest.java** (8 test methods)\n- Concurrent object insertion to same fan-out directory\n- Pack file discovery during GC\n- IO exception propagation\n- Stale file handle exception suppression\n\n## Key Edge Cases\n\n- Large object storage (\u003e100MB, \u003e1GB)\n- Streaming without loading entire content into memory\n- Concurrent access patterns\n- Memory pressure scenarios\n- Range queries with edge values (offset=0, length=full)\n\n## Acceptance Criteria\n\n- [ ] RawStore interface tests cover all methods\n- [ ] Range query tests verify offset/length behavior\n- [ ] Large stream tests verify memory efficiency\n- [ ] VolatileStore tests verify buffering and cleanup","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-25T06:52:13.279277549+01:00","updated_at":"2025-12-25T07:33:35.081847411+01:00","closed_at":"2025-12-25T07:33:35.081847411+01:00","close_reason":"Implemented comprehensive tests for MemoryRawStore (39 tests) and fixed bug in size() method. MemoryVolatileStore tests already existed (18 tests)."} |
1044 | 1044 | {"id":"webrun-vcs-wmqp","title":"Implement working directory file writes in CheckoutCommand","description":"## Summary\nUpdate CheckoutCommand to write files from the target commit's tree to the working directory.\n\n## Current Behavior\nCheckoutCommand only updates:\n- HEAD reference (via refs.update)\n- Staging index (via staging.read/write)\n\n## Expected Behavior\nCheckoutCommand should also:\n1. Load the target commit's tree\n2. Recursively traverse all entries\n3. Write blob contents to corresponding file paths in working directory\n\n## Implementation Details\n\n### Key Changes to CheckoutCommand\n```typescript\n// After updating HEAD and staging, write files to workdir\nif (!isBareRepository \u0026\u0026 files) {\n await writeTreeToWorkdir(repository, files, commit.tree, \"\");\n}\n```\n\n### Helper Function\n```typescript\nasync function writeTreeToWorkdir(\n repository: Repository,\n files: FilesApi,\n treeId: string,\n basePath: string\n): Promise\u003cvoid\u003e {\n for await (const entry of repository.trees.loadTree(treeId)) {\n const fullPath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const isDirectory = entry.mode === 0o040000;\n if (isDirectory) {\n await writeTreeToWorkdir(repository, files, entry.id, fullPath);\n } else {\n const chunks: Uint8Array[] = [];\n for await (const chunk of repository.blobs.load(entry.id)) {\n chunks.push(chunk);\n }\n await files.write(fullPath, chunks);\n }\n }\n}\n```\n\n## Files to Modify\n- `packages/vcs-commands/src/commands/checkout-command.ts`\n\n## Dependencies\nDepends on bare repository detection task.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-17T11:37:54.586802791+01:00","created_by":"kotelnikov","updated_at":"2026-01-17T11:47:04.907374531+01:00","closed_at":"2026-01-17T11:47:04.907374531+01:00","close_reason":"Implemented in commit 52def62","dependencies":[{"issue_id":"webrun-vcs-wmqp","depends_on_id":"webrun-vcs-uo8j","type":"blocks","created_at":"2026-01-17T11:38:12.843527596+01:00","created_by":"kotelnikov"}]} |
1045 | | -{"id":"webrun-vcs-wopmd","title":"[Transport FSM] Phase 5: Repository Adapter","description":"# Phase 5: Repository Adapter\n\n**Reference:** notes/src/2026-01-23/02-transport-fsm-migration-plan.md (Lines 986-1148)\n\n## Overview\nCreate VcsRepositoryFacade in transport-adapters package that bridges vcs-core stores to RepositoryFacade interface.\n\n## Location: packages/transport-adapters/src/vcs-repository-facade.ts\n\n## Interface VcsFacadeParams:\n- blobs: BlobStore\n- trees: TreeStore\n- commits: CommitStore\n- tags?: TagStore\n- refs: RefStore\n- serialization: SerializationApi\n\n## Methods to Implement:\n1. `importPack(packStream)` - Import pack file\n2. `exportPack(wants, exclude, options)` - Export pack file\n3. `has(oid)` - Check if object exists\n4. `walkAncestors(startOid)` - Async generator for commit ancestry\n5. `isAncestor(ancestor, descendant)` - Check ancestry relationship\n6. `isReachableFrom(oid, roots)` - Check reachability\n7. `isReachableFromAnyTip(oid)` - Check if reachable from any ref\n8. `computeShallowBoundaries(wants, depth)` - Compute shallow boundaries\n9. `computeShallowSince(wants, timestamp)` - Compute by time\n10. `computeShallowExclude(wants, excludeRef)` - Compute by exclusion\n11. `peelTag(oid)` - Dereference tag\n12. `getObjectSize(oid)` - Get object size\n\n## Testing Requirements\nAll methods must have unit tests covering:\n- Normal cases\n- Edge cases (missing objects, empty repos)\n- Error conditions\n\n## Dependencies\n- Phase 4 must be complete\n\n## Acceptance Criteria\n- [ ] VcsRepositoryFacade implemented\n- [ ] All methods have unit tests\n- [ ] transport-adapters index.ts updated\n- [ ] Tests pass","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-23T21:33:03.25236986+01:00","created_by":"kotelnikov","updated_at":"2026-01-23T21:33:03.25236986+01:00","dependencies":[{"issue_id":"webrun-vcs-wopmd","depends_on_id":"webrun-vcs-zw2ac","type":"blocks","created_at":"2026-01-23T21:33:20.298355065+01:00","created_by":"kotelnikov"}]} |
| 1045 | +{"id":"webrun-vcs-wopmd","title":"[Transport FSM] Phase 5: Repository Adapter","description":"# Phase 5: Repository Adapter\n\n**Reference:** notes/src/2026-01-23/02-transport-fsm-migration-plan.md (Lines 986-1148)\n\n## Overview\nCreate VcsRepositoryFacade in transport-adapters package that bridges vcs-core stores to RepositoryFacade interface.\n\n## Location: packages/transport-adapters/src/vcs-repository-facade.ts\n\n## Interface VcsFacadeParams:\n- blobs: BlobStore\n- trees: TreeStore\n- commits: CommitStore\n- tags?: TagStore\n- refs: RefStore\n- serialization: SerializationApi\n\n## Methods to Implement:\n1. `importPack(packStream)` - Import pack file\n2. `exportPack(wants, exclude, options)` - Export pack file\n3. `has(oid)` - Check if object exists\n4. `walkAncestors(startOid)` - Async generator for commit ancestry\n5. `isAncestor(ancestor, descendant)` - Check ancestry relationship\n6. `isReachableFrom(oid, roots)` - Check reachability\n7. `isReachableFromAnyTip(oid)` - Check if reachable from any ref\n8. `computeShallowBoundaries(wants, depth)` - Compute shallow boundaries\n9. `computeShallowSince(wants, timestamp)` - Compute by time\n10. `computeShallowExclude(wants, excludeRef)` - Compute by exclusion\n11. `peelTag(oid)` - Dereference tag\n12. `getObjectSize(oid)` - Get object size\n\n## Testing Requirements\nAll methods must have unit tests covering:\n- Normal cases\n- Edge cases (missing objects, empty repos)\n- Error conditions\n\n## Dependencies\n- Phase 4 must be complete\n\n## Acceptance Criteria\n- [ ] VcsRepositoryFacade implemented\n- [ ] All methods have unit tests\n- [ ] transport-adapters index.ts updated\n- [ ] Tests pass","status":"in_progress","priority":1,"issue_type":"epic","created_at":"2026-01-23T21:33:03.25236986+01:00","created_by":"kotelnikov","updated_at":"2026-01-24T13:20:46.398787005+01:00","dependencies":[{"issue_id":"webrun-vcs-wopmd","depends_on_id":"webrun-vcs-zw2ac","type":"blocks","created_at":"2026-01-23T21:33:20.298355065+01:00","created_by":"kotelnikov"}]} |
1046 | 1046 | {"id":"webrun-vcs-wpal","title":"Add gitdir file parsing tests","description":"Port JGit FileRepositoryBuilderTest scenarios for gitdir: file reference parsing","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-05T20:14:56.133312833+01:00","updated_at":"2026-01-05T22:17:03.957889675+01:00","closed_at":"2026-01-05T22:17:03.957889675+01:00","close_reason":"Added 7 JGit parity tests for gitdir file parsing in repository-setup.test.ts"} |
1047 | 1047 | {"id":"webrun-vcs-wphq","title":"Epic: Transport Package Refactoring by Protocol Type","description":"Reorganize packages/transport/src by protocol type instead of by role (client/server).\n\n## Goal\nGroup related client/server code together and introduce symmetric BidirectionalSocket abstraction.\n\n## Current Structure (by role)\n```\ntransport/src/\n├── connection/ # Client-side only\n├── http-server/ # Server-side HTTP only\n├── handlers/ # Server-side handlers\n├── peer/ # P2P (mixed)\n└── ...\n```\n\n## Target Structure (by protocol)\n```\ntransport/src/\n├── http/\n│ ├── client.ts\n│ ├── server.ts\n│ └── types.ts\n├── socket/\n│ ├── client.ts\n│ ├── server.ts\n│ ├── bidirectional-socket.ts\n│ └── types.ts\n├── handlers/ # Shared\n├── protocol/ # Shared\n├── negotiation/ # Shared\n├── streams/ # Shared\n└── operations/ # Uses http/ or socket/\n```\n\n## Design Decisions\n1. **Metadata**: Deferred - keep BidirectionalSocket interface clean\n2. **Error Recovery**: Layered approach - no socket reconnection\n3. **Multiplexing**: Deferred - no current need\n\n## ⚠️ Important: No Deprecation Code\n\n**Old code must be removed entirely, not deprecated.**\n- No compatibility shims\n- No re-exports of old paths\n- No `@deprecated` annotations on old APIs\n- When a folder is replaced (e.g., peer/, connection/, http-server/), it is deleted\n\nThis keeps the codebase clean and avoids maintenance burden.\n\n## Reference\nSee: notes/src/2026-01-20/11.transport-refactoring-proposal.md","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-20T23:14:31.671574567+01:00","created_by":"kotelnikov","updated_at":"2026-01-21T00:27:38.27751611+01:00","closed_at":"2026-01-21T00:27:38.27751611+01:00","close_reason":"Epic complete: Refactored transport package by protocol type. Created http/ and socket/ folders, implemented BidirectionalSocket abstraction, socket-based Git client/server, multi-transport operations support, removed legacy peer/ folder, and updated documentation.","dependencies":[{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-6alm","type":"blocks","created_at":"2026-01-20T23:29:53.643821156+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-2x2x","type":"blocks","created_at":"2026-01-20T23:29:53.6820031+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-xska","type":"blocks","created_at":"2026-01-20T23:29:53.713194935+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-vt29","type":"blocks","created_at":"2026-01-20T23:29:53.744215143+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-fioi","type":"blocks","created_at":"2026-01-20T23:29:53.776313542+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-4gxf","type":"blocks","created_at":"2026-01-20T23:30:03.530545469+01:00","created_by":"kotelnikov"},{"issue_id":"webrun-vcs-wphq","depends_on_id":"webrun-vcs-kofp","type":"blocks","created_at":"2026-01-20T23:30:03.570724649+01:00","created_by":"kotelnikov"}]} |
1048 | 1048 | {"id":"webrun-vcs-wpi8","title":"Create backup branch before package rename","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T06:45:26.289392944+01:00","updated_at":"2026-01-04T16:04:40.595463819+01:00","closed_at":"2026-01-04T16:04:40.595463819+01:00","close_reason":"Closed"} |
|
0 commit comments