feat(v0.5.1): Linux portability baseline

- justfile: add build-linux, build-windows, build-all (output to dist/)
- .gitignore: cover ctask, ctask-*, dist/
- scripts/install.sh + scripts/uninstall.sh: POSIX equivalents of .ps1
- remove WorkspacePath metadata field (no production readers; legacy
  task.yaml files continue to parse silently)

Linux smoke-test on WSL/container pending.
See audit-report.md and v0.5.1-spec.md.
This commit is contained in:
2026-05-07 18:22:41 -04:00
parent a11d48b8cd
commit 7a7b2490c2
13 changed files with 686 additions and 13 deletions
-1
View File
@@ -135,7 +135,6 @@ func Create(opts CreateOpts) (*CreateResult, error) {
Type: taskType,
Mode: opts.Mode,
Agent: opts.Agent,
WorkspacePath: wsDir,
ArchivedAt: nil,
}
if opts.IsProject {
-1
View File
@@ -26,7 +26,6 @@ type TaskMeta struct {
Type string `yaml:"type"`
Mode string `yaml:"mode"`
Agent string `yaml:"agent"`
WorkspacePath string `yaml:"workspace_path"`
ArchivedAt *time.Time `yaml:"archived_at"`
LaunchDir string `yaml:"launch_dir,omitempty"`
}
+1 -6
View File
@@ -18,7 +18,6 @@ func TestWriteMetaLockedHappyPath(t *testing.T) {
CreatedAt: now, UpdatedAt: now,
Status: "active", Category: "general", Type: "task",
Mode: "local", Agent: "claude",
WorkspacePath: dir,
}
if err := WriteMetaLocked(metaPath, meta); err != nil {
@@ -78,7 +77,6 @@ func TestWriteAndReadMeta(t *testing.T) {
Category: "general",
Mode: "local",
Agent: "claude",
WorkspacePath: "/home/warren/ai-workspaces/general/20260405_arch-notes",
ArchivedAt: nil,
}
@@ -123,7 +121,6 @@ func TestMetaYAMLFieldsPresent(t *testing.T) {
Category: "general",
Mode: "local",
Agent: "claude",
WorkspacePath: "/tmp/test",
}
WriteMeta(path, meta)
@@ -131,7 +128,7 @@ func TestMetaYAMLFieldsPresent(t *testing.T) {
data, _ := os.ReadFile(path)
content := string(data)
for _, field := range []string{"id:", "slug:", "title:", "created_at:", "updated_at:", "status:", "category:", "type:", "mode:", "agent:", "workspace_path:", "archived_at:"} {
for _, field := range []string{"id:", "slug:", "title:", "created_at:", "updated_at:", "status:", "category:", "type:", "mode:", "agent:", "archived_at:"} {
if !strings.Contains(content, field) {
t.Errorf("missing field %s in YAML output", field)
}
@@ -154,7 +151,6 @@ func TestMetaTypeRoundTrip(t *testing.T) {
Type: "project",
Mode: "local",
Agent: "claude",
WorkspacePath: "/tmp/billing",
}
if err := WriteMeta(path, meta); err != nil {
t.Fatalf("WriteMeta: %v", err)
@@ -234,7 +230,6 @@ func TestMetaArchive(t *testing.T) {
Category: "general",
Mode: "local",
Agent: "claude",
WorkspacePath: "/tmp/test",
}
WriteMeta(path, meta)
-2
View File
@@ -40,7 +40,6 @@ func createTestWorkspaceFull(t *testing.T, root, category, dirName, status, task
Type: taskType,
Mode: "local",
Agent: "claude",
WorkspacePath: dir,
}
WriteMeta(filepath.Join(dir, "task.yaml"), meta)
}
@@ -186,7 +185,6 @@ func createFlatProjectWorkspaceFull(t *testing.T, root, dirName string, updatedA
Type: "project",
Mode: "local",
Agent: "claude",
WorkspacePath: dir,
}
WriteMeta(filepath.Join(dir, "task.yaml"), meta)
}