feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
# Issue Core Capability Makefile
2025-11-09 01:30:54 +01:00
# Universal CLI for issue tracking across multiple backends
# Capability metadata
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
CAPABILITY_NAME := issue-core
2025-11-09 01:30:54 +01:00
CAPABILITY_DESCRIPTION := Universal CLI for issue tracking across multiple backends
# Default target
.PHONY : help
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
help : ## Show issue core capability help
@echo "🎯 Issue Core - Universal Issue Tracking CLI"
2025-11-09 01:30:54 +01:00
@echo "==============================================="
@echo ""
@echo "Core Issue Operations:"
@echo " issue-list List all issues from configured backend"
@echo " issue-show ID=42 Show details for issue #42"
@echo " issue-create TITLE=\"Bug\" Create new issue with title"
@echo " issue-close ID=42 Close issue #42"
@echo " issue-stats Show issue statistics"
@echo ""
@echo "Backend Management:"
@echo " issue-backend-list List configured backends"
@echo " issue-backend-detect Auto-detect backend from repository"
@echo " issue-backend-set-local Configure local SQLite backend"
@echo " issue-backend-set-gitea Configure Gitea backend"
@echo ""
@echo "Synchronization:"
@echo " issue-sync Sync with remote backend"
@echo " issue-sync-pull Pull issues from remote"
@echo " issue-sync-push Push local issues to remote"
@echo ""
2025-12-17 19:32:37 +01:00
@echo "Development & Setup (local):"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " install Install issue core for local development"
2025-12-17 19:32:37 +01:00
@echo " install-dev Install with development dependencies"
@echo " test Run all tests"
@echo " test-unit Run unit tests only"
@echo " test-integration Run integration tests only"
@echo " test-cov Run tests with coverage report"
@echo " test-verbose Run tests with verbose output"
2026-05-23 06:45:36 +02:00
@echo " package Build source and wheel distributions"
@echo " package-check Build and validate distributions"
@echo " publish-gitea Publish distributions to Gitea PyPI"
2025-12-17 19:32:37 +01:00
@echo ""
feat: implement reusable feedback capability for continuous improvement
Add comprehensive feedback system that enables lightweight, unstructured feedback
collection from users of the issue-facade capability, establishing a continuous
improvement loop grounded in real-world usage.
Core Components:
- .feedback/ directory structure (inbound, reviewed, archived)
- Standalone CLI tool (.capability/feedback) for submission and management
- Comprehensive documentation (.feedback/README.md)
- Integration examples and usage guides
Key Features:
- Multiple submission methods (CLI, Makefile, direct file drop)
- No structure imposement - accepts any text/markdown format
- Automatic metadata capture (timestamp, git context, version)
- Maintainer workflow (list, review, archive, create issues)
- Colored terminal output for better UX
- Future-ready for API endpoint evolution
Integration:
- Updated CAPABILITY.yaml with feedback section
- Enhanced CLAUDE.md with comprehensive integration guide
- Added Makefile commands (feedback, feedback-list, feedback-stats, etc.)
- Created detailed usage examples (examples/feedback-example.md)
Design Philosophy:
- Capability-agnostic pattern (reusable across all markitect capabilities)
- Decentralized (each capability owns its feedback)
- Flexible (no required formats or fields)
- Durable (plain markdown files, git-tracked)
- Actionable (feedback lives where maintainers work)
- Scalable (works for 1 user or 1000 users)
Feedback Submission Examples:
./.capability/feedback submit "Your feedback"
make feedback MSG="Your feedback"
echo "Feedback" > .feedback/inbound/$(date +%Y%m%d)-feedback.md
Maintainer Workflow:
make feedback-list # List pending
make feedback-stats # Show statistics
make feedback-review-issue FILE=xxx # Review and create issue
This establishes a robust continuous improvement loop:
User Experience → Feedback → Review → Action → Improved Capability
The pattern is designed to be copied to any capability in the markitect
project, providing consistent feedback collection across all capabilities.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 21:09:36 +01:00
@echo "Feedback & Continuous Improvement:"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " feedback MSG=\"...\" Submit feedback about issue-core"
feat: implement reusable feedback capability for continuous improvement
Add comprehensive feedback system that enables lightweight, unstructured feedback
collection from users of the issue-facade capability, establishing a continuous
improvement loop grounded in real-world usage.
Core Components:
- .feedback/ directory structure (inbound, reviewed, archived)
- Standalone CLI tool (.capability/feedback) for submission and management
- Comprehensive documentation (.feedback/README.md)
- Integration examples and usage guides
Key Features:
- Multiple submission methods (CLI, Makefile, direct file drop)
- No structure imposement - accepts any text/markdown format
- Automatic metadata capture (timestamp, git context, version)
- Maintainer workflow (list, review, archive, create issues)
- Colored terminal output for better UX
- Future-ready for API endpoint evolution
Integration:
- Updated CAPABILITY.yaml with feedback section
- Enhanced CLAUDE.md with comprehensive integration guide
- Added Makefile commands (feedback, feedback-list, feedback-stats, etc.)
- Created detailed usage examples (examples/feedback-example.md)
Design Philosophy:
- Capability-agnostic pattern (reusable across all markitect capabilities)
- Decentralized (each capability owns its feedback)
- Flexible (no required formats or fields)
- Durable (plain markdown files, git-tracked)
- Actionable (feedback lives where maintainers work)
- Scalable (works for 1 user or 1000 users)
Feedback Submission Examples:
./.capability/feedback submit "Your feedback"
make feedback MSG="Your feedback"
echo "Feedback" > .feedback/inbound/$(date +%Y%m%d)-feedback.md
Maintainer Workflow:
make feedback-list # List pending
make feedback-stats # Show statistics
make feedback-review-issue FILE=xxx # Review and create issue
This establishes a robust continuous improvement loop:
User Experience → Feedback → Review → Action → Improved Capability
The pattern is designed to be copied to any capability in the markitect
project, providing consistent feedback collection across all capabilities.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 21:09:36 +01:00
@echo " feedback-list List pending feedback"
@echo " feedback-stats Show feedback statistics"
@echo " feedback-show FILE=\"...\" Show specific feedback"
@echo " feedback-review FILE=\"...\" Review feedback (maintainers)"
@echo ""
2025-12-17 19:32:37 +01:00
@echo "Development & Setup (from parent):"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " issue-core-install Install issue core capability"
@echo " issue-core-install-dev Install with development dependencies"
@echo " issue-core-test Run issue core tests"
@echo " issue-core-test-cov Run tests with coverage report"
@echo " issue-core-lint Run code quality checks"
@echo " issue-core-clean Clean build artifacts"
2025-11-09 01:30:54 +01:00
@echo ""
@echo "CLI Functionality:"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " issue-core-help Show CLI help documentation"
@echo " issue-core-demo Demonstrate facade functionality"
2025-11-09 01:30:54 +01:00
# Check if issue command is available
ISSUE_CLI := $( shell command -v issue 2> /dev/null)
2026-05-23 06:45:36 +02:00
PYTHON ?= python3
GITEA_PACKAGE_OWNER ?= coulomb
GITEA_PYPI_REPOSITORY_URL ?= https://gitea.coulomb.social/api/packages/$( GITEA_PACKAGE_OWNER) /pypi
2026-07-12 00:42:52 +02:00
FORGEJO_PYPI_REPOSITORY_URL ?= https://forgejo.coulomb.social/api/packages/$( GITEA_PACKAGE_OWNER) /pypi
2026-05-23 06:45:36 +02:00
2025-11-09 01:30:54 +01:00
# Core Issue Operations
.PHONY : issue -list
issue-list : ## List all issues from configured backend
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " Install with: make issue-core-install"
2025-11-09 01:30:54 +01:00
@exit 1
e n d i f
issue list
.PHONY : issue -show
issue-show : ## Show details for specific issue (requires ID=number)
i f n d e f I D
@echo "❌ ID is required. Usage: make issue-show ID=42"
@exit 1
e n d i f
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue show $( ID)
.PHONY : issue -create
issue-create : ## Create new issue (requires TITLE="Issue Title")
i f n d e f T I T L E
@echo "❌ TITLE is required. Usage: make issue-create TITLE=\"Bug in parser\""
@exit 1
e n d i f
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue create " $( TITLE) "
.PHONY : issue -close
issue-close : ## Close issue (requires ID=number)
i f n d e f I D
@echo "❌ ID is required. Usage: make issue-close ID=42"
@exit 1
e n d i f
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue close $( ID)
.PHONY : issue -stats
issue-stats : ## Show issue statistics
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue stats
# Backend Management
.PHONY : issue -backend -list
issue-backend-list : ## List configured backends
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue backend list
.PHONY : issue -backend -detect
issue-backend-detect : ## Auto-detect backend from repository
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue config detect
.PHONY : issue -backend -set -local
issue-backend-set-local : ## Configure local SQLite backend
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue backend set local
.PHONY : issue -backend -set -gitea
issue-backend-set-gitea : ## Configure Gitea backend (requires REPO=repository-name)
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
i f d e f R E P O
issue backend add gitea $( REPO)
e l s e
issue backend set gitea
e n d i f
# Synchronization
.PHONY : issue -sync
issue-sync : ## Sync with remote backend
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue sync
.PHONY : issue -sync -pull
issue-sync-pull : ## Pull issues from remote
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue sync pull
.PHONY : issue -sync -push
issue-sync-push : ## Push local issues to remote
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
issue sync push
# Development and Setup
2025-12-17 19:32:37 +01:00
.PHONY : integrate
integrate : ## Integrate capability into main project (interactive)
@./.capability/integrate.sh
.PHONY : install
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
install : ## Install issue core (local development)
2025-12-17 19:32:37 +01:00
pip install -e .
.PHONY : install -dev
install-dev : ## Install with development dependencies (local development)
pip install -e ".[dev]"
.PHONY : test
test : ## Run all tests (local development)
pytest tests/
.PHONY : test -unit
test-unit : ## Run unit tests only (local development)
pytest tests/ -m unit -v
.PHONY : test -integration
test-integration : ## Run integration tests only (local development)
pytest tests/ -m integration -v
.PHONY : test -cov
test-cov : ## Run tests with coverage report (local development)
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
pytest tests/ --cov= issue_core --cov-report= html --cov-report= term
2025-12-17 19:32:37 +01:00
.PHONY : test -verbose
test-verbose : ## Run tests with verbose output (local development)
pytest tests/ -v
2026-05-23 06:45:36 +02:00
.PHONY : clean -dist
clean-dist : ## Remove local Python package build artifacts
rm -rf build/ dist/ *.egg-info/
.PHONY : package
package : clean -dist ## Build source and wheel distributions
$( PYTHON) -m build
.PHONY : package -check
package-check : package ## Build and validate source/wheel distributions
$( PYTHON) -m twine check dist/*
.PHONY : publish -gitea
publish-gitea : package -check ## Publish distributions to the Coulomb Gitea PyPI registry
i f n d e f T W I N E _ U S E R N A M E
$( error TWINE_USERNAME is required)
e n d i f
i f n d e f T W I N E _ P A S S W O R D
$( error TWINE_PASSWORD is required)
e n d i f
$( PYTHON) -m twine upload --repository-url " $( GITEA_PYPI_REPOSITORY_URL) " dist/*
2026-07-12 00:42:52 +02:00
.PHONY : publish -forgejo
publish-forgejo : package -check ## Publish distributions to the Coulomb Forgejo PyPI registry
i f n d e f T W I N E _ U S E R N A M E
$( error TWINE_USERNAME is required)
e n d i f
i f n d e f T W I N E _ P A S S W O R D
$( error TWINE_PASSWORD is required)
e n d i f
$( PYTHON) -m twine upload --repository-url " $( FORGEJO_PYPI_REPOSITORY_URL) " dist/*
feat: implement reusable feedback capability for continuous improvement
Add comprehensive feedback system that enables lightweight, unstructured feedback
collection from users of the issue-facade capability, establishing a continuous
improvement loop grounded in real-world usage.
Core Components:
- .feedback/ directory structure (inbound, reviewed, archived)
- Standalone CLI tool (.capability/feedback) for submission and management
- Comprehensive documentation (.feedback/README.md)
- Integration examples and usage guides
Key Features:
- Multiple submission methods (CLI, Makefile, direct file drop)
- No structure imposement - accepts any text/markdown format
- Automatic metadata capture (timestamp, git context, version)
- Maintainer workflow (list, review, archive, create issues)
- Colored terminal output for better UX
- Future-ready for API endpoint evolution
Integration:
- Updated CAPABILITY.yaml with feedback section
- Enhanced CLAUDE.md with comprehensive integration guide
- Added Makefile commands (feedback, feedback-list, feedback-stats, etc.)
- Created detailed usage examples (examples/feedback-example.md)
Design Philosophy:
- Capability-agnostic pattern (reusable across all markitect capabilities)
- Decentralized (each capability owns its feedback)
- Flexible (no required formats or fields)
- Durable (plain markdown files, git-tracked)
- Actionable (feedback lives where maintainers work)
- Scalable (works for 1 user or 1000 users)
Feedback Submission Examples:
./.capability/feedback submit "Your feedback"
make feedback MSG="Your feedback"
echo "Feedback" > .feedback/inbound/$(date +%Y%m%d)-feedback.md
Maintainer Workflow:
make feedback-list # List pending
make feedback-stats # Show statistics
make feedback-review-issue FILE=xxx # Review and create issue
This establishes a robust continuous improvement loop:
User Experience → Feedback → Review → Action → Improved Capability
The pattern is designed to be copied to any capability in the markitect
project, providing consistent feedback collection across all capabilities.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 21:09:36 +01:00
# Feedback and Continuous Improvement
.PHONY : feedback
feedback : ## Submit feedback (Usage: make feedback MSG="your feedback")
@./.capability/feedback submit " $( MSG) "
.PHONY : feedback -list
feedback-list : ## List pending feedback
@./.capability/feedback list
.PHONY : feedback -stats
feedback-stats : ## Show feedback statistics
@./.capability/feedback stats
.PHONY : feedback -show
feedback-show : ## Show specific feedback (Usage: make feedback-show FILE=20251217-xxx.md)
@./.capability/feedback show " $( FILE) "
.PHONY : feedback -review
feedback-review : ## Review feedback (Usage: make feedback-review FILE=20251217-xxx.md)
@./.capability/feedback review " $( FILE) "
.PHONY : feedback -review -issue
feedback-review-issue : ## Review feedback and create issue (Usage: make feedback-review-issue FILE=20251217-xxx.md)
@./.capability/feedback review " $( FILE) " --create-issue
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -install
issue-core-install : ## Install issue core capability
pip install -e capabilities/issue-core/
2025-11-09 01:30:54 +01:00
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -install -dev
issue-core-install-dev : ## Install issue core capability with development dependencies
pip install -e "capabilities/issue-core/[dev]"
2025-11-09 01:30:54 +01:00
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -test
issue-core-test : ## Run issue core tests
cd capabilities/issue-core && pytest tests/
2025-11-09 01:30:54 +01:00
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -test -cov
issue-core-test-cov : ## Run tests with coverage report
cd capabilities/issue-core && pytest tests/ --cov= issue_core --cov-report= html --cov-report= term
2025-11-09 01:30:54 +01:00
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -lint
issue-core-lint : ## Run code quality checks
@echo "🔍 Running code quality checks for issue-core..."
cd capabilities/issue-core && python -m py_compile cli/*.py core/*.py backends/*/*.py 2>/dev/null || echo "⚠️ Some files may not compile due to missing dependencies"
2025-11-09 01:30:54 +01:00
@echo "✅ Code quality checks completed"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -clean
issue-core-clean : ## Clean build artifacts
cd capabilities/issue-core && rm -rf build/ dist/ *.egg-info/ __pycache__/ .pytest_cache/ htmlcov/ .coverage
find capabilities/issue-core -name "*.pyc" -delete
find capabilities/issue-core -name "__pycache__" -type d -exec rm -rf { } + 2>/dev/null || true
2025-11-09 01:30:54 +01:00
# CLI Functionality
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -help
issue-core-help : ## Show CLI help documentation
2025-11-09 01:30:54 +01:00
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " Install with: make issue-core-install"
2025-11-09 01:30:54 +01:00
@exit 1
e n d i f
issue --help
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
.PHONY : issue -core -demo
issue-core-demo : ## Demonstrate facade functionality
@echo "🎬 Issue Core Demonstration"
2025-11-09 01:30:54 +01:00
@echo "============================="
@echo ""
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo "The Issue Core provides a unified CLI for issue tracking across:"
2025-11-09 01:30:54 +01:00
@echo " • GitHub Issues"
@echo " • GitLab Issues"
@echo " • Gitea Issues"
@echo " • Local SQLite storage"
@echo ""
@echo "Key features:"
@echo " • Repository-aware backend detection"
@echo " • Offline capability with sync"
@echo " • Consistent CLI across all platforms"
@echo ""
i f n d e f I S S U E _ C L I
@echo "To try it out:"
feat: rename to issue-core and add task ingestion endpoint
Renames the package, distribution, CLI alias, Makefile targets, and
working directory from issue-facade to issue-core, signalling its
role as the authoritative task lifecycle manager for the Coulomb org
(peer to activity-core, rules-core, project-core).
Adds POST /issues/ ingestion endpoint for activity-core's IssueSink,
under a new optional [api] extra. The endpoint is served by `issue
serve`, authenticates via the ISSUE_CORE_API_KEY env var (Bearer or
X-API-Key header), and routes the TaskSpec payload to the configured
default backend with full traceability metadata embedded in
sync_metadata.
- T01: Python package issue_tracker -> issue_core, dir rename
- T02: registered in state hub under custodian domain
- T03: INTENT.md (what it is, what it isn't, how it fits)
- T04: SCOPE.md (in/out-of-scope, integration boundaries)
- T05: POST /issues/ via FastAPI + Uvicorn, 9 unit tests
- T06: docs/nats-task-ingestion.md design stub
Closes ISSC-WP-0001.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 05:16:27 +02:00
@echo " 1. make issue-core-install"
2025-11-09 01:30:54 +01:00
@echo " 2. make issue-backend-detect"
@echo " 3. make issue-list"
e l s e
@echo "Current backend status:"
@$( MAKE) --no-print-directory issue-backend-list 2>/dev/null || echo " No backends configured yet"
@echo ""
@echo "Try: make issue-backend-detect"
e n d i f
# Repository Integration
.PHONY : issue -detect -repo
issue-detect-repo : ## Detect and configure backend for current repository
@echo "🔍 Analyzing repository for issue tracking configuration..."
@if [ -d .git ] ; then \
echo "✅ Git repository detected" ; \
if git remote -v 2>/dev/null | grep -q github; then \
echo "🐙 GitHub remote detected" ; \
elif git remote -v 2>/dev/null | grep -q gitlab; then \
echo "🦊 GitLab remote detected" ; \
elif git remote -v 2>/dev/null | grep -q gitea; then \
echo "🦋 Gitea remote detected" ; \
else \
echo "📁 Generic git repository - local backend recommended" ; \
fi ; \
else \
echo "❌ Not a git repository" ; \
fi
@echo ""
@echo "Run 'make issue-backend-detect' to auto-configure"
# Advanced Operations
.PHONY : issue -export
issue-export : ## Export issues to backup file (requires FILE=backup.json)
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
i f d e f F I L E
issue export " $( FILE) "
e l s e
@echo "❌ FILE is required. Usage: make issue-export FILE=backup.json"
@exit 1
e n d i f
.PHONY : issue -import
issue-import : ## Import issues from backup file (requires FILE=backup.json)
i f n d e f I S S U E _ C L I
@echo "❌ Issue facade not installed"
@exit 1
e n d i f
i f d e f F I L E
issue import " $( FILE) "
e l s e
@echo "❌ FILE is required. Usage: make issue-import FILE=backup.json"
@exit 1
e n d i f
# Meta information for capability discovery
.PHONY : capability -info
capability-info : ## Show capability information
@echo " Name: $( CAPABILITY_NAME) "
@echo " Description: $( CAPABILITY_DESCRIPTION) "
@echo "Type: CLI application with backend facade pattern"
@echo "Main command: issue"
@echo "Supported backends: Local SQLite, GitHub, GitLab, Gitea"
@echo "Key features: Repository-aware, offline-capable, unified interface"
@echo "Targets:"
2026-05-23 06:45:36 +02:00
@$( MAKE) --no-print-directory help | grep "^ " | sed 's/^ / /'