caaafacf45
CI / push-validation (push) Successful in 18s
CI / helm (push) Successful in 23s
CI / build (push) Successful in 30s
CI / lint (push) Successful in 32s
CI / quality (push) Successful in 32s
CI / typecheck (push) Successful in 1m2s
CI / security (push) Successful in 1m3s
CI / integration_tests (push) Successful in 4m3s
CI / unit_tests (push) Successful in 5m37s
CI / docker (push) Successful in 8s
CI / e2e_tests (push) Successful in 7m25s
CI / coverage (push) Successful in 10m51s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
SKILL.md: - Remove stale 'v3 vs legacy plan workflow' reference from frontmatter description - Change all git tag version examples from project-specific v3.6.0 to generic v1.2.3 - Branch name example: upgrade-langchain -> upgrade-dependencies - Documentation traceability module path: was Python-only example, now shows Python, Java, TypeScript, and Go side by side - Task runner session tree: remove bare Python tool names from BEFORE SUBMITTING and SPECIFIC SITUATIONS subsections (bandit+semgrep+vulture, vulture, Radon, MkDocs, Robot Framework) — session descriptions are now tool-agnostic project-tools/README.md: - Full rewrite from Python-only reference to language-agnostic guide - Adds language/tooling note at top explaining Python/nox as the project example - Comprehensive equivalents table covering Python, JS/TS, Java/Kotlin, and Go for every concern (task runner, lint, format, type check, unit/integration tests, coverage, security scan, unused code, complexity, build, docs, benchmarks) - Project environment management section with language comparison table - Dependency caching section with per-language cache key patterns - Configuration files section as a multi-language comparison table - Development setup checklist shows nox/npm/gradlew/go alternatives side by side - 'Always Runnable' section with examples in all four ecosystems - git tag example: v3.6.0 -> v1.2.3 (generic) testing/README.md: - 'Never use stub/pass implementations' -> 'Never use empty/stub implementations (no no-op bodies)' — removes Python-keyword 'pass' used as if universal ISSUES CLOSED: #0
Testing Guidelines
Language / tooling note: This project uses Python with nox, Behave, and Robot Framework. All
nox -s <session>commands below are the project-specific examples. Replace with the equivalent task runner command for your language ecosystem.
Testing Philosophy
- BDD (Behavior-Driven Development) for ALL unit-level tests
- Project framework: Behave (Cucumber/Gherkin standard); other options: Cucumber, SpecFlow, pytest-bdd, rspec, godog
- DO NOT write xUnit-style tests (raw assertions without BDD structure)
- All unit tests = Gherkin feature files in the designated unit test directory (project:
features/) - Integration tests: separate framework exercising real services (project: Robot Framework via pabot)
- Test-first development: write tests BEFORE implementation
- Testing is non-optional — part of definition of done
BDD Unit Tests (project uses Behave)
Location: designated unit test directory (project: features/)
- Feature files in Gherkin syntax (
.feature) - Step definitions grouped by feature (name step file after feature)
- Add to existing step files before creating new ones
- Never commit placeholder steps (all steps must be implemented)
- Never use empty/stub implementations in step definitions (no no-op bodies)
- Run via task runner:
nox -s unit_tests
Integration Tests (project uses Robot Framework)
- Framework: Robot Framework via pabot (parallel execution)
- Location: integration test directory (project:
robot/) - Exercise real services, real endpoints, real dependencies
- NO mocking in integration tests (strictly prohibited)
- Mocks acceptable only for truly impractical external dependencies
- Must be updated when component interfaces change
- Run via task runner:
nox -s integration_tests
Coverage Requirement
- Project threshold: ≥ 97% (overrides C.O.C. baseline of 85%)
- Measured independently for unit AND integration suites
- Run via task runner:
nox -s coverage_report - PR blocked automatically if below threshold
- Project owner can grant exception (must be documented)
- Excluding code from coverage: explicit project owner approval required
Mock Placement Rules (strict)
- Mocks/fakes/stubs/fixtures: designated mock directory ONLY (project:
features/mocks/) - NEVER in production source directory (
src/or equivalent) - NEVER in
scripts/ - Production code must NOT contain
if testing:guards or test-only paths - Use dependency injection to substitute test doubles
- Mocks allowed ONLY in unit tests
- Integration tests must use real services/endpoints/dependencies
What Must Have Tests
- Every non-trivial function, method, class (regardless of overall project coverage)
- Both normal operation AND error/exception paths
- Edge cases and failure modes
- All newly introduced behavior
- Regression tests for every bug fix (via mandatory TDD workflow)
TDD Bug Fix Workflow
- Create Type/Testing "TDD:" issue before writing any code
- Write BDD scenario that captures the buggy behavior (project: Behave)
- Tag with:
@tdd_issue,@tdd_issue_N,@tdd_expected_fail @tdd_expected_failinverts pass/fail — CI passes even though bug exists- Merge TDD test PR to master (proves bug, CI passes)
- Implement fix on
bugfix/branch - REMOVE
@tdd_expected_failtag (leave@tdd_issueand@tdd_issue_N) - Test must now pass normally
- CI quality gate checks
@tdd_expected_failis ABSENT - Merge fix PR → close bug issue
- Test remains permanently as regression guard
Assertion type requirement: Expected-fail steps must fail via the language's assertion type — NOT runtime/infrastructure exceptions.
- Python:
assert conditionorraise AssertionError(...)— not ValueError/RuntimeError - Java:
throw new AssertionError(...)— not RuntimeException - JavaScript/TypeScript:
throw new assert.AssertionError(...)— not Error/TypeError
Running Tests
# Always use the task runner — never invoke frameworks directly
# Python/nox examples (replace with your ecosystem's equivalent):
nox # run all default sessions
nox -s unit_tests # BDD unit tests only (Behave)
nox -s integration_tests # integration tests (Robot Framework)
nox -s coverage_report # generate coverage report
nox -s lint # linting + format check (ruff)
nox -s typecheck # static type checking (Pyright)
nox -s security_scan # security scan (bandit + semgrep + vulture)
nox -s dead_code # dead code detection (vulture)
nox -s format # auto-format (ruff)
If a task runner session is missing → add it to the task runner configuration FIRST.