let lib = import ; codingRulesLib = (import ../../lib {inherit lib;}).coding-rules; # Test 1: instructions are generated correctly with custom rulesDir testInstructions = let rules = codingRulesLib.mkCodingRules { agents = "/tmp/fake-agents"; languages = ["python"]; concerns = ["naming"]; rulesDir = ".coding-rules"; }; in assert rules.instructions == [ ".coding-rules/concerns/naming.md" ".coding-rules/languages/python.md" ]; {result = "pass";}; # Test 2: default rulesDir is .opencode-rules testDefaultRulesDir = let rules = codingRulesLib.mkCodingRules { agents = "/tmp/fake-agents"; }; hasCorrectPrefix = builtins.all (s: builtins.substring 0 15 s == ".opencode-rules") rules.instructions; in assert hasCorrectPrefix == true; {result = "pass";}; # Test 3: shellHook contains both the symlink command and the config generation testShellHook = let rules = codingRulesLib.mkCodingRules { agents = "/tmp/fake-agents"; }; hook = rules.shellHook; hasSymlink = builtins.match ".*ln -sfn.*" hook != null; hasConfigGen = builtins.match ".*coding-rules.json.*" hook != null; in assert hasSymlink; assert hasConfigGen; {result = "pass";}; in { instructions-correct = testInstructions; default-rules-dir = testDefaultRulesDir; shell-hook = testShellHook; }