

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456<!-- Generated by EEIK generate_adapters.py on 2026-08-10 — do not edit by hand -->78# Golden Rules Standard910**Applies To:** All projects, all languages, all domains11**Enforced By:** `code-reviewer` agent, CI/CD hooks, `security-auditor` agent12**Status:** Non-negotiable1314---1516## The 12 Golden Rules1718These rules apply to every line of code committed to any EEIK-managed project. They are not preferences — violation of a BLOCKER rule prevents merge.1920---2122### Rule 1 — Constructor Injection Only2324**No `@Autowired` on fields. All injected fields are `final`.**2526```java27// ❌ VIOLATION — field injection28@Service29public class OrderService {30 @Autowired31 private OrderRepository orderRepository;32}3334// ✅ CORRECT — constructor injection35@Service36public class OrderService {37 private final OrderRepository orderRepository;3839 public OrderService(OrderRepository orderRepository) {40 this.orderRepository = orderRepository;41 }42}43```4445**Why:** Fields cannot be `final`. Cannot test without Spring context. Dependencies are invisible.4647---4849### Rule 2 — No Hardcoded Secrets5051**No credentials, API keys, passwords, or AWS account IDs in source code.**5253```java54// ❌ VIOLATION55String apiKey = "sk-live-abc123...";56String dbPassword = "SuperSecret123";5758// ✅ CORRECT — environment variable or Secrets Manager59String apiKey = System.getenv("API_KEY");60// or via @Value, or SecretsManagerClient61```6263**Why:** Source code is version-controlled and shared. Secrets in code become public.6465---6667### Rule 3 — SLF4J, Not System.out6869**Use `log.info(...)` with parameterised messages. Never `System.out.println()`.**7071```java72// ❌ VIOLATION73System.out.println("Processing order: " + orderId);7475// ✅ CORRECT76log.info("Processing order id={}", orderId);77```7879**Why:** `System.out` bypasses the logging framework — no level control, no structured output, no MDC context.8081---8283### Rule 4 — No SELECT *8485**Always specify explicit column lists in SQL.**8687```sql88-- ❌ VIOLATION89SELECT * FROM orders WHERE customer_id = :customerId;9091-- ✅ CORRECT92SELECT id, customer_id, status, total_amount, created_at93FROM orders94WHERE customer_id = :customerId;95```9697**Why:** Schema additions silently increase payload size and break mapping. Query plans are harder to optimise.9899---100101### Rule 5 — Parameterised Queries Only102103**No SQL string concatenation. Use named parameters.**104105```java106// ❌ VIOLATION — SQL injection risk107String sql = "SELECT * FROM orders WHERE id = '" + orderId + "'";108109// ✅ CORRECT110String sql = "SELECT id, status FROM orders WHERE id = :orderId";111namedJdbcTemplate.queryForObject(sql, Map.of("orderId", orderId), rowMapper);112```113114**Why:** String concatenation enables SQL injection. Non-negotiable security rule.115116---117118### Rule 6 — java.time Only (Java projects)119120**No `java.util.Date`, `java.util.Calendar`, or `java.sql.Timestamp`.**121122```java123// ❌ VIOLATION124Date now = new Date();125Calendar cal = Calendar.getInstance();126127// ✅ CORRECT128Instant now = Instant.now();129LocalDate today = LocalDate.now();130ZonedDateTime zonedNow = ZonedDateTime.now(ZoneId.of("Europe/London"));131```132133**Why:** `Date` and `Calendar` are mutable, non-thread-safe, and poorly designed. `java.time` is ISO 8601-correct.134135---136137### Rule 7 — jakarta.* in Spring Boot 3.x (Java projects)138139**No `javax.*` imports in Spring Boot 3.x code.**140141```java142// ❌ VIOLATION in Spring Boot 3.x143import javax.persistence.Entity;144import javax.validation.constraints.NotNull;145146// ✅ CORRECT147import jakarta.persistence.Entity;148import jakarta.validation.constraints.NotNull;149```150151**Why:** Spring Boot 3.x requires Jakarta EE 10. `javax.*` causes `ClassNotFoundException` at runtime.152153---154155### Rule 8 — Conventional Commits156157**All commit messages follow `type(scope): description` format.**158159```160# ❌ VIOLATION161"fix stuff"162"wip"163"updated OrderService"164165# ✅ CORRECT166feat(orders): add order cancellation endpoint167fix(payments): handle null amount in authorisation168chore(deps): upgrade Spring Boot to 3.3.0169test(orders): add Testcontainers integration test for cancellation170```171172**Types:** `feat`, `fix`, `refactor`, `test`, `chore`, `docs`, `perf`, `ci`, `build`, `revert`173174---175176### Rule 9 — No Partial Implementations177178**Every committed method body is complete. No `// TODO implement this` in production code.**179180```java181// ❌ VIOLATION182public BigDecimal calculatePremium(Policy policy) {183 // TODO: implement premium calculation184 return null;185}186187// ✅ CORRECT — if not yet implementable, throw explicitly188public BigDecimal calculatePremium(Policy policy) {189 throw new UnsupportedOperationException(190 "Premium calculation not yet implemented — tracked in TD-042"191 );192}193```194195---196197### Rule 10 — No Empty Catch Blocks198199**Every catch block at minimum logs the exception.**200201```java202// ❌ VIOLATION203try {204 publishEvent(event);205} catch (Exception e) {206 // swallowed207}208209// ✅ CORRECT210try {211 publishEvent(event);212} catch (Exception e) {213 log.error("Failed to publish event type={} id={}: {}",214 event.getType(), event.getId(), e.getMessage(), e);215}216```217218---219220### Rule 11 — No Thread.sleep() in Tests221222**Use Awaitility for async assertions.**223224```java225// ❌ VIOLATION226Thread.sleep(2000);227assertThat(orderRepository.findById(id)).isPresent();228229// ✅ CORRECT230await().atMost(5, SECONDS).until(() ->231 orderRepository.findById(id).isPresent()232);233```234235---236237### Rule 12 — Optional.get() Only with Guard238239**Never call `Optional.get()` without a preceding `isPresent()` or use `orElseThrow()`.**240241```java242// ❌ VIOLATION243Order order = orderRepository.findById(id).get(); // NoSuchElementException risk244245// ✅ CORRECT246Order order = orderRepository.findById(id)247 .orElseThrow(() -> new OrderNotFoundException(id));248```249250---251252## Enforcement253254| Severity | Rules | Gate |255|----------|-------|------|256| BLOCKER (pre-merge) | 2 (no secrets), 5 (SQL injection) | CI security scan |257| BLOCKER (code review) | 1, 3, 4, 6, 7, 9, 10, 12 | `code-reviewer` agent |258| MAJOR (code review) | 8, 11 | `code-reviewer` agent |259260Rules 1–12 are checked by the `code-reviewer` agent on every PR review.261262263## Enforcement264265These rules are BLOCKERS in code review. No exceptions.266Full standards: `capability-packs/core/standards/golden-rules.md`267
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/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 | |
| doubts-suplab/eeik-bootstrap.github/instructions/deployment.instructions.md · 1 | Copilot instructions | teststylegitdeployment | 77/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| bybren-llc/safe-agentic-workflow.cursor/rules/10-backend-python.mdc · 399 | Cursor rules | testlint-formatstylegit+4 | 97/100 | today |
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-cursor-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.