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,136 @@
|
|
|
1
|
+
# SSOT Metadata Schema
|
|
2
|
+
|
|
3
|
+
This reference defines the required and optional YAML frontmatter fields for Serena memories.
|
|
4
|
+
|
|
5
|
+
## Schema Overview
|
|
6
|
+
|
|
7
|
+
Every markdown file in the memories directory **MUST** start with a YAML frontmatter block enclosed in `---`.
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
---
|
|
11
|
+
title: Human Readable Title
|
|
12
|
+
version: 1.0.0
|
|
13
|
+
updated: 2026-01-20T10:00:00Z
|
|
14
|
+
scope: identifier-slug
|
|
15
|
+
category: ssot
|
|
16
|
+
subcategory: component
|
|
17
|
+
domain: [tag1, tag2]
|
|
18
|
+
---
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Field Definitions
|
|
22
|
+
|
|
23
|
+
### Required Fields (All Categories)
|
|
24
|
+
|
|
25
|
+
| Field | Type | Description | Example |
|
|
26
|
+
|-------|------|-------------|---------|
|
|
27
|
+
| `title` | string | Clear, descriptive title of the document | "Analytics Volatility SSOT" |
|
|
28
|
+
| `scope` | string | Unique slug identifying the document's scope | "analytics-volatility" |
|
|
29
|
+
| `category` | enum | One of the standard categories | "ssot" |
|
|
30
|
+
|
|
31
|
+
### Category-Specific Requirements
|
|
32
|
+
|
|
33
|
+
#### SSOT (`ssot_`)
|
|
34
|
+
| Field | Type | Requirement | Description |
|
|
35
|
+
|-------|------|-------------|-------------|
|
|
36
|
+
| `version` | semver | **Required** | Semantic version (x.y.z) |
|
|
37
|
+
| `updated` | timestamp | **Required** | ISO8601 timestamp of last update |
|
|
38
|
+
| `subcategory` | string | **Required** | Specific component name |
|
|
39
|
+
| `domain` | array | **Required** | List of relevant domain tags |
|
|
40
|
+
| `changelog` | array | **Required** | List of version history entries |
|
|
41
|
+
| `tracks` | array | Optional | Glob patterns (fnmatch) for files this memory documents. Used by drift_detector.py to detect documentation drift. |
|
|
42
|
+
|
|
43
|
+
#### Pattern (`pattern_`)
|
|
44
|
+
| Field | Type | Requirement | Description |
|
|
45
|
+
|-------|------|-------------|-------------|
|
|
46
|
+
| `version` | semver | **Required** | Pattern version |
|
|
47
|
+
| `updated` | timestamp | **Required** | ISO8601 timestamp |
|
|
48
|
+
| `domain` | array | **Required** | Tags for applicability |
|
|
49
|
+
| `tracks` | array | Optional | Glob patterns for files this memory documents. Used by drift_detector.py. |
|
|
50
|
+
|
|
51
|
+
#### Plan (`plan_`)
|
|
52
|
+
| Field | Type | Requirement | Description |
|
|
53
|
+
|-------|------|-------------|-------------|
|
|
54
|
+
| `status` | enum | **Required** | draft, in-progress, completed, abandoned |
|
|
55
|
+
| `plan_ref` | string | Optional | ID of related ticket/issue |
|
|
56
|
+
| `tracks` | array | Optional | Glob patterns for files this memory documents. Used by drift_detector.py. |
|
|
57
|
+
|
|
58
|
+
#### Reference (`reference_`)
|
|
59
|
+
|
|
60
|
+
No required category-specific fields beyond the common required fields. The `tracks` field is also available as an optional field (glob patterns for files this memory documents, used by drift_detector.py).
|
|
61
|
+
|
|
62
|
+
#### Archive (`archive_`)
|
|
63
|
+
| Field | Type | Requirement | Description |
|
|
64
|
+
|-------|------|-------------|-------------|
|
|
65
|
+
| `archived_date` | date | **Required** | When it was archived (YYYY-MM-DD) |
|
|
66
|
+
| `replacement` | string | Optional | Link to replacement SSOT |
|
|
67
|
+
|
|
68
|
+
## Valid Values
|
|
69
|
+
|
|
70
|
+
### Categories
|
|
71
|
+
- `ssot`
|
|
72
|
+
- `pattern`
|
|
73
|
+
- `plan`
|
|
74
|
+
- `reference`
|
|
75
|
+
- `archive`
|
|
76
|
+
- `troubleshoot`
|
|
77
|
+
|
|
78
|
+
### Status (for Plans)
|
|
79
|
+
- `draft`
|
|
80
|
+
- `review`
|
|
81
|
+
- `approved`
|
|
82
|
+
- `in-progress`
|
|
83
|
+
- `completed`
|
|
84
|
+
- `on-hold`
|
|
85
|
+
- `cancelled`
|
|
86
|
+
|
|
87
|
+
## Example Frontmatter
|
|
88
|
+
|
|
89
|
+
### Complete SSOT Example
|
|
90
|
+
```yaml
|
|
91
|
+
---
|
|
92
|
+
title: Volatility Surface Analytics SSOT
|
|
93
|
+
version: 2.1.0
|
|
94
|
+
updated: 2026-01-14T15:30:00+00:00
|
|
95
|
+
scope: analytics-volatility
|
|
96
|
+
category: ssot
|
|
97
|
+
subcategory: volatility
|
|
98
|
+
domain: [analytics, math, options]
|
|
99
|
+
applicability: core-pricing-engine
|
|
100
|
+
tracks:
|
|
101
|
+
- "src/analytics/**/*.py"
|
|
102
|
+
- "src/analytics/config.yaml"
|
|
103
|
+
changelog:
|
|
104
|
+
- 2.1.0 (2026-01-14): Added SABR model details.
|
|
105
|
+
- 2.0.0 (2025-12-20): Major refactor of surface construction.
|
|
106
|
+
- 1.0.0 (2025-11-01): Initial baseline.
|
|
107
|
+
---
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Plan Example
|
|
111
|
+
```yaml
|
|
112
|
+
---
|
|
113
|
+
title: Migration to FastAPI
|
|
114
|
+
version: 0.5.0
|
|
115
|
+
updated: 2025-12-28T10:00:00Z
|
|
116
|
+
scope: infra-api-migration
|
|
117
|
+
category: plan
|
|
118
|
+
subcategory: api
|
|
119
|
+
status: in-progress
|
|
120
|
+
domain: [infra, backend]
|
|
121
|
+
---
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Archive Example
|
|
125
|
+
```yaml
|
|
126
|
+
---
|
|
127
|
+
title: Legacy Flask API Documentation
|
|
128
|
+
version: 1.2.0
|
|
129
|
+
updated: 2025-10-15T00:00:00Z
|
|
130
|
+
scope: legacy-api
|
|
131
|
+
category: archive
|
|
132
|
+
subcategory: api
|
|
133
|
+
archived_date: 2025-12-28
|
|
134
|
+
replacement: ssot_infra_api_architecture_2025-12-28.md
|
|
135
|
+
---
|
|
136
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# SSOT Taxonomy & Naming Conventions
|
|
2
|
+
|
|
3
|
+
This reference defines the standard naming conventions and categorization hierarchy for Serena memories and SSOT documentation.
|
|
4
|
+
|
|
5
|
+
## Naming Convention
|
|
6
|
+
All memory files must follow the pattern:
|
|
7
|
+
`[subject]_[category].md`
|
|
8
|
+
|
|
9
|
+
### Components
|
|
10
|
+
|
|
11
|
+
- --subject--: The primary system, component, or area (e.g., `analytics_volatility`, `infra_docker_ops`
|
|
12
|
+
sion).
|
|
13
|
+
- --category--: The type of document (see Category Suffixes below)
|
|
14
|
+
|
|
15
|
+
### Category Suffixes
|
|
16
|
+
|
|
17
|
+
| Category | Suffix | Purpose | Example |
|
|
18
|
+
|-----------|----------|------------------------------------|-------------------------------|
|
|
19
|
+
| **SSOT** | `_ssot` | Single Source of Truth for a component/system | `analytics_stir_ssot.md` |
|
|
20
|
+
| **Pattern** | `_pattern` | Reusable design pattern or standard | `refactoring_security_pattern.md` |
|
|
21
|
+
| **Plan** | `_plan` | Implementation plan or roadmap | `implementation_curve_feed_plan.md` |
|
|
22
|
+
| **Reference** | `_reference` | Look-up tables, cheat sheets, API docs | `database_query_patterns_reference.md` |
|
|
23
|
+
| **Troubleshoot** | `_troubleshoot` | Guide for resolving specific issues | `docker_port_config_troubleshoot.md` |
|
|
24
|
+
| **Archive** | `_archive` | Deprecated documentation (kept for history) | `meta_project_overview_archive.md` |
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## Subject Hierarchy (Domains)
|
|
28
|
+
|
|
29
|
+
Use these standard domains as prefixes for the **subject** part to group documentation:
|
|
30
|
+
|
|
31
|
+
### Analytics (`analytics_*`)
|
|
32
|
+
- [volatility]: Volatility surface and modeling
|
|
33
|
+
- [curve]: Yield curve construction
|
|
34
|
+
- [stir]: Short Term Interest Rates
|
|
35
|
+
- [reporting]: End-of-day and ad-hoc reporting
|
|
36
|
+
- [correlation]: Asset correlation matrices
|
|
37
|
+
- [amt]: Automated Market Trading components
|
|
38
|
+
- [path]: Path-dependent option pricing
|
|
39
|
+
- [snapshot_feed]: Real-time data snapshots
|
|
40
|
+
|
|
41
|
+
### Data (`data_*`)
|
|
42
|
+
- [config]: Instrument and system configuration
|
|
43
|
+
- [ingestion_reliability]: Data pipeline health and monitoring
|
|
44
|
+
- [ingestion_sr3]: SR3 specjfic ingestion
|
|
45
|
+
- [ingestion_tick]: Tick data capture
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Infrastructure (`infra_*`)
|
|
49
|
+
- [docker_ops]: Container orchestration and operations
|
|
50
|
+
- [security_migrations]: Security updates and user migration
|
|
51
|
+
- [mcp_server]: Model Context Protocol server configuration
|
|
52
|
+
- [api_architecture]: FastAPI/Backend architecture
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Meta (`meta_*`)
|
|
56
|
+
- [update_guidelines]: Documentation standards (this document)
|
|
57
|
+
- [project_overview]: High-level project goals and status
|
|
58
|
+
- [project_structure]: Codebase organization
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### Testing (`testing_*`)
|
|
62
|
+
- [qa]: Quality Assurance processes
|
|
63
|
+
- [integration]: Integration test patterns
|
|
64
|
+
|
|
65
|
+
## Tagging Strategy
|
|
66
|
+
Use the `domain` frontmatter field (array) for cross-cutting concerns.
|
|
67
|
+
|
|
68
|
+
**Common Tags:**
|
|
69
|
+
- `fastapi`
|
|
70
|
+
- `docker`
|
|
71
|
+
- `security`
|
|
72
|
+
- `performance`
|
|
73
|
+
- `database`J
|
|
74
|
+
- `refactoring`
|
|
75
|
+
- `deprecation`
|
|
76
|
+
|
|
77
|
+
## Directory Structure
|
|
78
|
+
|
|
79
|
+
While all memories currently reside in a flat structure in `.serena/memories/`, the naming convention allows for virtual folder organization.
|
|
80
|
+
|
|
81
|
+
Future agents may implement physical subdirectories if the flat list exceeds manageable limits (e.g., >200 active SSOTs).
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Versioning Rules for SSOT
|
|
2
|
+
|
|
3
|
+
This reference defines the semantic versioning rules for maintaining Serena memories.
|
|
4
|
+
|
|
5
|
+
## Core Principle
|
|
6
|
+
|
|
7
|
+
Treat documentation versioning with the same rigor as software versioning. This allows agents to determine if their context is outdated and understand the magnitude of changes.
|
|
8
|
+
|
|
9
|
+
## Version Format
|
|
10
|
+
|
|
11
|
+
Use Semantic Versioning 2.0.0: `MAJOR.MINOR.PATCH`
|
|
12
|
+
|
|
13
|
+
### Format: `x.y.z`
|
|
14
|
+
|
|
15
|
+
- **x (Major)**: Breaking changes / Rewrite
|
|
16
|
+
- **y (Minor)**: New features / Significant additions
|
|
17
|
+
- **z (Patch)**: Corrections / Clarifications / Minor updates
|
|
18
|
+
|
|
19
|
+
## Bumping Rules
|
|
20
|
+
|
|
21
|
+
### Patch (x.y.Z) -> (x.y.Z+1)
|
|
22
|
+
Increment the patch version for:
|
|
23
|
+
- Typos and grammar fixes
|
|
24
|
+
- Clarifications of existing content
|
|
25
|
+
- Adding examples
|
|
26
|
+
- Updating links or references
|
|
27
|
+
- Minor formatting changes
|
|
28
|
+
- Metadata updates (e.g., adding a tag)
|
|
29
|
+
|
|
30
|
+
### Minor (x.Y.0) -> (x.Y+1.0)
|
|
31
|
+
Increment the minor version for:
|
|
32
|
+
- Adding a new section or component description
|
|
33
|
+
- Extending the scope of the document
|
|
34
|
+
- Documenting new features added to the system
|
|
35
|
+
- Significant rewrites of specific sections that don't change the overall architecture
|
|
36
|
+
- Adding a new known limitation or workaround
|
|
37
|
+
|
|
38
|
+
### Major (X.0.0) -> (X+1.0.0)
|
|
39
|
+
Increment the major version for:
|
|
40
|
+
- Complete rewrite of the document
|
|
41
|
+
- Major architectural changes to the system described
|
|
42
|
+
- Fundamental change in the document's purpose or scope
|
|
43
|
+
- Marking large sections as deprecated/removed
|
|
44
|
+
- Changing the "Single Source of Truth" authority (e.g., merging two SSOTs)
|
|
45
|
+
|
|
46
|
+
## Changelog Maintenance
|
|
47
|
+
|
|
48
|
+
Every SSOT document must have a `changelog` list in the frontmatter.
|
|
49
|
+
|
|
50
|
+
### Format
|
|
51
|
+
```yaml
|
|
52
|
+
changelog:
|
|
53
|
+
- VERSION (DATE): SUMMARY
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Guidelines
|
|
57
|
+
- **Reverse Chronological Order**: Newest entries first.
|
|
58
|
+
- **Concise**: Keep summaries under 140 characters if possible.
|
|
59
|
+
- **Date Format**: YYYY-MM-DD.
|
|
60
|
+
|
|
61
|
+
### Example
|
|
62
|
+
```yaml
|
|
63
|
+
changelog:
|
|
64
|
+
- 1.2.0 (2026-01-20): Added section on Redis caching strategy.
|
|
65
|
+
- 1.1.1 (2026-01-15): Fixed typos in configuration examples.
|
|
66
|
+
- 1.1.0 (2026-01-10): Documented new async processing pipeline.
|
|
67
|
+
- 1.0.0 (2026-01-01): Initial release.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Workflow for Updating
|
|
71
|
+
|
|
72
|
+
1. **Assess Change**: Determine if it's Patch, Minor, or Major.
|
|
73
|
+
2. **Update Content**: Make the changes in the markdown body.
|
|
74
|
+
3. **Update Frontmatter**:
|
|
75
|
+
- Update `version` field.
|
|
76
|
+
- Update `updated` timestamp (ISO8601).
|
|
77
|
+
- Add entry to top of `changelog`.
|
|
78
|
+
4. **Commit**: Save the file.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Semantic version bumping utility for SSOT memories
|
|
3
|
+
#
|
|
4
|
+
# Usage: bump_version.sh <current_version> <bump_type>
|
|
5
|
+
# bump_type: major | minor | patch
|
|
6
|
+
#
|
|
7
|
+
# Examples:
|
|
8
|
+
# bump_version.sh 1.2.3 patch -> 1.2.4
|
|
9
|
+
# bump_version.sh 1.2.3 minor -> 1.3.0
|
|
10
|
+
# bump_version.sh 1.2.3 major -> 2.0.0
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
if [ $# -ne 2 ]; then
|
|
15
|
+
echo "Usage: $0 <current_version> <bump_type>"
|
|
16
|
+
echo "bump_type: major | minor | patch"
|
|
17
|
+
echo ""
|
|
18
|
+
echo "Examples:"
|
|
19
|
+
echo " $0 1.2.3 patch -> 1.2.4"
|
|
20
|
+
echo " $0 1.2.3 minor -> 1.3.0"
|
|
21
|
+
echo " $0 1.2.3 major -> 2.0.0"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
CURRENT_VERSION=$1
|
|
26
|
+
BUMP_TYPE=$2
|
|
27
|
+
|
|
28
|
+
# Validate version format
|
|
29
|
+
if ! echo "$CURRENT_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
|
|
30
|
+
echo "ERROR: Invalid version format: $CURRENT_VERSION"
|
|
31
|
+
echo "Expected format: x.y.z (e.g., 1.2.3)"
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Parse version components
|
|
36
|
+
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
|
|
37
|
+
|
|
38
|
+
# Bump version based on type
|
|
39
|
+
case "$BUMP_TYPE" in
|
|
40
|
+
major)
|
|
41
|
+
MAJOR=$((MAJOR + 1))
|
|
42
|
+
MINOR=0
|
|
43
|
+
PATCH=0
|
|
44
|
+
;;
|
|
45
|
+
minor)
|
|
46
|
+
MINOR=$((MINOR + 1))
|
|
47
|
+
PATCH=0
|
|
48
|
+
;;
|
|
49
|
+
patch)
|
|
50
|
+
PATCH=$((PATCH + 1))
|
|
51
|
+
;;
|
|
52
|
+
*)
|
|
53
|
+
echo "ERROR: Invalid bump type: $BUMP_TYPE"
|
|
54
|
+
echo "Must be one of: major, minor, patch"
|
|
55
|
+
exit 1
|
|
56
|
+
;;
|
|
57
|
+
esac
|
|
58
|
+
|
|
59
|
+
NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}"
|
|
60
|
+
echo "$NEW_VERSION"
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Add entry to CHANGELOG.md [Unreleased] section.
|
|
4
|
+
|
|
5
|
+
Automatically:
|
|
6
|
+
- Places entry in correct category
|
|
7
|
+
- Creates category if missing
|
|
8
|
+
- Maintains category ordering per Keep a Changelog
|
|
9
|
+
- Preserves existing entries
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import re
|
|
13
|
+
import sys
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Optional
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ChangeCategory(Enum):
|
|
20
|
+
"""Keep a Changelog categories in proper order."""
|
|
21
|
+
ADDED = "Added"
|
|
22
|
+
CHANGED = "Changed"
|
|
23
|
+
DEPRECATED = "Deprecated"
|
|
24
|
+
REMOVED = "Removed"
|
|
25
|
+
FIXED = "Fixed"
|
|
26
|
+
SECURITY = "Security"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
CATEGORY_ORDER = [cat.value for cat in ChangeCategory]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def add_entry(changelog_content: str, category: ChangeCategory, description: str) -> str:
|
|
33
|
+
"""
|
|
34
|
+
Add entry to [Unreleased] section under specified category.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
changelog_content: Full CHANGELOG.md content
|
|
38
|
+
category: ChangeCategory enum value
|
|
39
|
+
description: Entry text (without leading "- ")
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Updated changelog content
|
|
43
|
+
"""
|
|
44
|
+
lines = changelog_content.splitlines()
|
|
45
|
+
|
|
46
|
+
# Find [Unreleased] section
|
|
47
|
+
unreleased_idx = None
|
|
48
|
+
for i, line in enumerate(lines):
|
|
49
|
+
if re.match(r"^## \[Unreleased\]", line):
|
|
50
|
+
unreleased_idx = i
|
|
51
|
+
break
|
|
52
|
+
|
|
53
|
+
if unreleased_idx is None:
|
|
54
|
+
raise ValueError("CHANGELOG missing [Unreleased] section")
|
|
55
|
+
|
|
56
|
+
# Find next version section (end of Unreleased)
|
|
57
|
+
next_version_idx = len(lines)
|
|
58
|
+
for i in range(unreleased_idx + 1, len(lines)):
|
|
59
|
+
if re.match(r"^## \[.+\]", lines[i]):
|
|
60
|
+
next_version_idx = i
|
|
61
|
+
break
|
|
62
|
+
|
|
63
|
+
# Find or create category section
|
|
64
|
+
category_name = category.value
|
|
65
|
+
category_idx = None
|
|
66
|
+
|
|
67
|
+
for i in range(unreleased_idx + 1, next_version_idx):
|
|
68
|
+
if lines[i].strip() == f"### {category_name}":
|
|
69
|
+
category_idx = i
|
|
70
|
+
break
|
|
71
|
+
|
|
72
|
+
if category_idx is None:
|
|
73
|
+
# Category doesn't exist, create it in proper order
|
|
74
|
+
category_idx = _insert_category_in_order(
|
|
75
|
+
lines,
|
|
76
|
+
unreleased_idx,
|
|
77
|
+
next_version_idx,
|
|
78
|
+
category_name
|
|
79
|
+
)
|
|
80
|
+
# Update next_version_idx as lines shifted
|
|
81
|
+
# Wait, if I insert, I need to know how many lines.
|
|
82
|
+
# _insert_category_in_order returns the index of the new category header.
|
|
83
|
+
# But if it inserted blank lines, the indices after it shifted.
|
|
84
|
+
# But next_version_idx is an index, so if I insert BEFORE it, it shifts.
|
|
85
|
+
# Let's check _insert_category_in_order implementation logic.
|
|
86
|
+
# It mutates 'lines' list.
|
|
87
|
+
# If it inserts 2 lines, next_version_idx should increase by 2.
|
|
88
|
+
# But wait, next_version_idx was calculated based on initial list.
|
|
89
|
+
# I should probably re-calculate or just use the return value.
|
|
90
|
+
# But wait, the function mutates the list.
|
|
91
|
+
# Let's look at the implementation below.
|
|
92
|
+
|
|
93
|
+
# Recalculate next_version_idx to be safe?
|
|
94
|
+
# Or rely on finding the category index.
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
# Re-find next version idx just to be safe if lines shifted
|
|
98
|
+
for i in range(unreleased_idx + 1, len(lines)):
|
|
99
|
+
if re.match(r"^## \[.+\]", lines[i]):
|
|
100
|
+
next_version_idx = i
|
|
101
|
+
break
|
|
102
|
+
else:
|
|
103
|
+
next_version_idx = len(lines)
|
|
104
|
+
|
|
105
|
+
# Re-find category index
|
|
106
|
+
for i in range(unreleased_idx + 1, next_version_idx):
|
|
107
|
+
if lines[i].strip() == f"### {category_name}":
|
|
108
|
+
category_idx = i
|
|
109
|
+
break
|
|
110
|
+
|
|
111
|
+
# Find where to insert the entry (after category header)
|
|
112
|
+
insert_idx = category_idx + 1
|
|
113
|
+
|
|
114
|
+
# Skip existing entries to add at end of category
|
|
115
|
+
while insert_idx < len(lines) and insert_idx < next_version_idx and lines[insert_idx].strip().startswith("- "):
|
|
116
|
+
insert_idx += 1
|
|
117
|
+
|
|
118
|
+
# Insert the new entry
|
|
119
|
+
entry_line = f"- {description}"
|
|
120
|
+
lines.insert(insert_idx, entry_line)
|
|
121
|
+
|
|
122
|
+
return '\n'.join(lines)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _insert_category_in_order(
|
|
126
|
+
lines: list,
|
|
127
|
+
unreleased_idx: int,
|
|
128
|
+
next_version_idx: int,
|
|
129
|
+
category_name: str
|
|
130
|
+
) -> int:
|
|
131
|
+
"""
|
|
132
|
+
Insert category header in proper Keep a Changelog order.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Index where category header was inserted
|
|
136
|
+
"""
|
|
137
|
+
category_order_idx = CATEGORY_ORDER.index(category_name)
|
|
138
|
+
|
|
139
|
+
# Find existing categories in Unreleased section
|
|
140
|
+
existing_categories = []
|
|
141
|
+
# Note: next_version_idx is based on current lines state
|
|
142
|
+
for i in range(unreleased_idx + 1, next_version_idx):
|
|
143
|
+
match = re.match(r"^### (.+)$", lines[i])
|
|
144
|
+
if match:
|
|
145
|
+
cat = match.group(1)
|
|
146
|
+
if cat in CATEGORY_ORDER:
|
|
147
|
+
existing_categories.append((i, cat))
|
|
148
|
+
|
|
149
|
+
# Find insertion point
|
|
150
|
+
insert_idx = next_version_idx
|
|
151
|
+
for idx, cat in existing_categories:
|
|
152
|
+
cat_order_idx = CATEGORY_ORDER.index(cat)
|
|
153
|
+
if category_order_idx < cat_order_idx:
|
|
154
|
+
# Insert before this category
|
|
155
|
+
insert_idx = idx
|
|
156
|
+
break
|
|
157
|
+
|
|
158
|
+
# Insert category header with blank line before if not first
|
|
159
|
+
if existing_categories:
|
|
160
|
+
lines.insert(insert_idx, "")
|
|
161
|
+
insert_idx += 1
|
|
162
|
+
else:
|
|
163
|
+
# First category, add blank line after [Unreleased]
|
|
164
|
+
lines.insert(unreleased_idx + 1, "")
|
|
165
|
+
insert_idx = unreleased_idx + 2
|
|
166
|
+
|
|
167
|
+
lines.insert(insert_idx, f"### {category_name}")
|
|
168
|
+
|
|
169
|
+
return insert_idx
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def add_entry_to_file(
|
|
173
|
+
filepath: Path,
|
|
174
|
+
category: ChangeCategory,
|
|
175
|
+
description: str
|
|
176
|
+
) -> None:
|
|
177
|
+
"""Add entry to CHANGELOG file."""
|
|
178
|
+
if not filepath.exists():
|
|
179
|
+
raise FileNotFoundError(f"CHANGELOG not found: {filepath}")
|
|
180
|
+
|
|
181
|
+
content = filepath.read_text(encoding='utf-8')
|
|
182
|
+
updated = add_entry(content, category, description)
|
|
183
|
+
filepath.write_text(updated, encoding='utf-8')
|
|
184
|
+
|
|
185
|
+
print(f"✅ Added to {filepath.name}:")
|
|
186
|
+
print(f" [{category.value}] {description}")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def main():
|
|
190
|
+
"""CLI entry point."""
|
|
191
|
+
if len(sys.argv) != 4:
|
|
192
|
+
print("Usage: add_entry.py <changelog_file> <category> <description>")
|
|
193
|
+
print("")
|
|
194
|
+
print("Categories: Added, Changed, Deprecated, Removed, Fixed, Security")
|
|
195
|
+
print("")
|
|
196
|
+
print("Example:")
|
|
197
|
+
print(' add_entry.py CHANGELOG.md Added "New semantic search feature"')
|
|
198
|
+
sys.exit(1)
|
|
199
|
+
|
|
200
|
+
filepath = Path(sys.argv[1])
|
|
201
|
+
category_str = sys.argv[2]
|
|
202
|
+
description = sys.argv[3]
|
|
203
|
+
|
|
204
|
+
# Validate category
|
|
205
|
+
try:
|
|
206
|
+
category = ChangeCategory[category_str.upper()]
|
|
207
|
+
except KeyError:
|
|
208
|
+
print(f"ERROR: Invalid category '{category_str}'")
|
|
209
|
+
print(f"Valid: {', '.join(CATEGORY_ORDER)}")
|
|
210
|
+
sys.exit(1)
|
|
211
|
+
|
|
212
|
+
add_entry_to_file(filepath, category, description)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
if __name__ == "__main__":
|
|
216
|
+
main()
|