{
  "markdown": "# Project Version Workflow (PVW)\n\nA Claude Code plugin that automates dated version tagging, professional conventional commits, and git tag management through a deterministic, step-by-step workflow.\n\n## Installation\n\n### As a Plugin (Recommended)\n\n```bash\n/plugin marketplace add ATreep/project-version-workflow\n/plugin install project-version-workflow\n```\n\nInvoke with the plugin namespace:\n\n```\n/project-version-workflow:update-commit\n/project-version-workflow:update-commit-bypass\n/project-version-workflow:view-update-log\n```\n\n### As a Standalone Skill\n\nCopy the `skills` directory into your Claude Code skills folder:\n\n```bash\ncp -r skills/* ~/.claude/skills/\n```\n\nThen use the short-form commands:\n\n```\n/update-commit\n/update-commit-bypass\n/view-update-log\n```\n\n## Skills\n\n### `/update-commit`\n\nInteractive workflow that generates a dated version, drafts a professional commit message, creates an annotated git tag, and optionally pushes.\n\n**Commit message format:**\n\n```\nv260503 feat. add macOS .DS_Store gitignore check\n\n1. Add .DS_Store detection on macOS in Step 3\n2. Create .gitignore automatically when missing\n3. Stage .gitignore before committing\n```\n\nThe subject line uses a conventional commit type (`feat.` / `fix.` / `docs.` / `refactor.` / `perf.` / `chore.` / `style.`), and the body lists each meaningful change as a numbered item.\n\n**Workflow:**\n\n```text\n0. Preflight        Verify git repo, check working tree state\n1. Version          Capture current date+time, form vYYMMDD-HHmmss (e.g., v260601-145633)\n2. Draft message    Classify change type, draft subject + body, confirm with user\n3. .DS_Store        Auto-ignore on macOS if not already ignored\n4. Commit           Stage files explicitly, sensitive-file check, commit\n5. Git tag          Create annotated tag matching the version\n6. Push             Ask user whether to push branch + tags to remote\n```\n\n```mermaid\nflowchart TD\n    A[Check git repo] -->|Not a repo| B[Offer git init]\n    A -->|OK| C[Check working tree]\n    C -->|Clean| D[Stop — nothing to commit]\n    C -->|Dirty| E[Compute next version]\n    E --> F[Draft commit message]\n    F --> G{Confirm?}\n    G -->|Modify| F\n    G -->|Cancel| D\n    G -->|Use as-is| H[Ensure .DS_Store ignored]\n    H --> I[Stage files + sensitive check]\n    I --> J[Commit]\n    J -->|Fail| K[Stop — report error]\n    J -->|OK| L[Create git tag]\n    L --> M{Push?}\n    M -->|Yes| N[Push branch + tags]\n    N -->|Reject| K\n    M -->|No| O[Done]\n    N -->|OK| O\n```\n\n**Version numbering:**\n\n- Each version uses the format `vYYMMDD-HHmmss` (e.g., `v260601-145633`).\n- The suffix is a timestamp (HHmmss = hour, minute, second), not a sequential counter.\n- Each invocation produces a unique version thanks to the timestamp.\n- The date prefix resets each calendar day at midnight.\n\n### `/update-commit-bypass`\n\nNon-interactive variant of `/update-commit`. Resolves every confirmation prompt to its default. Never asks the user anything.\n\n| Decision point | `/update-commit` | `/update-commit-bypass` |\n|---|---|---|\n| Not a git repo | Ask | Auto `git init` |\n| Commit message | Confirm with user | Use draft as-is |\n| Sensitive files | Ask | Auto-unstage + warn |\n| Git tag | Create (same) | Create (same) |\n| Push | Ask | Auto-push with tags |\n\nSuitable for CI pipelines, automation loops, or hands-off workflows.\n\n### `/view-update-log`\n\nRead-only viewer for the project's update history, sourced from git commit messages.\n\n| Invocation | Output |\n|---|---|\n| `/view-update-log` | Latest commit + hint about history |\n| `/view-update-log history` | Last 10 commits |\n| `/view-update-log history N` | Last N commits |\n| `/view-update-log v260502` | Full details of a specific version |\n| `/view-update-log today` | All commits from today |\n| `/view-update-log week` | All commits from the past 7 days |\n\n## Design Decisions\n\n**Explicit staging.** Files are staged by name, never with `git add .` or `git add -A`. This prevents accidental inclusion of untracked or sensitive files.\n\n**No force operations.** The workflow never uses `--force`, `--no-verify`, or `--no-gpg-sign`. If a push is rejected, the error is reported and execution stops.\n\n**Deterministic versioning.** Version tags are computed from the current date and existing commit history. The algorithm is fully specified in the skill document — there is no ambiguity in version selection.\n\n**Annotated git tags.** Every version is recorded as an annotated tag (`git tag -a`), not a lightweight tag. This preserves the version message in the repository's tag metadata.\n",
  "bytes": 4545,
  "sha": "19ed0c9b265a01f60a81394b5bea1cbb69c0397311824c4d19bb113b6cbf6319",
  "repo_slug": "atreep/project-version-workflow",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_atreep_project_version_workflow_project__8e2a91b3/readme"
}