

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1<!-- Generated by EEIK generate_adapters.py on 2026-08-10 — do not edit by hand -->2---3trigger: always_on4---56# Golden Rules — this project78Non-negotiable engineering standards. Apply to all generated and edited code.910# Golden Rules Standard1112**Applies To:** All projects, all languages, all domains13**Enforced By:** `code-reviewer` agent, CI/CD hooks, `security-auditor` agent14**Status:** Non-negotiable1516---1718## The 12 Golden Rules1920These rules apply to every line of code committed to any EEIK-managed project. They are not preferences — violation of a BLOCKER rule prevents merge.2122---2324### Rule 1 — Constructor Injection Only2526**No `@Autowired` on fields. All injected fields are `final`.**2728```java29// ❌ VIOLATION — field injection30@Service31public class OrderService {32 @Autowired33 private OrderRepository orderRepository;34}3536// ✅ CORRECT — constructor injection37@Service38public class OrderService {39 private final OrderRepository orderRepository;4041 public OrderService(OrderRepository orderRepository) {42 this.orderRepository = orderRepository;43 }44}45```4647**Why:** Fields cannot be `final`. Cannot test without Spring context. Dependencies are invisible.4849---5051### Rule 2 — No Hardcoded Secrets5253**No credentials, API keys, passwords, or AWS account IDs in source code.**5455```java56// ❌ VIOLATION57String apiKey = "sk-live-abc123...";58String dbPassword = "SuperSecret123";5960// ✅ CORRECT — environment variable or Secrets Manager61String apiKey = System.getenv("API_KEY");62// or via @Value, or SecretsManagerClient63```6465**Why:** Source code is version-controlled and shared. Secrets in code become public.6667---6869### Rule 3 — SLF4J, Not System.out7071**Use `log.info(...)` with parameterised messages. Never `System.out.println()`.**7273```java74// ❌ VIOLATION75System.out.println("Processing order: " + orderId);7677// ✅ CORRECT78log.info("Processing order id={}", orderId);79```8081**Why:** `System.out` bypasses the logging framework — no level control, no structured output, no MDC context.8283---8485### Rule 4 — No SELECT *8687**Always specify explicit column lists in SQL.**8889```sql90-- ❌ VIOLATION91SELECT * FROM orders WHERE customer_id = :customerId;9293-- ✅ CORRECT94SELECT id, customer_id, status, total_amount, created_at95FROM orders96WHERE customer_id = :customerId;97```9899**Why:** Schema additions silently increase payload size and break mapping. Query plans are harder to optimise.100101---102103### Rule 5 — Parameterised Queries Only104105**No SQL string concatenation. Use named parameters.**106107```java108// ❌ VIOLATION — SQL injection risk109String sql = "SELECT * FROM orders WHERE id = '" + orderId + "'";110111// ✅ CORRECT112String sql = "SELECT id, status FROM orders WHERE id = :orderId";113namedJdbcTemplate.queryForObject(sql, Map.of("orderId", orderId), rowMapper);114```115116**Why:** String concatenation enables SQL injection. Non-negotiable security rule.117118---119120### Rule 6 — java.time Only (Java projects)121122**No `java.util.Date`, `java.util.Calendar`, or `java.sql.Timestamp`.**123124```java125// ❌ VIOLATION126Date now = new Date();127Calendar cal = Calendar.getInstance();128129// ✅ CORRECT130Instant now = Instant.now();131LocalDate today = LocalDate.now();132ZonedDateTime zonedNow = ZonedDateTime.now(ZoneId.of("Europe/London"));133```134135**Why:** `Date` and `Calendar` are mutable, non-thread-safe, and poorly designed. `java.time` is ISO 8601-correct.136137---138139### Rule 7 — jakarta.* in Spring Boot 3.x (Java projects)140141**No `javax.*` imports in Spring Boot 3.x code.**142143```java144// ❌ VIOLATION in Spring Boot 3.x145import javax.persistence.Entity;146import javax.validation.constraints.NotNull;147148// ✅ CORRECT149import jakarta.persistence.Entity;150import jakarta.validation.constraints.NotNull;151```152153**Why:** Spring Boot 3.x requires Jakarta EE 10. `javax.*` causes `ClassNotFoundException` at runtime.154155---156157### Rule 8 — Conventional Commits158159**All commit messages follow `type(scope): description` format.**160161```162# ❌ VIOLATION163"fix stuff"164"wip"165"updated OrderService"166167# ✅ CORRECT168feat(orders): add order cancellation endpoint169fix(payments): handle null amount in authorisation170chore(deps): upgrade Spring Boot to 3.3.0171test(orders): add Testcontainers integration test for cancellation172```173174**Types:** `feat`, `fix`, `refactor`, `test`, `chore`, `docs`, `perf`, `ci`, `build`, `revert`175176---177178### Rule 9 — No Partial Implementations179180**Every committed method body is complete. No `// TODO implement this` in production code.**181182```java183// ❌ VIOLATION184public BigDecimal calculatePremium(Policy policy) {185 // TODO: implement premium calculation186 return null;187}188189// ✅ CORRECT — if not yet implementable, throw explicitly190public BigDecimal calculatePremium(Policy policy) {191 throw new UnsupportedOperationException(192 "Premium calculation not yet implemented — tracked in TD-042"193 );194}195```196197---198199### Rule 10 — No Empty Catch Blocks200201**Every catch block at minimum logs the exception.**202203```java204// ❌ VIOLATION205try {206 publishEvent(event);207} catch (Exception e) {208 // swallowed209}210211// ✅ CORRECT212try {213 publishEvent(event);214} catch (Exception e) {215 log.error("Failed to publish event type={} id={}: {}",216 event.getType(), event.getId(), e.getMessage(), e);217}218```219220---221222### Rule 11 — No Thread.sleep() in Tests223224**Use Awaitility for async assertions.**225226```java227// ❌ VIOLATION228Thread.sleep(2000);229assertThat(orderRepository.findById(id)).isPresent();230231// ✅ CORRECT232await().atMost(5, SECONDS).until(() ->233 orderRepository.findById(id).isPresent()234);235```236237---238239### Rule 12 — Optional.get() Only with Guard240241**Never call `Optional.get()` without a preceding `isPresent()` or use `orElseThrow()`.**242243```java244// ❌ VIOLATION245Order order = orderRepository.findById(id).get(); // NoSuchElementException risk246247// ✅ CORRECT248Order order = orderRepository.findById(id)249 .orElseThrow(() -> new OrderNotFoundException(id));250```251252---253254## Enforcement255256| Severity | Rules | Gate |257|----------|-------|------|258| BLOCKER (pre-merge) | 2 (no secrets), 5 (SQL injection) | CI security scan |259| BLOCKER (code review) | 1, 3, 4, 6, 7, 9, 10, 12 | `code-reviewer` agent |260| MAJOR (code review) | 8, 11 | `code-reviewer` agent |261262Rules 1–12 are checked by the `code-reviewer` agent on every PR review.263264
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| doubts-suplab/eeik-bootstrap.clinerules/golden-rules.md · 1 | Cline rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.clinerules/project.md · 1 | Cline rules | teststylegit | 63/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/architecture.mdc · 1 | Cursor rules | do-not | 52/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/capabilities.mdc · 1 | Cursor rules | teststylegit | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/golden-rules.mdc · 1 | Cursor rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/python.mdc · 1 | Cursor rules | lint-formatstyletypesapi+1 | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/security.mdc · 1 | Cursor rules | security | 39/100 | today | |
| doubts-suplab/eeik-bootstrap.github/copilot-instructions.md · 1 | Copilot instructions | lint-formatstyletesting-strategygit+2 | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/a2a-protocol.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/ai-governance.instructions.md · 1 | Copilot instructions | stylearchdo-notagent-behaviour | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/angular.instructions.md · 1 | Copilot instructions | teststyletypestesting-strategy+4 | 69/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/architecture-governance.instructions.md · 1 | Copilot instructions | testlint-formatstylegit+4 | 65/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/autogen.instructions.md · 1 | Copilot instructions | typessecurityagent-behaviour | 50/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-architecture.instructions.md · 1 | Copilot instructions | styletypessecurityperformance | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-data-ml-ai.instructions.md · 1 | Copilot instructions | deployment | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cdk-terraform.instructions.md · 1 | Copilot instructions | teststylearchtypes+2 | 96/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cicd.instructions.md · 1 | Copilot instructions | stylesecuritydeploymentdo-not+1 | 65/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/containerisation.instructions.md · 1 | Copilot instructions | buildstylesecuritydo-not | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/crewai.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/data-engineering.instructions.md · 1 | Copilot instructions | teststyletypesgit+5 | 69/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| danielvm-git/bigpowers.windsurf/rules/guard-git.md · 139 | Windsurf rules | stylearchgitsecurity+2 | 89/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/organize-workspace.md · 139 | Windsurf rules | buildstylegitdeployment+2 | 89/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/quick-fix.md · 139 | Windsurf rules | teststylegitdeployment+1 | 85/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/develop-tdd.md · 139 | Windsurf rules | teststylearchtesting-strategy+5 | 85/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/extract-design.md · 139 | Windsurf rules | lint-formatstyledependenciesui | 82/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/session-state.md · 139 | Windsurf rules | lint-formatstyleagent-behaviour | 82/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/commit-message.md · 139 | Windsurf rules | lint-formatstyletypesgit+3 | 82/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/wire-ci.md · 139 | Windsurf rules | buildtestlint-formatstyle+1 | 81/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/doubts-suplab-eeik-bootstrap-windsurf-rules-golden-rules)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.