claude-dev-env 1.44.0 → 1.46.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.
Files changed (44) hide show
  1. package/CLAUDE.md +9 -0
  2. package/_shared/pr-loop/scripts/code_rules_gate.py +426 -85
  3. package/_shared/pr-loop/scripts/pr_loop_shared_constants/code_rules_gate_constants.py +20 -0
  4. package/_shared/pr-loop/scripts/pr_loop_shared_constants/reviews_disabled_constants.py +1 -0
  5. package/_shared/pr-loop/scripts/reviews_disabled.py +82 -9
  6. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +630 -21
  7. package/_shared/pr-loop/scripts/tests/test_code_rules_gate_constants.py +15 -0
  8. package/_shared/pr-loop/scripts/tests/test_reviews_disabled.py +57 -0
  9. package/agents/clean-coder.md +7 -1
  10. package/agents/code-quality-agent.md +8 -5
  11. package/hooks/blocking/code_rules_enforcer.py +1562 -37
  12. package/hooks/blocking/content_search_zoekt_redirect_guidance.py +19 -0
  13. package/hooks/blocking/open_questions_in_plans_blocker.py +249 -0
  14. package/hooks/blocking/test_code_rules_enforcer.py +1389 -0
  15. package/hooks/blocking/test_code_rules_enforcer_banned_noun_word.py +292 -0
  16. package/hooks/blocking/test_code_rules_enforcer_cap_meta.py +46 -8
  17. package/hooks/blocking/test_code_rules_enforcer_exempt_marker_chained.py +189 -0
  18. package/hooks/blocking/test_code_rules_enforcer_function_length.py +210 -0
  19. package/hooks/blocking/test_code_rules_enforcer_tests_isolate_home_temp.py +1512 -0
  20. package/hooks/blocking/test_code_rules_enforcer_unused_imports.py +9 -5
  21. package/hooks/blocking/test_content_search_to_zoekt_redirector_unit.py +30 -0
  22. package/hooks/blocking/test_open_questions_in_plans_blocker.py +790 -0
  23. package/hooks/hooks.json +10 -0
  24. package/hooks/hooks_constants/banned_identifiers_constants.py +19 -0
  25. package/hooks/hooks_constants/code_rules_enforcer_constants.py +129 -2
  26. package/hooks/hooks_constants/open_questions_in_plans_blocker_constants.py +35 -0
  27. package/hooks/hooks_constants/test_open_questions_in_plans_blocker_constants.py +125 -0
  28. package/package.json +1 -1
  29. package/skills/_shared/pr-loop/scripts/_path_resolver.py +34 -13
  30. package/skills/_shared/pr-loop/scripts/init_loop_state.py +1 -2
  31. package/skills/_shared/pr-loop/scripts/teardown_worktrees.py +1 -4
  32. package/skills/_shared/pr-loop/scripts/test__path_resolver.py +57 -0
  33. package/skills/_shared/pr-loop/scripts/test_init_loop_state.py +48 -0
  34. package/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +59 -0
  35. package/skills/bugteam/PROMPTS.md +48 -12
  36. package/skills/bugteam/reference/team-setup.md +4 -2
  37. package/skills/bugteam/scripts/bugteam_code_rules_gate.py +487 -76
  38. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_code_rules_gate_constants.py +22 -1
  39. package/skills/bugteam/scripts/test_bugteam_code_rules_gate.py +602 -12
  40. package/skills/pr-converge/SKILL.md +5 -0
  41. package/skills/pr-converge/reference/per-tick.md +14 -5
  42. package/skills/pr-converge/reference/state-schema.md +7 -3
  43. package/skills/pr-converge/scripts/check_convergence.py +27 -1
  44. package/skills/pr-converge/scripts/test_check_convergence.py +28 -0
@@ -2,17 +2,38 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import re
6
+
5
7
  BUGTEAM_CODE_RULES_GATE_PREFIX: str = "bugteam_code_rules_gate: "
6
8
  EXIT_CODE_ENFORCER_MISSING: int = 2
7
9
  HUNK_HEADER_RAW_PATTERN: str = r"^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@"
8
10
  MAXIMUM_ISSUES_TO_REPORT: int = 3
11
+ MAX_VIOLATIONS_PER_CHECK: int = 3
9
12
  MAXIMUM_COLUMN_TUPLE_ELEMENT_COUNT: int = 2
13
+ PYTHON_FILE_EXTENSION: str = ".py"
10
14
  VIOLATION_LINE_RAW_PATTERN: str = r"^Line (\d+):"
11
15
 
16
+ FUNCTION_LENGTH_VIOLATION_PATTERN: re.Pattern[str] = re.compile(
17
+ r"\(defined at line (\d+)\) is (\d+) lines"
18
+ )
19
+ FUNCTION_LENGTH_DEFINITION_LINE_GROUP_INDEX: int = 1
20
+ FUNCTION_LENGTH_SPAN_GROUP_INDEX: int = 2
21
+
22
+ ISOLATION_VIOLATION_PATTERN: re.Pattern[str] = re.compile(
23
+ r"\(defined at line (\d+), spanning (\d+) lines\)"
24
+ )
25
+ ISOLATION_DEFINITION_LINE_GROUP_INDEX: int = 1
26
+ ISOLATION_SPAN_GROUP_INDEX: int = 2
27
+
28
+ BANNED_NOUN_VIOLATION_PATTERN: re.Pattern[str] = re.compile(
29
+ r"\(binding span at line (\d+), spanning (\d+) lines\)"
30
+ )
31
+ BANNED_NOUN_DEFINITION_LINE_GROUP_INDEX: int = 1
32
+ BANNED_NOUN_SPAN_GROUP_INDEX: int = 2
33
+
12
34
  ALL_CODE_FILE_EXTENSIONS: frozenset[str] = frozenset(
13
35
  {".py", ".js", ".ts", ".tsx", ".jsx"}
14
36
  )
15
- ALL_JS_FILE_EXTENSIONS: tuple[str, ...] = (".js", ".ts", ".tsx", ".jsx")
16
37
  ALL_COLUMN_MAGIC_FALSE_VALUES: frozenset[str] = frozenset(
17
38
  {"true", "false", "none", "null"}
18
39
  )