xtrm-tools 2.0.0
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.
- package/CHANGELOG.md +496 -0
- package/README.md +762 -0
- package/cli/dist/index.cjs +55245 -0
- package/cli/dist/index.cjs.map +1 -0
- package/cli/dist/index.d.cts +2 -0
- package/cli/package.json +43 -0
- package/config/.env.example +40 -0
- package/config/hooks.json +36 -0
- package/config/mcp_servers.json +46 -0
- package/config/mcp_servers_optional.json +53 -0
- package/config/settings.json +70 -0
- package/hooks/README.md +156 -0
- package/hooks/__pycache__/agent_context.cpython-314.pyc +0 -0
- package/hooks/agent_context.py +105 -0
- package/hooks/gitnexus/gitnexus-hook.cjs +133 -0
- package/hooks/serena-workflow-reminder.py +74 -0
- package/hooks/skill-discovery.py +90 -0
- package/hooks/skill-suggestion.py +112 -0
- package/hooks/test_agent_context.py +112 -0
- package/hooks/type-safety-enforcement.py +107 -0
- package/package.json +48 -0
- package/project-skills/main-guard/.claude/hooks/main-guard.cjs +188 -0
- package/project-skills/main-guard/.claude/settings.json +16 -0
- package/project-skills/main-guard/.claude/skills/using-main-guard/SKILL.md +135 -0
- package/project-skills/main-guard/README.md +163 -0
- package/project-skills/py-quality-gate/.claude/hooks/quality-check.py +311 -0
- package/project-skills/py-quality-gate/.claude/settings.json +16 -0
- package/project-skills/py-quality-gate/.claude/skills/using-py-quality-gate/SKILL.md +112 -0
- package/project-skills/py-quality-gate/README.md +147 -0
- package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/doc_reminder.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/skill_staleness.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/.claude/git-hooks/doc_reminder.py +67 -0
- package/project-skills/service-skills-set/.claude/git-hooks/skill_staleness.py +194 -0
- package/project-skills/service-skills-set/.claude/service-registry.json +4 -0
- package/project-skills/service-skills-set/.claude/settings.json +37 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/SKILL.md +433 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/script_quality_standards.md +412 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/service_skill_system_guide.md +264 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/bootstrap.py +308 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/deep_dive.py +304 -0
- package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/scaffolder.py +482 -0
- package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/SKILL.md +231 -0
- package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/scripts/scope.py +74 -0
- package/project-skills/service-skills-set/.claude/skills/updating-service-skills/SKILL.md +136 -0
- package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/drift_detector.py +222 -0
- package/project-skills/service-skills-set/.claude/skills/using-service-skills/SKILL.md +108 -0
- package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/cataloger.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/skill_activator.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/cataloger.py +74 -0
- package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/skill_activator.py +152 -0
- package/project-skills/service-skills-set/README.md +93 -0
- package/project-skills/service-skills-set/__pycache__/install-service-skills.cpython-314.pyc +0 -0
- package/project-skills/service-skills-set/install-service-skills.py +163 -0
- package/project-skills/service-skills-set/service-skills-readme.md +236 -0
- package/project-skills/tdd-guard/.claude/settings.json +38 -0
- package/project-skills/tdd-guard/.claude/skills/using-tdd-guard/SKILL.md +74 -0
- package/project-skills/tdd-guard/CLAUDE.md +98 -0
- package/project-skills/tdd-guard/CONTRIBUTING.md +38 -0
- package/project-skills/tdd-guard/DEVELOPMENT.md +127 -0
- package/project-skills/tdd-guard/LICENSE +21 -0
- package/project-skills/tdd-guard/README.md +396 -0
- package/project-skills/tdd-guard/docs/adr/001-claude-session-subdirectory.md +52 -0
- package/project-skills/tdd-guard/docs/adr/002-secure-claude-binary-path.md +56 -0
- package/project-skills/tdd-guard/docs/adr/003-remove-configurable-data-directory.md +56 -0
- package/project-skills/tdd-guard/docs/adr/004-monorepo-architecture.md +64 -0
- package/project-skills/tdd-guard/docs/adr/005-claude-project-dir-support.md +55 -0
- package/project-skills/tdd-guard/docs/adr/006-phpunit-separate-repository.md +93 -0
- package/project-skills/tdd-guard/docs/adr/007-golangci-lint-path-support.md +83 -0
- package/project-skills/tdd-guard/docs/adr/008-storybook-reporter-design.md +182 -0
- package/project-skills/tdd-guard/docs/assets/tdd-guard-demo-screenshot.gif +0 -0
- package/project-skills/tdd-guard/docs/config-migration.md +143 -0
- package/project-skills/tdd-guard/docs/configuration.md +137 -0
- package/project-skills/tdd-guard/docs/custom-instructions.md +43 -0
- package/project-skills/tdd-guard/docs/enforcement.md +46 -0
- package/project-skills/tdd-guard/docs/ignore-patterns.md +81 -0
- package/project-skills/tdd-guard/docs/linting.md +109 -0
- package/project-skills/tdd-guard/docs/quick-commands.md +52 -0
- package/project-skills/tdd-guard/docs/session-management.md +75 -0
- package/project-skills/tdd-guard/docs/storybook-vitest-addon.md +120 -0
- package/project-skills/tdd-guard/docs/validation-model.md +63 -0
- package/project-skills/tdd-guard/eslint.config.mjs +140 -0
- package/project-skills/tdd-guard/package-lock.json +16937 -0
- package/project-skills/tdd-guard/package.json +102 -0
- package/project-skills/tdd-guard/reporters/go/README.md +67 -0
- package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main.go +127 -0
- package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main_test.go +280 -0
- package/project-skills/tdd-guard/reporters/go/go.mod +3 -0
- package/project-skills/tdd-guard/reporters/go/go.sum +0 -0
- package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter.go +126 -0
- package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter_test.go +264 -0
- package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader.go +26 -0
- package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader_test.go +37 -0
- package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader.go +94 -0
- package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader_test.go +198 -0
- package/project-skills/tdd-guard/reporters/go/internal/parser/parser.go +245 -0
- package/project-skills/tdd-guard/reporters/go/internal/parser/parser_test.go +547 -0
- package/project-skills/tdd-guard/reporters/go/internal/storage/storage.go +35 -0
- package/project-skills/tdd-guard/reporters/go/internal/storage/storage_test.go +113 -0
- package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer.go +103 -0
- package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer_test.go +303 -0
- package/project-skills/tdd-guard/reporters/jest/README.md +102 -0
- package/project-skills/tdd-guard/reporters/jest/package.json +38 -0
- package/project-skills/tdd-guard/reporters/phpunit/.php-cs-fixer.php +28 -0
- package/project-skills/tdd-guard/reporters/phpunit/README.md +97 -0
- package/project-skills/tdd-guard/reporters/phpunit/SYNC_README.md +29 -0
- package/project-skills/tdd-guard/reporters/phpunit/composer.json +55 -0
- package/project-skills/tdd-guard/reporters/phpunit/phpunit.xml.dist +19 -0
- package/project-skills/tdd-guard/reporters/phpunit/psalm.xml +44 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/ErroredTestSubscriber.php +28 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/FailedTestSubscriber.php +28 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/IncompleteTestSubscriber.php +28 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/PassedTestSubscriber.php +27 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/SkippedTestSubscriber.php +28 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Event/TestRunnerFinishedSubscriber.php +24 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/PathValidator.php +88 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/Storage.php +26 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardExtension.php +33 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardListener.php +158 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardSubscriber.php +35 -0
- package/project-skills/tdd-guard/reporters/phpunit/src/TestResultCollector.php +105 -0
- package/project-skills/tdd-guard/reporters/phpunit/tests/PathValidatorTest.php +74 -0
- package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionFailedTest.php +241 -0
- package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionTest.php +84 -0
- package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardStorageLocationTest.php +71 -0
- package/project-skills/tdd-guard/reporters/pytest/README.md +77 -0
- package/project-skills/tdd-guard/reporters/pytest/pyproject.toml +43 -0
- package/project-skills/tdd-guard/reporters/pytest/pytest.ini.example +7 -0
- package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/__init__.py +1 -0
- package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/pytest_reporter.py +134 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/__init__.py +1 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/conftest.py +3 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/helpers.py +293 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/test_config_option.py +38 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/test_path_validation.py +59 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/test_plugin_config.py +32 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/test_project_root.py +296 -0
- package/project-skills/tdd-guard/reporters/pytest/tests/test_pytest_reporter.py +137 -0
- package/project-skills/tdd-guard/reporters/rspec/Gemfile +3 -0
- package/project-skills/tdd-guard/reporters/rust/Cargo.lock +458 -0
- package/project-skills/tdd-guard/reporters/rust/Cargo.toml +33 -0
- package/project-skills/tdd-guard/reporters/rust/Makefile.example +95 -0
- package/project-skills/tdd-guard/reporters/rust/README.md +88 -0
- package/project-skills/tdd-guard/reporters/rust/src/error_parser.rs +309 -0
- package/project-skills/tdd-guard/reporters/rust/src/main.rs +464 -0
- package/project-skills/tdd-guard/reporters/rust/src/parser.rs +225 -0
- package/project-skills/tdd-guard/reporters/rust/src/transformer.rs +409 -0
- package/project-skills/tdd-guard/reporters/storybook/README.md +108 -0
- package/project-skills/tdd-guard/reporters/storybook/package-lock.json +9482 -0
- package/project-skills/tdd-guard/reporters/storybook/package.json +43 -0
- package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test-data.ts +22 -0
- package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test.ts +190 -0
- package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.ts +88 -0
- package/project-skills/tdd-guard/reporters/storybook/src/index.ts +12 -0
- package/project-skills/tdd-guard/reporters/storybook/src/types.ts +37 -0
- package/project-skills/tdd-guard/reporters/storybook/tsconfig.json +11 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/go.mod +3 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/single_failing_test.go +13 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/import/go.mod +3 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/import/single_import_error_test.go +17 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/go.mod +3 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/single_passing_test.go +13 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-failing.test.js +5 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-import-error.test.js +8 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-passing.test.js +5 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleFailingTest.php +11 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleImportErrorTest.php +14 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SinglePassingTest.php +11 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_failing.py +3 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_import_error.py +6 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_passing.py +3 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.lock +7 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.toml +4 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/src/lib.rs +14 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.lock +7 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.toml +4 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/src/lib.rs +13 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.lock +7 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.toml +4 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/src/lib.rs +14 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/storybook/Calculator.js +4 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-failing.stories.js +15 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-import-error.stories.js +14 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-passing.stories.js +15 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-failing.test.js +7 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-import-error.test.js +9 -0
- package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-passing.test.js +7 -0
- package/project-skills/tdd-guard/reporters/test/factories/go.ts +59 -0
- package/project-skills/tdd-guard/reporters/test/factories/helpers.ts +48 -0
- package/project-skills/tdd-guard/reporters/test/factories/index.ts +7 -0
- package/project-skills/tdd-guard/reporters/test/factories/jest.ts +51 -0
- package/project-skills/tdd-guard/reporters/test/factories/phpunit.ts +63 -0
- package/project-skills/tdd-guard/reporters/test/factories/pytest.ts +41 -0
- package/project-skills/tdd-guard/reporters/test/factories/rust.ts +158 -0
- package/project-skills/tdd-guard/reporters/test/factories/storybook.ts +198 -0
- package/project-skills/tdd-guard/reporters/test/factories/vitest.ts +51 -0
- package/project-skills/tdd-guard/reporters/test/reporters.integration.test.ts +735 -0
- package/project-skills/tdd-guard/reporters/test/types.ts +28 -0
- package/project-skills/tdd-guard/reporters/vitest/README.md +64 -0
- package/project-skills/tdd-guard/reporters/vitest/package.json +35 -0
- package/project-skills/tdd-guard/src/cli/buildContext.test.ts +200 -0
- package/project-skills/tdd-guard/src/cli/buildContext.ts +48 -0
- package/project-skills/tdd-guard/src/cli/tdd-guard.test.ts +159 -0
- package/project-skills/tdd-guard/src/cli/tdd-guard.ts +48 -0
- package/project-skills/tdd-guard/src/config/Config.test.ts +538 -0
- package/project-skills/tdd-guard/src/config/Config.ts +172 -0
- package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.test.ts +58 -0
- package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.ts +8 -0
- package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.test.ts +347 -0
- package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.ts +61 -0
- package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.test.ts +24 -0
- package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.ts +7 -0
- package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.test.ts +377 -0
- package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.ts +75 -0
- package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.test.ts +563 -0
- package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.ts +140 -0
- package/project-skills/tdd-guard/src/contracts/types/ClientType.ts +1 -0
- package/project-skills/tdd-guard/src/contracts/types/ConfigOptions.ts +12 -0
- package/project-skills/tdd-guard/src/contracts/types/Context.ts +16 -0
- package/project-skills/tdd-guard/src/contracts/types/ModelClient.ts +3 -0
- package/project-skills/tdd-guard/src/contracts/types/ValidationResult.ts +6 -0
- package/project-skills/tdd-guard/src/guard/GuardManager.test.ts +336 -0
- package/project-skills/tdd-guard/src/guard/GuardManager.ts +83 -0
- package/project-skills/tdd-guard/src/hooks/HookEvents.test.ts +107 -0
- package/project-skills/tdd-guard/src/hooks/HookEvents.ts +39 -0
- package/project-skills/tdd-guard/src/hooks/fileTypeDetection.ts +16 -0
- package/project-skills/tdd-guard/src/hooks/postToolLint.test.ts +327 -0
- package/project-skills/tdd-guard/src/hooks/postToolLint.ts +165 -0
- package/project-skills/tdd-guard/src/hooks/processHookData.test.ts +465 -0
- package/project-skills/tdd-guard/src/hooks/processHookData.ts +203 -0
- package/project-skills/tdd-guard/src/hooks/sessionHandler.test.ts +136 -0
- package/project-skills/tdd-guard/src/hooks/sessionHandler.ts +31 -0
- package/project-skills/tdd-guard/src/hooks/userPromptHandler.test.ts +131 -0
- package/project-skills/tdd-guard/src/hooks/userPromptHandler.ts +55 -0
- package/project-skills/tdd-guard/src/index.ts +19 -0
- package/project-skills/tdd-guard/src/linters/Linter.ts +5 -0
- package/project-skills/tdd-guard/src/linters/eslint/ESLint.test.ts +183 -0
- package/project-skills/tdd-guard/src/linters/eslint/ESLint.ts +82 -0
- package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.test.ts +170 -0
- package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.ts +148 -0
- package/project-skills/tdd-guard/src/processors/index.ts +1 -0
- package/project-skills/tdd-guard/src/processors/lintProcessor.ts +77 -0
- package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.test.ts +303 -0
- package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.ts +255 -0
- package/project-skills/tdd-guard/src/providers/LinterProvider.test.ts +43 -0
- package/project-skills/tdd-guard/src/providers/LinterProvider.ts +20 -0
- package/project-skills/tdd-guard/src/providers/ModelClientProvider.test.ts +68 -0
- package/project-skills/tdd-guard/src/providers/ModelClientProvider.ts +22 -0
- package/project-skills/tdd-guard/src/storage/FileStorage.test.ts +76 -0
- package/project-skills/tdd-guard/src/storage/FileStorage.ts +108 -0
- package/project-skills/tdd-guard/src/storage/MemoryStorage.ts +57 -0
- package/project-skills/tdd-guard/src/storage/Storage.test.ts +227 -0
- package/project-skills/tdd-guard/src/storage/Storage.ts +17 -0
- package/project-skills/tdd-guard/src/validation/context/context.test.ts +364 -0
- package/project-skills/tdd-guard/src/validation/context/context.ts +155 -0
- package/project-skills/tdd-guard/src/validation/models/AnthropicApi.test.ts +171 -0
- package/project-skills/tdd-guard/src/validation/models/AnthropicApi.ts +49 -0
- package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.test.ts +167 -0
- package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.ts +54 -0
- package/project-skills/tdd-guard/src/validation/models/ClaudeCli.test.ts +239 -0
- package/project-skills/tdd-guard/src/validation/models/ClaudeCli.ts +57 -0
- package/project-skills/tdd-guard/src/validation/prompts/file-types.ts +52 -0
- package/project-skills/tdd-guard/src/validation/prompts/operations/edit.ts +58 -0
- package/project-skills/tdd-guard/src/validation/prompts/operations/multi-edit.ts +54 -0
- package/project-skills/tdd-guard/src/validation/prompts/operations/write.ts +54 -0
- package/project-skills/tdd-guard/src/validation/prompts/response.ts +40 -0
- package/project-skills/tdd-guard/src/validation/prompts/rules.ts +51 -0
- package/project-skills/tdd-guard/src/validation/prompts/system-prompt.ts +10 -0
- package/project-skills/tdd-guard/src/validation/prompts/tools/lint-results.ts +15 -0
- package/project-skills/tdd-guard/src/validation/prompts/tools/test-output.ts +14 -0
- package/project-skills/tdd-guard/src/validation/prompts/tools/todos.ts +9 -0
- package/project-skills/tdd-guard/src/validation/validator.test.ts +268 -0
- package/project-skills/tdd-guard/src/validation/validator.ts +159 -0
- package/project-skills/tdd-guard/test/artifacts/go/.golangci.yml +6 -0
- package/project-skills/tdd-guard/test/artifacts/go/with-issues/file-with-issues.go +12 -0
- package/project-skills/tdd-guard/test/artifacts/go/with-issues/go.mod +3 -0
- package/project-skills/tdd-guard/test/artifacts/go/without-issues/file-without-issues.go +7 -0
- package/project-skills/tdd-guard/test/artifacts/go/without-issues/go.mod +3 -0
- package/project-skills/tdd-guard/test/artifacts/javascript/eslint.config.js +20 -0
- package/project-skills/tdd-guard/test/artifacts/javascript/file-with-issues.js +12 -0
- package/project-skills/tdd-guard/test/artifacts/javascript/file-without-issues.js +10 -0
- package/project-skills/tdd-guard/test/hooks/fileTypeDetection.test.ts +26 -0
- package/project-skills/tdd-guard/test/hooks/processHookData.fileType.test.ts +46 -0
- package/project-skills/tdd-guard/test/hooks/processHookData.python.test.ts +68 -0
- package/project-skills/tdd-guard/test/integration/test-context.test.ts +66 -0
- package/project-skills/tdd-guard/test/integration/validator.core.test.ts +96 -0
- package/project-skills/tdd-guard/test/integration/validator.scenarios.test.ts +497 -0
- package/project-skills/tdd-guard/test/utils/assertions.ts +29 -0
- package/project-skills/tdd-guard/test/utils/factories/contextFactory.ts +30 -0
- package/project-skills/tdd-guard/test/utils/factories/editFactory.ts +82 -0
- package/project-skills/tdd-guard/test/utils/factories/helpers.test.ts +46 -0
- package/project-skills/tdd-guard/test/utils/factories/helpers.ts +46 -0
- package/project-skills/tdd-guard/test/utils/factories/lintFactory.ts +352 -0
- package/project-skills/tdd-guard/test/utils/factories/modelClientProviderFactory.ts +21 -0
- package/project-skills/tdd-guard/test/utils/factories/multiEditFactory.ts +79 -0
- package/project-skills/tdd-guard/test/utils/factories/operations.ts +57 -0
- package/project-skills/tdd-guard/test/utils/factories/reporterFactory.ts +55 -0
- package/project-skills/tdd-guard/test/utils/factories/scenarios/index.ts +22 -0
- package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/python.ts +745 -0
- package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/typescript.ts +767 -0
- package/project-skills/tdd-guard/test/utils/factories/scenarios/types.ts +77 -0
- package/project-skills/tdd-guard/test/utils/factories/scenarios/utils.ts +15 -0
- package/project-skills/tdd-guard/test/utils/factories/sessionStartFactory.ts +36 -0
- package/project-skills/tdd-guard/test/utils/factories/testDefaults.ts +90 -0
- package/project-skills/tdd-guard/test/utils/factories/testResultsFactory.ts +234 -0
- package/project-skills/tdd-guard/test/utils/factories/todoFactory.ts +99 -0
- package/project-skills/tdd-guard/test/utils/factories/userPromptSubmitFactory.ts +39 -0
- package/project-skills/tdd-guard/test/utils/factories/writeFactory.ts +70 -0
- package/project-skills/tdd-guard/test/utils/index.ts +131 -0
- package/project-skills/tdd-guard/tsconfig.build.json +16 -0
- package/project-skills/tdd-guard/tsconfig.eslint.json +17 -0
- package/project-skills/tdd-guard/tsconfig.json +32 -0
- package/project-skills/tdd-guard/tsconfig.node.json +10 -0
- package/project-skills/tdd-guard/vitest.config.ts +85 -0
- package/project-skills/ts-quality-gate/.claude/hooks/hook-config.json +66 -0
- package/project-skills/ts-quality-gate/.claude/hooks/quality-check.cjs +1251 -0
- package/project-skills/ts-quality-gate/.claude/settings.json +16 -0
- package/project-skills/ts-quality-gate/.claude/skills/using-ts-quality-gate/SKILL.md +81 -0
- package/project-skills/ts-quality-gate/README.md +115 -0
- package/skills/README.txt +31 -0
- package/skills/clean-code/SKILL.md +201 -0
- package/skills/delegating/SKILL.md +196 -0
- package/skills/delegating/config.yaml +210 -0
- package/skills/delegating/references/orchestration-protocols.md +41 -0
- package/skills/docker-expert/SKILL.md +409 -0
- package/skills/documenting/CHANGELOG.md +23 -0
- package/skills/documenting/README.md +148 -0
- package/skills/documenting/SKILL.md +113 -0
- package/skills/documenting/examples/example_pattern.md +70 -0
- package/skills/documenting/examples/example_reference.md +70 -0
- package/skills/documenting/examples/example_ssot_analytics.md +64 -0
- package/skills/documenting/examples/example_workflow.md +141 -0
- package/skills/documenting/references/changelog-format.md +97 -0
- package/skills/documenting/references/metadata-schema.md +136 -0
- package/skills/documenting/references/taxonomy.md +81 -0
- package/skills/documenting/references/versioning-rules.md +78 -0
- package/skills/documenting/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/__pycache__/orchestrator.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/__pycache__/validate_metadata.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/bump_version.sh +60 -0
- package/skills/documenting/scripts/changelog/__init__.py +0 -0
- package/skills/documenting/scripts/changelog/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/changelog/__pycache__/add_entry.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/changelog/__pycache__/bump_release.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/changelog/__pycache__/validate_changelog.cpython-314.pyc +0 -0
- package/skills/documenting/scripts/changelog/add_entry.py +216 -0
- package/skills/documenting/scripts/changelog/bump_release.py +117 -0
- package/skills/documenting/scripts/changelog/init_changelog.py +54 -0
- package/skills/documenting/scripts/changelog/validate_changelog.py +128 -0
- package/skills/documenting/scripts/drift_detector.py +266 -0
- package/skills/documenting/scripts/generate_template.py +311 -0
- package/skills/documenting/scripts/list_by_category.sh +84 -0
- package/skills/documenting/scripts/orchestrator.py +255 -0
- package/skills/documenting/scripts/validate_metadata.py +242 -0
- package/skills/documenting/templates/CHANGELOG.md.template +13 -0
- package/skills/documenting/tests/__pycache__/test_changelog.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/documenting/tests/__pycache__/test_drift_detector.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/documenting/tests/__pycache__/test_orchestrator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/documenting/tests/__pycache__/test_validate_metadata.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/documenting/tests/integration_test.sh +70 -0
- package/skills/documenting/tests/test_changelog.py +201 -0
- package/skills/documenting/tests/test_drift_detector.py +80 -0
- package/skills/documenting/tests/test_orchestrator.py +52 -0
- package/skills/documenting/tests/test_validate_metadata.py +64 -0
- package/skills/find-skills/SKILL.md +133 -0
- package/skills/gitnexus-debugging/SKILL.md +85 -0
- package/skills/gitnexus-exploring/SKILL.md +75 -0
- package/skills/gitnexus-impact-analysis/SKILL.md +94 -0
- package/skills/gitnexus-refactoring/SKILL.md +113 -0
- package/skills/hook-development/SKILL.md +797 -0
- package/skills/hook-development/examples/load-context.sh +55 -0
- package/skills/hook-development/examples/quality-check.js +1168 -0
- package/skills/hook-development/examples/validate-bash.sh +43 -0
- package/skills/hook-development/examples/validate-write.sh +38 -0
- package/skills/hook-development/references/advanced.md +527 -0
- package/skills/hook-development/references/migration.md +369 -0
- package/skills/hook-development/references/patterns.md +412 -0
- package/skills/hook-development/scripts/README.md +164 -0
- package/skills/hook-development/scripts/hook-linter.sh +153 -0
- package/skills/hook-development/scripts/test-hook.sh +252 -0
- package/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
- package/skills/obsidian-cli/SKILL.md +106 -0
- package/skills/orchestrating-agents/SKILL.md +135 -0
- package/skills/orchestrating-agents/config.yaml +45 -0
- package/skills/orchestrating-agents/references/agent-context-integration.md +37 -0
- package/skills/orchestrating-agents/references/examples.md +45 -0
- package/skills/orchestrating-agents/references/handover-protocol.md +31 -0
- package/skills/orchestrating-agents/references/workflows.md +42 -0
- package/skills/orchestrating-agents/scripts/detect_neighbors.py +23 -0
- package/skills/prompt-improving/README.md +162 -0
- package/skills/prompt-improving/SKILL.md +74 -0
- package/skills/prompt-improving/references/analysis_commands.md +24 -0
- package/skills/prompt-improving/references/chain_of_thought.md +24 -0
- package/skills/prompt-improving/references/mcp_definitions.md +20 -0
- package/skills/prompt-improving/references/multishot.md +23 -0
- package/skills/prompt-improving/references/xml_core.md +60 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/senior-backend/SKILL.md +209 -0
- package/skills/senior-backend/references/api_design_patterns.md +103 -0
- package/skills/senior-backend/references/backend_security_practices.md +103 -0
- package/skills/senior-backend/references/database_optimization_guide.md +103 -0
- package/skills/senior-backend/scripts/api_load_tester.py +114 -0
- package/skills/senior-backend/scripts/api_scaffolder.py +114 -0
- package/skills/senior-backend/scripts/database_migration_tool.py +114 -0
- package/skills/senior-data-scientist/SKILL.md +226 -0
- package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
- package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
- package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
- package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
- package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
- package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
- package/skills/senior-devops/SKILL.md +209 -0
- package/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
- package/skills/senior-devops/references/deployment_strategies.md +103 -0
- package/skills/senior-devops/references/infrastructure_as_code.md +103 -0
- package/skills/senior-devops/scripts/deployment_manager.py +114 -0
- package/skills/senior-devops/scripts/pipeline_generator.py +114 -0
- package/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
- package/skills/senior-security/SKILL.md +209 -0
- package/skills/senior-security/references/cryptography_implementation.md +103 -0
- package/skills/senior-security/references/penetration_testing_guide.md +103 -0
- package/skills/senior-security/references/security_architecture_patterns.md +103 -0
- package/skills/senior-security/scripts/pentest_automator.py +114 -0
- package/skills/senior-security/scripts/security_auditor.py +114 -0
- package/skills/senior-security/scripts/threat_modeler.py +114 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +479 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +248 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +332 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/using-TDD/SKILL.md +410 -0
- package/skills/using-serena-lsp/README.md +8 -0
- package/skills/using-serena-lsp/REFERENCE.md +194 -0
- package/skills/using-serena-lsp/SKILL.md +82 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Documenting Skill
|
|
2
|
+
|
|
3
|
+
Comprehensive documentation management for projects using:
|
|
4
|
+
- **Serena SSOT** (.serena/memories/)
|
|
5
|
+
- **CHANGELOG.md** (Keep a Changelog format)
|
|
6
|
+
- **README.md**
|
|
7
|
+
- **CLAUDE.md / AGENT.md**
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
### Initialize Project Documentation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Create CHANGELOG.md
|
|
15
|
+
python3 scripts/changelog/init_changelog.py ./CHANGELOG.md
|
|
16
|
+
|
|
17
|
+
# Create .serena/memories directory
|
|
18
|
+
mkdir -p .serena/memories
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Document a Change
|
|
22
|
+
|
|
23
|
+
**Using Orchestrator (Recommended)**:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
python3 scripts/orchestrator.py . feature "Add new search feature" \
|
|
27
|
+
--scope=search \
|
|
28
|
+
--category=backend
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Manual Workflow**:
|
|
32
|
+
|
|
33
|
+
1. Update CHANGELOG:
|
|
34
|
+
```bash
|
|
35
|
+
python3 scripts/changelog/add_entry.py CHANGELOG.md Added "New feature"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2. Create SSOT (if needed):
|
|
39
|
+
```bash
|
|
40
|
+
python3 scripts/generate_template.py ssot .serena/memories/ssot_search_engine_2026-02-01.md \
|
|
41
|
+
title="Search Engine SSOT" \
|
|
42
|
+
scope="search-engine" \
|
|
43
|
+
domain="backend"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
3. Update README.md and CLAUDE.md manually
|
|
47
|
+
|
|
48
|
+
4. Validate:
|
|
49
|
+
```bash
|
|
50
|
+
python3 scripts/changelog/validate_changelog.py CHANGELOG.md
|
|
51
|
+
python3 scripts/validate_metadata.py .serena/memories/ssot_*.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Release a Version
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Bump CHANGELOG
|
|
58
|
+
python3 scripts/changelog/bump_release.py CHANGELOG.md 1.2.0
|
|
59
|
+
|
|
60
|
+
# Validate
|
|
61
|
+
python3 scripts/changelog/validate_changelog.py CHANGELOG.md
|
|
62
|
+
|
|
63
|
+
# Commit and tag
|
|
64
|
+
git add CHANGELOG.md
|
|
65
|
+
git commit -m "chore: release v1.2.0"
|
|
66
|
+
git tag -a v1.2.0 -m "Release 1.2.0"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Scripts Reference
|
|
70
|
+
|
|
71
|
+
### CHANGELOG Management
|
|
72
|
+
|
|
73
|
+
| Script | Purpose | Example |
|
|
74
|
+
|--------|---------|---------|
|
|
75
|
+
| `init_changelog.py` | Create new CHANGELOG.md | `init_changelog.py ./CHANGELOG.md` |
|
|
76
|
+
| `add_entry.py` | Add entry to [Unreleased] | `add_entry.py CHANGELOG.md Added "Feature X"` |
|
|
77
|
+
| `bump_release.py` | Release new version | `bump_release.py CHANGELOG.md 1.2.0` |
|
|
78
|
+
| `validate_changelog.py` | Validate format | `validate_changelog.py CHANGELOG.md` |
|
|
79
|
+
|
|
80
|
+
### SSOT Management
|
|
81
|
+
|
|
82
|
+
| Script | Purpose | Example |
|
|
83
|
+
|--------|---------|---------|
|
|
84
|
+
| `generate_template.py` | Create new SSOT | `generate_template.py ssot file.md title="X"` |
|
|
85
|
+
| `validate_metadata.py` | Validate SSOT metadata | `validate_metadata.py file.md` |
|
|
86
|
+
| `bump_version.sh` | Calculate next version | `bump_version.sh 1.0.0 patch` |
|
|
87
|
+
|
|
88
|
+
### Orchestration
|
|
89
|
+
|
|
90
|
+
| Script | Purpose | Example |
|
|
91
|
+
|--------|---------|---------|
|
|
92
|
+
| `orchestrator.py` | Coordinate all docs | `orchestrator.py . feature "X"` |
|
|
93
|
+
|
|
94
|
+
## File Structure
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
~/.claude/skills/documenting/
|
|
98
|
+
├── SKILL.md # Skill definition
|
|
99
|
+
├── README.md # This file
|
|
100
|
+
├── scripts/
|
|
101
|
+
│ ├── changelog/
|
|
102
|
+
│ │ ├── init_changelog.py # Create CHANGELOG
|
|
103
|
+
│ │ ├── add_entry.py # Add entries
|
|
104
|
+
│ │ ├── bump_release.py # Release versions
|
|
105
|
+
│ │ └── validate_changelog.py # Validate format
|
|
106
|
+
│ ├── orchestrator.py # Coordination
|
|
107
|
+
│ ├── generate_template.py # SSOT templates
|
|
108
|
+
│ ├── validate_metadata.py # SSOT validation
|
|
109
|
+
│ └── bump_version.sh # Version bumping
|
|
110
|
+
├── templates/
|
|
111
|
+
│ └── CHANGELOG.md.template # CHANGELOG template
|
|
112
|
+
├── references/
|
|
113
|
+
│ ├── metadata-schema.md # SSOT schema
|
|
114
|
+
│ ├── changelog-format.md # Keep a Changelog guide
|
|
115
|
+
│ └── taxonomy.md # SSOT taxonomy
|
|
116
|
+
└── tests/
|
|
117
|
+
├── test_changelog.py # CHANGELOG tests
|
|
118
|
+
└── test_orchestrator.py # Orchestrator tests
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Change Type Guide
|
|
122
|
+
|
|
123
|
+
- **feature**: New functionality → CHANGELOG: Added
|
|
124
|
+
- **bugfix**: Bug fixes → CHANGELOG: Fixed
|
|
125
|
+
- **refactor**: Code restructuring → CHANGELOG: Changed
|
|
126
|
+
- **breaking**: Breaking changes → CHANGELOG: Changed (with **BREAKING** prefix)
|
|
127
|
+
- **docs**: Documentation → CHANGELOG: Changed
|
|
128
|
+
- **chore**: Maintenance → CHANGELOG: Changed
|
|
129
|
+
|
|
130
|
+
## Validation
|
|
131
|
+
|
|
132
|
+
All scripts validate before modifying files:
|
|
133
|
+
- CHANGELOG: Keep a Changelog 1.0.0 format
|
|
134
|
+
- SSOT: Serena metadata schema
|
|
135
|
+
- Versions: Semantic Versioning 2.0.0
|
|
136
|
+
|
|
137
|
+
## Testing
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Run all tests
|
|
141
|
+
python -m pytest tests/
|
|
142
|
+
|
|
143
|
+
# Test specific module
|
|
144
|
+
python -m pytest tests/test_changelog.py -v
|
|
145
|
+
|
|
146
|
+
# Integration test
|
|
147
|
+
bash tests/integration_test.sh
|
|
148
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documenting
|
|
3
|
+
description: >-
|
|
4
|
+
Maintain SSOT documentation with drift detection. Runs drift_detector.py scan
|
|
5
|
+
on invoke to identify stale memories. Creates/updates Serena memories with
|
|
6
|
+
auto-generated INDEX blocks. MUST be suggested after any feature, refactor,
|
|
7
|
+
or architecture change is verified complete.
|
|
8
|
+
gemini-command: document
|
|
9
|
+
gemini-prompt: |
|
|
10
|
+
1. Identify the task: Create new memory, Update existing, or Validate compliance.
|
|
11
|
+
2. For finalizing changes, use the orchestrator script to update CHANGELOG.md and README.md.
|
|
12
|
+
3. Ensure SSOT memories are stored in .serena/memories/ with correct naming conventions.
|
|
13
|
+
4. Validate YAML frontmatter metadata before completing the task.
|
|
14
|
+
version: 2.0.0
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Documenting Skill
|
|
18
|
+
|
|
19
|
+
This skill provides workflows and tools for maintaining the Serena Single Source of Truth (SSOT) documentation system/memories.
|
|
20
|
+
|
|
21
|
+
## 🚨 AGENT GUIDANCE: When to Suggest This Skill
|
|
22
|
+
|
|
23
|
+
**MANDATORY: Suggest or Use this skill in the following scenarios:**
|
|
24
|
+
|
|
25
|
+
### ✅ Explicit Triggers:
|
|
26
|
+
- User asks to "document this", "create memory", "update ssot".
|
|
27
|
+
- User asks to "validate documentation", "check metadata".
|
|
28
|
+
- User asks to "list memories", "show patterns".
|
|
29
|
+
- User asks to "bump version" of a document.
|
|
30
|
+
|
|
31
|
+
### 🤖 Autonomous Triggers (End of Task):
|
|
32
|
+
- **Condition**: A task (feature, refactor, bugfix) is **completed** and **verified** (tests passed).
|
|
33
|
+
- **Action**: The agent MUST check if SSOT documentation needs creation or update.
|
|
34
|
+
- **Guideline**: "Is this a new component? Update `_ssot`. Is this a new pattern? Create `_pattern`. Did I change architecture? Update `_ssot`."
|
|
35
|
+
|
|
36
|
+
### 📋 Detection Pattern:
|
|
37
|
+
```javascript
|
|
38
|
+
const shouldDocument =
|
|
39
|
+
/(document|ssot|memory|metadata|changelog|bump version)/i.test(userMessage) ||
|
|
40
|
+
(taskCompleted && (newFeature || refactor || architectureChange));
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Core Capabilities
|
|
46
|
+
|
|
47
|
+
1. **Create Memories**: Generate new SSOT documents with correct metadata and structure.
|
|
48
|
+
2. **Update Memories**: Bump versions and maintain changelogs.
|
|
49
|
+
3. **Validate Compliance**: Ensure files follow naming conventions and metadata schemas.
|
|
50
|
+
4. **Navigate**: List and find memories by category.
|
|
51
|
+
|
|
52
|
+
## Workflows
|
|
53
|
+
|
|
54
|
+
**🚨 MANDATORY FIRST STEP FOR ALL WORKFLOWS:**
|
|
55
|
+
|
|
56
|
+
Before using ANY Serena tools, activate the project:
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
mcp__plugin_serena_serena__activate_project({ project: "/path/to/current/working/directory" })
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### Step 1: Detect drift
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
python3 "$HOME/.claude/skills/documenting/scripts/drift_detector.py" scan
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Review the output. If nothing is stale and no explicit documentation request was made → confirm to user and stop.
|
|
71
|
+
|
|
72
|
+
### Step 2: Decide action
|
|
73
|
+
|
|
74
|
+
| Situation | Action |
|
|
75
|
+
|---|---|
|
|
76
|
+
| New feature shipped | Create new SSOT memory OR update existing |
|
|
77
|
+
| Refactor / architecture change | Update relevant SSOT, bump minor version |
|
|
78
|
+
| Bug fix only | CHANGELOG entry only (skip memory update unless behaviour changed) |
|
|
79
|
+
| SKILL.md drift flagged | Update skill + run `validate_metadata.py` on it |
|
|
80
|
+
|
|
81
|
+
### Step 3: Create or update memory
|
|
82
|
+
|
|
83
|
+
**Creating a new memory:**
|
|
84
|
+
```bash
|
|
85
|
+
python3 "$HOME/.claude/skills/documenting/scripts/generate_template.py" \
|
|
86
|
+
ssot <name>_ssot.md title="..." domain="..." subcategory="..."
|
|
87
|
+
```
|
|
88
|
+
Fill `[PENDING]` placeholders. Add `tracks:` globs pointing to the files this memory documents.
|
|
89
|
+
|
|
90
|
+
**Updating an existing memory:**
|
|
91
|
+
1. Read the `<!-- INDEX -->` block only — identify which sections need updating
|
|
92
|
+
2. Use `search_for_pattern` to jump directly to stale sections (avoids reading the full file)
|
|
93
|
+
3. Bump `version:` (patch = content fix, minor = new section, major = full rewrite)
|
|
94
|
+
4. Update `updated:` timestamp to today
|
|
95
|
+
|
|
96
|
+
### Step 4: Regenerate INDEX
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
python3 "$HOME/.claude/skills/documenting/scripts/validate_metadata.py" <memory-file>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
This regenerates the `<!-- INDEX -->` block automatically from the current `##` headings.
|
|
103
|
+
|
|
104
|
+
### Step 5: Update CHANGELOG
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
python3 "$HOME/.claude/skills/documenting/scripts/changelog/add_entry.py" \
|
|
108
|
+
<changelog_file> <type> "<summary>"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> `<changelog_file>`: path to target CHANGELOG.md (e.g. `CHANGELOG.md` or `.serena/memories/CHANGELOG.md`)
|
|
112
|
+
|
|
113
|
+
Types: `Added`, `Changed`, `Fixed`, `Removed`.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Circuit Breaker Pattern
|
|
3
|
+
version: 1.1.0
|
|
4
|
+
updated: 2026-01-20T10:00:00Z
|
|
5
|
+
scope: pattern-circuit-breaker
|
|
6
|
+
category: pattern
|
|
7
|
+
subcategory: reliability
|
|
8
|
+
domain: [infra, reliability, resiliency]
|
|
9
|
+
changelog:
|
|
10
|
+
- 1.1.0 (2026-01-20): Added exponential backoff configuration.
|
|
11
|
+
- 1.0.0 (2025-12-01): Initial pattern definition.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Purpose
|
|
15
|
+
Standardize the implementation of the Circuit Breaker pattern to prevent cascading failures when external services are unavailable.
|
|
16
|
+
|
|
17
|
+
## Pattern Description
|
|
18
|
+
Wrap calls to external services (CME API, Database, Redis) in a circuit breaker that tracks failure rates. When failures exceed a threshold, the breaker "trips" (opens) and immediately fails subsequent calls for a cooldown period, allowing the downstream system to recover.
|
|
19
|
+
|
|
20
|
+
## When to Apply
|
|
21
|
+
- Any HTTP call to external APIs
|
|
22
|
+
- Database connections
|
|
23
|
+
- RPC calls between internal microservices
|
|
24
|
+
|
|
25
|
+
## Implementation
|
|
26
|
+
|
|
27
|
+
### Standard Configuration
|
|
28
|
+
We use `pybreaker` or the internal `ResiliencyClient` wrapper.
|
|
29
|
+
|
|
30
|
+
**Default Thresholds:**
|
|
31
|
+
- `fail_max`: 5 failures
|
|
32
|
+
- `reset_timeout`: 60 seconds
|
|
33
|
+
|
|
34
|
+
### Example
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
import pybreaker
|
|
38
|
+
from mercury.core.resiliency import circuit_breaker
|
|
39
|
+
|
|
40
|
+
# Define breaker
|
|
41
|
+
api_breaker = pybreaker.CircuitBreaker(
|
|
42
|
+
fail_max=5,
|
|
43
|
+
reset_timeout=60
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@api_breaker
|
|
47
|
+
def call_external_api():
|
|
48
|
+
# ... implementation ...
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
# Or using our wrapper
|
|
52
|
+
@circuit_breaker(service="market_data")
|
|
53
|
+
def fetch_quotes():
|
|
54
|
+
pass
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Trade-offs
|
|
58
|
+
|
|
59
|
+
### Benefits
|
|
60
|
+
- Prevents resource exhaustion (thread pools, connections)
|
|
61
|
+
- Fails fast, improving user experience during outages
|
|
62
|
+
- Allows self-healing of downstream systems
|
|
63
|
+
|
|
64
|
+
### Costs
|
|
65
|
+
- Adds complexity to testing (need to mock failures)
|
|
66
|
+
- Can mask intermittent network blips if calibrated too sensitively
|
|
67
|
+
|
|
68
|
+
## Related Patterns
|
|
69
|
+
- `pattern_retry_logic_2025-11.md` - Use Retries with Circuit Breaker, not instead of.
|
|
70
|
+
- `pattern_bulkhead_2025-12.md` - Isolating failure domains.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Database Query Patterns Reference
|
|
3
|
+
scope: reference-db-queries
|
|
4
|
+
category: reference
|
|
5
|
+
subcategory: database
|
|
6
|
+
domain: [data, sql, performance]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
Reference guide for standard SQL query patterns used in the Mercury project to ensure performance and maintainability.
|
|
11
|
+
|
|
12
|
+
## Naming Conventions
|
|
13
|
+
|
|
14
|
+
| Object Type | Convention | Example |
|
|
15
|
+
|-------------|------------|---------|
|
|
16
|
+
| Table | `snake_case`, plural | `market_orders` |
|
|
17
|
+
| Column | `snake_case` | `created_at` |
|
|
18
|
+
| Primary Key | `id` | `id` |
|
|
19
|
+
| Foreign Key | `[table_singular]_id` | `user_id` |
|
|
20
|
+
| Index | `idx_[table]_[columns]` | `idx_orders_user_id` |
|
|
21
|
+
|
|
22
|
+
## Standard Queries
|
|
23
|
+
|
|
24
|
+
### Time-Series Selection
|
|
25
|
+
Efficiently selecting time-series data using the timescaleDB hypertables.
|
|
26
|
+
|
|
27
|
+
```sql
|
|
28
|
+
-- GOOD: Uses partition key (time)
|
|
29
|
+
SELECT * FROM ticks
|
|
30
|
+
WHERE symbol = 'ES'
|
|
31
|
+
AND time >= NOW() - INTERVAL '1 hour'
|
|
32
|
+
ORDER BY time DESC;
|
|
33
|
+
|
|
34
|
+
-- BAD: Missing time constraint (scans all partitions)
|
|
35
|
+
SELECT * FROM ticks
|
|
36
|
+
WHERE symbol = 'ES'
|
|
37
|
+
ORDER BY time DESC;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Pagination
|
|
41
|
+
Keyset pagination is preferred over OFFSET/LIMIT for large datasets.
|
|
42
|
+
|
|
43
|
+
```sql
|
|
44
|
+
-- GOOD: Keyset pagination
|
|
45
|
+
SELECT * FROM orders
|
|
46
|
+
WHERE id < :last_seen_id
|
|
47
|
+
ORDER BY id DESC
|
|
48
|
+
LIMIT 50;
|
|
49
|
+
|
|
50
|
+
-- BAD: Offset pagination
|
|
51
|
+
SELECT * FROM orders
|
|
52
|
+
ORDER BY id DESC
|
|
53
|
+
LIMIT 50 OFFSET 10000;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Upsert Pattern
|
|
57
|
+
Standard pattern for inserting or updating records.
|
|
58
|
+
|
|
59
|
+
```sql
|
|
60
|
+
INSERT INTO volatility_surfaces (expiry, strike, vol, updated_at)
|
|
61
|
+
VALUES (:expiry, :strike, :vol, NOW())
|
|
62
|
+
ON CONFLICT (expiry, strike)
|
|
63
|
+
DO UPDATE SET
|
|
64
|
+
vol = EXCLUDED.vol,
|
|
65
|
+
updated_at = NOW();
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Additional Resources
|
|
69
|
+
- [PostgreSQL Documentation](https://www.postgresql.org/docs/)
|
|
70
|
+
- [TimescaleDB Best Practices](https://docs.timescale.com/)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Analytics Volatility SSOT
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
updated: 2026-01-20T12:00:00Z
|
|
5
|
+
scope: analytics-volatility
|
|
6
|
+
category: ssot
|
|
7
|
+
subcategory: volatility
|
|
8
|
+
domain: [analytics, options, math]
|
|
9
|
+
applicability: core-pricing-engine
|
|
10
|
+
changelog:
|
|
11
|
+
- 1.0.0 (2026-01-20): Initial baseline creation.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Purpose
|
|
15
|
+
Define the Single Source of Truth for the Volatility Analytics component, including surface construction, interpolation methods, and smile dynamics.
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
The Volatility component is responsible for constructing implied volatility surfaces from market data (CME options) and providing interpolation services for the pricing engine.
|
|
19
|
+
|
|
20
|
+
## Architecture
|
|
21
|
+
|
|
22
|
+
### Data Flow
|
|
23
|
+
1. **Ingestion**: Raw option ticks -> `ingestion_tick`
|
|
24
|
+
2. **Processing**: Strike alignment and filtering -> `VolatilityProcessor`
|
|
25
|
+
3. **Construction**: Spline fitting -> `SurfaceBuilder`
|
|
26
|
+
4. **Storage**: Coefficients stored in Postgres -> `volatility_surfaces` table
|
|
27
|
+
|
|
28
|
+
### Key Classes
|
|
29
|
+
- `VolatilitySurface`: Main interface for querying vol at (expiry, strike)
|
|
30
|
+
- `SABRModel`: Implementation of the SABR stochastic volatility model
|
|
31
|
+
- `CubicSplineInterpolator`: Fallback interpolation method
|
|
32
|
+
|
|
33
|
+
## Current State
|
|
34
|
+
|
|
35
|
+
### What Works
|
|
36
|
+
- Real-time surface updates for major expirations (Quarterly)
|
|
37
|
+
- SABR calibration for liquid strikes
|
|
38
|
+
- Persistence to database
|
|
39
|
+
|
|
40
|
+
### Known Limitations
|
|
41
|
+
- Weekly options often have insufficient liquidity for stable calibration
|
|
42
|
+
- Wings (deep OTM) extrapolation can be unstable in high vol environments
|
|
43
|
+
- No support for negative strikes (required for some rates products)
|
|
44
|
+
|
|
45
|
+
## Configuration
|
|
46
|
+
|
|
47
|
+
### Environment Variables
|
|
48
|
+
```bash
|
|
49
|
+
VOL_SURFACE_UPDATE_FREQ=60 # seconds
|
|
50
|
+
VOL_MODEL_TYPE=sabr # or 'spline'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Related SSOTs
|
|
54
|
+
- `ssot_data_ingestion_tick_2026-01-14.md` - Upstream data source
|
|
55
|
+
- `ssot_analytics_pricing_2025-12-10.md` - Downstream consumer
|
|
56
|
+
|
|
57
|
+
## Next Steps
|
|
58
|
+
- [ ] Implement wing dampening for deep OTM strikes
|
|
59
|
+
- [ ] Add support for negative strikes (Shifted Lognormal)
|
|
60
|
+
- [ ] Optimize recalibration trigger to ignore noise
|
|
61
|
+
|
|
62
|
+
## References
|
|
63
|
+
- [Hagan et al. (2002) Managing Smile Risk](https://link-to-paper)
|
|
64
|
+
- `reference_volatility_math.md` (Internal Math Spec)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Example Workflow: Documenting a New Feature
|
|
2
|
+
|
|
3
|
+
This example shows the complete workflow for documenting a new feature in a project.
|
|
4
|
+
|
|
5
|
+
## Scenario
|
|
6
|
+
|
|
7
|
+
You've just completed a new "semantic search" feature for your project:
|
|
8
|
+
- Added new API endpoint `/api/search`
|
|
9
|
+
- Implemented vector search with ChromaDB
|
|
10
|
+
- Added new configuration options
|
|
11
|
+
- Created comprehensive tests
|
|
12
|
+
|
|
13
|
+
## Step 1: Document with Orchestrator
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cd ~/projects/my-project
|
|
17
|
+
|
|
18
|
+
python3 ~/.claude/skills/documenting/scripts/orchestrator.py . feature
|
|
19
|
+
"Semantic search with vector embeddings"
|
|
20
|
+
--scope=search
|
|
21
|
+
--category=backend
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Output:**
|
|
25
|
+
```
|
|
26
|
+
📝 Documentation Update Results
|
|
27
|
+
============================================================
|
|
28
|
+
✅ CHANGELOG.md updated
|
|
29
|
+
|
|
30
|
+
💡 README.md suggestions:
|
|
31
|
+
- Consider adding to ## Features section: Semantic search with vector embeddings
|
|
32
|
+
- Update ## Usage section with new example
|
|
33
|
+
|
|
34
|
+
💡 CLAUDE.md suggestions:
|
|
35
|
+
- Review ## Architecture section for: Semantic search with vector embeddings
|
|
36
|
+
|
|
37
|
+
✅ All documentation validated
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Step 2: Review CHANGELOG
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
grep -A 10 "\[Unreleased\]" CHANGELOG.md
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Output:**
|
|
47
|
+
```markdown
|
|
48
|
+
## [Unreleased]
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
- Semantic search with vector embeddings
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Step 3: Update README.md
|
|
55
|
+
|
|
56
|
+
Based on orchestrator suggestions, update README:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
## Features
|
|
60
|
+
|
|
61
|
+
- **Semantic Search**: Natural language search using vector embeddings
|
|
62
|
+
- Powered by OpenAI embeddings and ChromaDB
|
|
63
|
+
- Fast approximate nearest neighbor search
|
|
64
|
+
- Configurable similarity threshold
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## Usage
|
|
69
|
+
|
|
70
|
+
### Semantic Search
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from search import SearchEngine
|
|
74
|
+
|
|
75
|
+
engine = SearchEngine()
|
|
76
|
+
results = engine.search("find documents about machine learning")
|
|
77
|
+
|
|
78
|
+
for result in results:
|
|
79
|
+
print(f"{result.title} (similarity: {result.score})")
|
|
80
|
+
```
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Step 4: Update CLAUDE.md
|
|
84
|
+
|
|
85
|
+
Based on suggestions, update architecture:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
## Architecture
|
|
89
|
+
|
|
90
|
+
- **Search Layer**: `services/search_service.py` - Vector search implementation
|
|
91
|
+
- Uses ChromaDB for vector storage
|
|
92
|
+
- OpenAI embeddings via `embedding_service`
|
|
93
|
+
- Configurable reranking with FlashRank
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Step 5: Create SSOT Memory
|
|
97
|
+
|
|
98
|
+
For significant architectural additions:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
python3 ~/.claude/skills/documenting/scripts/generate_template.py ssot
|
|
102
|
+
.serena/memories/ssot_search_semantic_2026-02-01.md
|
|
103
|
+
title="Semantic Search SSOT"
|
|
104
|
+
scope="search-semantic"
|
|
105
|
+
subcategory="search"
|
|
106
|
+
domain="backend,ml"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Edit the generated file to document:
|
|
110
|
+
- Search algorithm design
|
|
111
|
+
- Vector storage architecture
|
|
112
|
+
- Embedding strategy
|
|
113
|
+
- Performance characteristics
|
|
114
|
+
|
|
115
|
+
## Step 6: Validate Everything
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Validate CHANGELOG
|
|
119
|
+
python3 ~/.claude/skills/documenting/scripts/changelog/validate_changelog.py CHANGELOG.md
|
|
120
|
+
|
|
121
|
+
# Validate SSOT
|
|
122
|
+
python3 ~/.claude/skills/documenting/scripts/validate_metadata.py
|
|
123
|
+
.serena/memories/ssot_search_semantic_2026-02-01.md
|
|
124
|
+
|
|
125
|
+
# Or use orchestrator validation
|
|
126
|
+
python3 ~/.claude/skills/documenting/scripts/orchestrator.py . validate
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Step 7: Commit
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
git add
|
|
133
|
+
CHANGELOG.md
|
|
134
|
+
README.md
|
|
135
|
+
CLAUDE.md
|
|
136
|
+
.serena/memories/ssot_search_semantic_2026-02-01.md
|
|
137
|
+
|
|
138
|
+
git commit -m "feat(search): add semantic search with vector embeddings
|
|
139
|
+
|
|
140
|
+
- Implement vector search using ChromaDB
|
|
141
|
+
- Add OpenAI embedding generation
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# CHANGELOG Format Reference
|
|
2
|
+
|
|
3
|
+
This project uses [Keep a Changelog 1.0.0](https://keepachangelog.com/en/1.0.0/) format.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# Changelog
|
|
9
|
+
|
|
10
|
+
All notable changes to this project will be documented in this file.
|
|
11
|
+
|
|
12
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
13
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
14
|
+
|
|
15
|
+
## [Unreleased]
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- New features
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Changes to existing functionality
|
|
22
|
+
|
|
23
|
+
### Deprecated
|
|
24
|
+
- Soon-to-be removed features
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
- Removed features
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
- Bug fixes
|
|
31
|
+
|
|
32
|
+
### Security
|
|
33
|
+
- Security fixes
|
|
34
|
+
|
|
35
|
+
## [1.0.0] - 2026-02-01
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- Initial release
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Categories (in order)
|
|
42
|
+
|
|
43
|
+
1. **Added** - New features
|
|
44
|
+
2. **Changed** - Changes to existing functionality
|
|
45
|
+
3. **Deprecated** - Soon-to-be removed features
|
|
46
|
+
4. **Removed** - Removed features
|
|
47
|
+
5. **Fixed** - Bug fixes
|
|
48
|
+
6. **Security** - Security vulnerabilities fixed
|
|
49
|
+
|
|
50
|
+
## Version Format
|
|
51
|
+
|
|
52
|
+
- Use [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
53
|
+
- Format: `[X.Y.Z] - YYYY-MM-DD`
|
|
54
|
+
- Example: `[1.2.3] - 2026-02-01`
|
|
55
|
+
|
|
56
|
+
## Entry Guidelines
|
|
57
|
+
|
|
58
|
+
- Start with action verb
|
|
59
|
+
- Be specific and concise
|
|
60
|
+
- Include context if needed
|
|
61
|
+
- Use bullet points (-)
|
|
62
|
+
- Sub-bullets for details (indented)
|
|
63
|
+
|
|
64
|
+
### Examples
|
|
65
|
+
|
|
66
|
+
**Good:**
|
|
67
|
+
```markdown
|
|
68
|
+
### Added
|
|
69
|
+
- **Universal Context**: Support for indexing multiple sources simultaneously
|
|
70
|
+
- Zero-Config Auto-Discovery for current project
|
|
71
|
+
- Context-Aware Search with source filtering
|
|
72
|
+
- Reranking with FlashRank (ms-marco-TinyBERT-L-2-v2 model)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Bad:**
|
|
76
|
+
```markdown
|
|
77
|
+
### Added
|
|
78
|
+
- Added stuff
|
|
79
|
+
- Fixed things
|
|
80
|
+
- Improvements
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Breaking Changes
|
|
84
|
+
|
|
85
|
+
Mark breaking changes with **BREAKING**: prefix:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
### Changed
|
|
89
|
+
- **BREAKING**: Renamed `old_function()` to `new_function()`
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Scripts
|
|
93
|
+
|
|
94
|
+
- `init_changelog.py` - Create new CHANGELOG.md
|
|
95
|
+
- `add_entry.py` - Add entry to [Unreleased]
|
|
96
|
+
- `bump_release.py` - Move [Unreleased] to version
|
|
97
|
+
- `validate_changelog.py` - Validate format
|