Skip to content

Conversation

@memyselfandm
Copy link

Summary

  • Add linctl project create command for creating new projects
  • Add linctl project update command for updating existing projects
  • Add linctl project delete command for archiving or permanently deleting projects

Features

project create

  • Required: --name, --team (supports multiple teams)
  • Optional: --description, --state, --lead, --start-date, --target-date, --color
  • Team key resolution to IDs
  • User lookup for lead (by email, name, or "me")
  • State validation (planned, started, paused, completed, canceled)

project update

  • Takes project ID as positional argument
  • All fields optional: name, description, state, lead, dates, color
  • Supports lead removal (--lead none)
  • Supports date clearing (empty string)
  • Only sends changed fields to API for efficiency

project delete

  • Default behavior: Archive (soft delete)
  • --permanent flag for hard delete (irreversible)
  • --force flag to skip confirmation prompt
  • Confirmation prompt shows project name for verification
  • Aliases: delete, rm, remove

Test Plan

  • Build verification (go build)
  • Code quality (go vet ./..., gofmt)
  • Basic create with required flags
  • Create with all optional flags (description, state, lead, dates)
  • Update single and multiple fields
  • Update edge cases (remove lead, clear dates)
  • Archive (soft delete)
  • Permanent delete
  • Error handling (invalid inputs, missing required flags)
  • All three output modes (JSON, plaintext, colored)

🤖 Generated with Claude Code

Mike G. and others added 8 commits December 6, 2025 23:00
Enable setting, changing, or removing parent issue relationships via CLI:
- linctl issue update ISSUE-1 --parent PARENT-1  (set parent)
- linctl issue update ISSUE-1 --parent none      (remove parent)

Features:
- Validates parent issue exists before update
- Prevents self-referencing (issue cannot be its own parent)
- Displays parent info in update output (styled and plaintext modes)
- Supports "none", "null", or empty string to remove parent

Files changed:
- cmd/issue.go: Flag registration, validation logic, help text, output
- pkg/api/queries.go: Added parent field to UpdateIssue mutation
- smoke_test.sh: Added tests for --parent flag documentation
- project-scratchpad.md: Implementation tracking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove project-scratchpad.md (dev artifact)
- Port README documentation from PR dorkitude#7 (adapted for --parent flag)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements `linctl project create` with:
- Required flags: --name, --team (supports multiple teams)
- Optional flags: --description, --state, --lead, --start-date, --target-date, --color
- Team key to ID resolution
- User lookup for lead assignment (by email, name, or 'me')
- State validation (planned, started, paused, completed, canceled)
- Three output modes: default (colored), JSON, plaintext

Usage examples:
  linctl project create --name "Q1 Release" --team ENG
  linctl project create --name "Auth" --team ENG --lead me --state started

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements `linctl project update` with:
- Required: project ID as positional argument
- Optional flags: --name, --description, --state, --lead, --start-date, --target-date, --color
- Lead removal support (--lead none/unassigned)
- Date clearing support (--start-date "" or --target-date "")
- State validation (planned, started, paused, completed, canceled)
- Only sends changed fields to API for efficiency

Usage examples:
  linctl project update abc123 --name "New Name"
  linctl project update abc123 --state completed --lead me
  linctl project update abc123 --lead none  # remove lead

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements `linctl project delete` with:
- Archive (soft delete) as default behavior
- Permanent delete with explicit --permanent flag
- Confirmation prompt before deletion (skipped with --force or --json)
- Project name displayed in confirmation for verification
- Aliases: delete, rm, remove
- Visual distinction between archive and permanent delete in output

Safety features:
- Requires explicit --permanent for irreversible deletion
- Confirmation prompt shows project name
- Clear messaging distinguishes archive vs PERMANENTLY DELETE

Usage examples:
  linctl project delete abc123              # Archive (soft delete)
  linctl project delete abc123 --permanent  # Permanent delete
  linctl project delete abc123 --force      # Skip confirmation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Documents the implementation process for project CRUD commands including:
- Execution status table tracking all parts
- Codebase pattern analysis for cmd/project.go and pkg/api/queries.go
- Testing structure analysis
- Validation checklist

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Standardize indentation to tabs (gofmt compliance).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove project-scratchpad.md dev artifact
- Run gofmt on project.go, root.go, queries.go
@memyselfandm memyselfandm force-pushed the feat/project-crud-commands branch from 7051743 to de27c4e Compare December 7, 2025 18:10
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