Factory.ai

Strong Testing

containerd reaches Level 4 with 86% Testing pass rate. Currently reaching production grade with 39/60 criteria passing (65%). Key areas for improvement include the opportunities listed below.

Strengths

01
Testing (86%)
Includes Integration Tests Exist, Test Coverage Thresholds, Test Isolation.
02
Code Modularization
✓ internal/ package directories enforce Go's compiler-enforced visibility boundaries
03
Dead Code Detection
✓ staticcheck and revive detect unused code; unused-parameter checks in golangci config

Opportunities

01
Cyclomatic Complexity
Add complexity analysis to identify and refactor overly complex functions.
02
Feature Flag Infrastructure
Add feature flags to enable safer deployments and gradual rollouts.
03
Skills
Create .factory/skills to give agents reusable, tested capabilities for common tasks.

All Criteria

Style & Validation8/12 (67%)
✓code_modularization✓ internal/ package directories enforce Go's compiler-enforced visibility boundaries
✗cyclomatic_complexity✗ No gocyclo or complexity rules found in golangci config; no complexity thresholds enforced
✓dead_code_detection✓ staticcheck and revive detect unused code; unused-parameter checks in golangci config
✓duplicate_code_detection✓ dupword linter checks for duplicate words in source code
✓formatter✓ gofmt and goimports configured in .golangci.yml formatters section
✗large_file_detection✗ No git hooks, CI file size checks, or .gitattributes LFS configuration found
✓lint_config✓ .golangci.yml configured with gosec, revive, misspell, depguard, and other linters
—n_plus_one_detectionSkipped - infrastructure library without visible ORM/database query patterns
✓naming_consistency✓ revive linter with package-comments and naming convention rules enabled
✗pre_commit_hooks✗ No .pre-commit-config.yaml or husky found; no git hooks configured
✓strict_typing✓ Go compiler enforces strict typing by default; no dynamic typing escape hatches used
✗tech_debt_tracking✗ No TODO/FIXME scanner in CI; no linter rules enforcing tech debt tracking
✓type_check✓ Go is strongly typed by default; go.mod requires go >= 1.24.3
Build System8/11 (73%)
✗agentic_development✗ No agent co-authorship found in recent 100 commits; no droid/factory/claude signatures
—automated_pr_reviewSkipped - would require analyzing PR comments for bot/automation; insufficient clear evidence
✓build_cmd_doc✓ BUILDING.md and README.md document 'make' and 'go build' commands clearly
✗build_performance_tracking✗ No build caching (turbo/nx), metrics export, or deliberate build optimization tracking found
—dead_feature_flag_detectionSkipped - prerequisite fails (no feature flag infrastructure)
✓deployment_frequency✓ High release cadence: 2.2.1 (Dec 18), 2.1.6 (Dec 18), 1.7.30 (Dec 18) - multiple per month
✓deps_pinned✓ go.sum committed; Go modules provide cryptographic dependency locking
—fast_ci_feedbackSkipped - would require calculating CI duration from statusCheckRollup timestamps
✗feature_flag_infrastructure✗ No LaunchDarkly, Statsig, Unleash, or custom feature flag system configured
—heavy_dependency_detectionSkipped - not a bundled/frontend application; no bundle size analysis needed
—monorepo_toolingSkipped - single-application repository; no monorepo tooling needed
—progressive_rolloutSkipped - infrastructure library; progressive rollout managed by downstream users/operators
✓release_automation✓ .github/workflows/release.yml automates binary builds and releases on tag push
✓release_notes_automation✓ release.yml extracts release notes from git tag annotations automatically
—rollback_automationSkipped - infrastructure library; rollback handled by package managers and orchestrators
✓single_command_setup✓ BUILDING.md documents 'git clone && cd containerd && make' for dev setup
✓unused_dependencies_detection✓ CI runs 'make verify-vendor' which includes go mod tidy to detect unused dependencies
✓vcs_cli_tools✓ gh CLI available and authenticated to github.com (jonathan-factory account)
—version_drift_detectionSkipped - single-application repository; version drift not applicable
Testing6/7 (86%)
—flaky_test_detectionSkipped - would require analyzing PR statusCheckRollup for retry patterns; no clear evidence
✓integration_tests_exist✓ integration/ directory with comprehensive integration tests; cri-integration tests
✓test_coverage_thresholds✓ codecov.yml exists; Makefile has coverage, root-coverage, cri-integration-coverage targets
✓test_isolation✓ Tests run with -parallel flag in Makefile; TESTFLAGS_PARALLEL variable configured
✓test_naming_conventions✓ Go enforces *_test.go naming convention by default; test files follow this pattern
✓test_performance_tracking✓ Makefile has coverage targets; CI workflows output test results and timing information
✓unit_tests_exist✓ Extensive *_test.go files throughout codebase (cmd/, core/, pkg/, internal/)
—unit_tests_runnableRequires local test execution environment to verify (skipped).
Documentation5/7 (71%)
✗agents_md✗ AGENTS.md not found in repository root
—agents_md_validationSkipped - prerequisite fails (AGENTS.md not found)
✓api_schema_docs✓ Protobuf schemas in api/ directory define gRPC APIs (events.proto, version.proto, etc.)
✓automated_doc_generation✓ Makefile has 'man' target generating man pages from markdown using go-md2man
✓documentation_freshness✓ CONTRIBUTING.md updated in last 180 days (recent activity)
✓readme✓ Comprehensive README.md with project overview, installation, and usage instructions
✓service_flow_documented✓ Architecture diagrams exist: docs/historical/design/architecture.png, data-flow.png, cri/architecture.png
✗skills✗ No .factory/skills/, .skills/, or .claude/skills/ directories found
Dev Environment1/2 (50%)
—database_schemaSkipped - infrastructure daemon without traditional database schema; uses bbolt for metadata
✓devcontainer✓ .devcontainer/devcontainer.json configured with Go 1.24.11 and docker-in-docker
—devcontainer_runnableSkipped - devcontainer CLI availability not verified
✗env_template✗ No .env.example file; environment variables not documented in README/AGENTS.md
—local_services_setupSkipped - infrastructure daemon; no external services (postgres/redis) required for local dev
Debugging & Observability5/8 (63%)
—alerting_configuredSkipped - infrastructure library/daemon; alerting typically configured by users/operators
—circuit_breakersSkipped - infrastructure daemon; circuit breakers not typical for this type of system
✓code_quality_metrics✓ codecov.yml configured for coverage tracking; CI generates coverage profiles
✗deployment_observability✗ No monitoring dashboard links (Datadog, Grafana) found in documentation
✓distributed_tracing✓ OpenTelemetry instrumentation: go.opentelemetry.io/otel packages with grpc/http instrumentation
✗error_tracking_contextualized✗ No Sentry, Bugsnag, or Rollbar integration found for production error tracking
—health_checksSkipped - daemon/runtime provides health via gRPC API; not a traditionally deployed web service
✓metrics_collection✓ Prometheus client instrumented: github.com/prometheus/client_golang in dependencies
✓profiling_instrumentation✓ internal/pprof directory exists for Go profiling support
✗runbooks_documented✗ No runbooks or links to incident response procedures found in README/docs
✓structured_logging✓ github.com/sirupsen/logrus and github.com/containerd/log in go.mod for structured logging
Security3/8 (38%)
✓automated_security_review✓ CodeQL SAST configured in .github/workflows/codeql.yml; runs on PRs and pushes
✓branch_protection✓ Active rulesets: tag create/delete protections enforced via GitHub rulesets
✗codeowners✗ No CODEOWNERS file in repository root or .github/ directory
—dast_scanningSkipped - not a web application; DAST not applicable to container runtime daemon
✓dependency_update_automation✓ Dependabot configured for go modules and github-actions; weekly updates with grouping
✗gitignore_comprehensive✗ .gitignore missing common patterns: no .env, .idea, .vscode, .DS_Store entries
✗log_scrubbing✗ No log sanitization/redaction mechanism configured in logging setup
—pii_handlingSkipped - infrastructure daemon without user PII processing
—privacy_complianceSkipped - infrastructure daemon without end-user data collection
—secret_scanningRequires GitHub admin API access to verify secret scanning configuration (skipped).
✗secrets_management✗ No cloud secrets manager integration or secrets management pattern evident
Task Discovery3/4 (75%)
✓backlog_health✓ 49/50 open issues analyzed have descriptive titles (>10 chars) AND labels (98% health)
✓issue_labeling_system✓ Comprehensive labels: area/* (cri,distribution,runtime), kind/* (bug,feature), priority/P1, platform/windows
✓issue_templates✓ .github/ISSUE_TEMPLATE/ with bug_report.yaml, feature_request.yaml, cri_kep.yaml
✗pr_templates✗ No .github/pull_request_template.md or PULL_REQUEST_TEMPLATE.md found
Product & Analytics0/1 (0%)
✗error_to_insight_pipeline✗ No Sentry-GitHub integration or automated error-to-issue pipeline found
—product_analytics_instrumentationSkipped - infrastructure project; no end-user product analytics needed

Ready to build the software of the future?

Start building

Arrow Right Icon