solokit 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- solokit/__init__.py +10 -0
- solokit/__version__.py +3 -0
- solokit/cli.py +374 -0
- solokit/core/__init__.py +1 -0
- solokit/core/cache.py +102 -0
- solokit/core/command_runner.py +278 -0
- solokit/core/config.py +453 -0
- solokit/core/config_validator.py +204 -0
- solokit/core/constants.py +291 -0
- solokit/core/error_formatter.py +279 -0
- solokit/core/error_handlers.py +346 -0
- solokit/core/exceptions.py +1567 -0
- solokit/core/file_ops.py +309 -0
- solokit/core/logging_config.py +166 -0
- solokit/core/output.py +99 -0
- solokit/core/performance.py +57 -0
- solokit/core/protocols.py +141 -0
- solokit/core/types.py +312 -0
- solokit/deployment/__init__.py +1 -0
- solokit/deployment/executor.py +411 -0
- solokit/git/__init__.py +1 -0
- solokit/git/integration.py +619 -0
- solokit/init/__init__.py +41 -0
- solokit/init/claude_commands_installer.py +87 -0
- solokit/init/dependency_installer.py +313 -0
- solokit/init/docs_structure.py +90 -0
- solokit/init/env_generator.py +160 -0
- solokit/init/environment_validator.py +334 -0
- solokit/init/git_hooks_installer.py +71 -0
- solokit/init/git_setup.py +188 -0
- solokit/init/gitignore_updater.py +195 -0
- solokit/init/initial_commit.py +145 -0
- solokit/init/initial_scans.py +109 -0
- solokit/init/orchestrator.py +246 -0
- solokit/init/readme_generator.py +207 -0
- solokit/init/session_structure.py +239 -0
- solokit/init/template_installer.py +424 -0
- solokit/learning/__init__.py +1 -0
- solokit/learning/archiver.py +115 -0
- solokit/learning/categorizer.py +126 -0
- solokit/learning/curator.py +428 -0
- solokit/learning/extractor.py +352 -0
- solokit/learning/reporter.py +351 -0
- solokit/learning/repository.py +254 -0
- solokit/learning/similarity.py +342 -0
- solokit/learning/validator.py +144 -0
- solokit/project/__init__.py +1 -0
- solokit/project/init.py +1162 -0
- solokit/project/stack.py +436 -0
- solokit/project/sync_plugin.py +438 -0
- solokit/project/tree.py +375 -0
- solokit/quality/__init__.py +1 -0
- solokit/quality/api_validator.py +424 -0
- solokit/quality/checkers/__init__.py +25 -0
- solokit/quality/checkers/base.py +114 -0
- solokit/quality/checkers/context7.py +221 -0
- solokit/quality/checkers/custom.py +162 -0
- solokit/quality/checkers/deployment.py +323 -0
- solokit/quality/checkers/documentation.py +179 -0
- solokit/quality/checkers/formatting.py +161 -0
- solokit/quality/checkers/integration.py +394 -0
- solokit/quality/checkers/linting.py +159 -0
- solokit/quality/checkers/security.py +261 -0
- solokit/quality/checkers/spec_completeness.py +127 -0
- solokit/quality/checkers/tests.py +184 -0
- solokit/quality/env_validator.py +306 -0
- solokit/quality/gates.py +655 -0
- solokit/quality/reporters/__init__.py +10 -0
- solokit/quality/reporters/base.py +25 -0
- solokit/quality/reporters/console.py +98 -0
- solokit/quality/reporters/json_reporter.py +34 -0
- solokit/quality/results.py +98 -0
- solokit/session/__init__.py +1 -0
- solokit/session/briefing/__init__.py +245 -0
- solokit/session/briefing/documentation_loader.py +53 -0
- solokit/session/briefing/formatter.py +476 -0
- solokit/session/briefing/git_context.py +282 -0
- solokit/session/briefing/learning_loader.py +212 -0
- solokit/session/briefing/milestone_builder.py +78 -0
- solokit/session/briefing/orchestrator.py +137 -0
- solokit/session/briefing/stack_detector.py +51 -0
- solokit/session/briefing/tree_generator.py +52 -0
- solokit/session/briefing/work_item_loader.py +209 -0
- solokit/session/briefing.py +353 -0
- solokit/session/complete.py +1188 -0
- solokit/session/status.py +246 -0
- solokit/session/validate.py +452 -0
- solokit/templates/.claude/commands/end.md +109 -0
- solokit/templates/.claude/commands/init.md +159 -0
- solokit/templates/.claude/commands/learn-curate.md +88 -0
- solokit/templates/.claude/commands/learn-search.md +62 -0
- solokit/templates/.claude/commands/learn-show.md +69 -0
- solokit/templates/.claude/commands/learn.md +136 -0
- solokit/templates/.claude/commands/start.md +114 -0
- solokit/templates/.claude/commands/status.md +22 -0
- solokit/templates/.claude/commands/validate.md +27 -0
- solokit/templates/.claude/commands/work-delete.md +119 -0
- solokit/templates/.claude/commands/work-graph.md +139 -0
- solokit/templates/.claude/commands/work-list.md +26 -0
- solokit/templates/.claude/commands/work-new.md +114 -0
- solokit/templates/.claude/commands/work-next.md +25 -0
- solokit/templates/.claude/commands/work-show.md +24 -0
- solokit/templates/.claude/commands/work-update.md +141 -0
- solokit/templates/CHANGELOG.md +17 -0
- solokit/templates/WORK_ITEM_TYPES.md +141 -0
- solokit/templates/__init__.py +1 -0
- solokit/templates/bug_spec.md +217 -0
- solokit/templates/config.schema.json +150 -0
- solokit/templates/dashboard_refine/base/.gitignore +36 -0
- solokit/templates/dashboard_refine/base/app/(dashboard)/layout.tsx +22 -0
- solokit/templates/dashboard_refine/base/app/(dashboard)/page.tsx +68 -0
- solokit/templates/dashboard_refine/base/app/(dashboard)/users/page.tsx +77 -0
- solokit/templates/dashboard_refine/base/app/globals.css +60 -0
- solokit/templates/dashboard_refine/base/app/layout.tsx +23 -0
- solokit/templates/dashboard_refine/base/app/page.tsx +9 -0
- solokit/templates/dashboard_refine/base/components/client-refine-wrapper.tsx +21 -0
- solokit/templates/dashboard_refine/base/components/layout/header.tsx +44 -0
- solokit/templates/dashboard_refine/base/components/layout/sidebar.tsx +82 -0
- solokit/templates/dashboard_refine/base/components/ui/button.tsx +53 -0
- solokit/templates/dashboard_refine/base/components/ui/card.tsx +78 -0
- solokit/templates/dashboard_refine/base/components/ui/table.tsx +116 -0
- solokit/templates/dashboard_refine/base/components.json +16 -0
- solokit/templates/dashboard_refine/base/lib/refine.tsx +65 -0
- solokit/templates/dashboard_refine/base/lib/utils.ts +13 -0
- solokit/templates/dashboard_refine/base/next.config.ts +10 -0
- solokit/templates/dashboard_refine/base/package.json.template +40 -0
- solokit/templates/dashboard_refine/base/postcss.config.mjs +8 -0
- solokit/templates/dashboard_refine/base/providers/refine-provider.tsx +26 -0
- solokit/templates/dashboard_refine/base/tailwind.config.ts +57 -0
- solokit/templates/dashboard_refine/base/tsconfig.json +27 -0
- solokit/templates/dashboard_refine/docker/Dockerfile +57 -0
- solokit/templates/dashboard_refine/docker/docker-compose.prod.yml +31 -0
- solokit/templates/dashboard_refine/docker/docker-compose.yml +21 -0
- solokit/templates/dashboard_refine/tier-1-essential/.eslintrc.json +7 -0
- solokit/templates/dashboard_refine/tier-1-essential/jest.config.ts +17 -0
- solokit/templates/dashboard_refine/tier-1-essential/jest.setup.ts +1 -0
- solokit/templates/dashboard_refine/tier-1-essential/package.json.tier1.template +57 -0
- solokit/templates/dashboard_refine/tier-1-essential/tests/setup.ts +26 -0
- solokit/templates/dashboard_refine/tier-1-essential/tests/unit/example.test.tsx +73 -0
- solokit/templates/dashboard_refine/tier-2-standard/package.json.tier2.template +62 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/eslint.config.mjs +22 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/package.json.tier3.template +79 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/playwright.config.ts +66 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/stryker.conf.json +38 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/tests/e2e/dashboard.spec.ts +88 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/tests/e2e/user-management.spec.ts +102 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/tests/integration/dashboard.test.tsx +90 -0
- solokit/templates/dashboard_refine/tier-3-comprehensive/type-coverage.json +16 -0
- solokit/templates/dashboard_refine/tier-4-production/instrumentation.ts +9 -0
- solokit/templates/dashboard_refine/tier-4-production/k6/dashboard-load-test.js +70 -0
- solokit/templates/dashboard_refine/tier-4-production/next.config.ts +46 -0
- solokit/templates/dashboard_refine/tier-4-production/package.json.tier4.template +89 -0
- solokit/templates/dashboard_refine/tier-4-production/sentry.client.config.ts +26 -0
- solokit/templates/dashboard_refine/tier-4-production/sentry.edge.config.ts +11 -0
- solokit/templates/dashboard_refine/tier-4-production/sentry.server.config.ts +11 -0
- solokit/templates/deployment_spec.md +500 -0
- solokit/templates/feature_spec.md +248 -0
- solokit/templates/fullstack_nextjs/base/.gitignore +36 -0
- solokit/templates/fullstack_nextjs/base/app/api/example/route.ts +65 -0
- solokit/templates/fullstack_nextjs/base/app/globals.css +27 -0
- solokit/templates/fullstack_nextjs/base/app/layout.tsx +20 -0
- solokit/templates/fullstack_nextjs/base/app/page.tsx +32 -0
- solokit/templates/fullstack_nextjs/base/components/example-component.tsx +20 -0
- solokit/templates/fullstack_nextjs/base/lib/prisma.ts +17 -0
- solokit/templates/fullstack_nextjs/base/lib/utils.ts +13 -0
- solokit/templates/fullstack_nextjs/base/lib/validations.ts +20 -0
- solokit/templates/fullstack_nextjs/base/next.config.ts +7 -0
- solokit/templates/fullstack_nextjs/base/package.json.template +32 -0
- solokit/templates/fullstack_nextjs/base/postcss.config.mjs +8 -0
- solokit/templates/fullstack_nextjs/base/prisma/schema.prisma +21 -0
- solokit/templates/fullstack_nextjs/base/tailwind.config.ts +19 -0
- solokit/templates/fullstack_nextjs/base/tsconfig.json +27 -0
- solokit/templates/fullstack_nextjs/docker/Dockerfile +60 -0
- solokit/templates/fullstack_nextjs/docker/docker-compose.prod.yml +57 -0
- solokit/templates/fullstack_nextjs/docker/docker-compose.yml +47 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/.eslintrc.json +7 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/jest.config.ts +17 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/jest.setup.ts +1 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/package.json.tier1.template +48 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/tests/api/example.test.ts +88 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/tests/setup.ts +22 -0
- solokit/templates/fullstack_nextjs/tier-1-essential/tests/unit/example.test.tsx +22 -0
- solokit/templates/fullstack_nextjs/tier-2-standard/package.json.tier2.template +52 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/eslint.config.mjs +39 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/package.json.tier3.template +68 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/playwright.config.ts +66 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/stryker.conf.json +33 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/tests/e2e/flow.spec.ts +59 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/tests/integration/api.test.ts +165 -0
- solokit/templates/fullstack_nextjs/tier-3-comprehensive/type-coverage.json +12 -0
- solokit/templates/fullstack_nextjs/tier-4-production/instrumentation.ts +9 -0
- solokit/templates/fullstack_nextjs/tier-4-production/k6/load-test.js +45 -0
- solokit/templates/fullstack_nextjs/tier-4-production/next.config.ts +46 -0
- solokit/templates/fullstack_nextjs/tier-4-production/package.json.tier4.template +77 -0
- solokit/templates/fullstack_nextjs/tier-4-production/sentry.client.config.ts +26 -0
- solokit/templates/fullstack_nextjs/tier-4-production/sentry.edge.config.ts +11 -0
- solokit/templates/fullstack_nextjs/tier-4-production/sentry.server.config.ts +11 -0
- solokit/templates/git-hooks/prepare-commit-msg +24 -0
- solokit/templates/integration_test_spec.md +363 -0
- solokit/templates/learnings.json +15 -0
- solokit/templates/ml_ai_fastapi/base/.gitignore +104 -0
- solokit/templates/ml_ai_fastapi/base/alembic/env.py +96 -0
- solokit/templates/ml_ai_fastapi/base/alembic.ini +114 -0
- solokit/templates/ml_ai_fastapi/base/pyproject.toml.template +91 -0
- solokit/templates/ml_ai_fastapi/base/requirements.txt.template +28 -0
- solokit/templates/ml_ai_fastapi/base/src/__init__.py +5 -0
- solokit/templates/ml_ai_fastapi/base/src/api/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/base/src/api/dependencies.py +20 -0
- solokit/templates/ml_ai_fastapi/base/src/api/routes/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/base/src/api/routes/example.py +134 -0
- solokit/templates/ml_ai_fastapi/base/src/api/routes/health.py +66 -0
- solokit/templates/ml_ai_fastapi/base/src/core/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/base/src/core/config.py +64 -0
- solokit/templates/ml_ai_fastapi/base/src/core/database.py +50 -0
- solokit/templates/ml_ai_fastapi/base/src/main.py +64 -0
- solokit/templates/ml_ai_fastapi/base/src/models/__init__.py +7 -0
- solokit/templates/ml_ai_fastapi/base/src/models/example.py +61 -0
- solokit/templates/ml_ai_fastapi/base/src/services/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/base/src/services/example.py +115 -0
- solokit/templates/ml_ai_fastapi/docker/Dockerfile +59 -0
- solokit/templates/ml_ai_fastapi/docker/docker-compose.prod.yml +112 -0
- solokit/templates/ml_ai_fastapi/docker/docker-compose.yml +77 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/pyproject.toml.tier1.template +112 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/pyrightconfig.json +41 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/pytest.ini +69 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/requirements-dev.txt +17 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/ruff.toml +81 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/tests/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/tests/conftest.py +72 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/tests/test_main.py +49 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/tests/unit/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/tier-1-essential/tests/unit/test_example.py +113 -0
- solokit/templates/ml_ai_fastapi/tier-2-standard/pyproject.toml.tier2.template +130 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/locustfile.py +99 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/mutmut_config.py +53 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/pyproject.toml.tier3.template +150 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/conftest.py +74 -0
- solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/test_api.py +131 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/pyproject.toml.tier4.template +162 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/requirements-prod.txt +25 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/api/routes/metrics.py +19 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/core/logging.py +74 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/core/monitoring.py +68 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/core/sentry.py +66 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/__init__.py +3 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/logging.py +79 -0
- solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/tracing.py +60 -0
- solokit/templates/refactor_spec.md +287 -0
- solokit/templates/saas_t3/base/.gitignore +36 -0
- solokit/templates/saas_t3/base/app/api/trpc/[trpc]/route.ts +33 -0
- solokit/templates/saas_t3/base/app/globals.css +27 -0
- solokit/templates/saas_t3/base/app/layout.tsx +23 -0
- solokit/templates/saas_t3/base/app/page.tsx +31 -0
- solokit/templates/saas_t3/base/lib/api.tsx +77 -0
- solokit/templates/saas_t3/base/lib/utils.ts +13 -0
- solokit/templates/saas_t3/base/next.config.ts +7 -0
- solokit/templates/saas_t3/base/package.json.template +38 -0
- solokit/templates/saas_t3/base/postcss.config.mjs +8 -0
- solokit/templates/saas_t3/base/prisma/schema.prisma +20 -0
- solokit/templates/saas_t3/base/server/api/root.ts +19 -0
- solokit/templates/saas_t3/base/server/api/routers/example.ts +28 -0
- solokit/templates/saas_t3/base/server/api/trpc.ts +52 -0
- solokit/templates/saas_t3/base/server/db.ts +17 -0
- solokit/templates/saas_t3/base/tailwind.config.ts +19 -0
- solokit/templates/saas_t3/base/tsconfig.json +27 -0
- solokit/templates/saas_t3/docker/Dockerfile +60 -0
- solokit/templates/saas_t3/docker/docker-compose.prod.yml +59 -0
- solokit/templates/saas_t3/docker/docker-compose.yml +49 -0
- solokit/templates/saas_t3/tier-1-essential/.eslintrc.json +7 -0
- solokit/templates/saas_t3/tier-1-essential/jest.config.ts +17 -0
- solokit/templates/saas_t3/tier-1-essential/jest.setup.ts +1 -0
- solokit/templates/saas_t3/tier-1-essential/package.json.tier1.template +54 -0
- solokit/templates/saas_t3/tier-1-essential/tests/setup.ts +22 -0
- solokit/templates/saas_t3/tier-1-essential/tests/unit/example.test.tsx +24 -0
- solokit/templates/saas_t3/tier-2-standard/package.json.tier2.template +58 -0
- solokit/templates/saas_t3/tier-3-comprehensive/eslint.config.mjs +39 -0
- solokit/templates/saas_t3/tier-3-comprehensive/package.json.tier3.template +74 -0
- solokit/templates/saas_t3/tier-3-comprehensive/playwright.config.ts +66 -0
- solokit/templates/saas_t3/tier-3-comprehensive/stryker.conf.json +34 -0
- solokit/templates/saas_t3/tier-3-comprehensive/tests/e2e/home.spec.ts +41 -0
- solokit/templates/saas_t3/tier-3-comprehensive/tests/integration/api.test.ts +44 -0
- solokit/templates/saas_t3/tier-3-comprehensive/type-coverage.json +12 -0
- solokit/templates/saas_t3/tier-4-production/instrumentation.ts +9 -0
- solokit/templates/saas_t3/tier-4-production/k6/load-test.js +51 -0
- solokit/templates/saas_t3/tier-4-production/next.config.ts +46 -0
- solokit/templates/saas_t3/tier-4-production/package.json.tier4.template +83 -0
- solokit/templates/saas_t3/tier-4-production/sentry.client.config.ts +26 -0
- solokit/templates/saas_t3/tier-4-production/sentry.edge.config.ts +11 -0
- solokit/templates/saas_t3/tier-4-production/sentry.server.config.ts +11 -0
- solokit/templates/saas_t3/tier-4-production/vercel.json +37 -0
- solokit/templates/security_spec.md +287 -0
- solokit/templates/stack-versions.yaml +617 -0
- solokit/templates/status_update.json +6 -0
- solokit/templates/template-registry.json +257 -0
- solokit/templates/work_items.json +11 -0
- solokit/testing/__init__.py +1 -0
- solokit/testing/integration_runner.py +550 -0
- solokit/testing/performance.py +637 -0
- solokit/visualization/__init__.py +1 -0
- solokit/visualization/dependency_graph.py +788 -0
- solokit/work_items/__init__.py +1 -0
- solokit/work_items/creator.py +217 -0
- solokit/work_items/delete.py +264 -0
- solokit/work_items/get_dependencies.py +185 -0
- solokit/work_items/get_dependents.py +113 -0
- solokit/work_items/get_metadata.py +121 -0
- solokit/work_items/get_next_recommendations.py +133 -0
- solokit/work_items/manager.py +235 -0
- solokit/work_items/milestones.py +137 -0
- solokit/work_items/query.py +376 -0
- solokit/work_items/repository.py +267 -0
- solokit/work_items/scheduler.py +184 -0
- solokit/work_items/spec_parser.py +838 -0
- solokit/work_items/spec_validator.py +493 -0
- solokit/work_items/updater.py +157 -0
- solokit/work_items/validator.py +205 -0
- solokit-0.1.1.dist-info/METADATA +640 -0
- solokit-0.1.1.dist-info/RECORD +323 -0
- solokit-0.1.1.dist-info/WHEEL +5 -0
- solokit-0.1.1.dist-info/entry_points.txt +2 -0
- solokit-0.1.1.dist-info/licenses/LICENSE +21 -0
- solokit-0.1.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Update work item fields
|
|
3
|
+
argument-hint: <work_item_id> <field>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Work Item Update
|
|
7
|
+
|
|
8
|
+
Update a specific field of an existing work item using interactive UI.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/work-update <work_item_id> <field>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Fields:** priority, milestone, add-dependency, remove-dependency
|
|
17
|
+
|
|
18
|
+
**Note:** Status changes are NOT allowed via this command. Status is managed automatically by session workflow (/start sets to in_progress, /end sets to completed).
|
|
19
|
+
|
|
20
|
+
**Examples:**
|
|
21
|
+
```
|
|
22
|
+
/work-update bug_timeout priority
|
|
23
|
+
/work-update feature_search milestone
|
|
24
|
+
/work-update integration_test_api add-dependency
|
|
25
|
+
/work-update feature_dashboard remove-dependency
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Instructions
|
|
29
|
+
|
|
30
|
+
1. **Parse arguments** from the command:
|
|
31
|
+
- First argument: `work_item_id` (required)
|
|
32
|
+
- Second argument: `field` (required)
|
|
33
|
+
|
|
34
|
+
**If either is missing:**
|
|
35
|
+
- Show error: "Usage: /work-update <work_item_id> <field>"
|
|
36
|
+
- Show valid fields: priority, milestone, add-dependency, remove-dependency
|
|
37
|
+
- Exit
|
|
38
|
+
|
|
39
|
+
**If field = "status":**
|
|
40
|
+
- Show error: "Status changes are not allowed via /work-update. Status is managed by session workflow (/start, /end)."
|
|
41
|
+
- Exit
|
|
42
|
+
|
|
43
|
+
2. **Load and display current work item details** (optimized - fast metadata-only lookup):
|
|
44
|
+
- Use `python -m solokit.work_items.get_metadata <work_item_id>` for fast metadata retrieval
|
|
45
|
+
- This script reads ONLY the work item metadata from JSON, not the full spec file (much faster!)
|
|
46
|
+
- If work item doesn't exist: Show error and suggest using `/work-list` to see available items
|
|
47
|
+
- Display current values concisely:
|
|
48
|
+
```
|
|
49
|
+
Current: {work_item_id}
|
|
50
|
+
- Type: {type}
|
|
51
|
+
- Status: {status}
|
|
52
|
+
- Priority: {priority}
|
|
53
|
+
- Milestone: {milestone or "(none)"}
|
|
54
|
+
- Dependencies: {dependencies or "(none)"}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
3. **Ask for the new value** based on field specified (use `AskUserQuestion`):
|
|
58
|
+
|
|
59
|
+
**If field = "priority":**
|
|
60
|
+
- Question: "Select new priority for {work_item_id}:"
|
|
61
|
+
- Header: "Priority"
|
|
62
|
+
- Multi-select: false
|
|
63
|
+
- Options:
|
|
64
|
+
- Label: "critical", Description: "Blocking issue or urgent requirement"
|
|
65
|
+
- Label: "high", Description: "Important work to be done soon"
|
|
66
|
+
- Label: "medium", Description: "Normal priority work"
|
|
67
|
+
- Label: "low", Description: "Nice to have, can be deferred"
|
|
68
|
+
|
|
69
|
+
**If field = "milestone":**
|
|
70
|
+
- Question: "Enter milestone name for {work_item_id}:"
|
|
71
|
+
- Header: "Milestone"
|
|
72
|
+
- Multi-select: false
|
|
73
|
+
- Options (provide examples, user selects "Type something"):
|
|
74
|
+
- Label: "Sprint 1", Description: "Example milestone"
|
|
75
|
+
- Label: "Q1 2025", Description: "Example milestone"
|
|
76
|
+
|
|
77
|
+
**If field = "add-dependency":**
|
|
78
|
+
- Query `.session/tracking/work_items.json` for available work items
|
|
79
|
+
- Filter to show only: not_started, in_progress, or blocked items (exclude completed and self)
|
|
80
|
+
- **Smart filtering**: Filter by relevance based on work item's title (e.g., if updating "feature_auth_ui", show auth-related items)
|
|
81
|
+
- Question: "Select work items to add as dependencies for {work_item_id}: (Select multiple)"
|
|
82
|
+
- Header: "Dependencies"
|
|
83
|
+
- **Multi-select: true** (allows selecting multiple dependencies at once)
|
|
84
|
+
- Options: Show up to 4 most relevant work items (prioritize: not_started > in_progress > blocked):
|
|
85
|
+
- Label: "{work_item_id}", Description: "[{priority}] [{type}] {title} ({status})"
|
|
86
|
+
- Note: User can select "Type something" to manually enter comma-separated IDs
|
|
87
|
+
|
|
88
|
+
**If field = "remove-dependency":**
|
|
89
|
+
- Use `python -m solokit.work_items.get_metadata <work_item_id> --with-deps` to get dependency details
|
|
90
|
+
- This returns dependency IDs WITH their type and title in ONE efficient call!
|
|
91
|
+
- If no dependencies: Show error "Work item has no dependencies to remove"
|
|
92
|
+
- Question: "Select dependencies to remove from {work_item_id}: (Select multiple)"
|
|
93
|
+
- Header: "Remove"
|
|
94
|
+
- **Multi-select: true** (allows removing multiple dependencies at once)
|
|
95
|
+
- Options: Show all current dependencies with details:
|
|
96
|
+
- Label: "{dependency_id}", Description: "[{type}] {title} ({status})"
|
|
97
|
+
|
|
98
|
+
4. **Execute the update**:
|
|
99
|
+
|
|
100
|
+
**For all fields:**
|
|
101
|
+
```bash
|
|
102
|
+
sk work-update <work_item_id> --<field> <value>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**For dependencies** (if multiple selected, join with commas):
|
|
106
|
+
```bash
|
|
107
|
+
sk work-update <work_item_id> --add-dependency "dep1,dep2,dep3"
|
|
108
|
+
sk work-update <work_item_id> --remove-dependency "dep1,dep2"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Examples:
|
|
112
|
+
```bash
|
|
113
|
+
sk work-update bug_timeout --priority critical
|
|
114
|
+
sk work-update feature_search --milestone "Sprint 2"
|
|
115
|
+
sk work-update integration_test_api --add-dependency feature_api_client
|
|
116
|
+
sk work-update integration_test_api --add-dependency "feature_api,feature_db,bug_auth"
|
|
117
|
+
sk work-update feature_dashboard --remove-dependency "bug_css_layout,feature_old"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
5. **Show the output** to the user, which includes:
|
|
121
|
+
- Confirmation of the update
|
|
122
|
+
- Old value → New value
|
|
123
|
+
- Update timestamp
|
|
124
|
+
|
|
125
|
+
## Error Handling
|
|
126
|
+
|
|
127
|
+
If the command fails:
|
|
128
|
+
- **Missing arguments**: Show usage and valid fields
|
|
129
|
+
- **Invalid work_item_id**: Show error and list available work items
|
|
130
|
+
- **Status field specified**: Show error explaining status is managed by session workflow
|
|
131
|
+
- **Invalid field**: Show error and list valid fields (priority, milestone, add-dependency, remove-dependency)
|
|
132
|
+
- **Invalid field value**: Re-prompt with valid options
|
|
133
|
+
- **Dependency doesn't exist**: Re-prompt with valid dependencies
|
|
134
|
+
- **No dependencies to remove**: Show error with message
|
|
135
|
+
|
|
136
|
+
## Notes
|
|
137
|
+
|
|
138
|
+
- Updates are automatically tracked in the work item's update_history
|
|
139
|
+
- Each update records timestamp and the changes made
|
|
140
|
+
- Status changes to "completed" trigger completion metadata
|
|
141
|
+
- The field argument uses hyphens (add-dependency, remove-dependency) matching the CLI flags
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial project setup with Session-Driven Development
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
### Removed
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Work Item Types
|
|
2
|
+
|
|
3
|
+
This document defines the work item types supported by the Session-Driven Development plugin.
|
|
4
|
+
|
|
5
|
+
## Standard Work Item Types
|
|
6
|
+
|
|
7
|
+
### feature
|
|
8
|
+
Standard feature development work items.
|
|
9
|
+
- **Template:** Feature specification
|
|
10
|
+
- **Typical sessions:** 2-4
|
|
11
|
+
- **Validation:** Tests pass, linting pass, documentation updated
|
|
12
|
+
|
|
13
|
+
### bug
|
|
14
|
+
Bug fix work items.
|
|
15
|
+
- **Template:** Bug report
|
|
16
|
+
- **Typical sessions:** 1-2
|
|
17
|
+
- **Validation:** Tests pass, regression tests added, root cause documented
|
|
18
|
+
|
|
19
|
+
### refactor
|
|
20
|
+
Code refactoring work items.
|
|
21
|
+
- **Template:** Refactor plan
|
|
22
|
+
- **Typical sessions:** 1-3
|
|
23
|
+
- **Validation:** Tests pass, no functionality changes, code quality improved
|
|
24
|
+
|
|
25
|
+
### security
|
|
26
|
+
Security-focused work items for vulnerabilities, hardening, and compliance.
|
|
27
|
+
- **Template:** `templates/security_task.md`
|
|
28
|
+
- **Typical sessions:** 1-2
|
|
29
|
+
- **Priority:** Critical (by default)
|
|
30
|
+
- **Validation:**
|
|
31
|
+
- Security scan required
|
|
32
|
+
- Penetration testing (for critical issues)
|
|
33
|
+
- Security review completed
|
|
34
|
+
- No new vulnerabilities introduced
|
|
35
|
+
|
|
36
|
+
**Usage:**
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"type": "security",
|
|
40
|
+
"title": "Fix SQL Injection in User Login",
|
|
41
|
+
"priority": "critical",
|
|
42
|
+
"validation_criteria": {
|
|
43
|
+
"security_scan_required": true,
|
|
44
|
+
"penetration_test": true,
|
|
45
|
+
"security_review": true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Integration & Deployment Types (Phase 1.8)
|
|
51
|
+
|
|
52
|
+
### integration_test
|
|
53
|
+
Integration testing work items that validate multiple components working together.
|
|
54
|
+
- **Template:** `templates/integration_test_spec.md`
|
|
55
|
+
- **Typical sessions:** 1-2
|
|
56
|
+
- **Validation:**
|
|
57
|
+
- Integration tests pass
|
|
58
|
+
- End-to-end tests pass
|
|
59
|
+
- Performance benchmarks met
|
|
60
|
+
- API contracts validated
|
|
61
|
+
- **Dependencies:** Required (must specify what components are being integrated)
|
|
62
|
+
|
|
63
|
+
**Usage:**
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"type": "integration_test",
|
|
67
|
+
"title": "Test OAuth + User Profile Integration",
|
|
68
|
+
"dependencies": ["feature_oauth", "feature_profile"],
|
|
69
|
+
"validation_criteria": {
|
|
70
|
+
"integration_tests_pass": true,
|
|
71
|
+
"e2e_tests_pass": true,
|
|
72
|
+
"performance_benchmarks_met": true,
|
|
73
|
+
"api_contracts_validated": true
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### deployment
|
|
79
|
+
Deployment work items for releasing code to environments.
|
|
80
|
+
- **Template:** `templates/deployment_spec.md`
|
|
81
|
+
- **Typical sessions:** 1
|
|
82
|
+
- **Validation:**
|
|
83
|
+
- Deployment successful
|
|
84
|
+
- Smoke tests pass
|
|
85
|
+
- Monitoring operational
|
|
86
|
+
- Rollback tested
|
|
87
|
+
- Documentation updated
|
|
88
|
+
- **Dependencies:** Required (must specify what features/fixes are being deployed)
|
|
89
|
+
|
|
90
|
+
**Usage:**
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"type": "deployment",
|
|
94
|
+
"title": "Deploy v1.2.0 to Production",
|
|
95
|
+
"dependencies": ["feature_oauth", "feature_profile", "integration_test_auth"],
|
|
96
|
+
"validation_criteria": {
|
|
97
|
+
"deployment_successful": true,
|
|
98
|
+
"smoke_tests_pass": true,
|
|
99
|
+
"monitoring_operational": true,
|
|
100
|
+
"rollback_tested": true,
|
|
101
|
+
"documentation_updated": true
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Validation Rules
|
|
107
|
+
|
|
108
|
+
### All Types
|
|
109
|
+
- Must have a title
|
|
110
|
+
- Must have a type from the list above
|
|
111
|
+
- Must have a status (not_started, in_progress, completed)
|
|
112
|
+
- Must have a priority (critical, high, medium, low)
|
|
113
|
+
|
|
114
|
+
### security
|
|
115
|
+
- **Priority should be critical or high** - Security issues are high priority by default
|
|
116
|
+
- **Security validation required** - Must pass security scans and reviews
|
|
117
|
+
- **May require external review** - Security team or penetration testing
|
|
118
|
+
|
|
119
|
+
### integration_test and deployment
|
|
120
|
+
- **Must have dependencies** - Cannot be created without specifying dependencies
|
|
121
|
+
- **Phase-specific validation** - Additional validation criteria enforced
|
|
122
|
+
- **Typical workflow:**
|
|
123
|
+
1. Complete all dependent work items
|
|
124
|
+
2. Create integration_test to validate integration
|
|
125
|
+
3. Complete integration tests
|
|
126
|
+
4. Create deployment to deploy to environment
|
|
127
|
+
5. Complete deployment with smoke tests
|
|
128
|
+
|
|
129
|
+
## Work Item Lifecycle
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
not_started → in_progress → completed
|
|
133
|
+
↓ ↓
|
|
134
|
+
blocked blocked
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Status definitions:**
|
|
138
|
+
- `not_started` - Ready to begin, dependencies satisfied
|
|
139
|
+
- `in_progress` - Currently being worked on
|
|
140
|
+
- `blocked` - Waiting on dependency or external factor
|
|
141
|
+
- `completed` - Work finished and validated
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Templates for work item specs, configuration, and test setup."""
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Bug: [Bug Title]
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
TEMPLATE INSTRUCTIONS:
|
|
5
|
+
- Replace [Bug Title] with a concise description of the bug
|
|
6
|
+
- Fill out all sections with specific details
|
|
7
|
+
- Include code snippets, error messages, and screenshots where relevant
|
|
8
|
+
- Document your investigation process in Root Cause Analysis
|
|
9
|
+
- Remove these instructions before finalizing the spec
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
## Description
|
|
13
|
+
|
|
14
|
+
<!-- Clear, concise description of the bug and its impact on users/system -->
|
|
15
|
+
|
|
16
|
+
Clear description of the bug and its impact.
|
|
17
|
+
|
|
18
|
+
**Example:**
|
|
19
|
+
> User authentication fails intermittently when logging in from mobile devices. Users see a "Session expired" error even though they just created a new session. This affects approximately 15% of mobile login attempts based on error logs.
|
|
20
|
+
|
|
21
|
+
## Steps to Reproduce
|
|
22
|
+
|
|
23
|
+
<!-- Detailed steps that reliably reproduce the bug -->
|
|
24
|
+
|
|
25
|
+
1. Step 1
|
|
26
|
+
2. Step 2
|
|
27
|
+
3. Step 3
|
|
28
|
+
|
|
29
|
+
**Example:**
|
|
30
|
+
1. Open the app on a mobile device (iOS or Android)
|
|
31
|
+
2. Navigate to the login screen
|
|
32
|
+
3. Enter valid credentials (test@example.com / Test123!)
|
|
33
|
+
4. Tap "Login"
|
|
34
|
+
5. Observe the error message: "Session expired. Please try again."
|
|
35
|
+
6. Repeat steps 3-4 several times
|
|
36
|
+
7. Bug occurs roughly 1 in 7 attempts
|
|
37
|
+
|
|
38
|
+
**Environment:**
|
|
39
|
+
- Device: iPhone 14 Pro, Samsung Galaxy S23
|
|
40
|
+
- OS Version: iOS 17.0, Android 13
|
|
41
|
+
- App Version: 2.3.1
|
|
42
|
+
- Network: WiFi and 5G tested
|
|
43
|
+
|
|
44
|
+
## Expected Behavior
|
|
45
|
+
|
|
46
|
+
<!-- What should happen when the user performs the steps above -->
|
|
47
|
+
|
|
48
|
+
**Example:**
|
|
49
|
+
> User should be successfully authenticated and redirected to the dashboard. A valid session cookie should be set and remain valid for 7 days or until the user logs out.
|
|
50
|
+
|
|
51
|
+
## Actual Behavior
|
|
52
|
+
|
|
53
|
+
<!-- What actually happens, including error messages, logs, screenshots -->
|
|
54
|
+
|
|
55
|
+
**Example:**
|
|
56
|
+
> User sees an error toast: "Session expired. Please try again."
|
|
57
|
+
|
|
58
|
+
**Error Log:**
|
|
59
|
+
```
|
|
60
|
+
[ERROR] 2025-10-18 14:23:45 - SessionManager: Session validation failed
|
|
61
|
+
sessionId: 7f8a9b2c-4d3e-4a1b-9c8d-1e2f3a4b5c6d
|
|
62
|
+
reason: Session not found in cache
|
|
63
|
+
userId: null
|
|
64
|
+
timestamp: 1697640225000
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Screenshot:** [Attach screenshot of error]
|
|
68
|
+
|
|
69
|
+
## Impact
|
|
70
|
+
|
|
71
|
+
<!-- Severity, affected users, business impact, and any available workarounds -->
|
|
72
|
+
|
|
73
|
+
- **Severity:** High (affects core functionality but workaround exists)
|
|
74
|
+
- **Affected Users:** ~15% of mobile users on iOS and Android
|
|
75
|
+
- **Affected Versions:** 2.3.0 and 2.3.1
|
|
76
|
+
- **Business Impact:** Reduced mobile conversion rate by ~8% over past week
|
|
77
|
+
- **Workaround:** Users can retry login 2-3 times until it succeeds
|
|
78
|
+
|
|
79
|
+
## Root Cause Analysis
|
|
80
|
+
|
|
81
|
+
### Investigation
|
|
82
|
+
|
|
83
|
+
<!-- Document what you did to investigate: logs reviewed, code analyzed, experiments run -->
|
|
84
|
+
|
|
85
|
+
**Example:**
|
|
86
|
+
1. Reviewed application logs for past 7 days (10,427 login attempts, 1,563 failures)
|
|
87
|
+
2. Identified pattern: failures only occur on mobile devices
|
|
88
|
+
3. Checked Redis cache metrics: intermittent connection timeouts to session store
|
|
89
|
+
4. Analyzed session creation code in `auth/SessionManager.ts`
|
|
90
|
+
5. Discovered race condition in session creation for mobile devices
|
|
91
|
+
6. Reproduced locally with added latency to Redis connection
|
|
92
|
+
|
|
93
|
+
**Key Findings:**
|
|
94
|
+
- Mobile devices have ~200ms additional latency compared to web
|
|
95
|
+
- Session write to Redis times out after 100ms (too aggressive)
|
|
96
|
+
- When timeout occurs, client receives session ID but server hasn't finished writing
|
|
97
|
+
- Subsequent validation fails because session doesn't exist in Redis yet
|
|
98
|
+
|
|
99
|
+
### Root Cause
|
|
100
|
+
|
|
101
|
+
<!-- The underlying technical cause of the bug -->
|
|
102
|
+
|
|
103
|
+
**Example:**
|
|
104
|
+
> Race condition in `SessionManager.createSession()` method. The method returns the session ID to the client before confirming the session was successfully written to Redis. On mobile devices with higher latency, the Redis write often exceeds the 100ms timeout, but the client already received a session ID and attempts to use it immediately.
|
|
105
|
+
|
|
106
|
+
**Code:**
|
|
107
|
+
```typescript
|
|
108
|
+
// Current buggy code in auth/SessionManager.ts:47-52
|
|
109
|
+
async createSession(userId: string): Promise<string> {
|
|
110
|
+
const sessionId = generateSessionId();
|
|
111
|
+
// Fire-and-forget write (BUG: doesn't await completion)
|
|
112
|
+
this.redis.set(`session:${sessionId}`, userData, 'EX', 604800);
|
|
113
|
+
return sessionId; // Returns before write completes!
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Why It Happened
|
|
118
|
+
|
|
119
|
+
<!-- Why was this bug introduced? What can we learn? -->
|
|
120
|
+
|
|
121
|
+
**Example:**
|
|
122
|
+
> The original implementation used fire-and-forget for Redis writes to optimize for perceived latency (avoiding await). This worked fine in the local development environment but failed to account for higher latency in production, especially on mobile networks.
|
|
123
|
+
|
|
124
|
+
**Contributing Factors:**
|
|
125
|
+
- Insufficient integration testing with realistic network latency
|
|
126
|
+
- No monitoring/alerting on Redis write timeouts
|
|
127
|
+
- Timeout value (100ms) too aggressive for production conditions
|
|
128
|
+
- Lack of error handling for failed cache writes
|
|
129
|
+
|
|
130
|
+
## Fix Approach
|
|
131
|
+
|
|
132
|
+
<!-- How will this bug be fixed? Include code changes if relevant -->
|
|
133
|
+
|
|
134
|
+
**Example:**
|
|
135
|
+
> Await Redis write completion before returning session ID. Increase Redis timeout to 500ms. Add retry logic for failed writes. Add monitoring for session creation failures.
|
|
136
|
+
|
|
137
|
+
**Code Changes:**
|
|
138
|
+
```typescript
|
|
139
|
+
// Fixed code in auth/SessionManager.ts:47-58
|
|
140
|
+
async createSession(userId: string): Promise<string> {
|
|
141
|
+
const sessionId = generateSessionId();
|
|
142
|
+
const userData = { userId, createdAt: Date.now() };
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
// WAIT for Redis write to complete
|
|
146
|
+
await this.redis.set(
|
|
147
|
+
`session:${sessionId}`,
|
|
148
|
+
JSON.stringify(userData),
|
|
149
|
+
'EX',
|
|
150
|
+
604800,
|
|
151
|
+
{ timeout: 500 } // Increased timeout
|
|
152
|
+
);
|
|
153
|
+
this.metrics.recordSessionCreated(userId);
|
|
154
|
+
return sessionId;
|
|
155
|
+
} catch (error) {
|
|
156
|
+
this.metrics.recordSessionCreationFailed(userId, error);
|
|
157
|
+
throw new SessionCreationError('Failed to create session', error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Files Modified:**
|
|
163
|
+
- `src/auth/SessionManager.ts` - Fix race condition
|
|
164
|
+
- `src/config/redis.ts` - Increase default timeout to 500ms
|
|
165
|
+
- `src/monitoring/metrics.ts` - Add session creation metrics
|
|
166
|
+
|
|
167
|
+
## Acceptance Criteria
|
|
168
|
+
|
|
169
|
+
<!-- Define specific, measurable criteria for considering this bug fixed -->
|
|
170
|
+
<!-- Minimum 3 items required for spec validation -->
|
|
171
|
+
|
|
172
|
+
- [ ] Root cause is identified and addressed (not just symptoms)
|
|
173
|
+
- [ ] All reproduction steps no longer trigger the bug
|
|
174
|
+
- [ ] Comprehensive tests added to prevent regression
|
|
175
|
+
- [ ] No new bugs or regressions introduced by the fix
|
|
176
|
+
- [ ] Edge cases identified in investigation are handled
|
|
177
|
+
- [ ] All tests pass (unit, integration, and manual)
|
|
178
|
+
- [ ] Documentation updated if behavior changed
|
|
179
|
+
|
|
180
|
+
**Example criteria for a specific bug:**
|
|
181
|
+
- [ ] Mobile login success rate improves to >99% (currently ~85%)
|
|
182
|
+
- [ ] Session creation completes within 500ms on high-latency networks
|
|
183
|
+
- [ ] Redis write failures are properly handled and logged
|
|
184
|
+
- [ ] Monitoring alerts configured for session creation failures
|
|
185
|
+
|
|
186
|
+
## Testing Strategy
|
|
187
|
+
|
|
188
|
+
<!-- Comprehensive testing to verify the fix and prevent regression -->
|
|
189
|
+
|
|
190
|
+
### Regression Tests
|
|
191
|
+
- [ ] Add unit test for session creation with simulated Redis latency
|
|
192
|
+
- [ ] Add integration test for mobile login flow with 200ms+ latency
|
|
193
|
+
- [ ] Add test to verify session immediately usable after creation
|
|
194
|
+
- [ ] Add test for Redis write failure handling
|
|
195
|
+
|
|
196
|
+
### Manual Verification
|
|
197
|
+
- [ ] Test on iPhone 14 Pro with test account
|
|
198
|
+
- [ ] Test on Samsung Galaxy S23 with test account
|
|
199
|
+
- [ ] Test on simulated slow network (3G, high latency)
|
|
200
|
+
- [ ] Verify error monitoring captures failures
|
|
201
|
+
- [ ] Confirm login success rate improves to >99%
|
|
202
|
+
|
|
203
|
+
### Edge Cases
|
|
204
|
+
- [ ] Test with Redis temporarily unavailable
|
|
205
|
+
- [ ] Test with very high latency (1000ms+)
|
|
206
|
+
- [ ] Test concurrent login attempts from same device
|
|
207
|
+
- [ ] Test session creation during Redis failover
|
|
208
|
+
|
|
209
|
+
## Prevention
|
|
210
|
+
|
|
211
|
+
<!-- How can we prevent similar bugs in the future? -->
|
|
212
|
+
|
|
213
|
+
**Example:**
|
|
214
|
+
- Add integration tests with simulated network latency (100ms, 500ms, 1000ms)
|
|
215
|
+
- Set up monitoring/alerting for Redis operation timeouts
|
|
216
|
+
- Code review checklist: verify all async operations are properly awaited
|
|
217
|
+
- Performance testing requirements for mobile devices
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/ankushdixit/solokit/schemas/config.json",
|
|
4
|
+
"title": "Solokit Configuration",
|
|
5
|
+
"description": "Configuration for Session-Driven Development workflows",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"quality_gates": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"description": "Quality gate configuration",
|
|
11
|
+
"properties": {
|
|
12
|
+
"test": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"required": {"type": "boolean"},
|
|
16
|
+
"command": {"type": "string"},
|
|
17
|
+
"timeout": {"type": "integer", "minimum": 1}
|
|
18
|
+
},
|
|
19
|
+
"required": ["required"]
|
|
20
|
+
},
|
|
21
|
+
"lint": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"properties": {
|
|
24
|
+
"required": {"type": "boolean"},
|
|
25
|
+
"command": {"type": "string"},
|
|
26
|
+
"timeout": {"type": "integer", "minimum": 1}
|
|
27
|
+
},
|
|
28
|
+
"required": ["required"]
|
|
29
|
+
},
|
|
30
|
+
"security": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"properties": {
|
|
33
|
+
"required": {"type": "boolean"},
|
|
34
|
+
"severity": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["critical", "high", "medium", "low"]
|
|
37
|
+
},
|
|
38
|
+
"timeout": {"type": "integer", "minimum": 1}
|
|
39
|
+
},
|
|
40
|
+
"required": ["required"]
|
|
41
|
+
},
|
|
42
|
+
"format": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"properties": {
|
|
45
|
+
"required": {"type": "boolean"},
|
|
46
|
+
"auto_fix": {"type": "boolean"},
|
|
47
|
+
"command": {"type": "string"},
|
|
48
|
+
"timeout": {"type": "integer", "minimum": 1}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"documentation": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"properties": {
|
|
54
|
+
"required": {"type": "boolean"},
|
|
55
|
+
"check_changelog": {"type": "boolean"},
|
|
56
|
+
"check_docstrings": {"type": "boolean"}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"spec_completeness": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"properties": {
|
|
62
|
+
"required": {"type": "boolean"}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"learning": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"description": "Learning system configuration",
|
|
70
|
+
"properties": {
|
|
71
|
+
"auto_curate_frequency": {
|
|
72
|
+
"type": "integer",
|
|
73
|
+
"minimum": 1,
|
|
74
|
+
"description": "Auto-curate every N sessions"
|
|
75
|
+
},
|
|
76
|
+
"similarity_threshold": {
|
|
77
|
+
"type": "number",
|
|
78
|
+
"minimum": 0,
|
|
79
|
+
"maximum": 1,
|
|
80
|
+
"description": "Threshold for duplicate detection (Jaccard similarity)"
|
|
81
|
+
},
|
|
82
|
+
"containment_threshold": {
|
|
83
|
+
"type": "number",
|
|
84
|
+
"minimum": 0,
|
|
85
|
+
"maximum": 1,
|
|
86
|
+
"description": "Threshold for containment-based duplicate detection"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"session": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"description": "Session management configuration",
|
|
93
|
+
"properties": {
|
|
94
|
+
"auto_commit": {
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"description": "Automatically commit changes on session end"
|
|
97
|
+
},
|
|
98
|
+
"require_work_item": {
|
|
99
|
+
"type": "boolean",
|
|
100
|
+
"description": "Require work item for session start"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"deployment": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"description": "Deployment configuration",
|
|
107
|
+
"properties": {
|
|
108
|
+
"pre_deployment_checks": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"properties": {
|
|
111
|
+
"integration_tests": {"type": "boolean"},
|
|
112
|
+
"security_scans": {"type": "boolean"},
|
|
113
|
+
"environment_validation": {"type": "boolean"}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"smoke_tests": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"properties": {
|
|
119
|
+
"enabled": {"type": "boolean"},
|
|
120
|
+
"timeout": {"type": "integer", "minimum": 1},
|
|
121
|
+
"retry_count": {"type": "integer", "minimum": 0}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"rollback": {
|
|
125
|
+
"type": "object",
|
|
126
|
+
"properties": {
|
|
127
|
+
"automatic": {"type": "boolean"},
|
|
128
|
+
"on_smoke_test_failure": {"type": "boolean"},
|
|
129
|
+
"on_error_threshold": {"type": "boolean"},
|
|
130
|
+
"error_threshold_percent": {"type": "integer", "minimum": 0, "maximum": 100}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"environments": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"description": "Per-environment deployment configuration",
|
|
136
|
+
"patternProperties": {
|
|
137
|
+
".*": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"properties": {
|
|
140
|
+
"auto_deploy": {"type": "boolean"},
|
|
141
|
+
"require_approval": {"type": "boolean"}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"additionalProperties": true
|
|
150
|
+
}
|