repositories / termux-janitor
termux-janitor
Interactive cleanup assistant for Termux: transparent, safe, confirmed disk reclamation.
owned by admin
tools/spec-engine/test-profile.zig
Rawconst std = @import("std");
pub const Suite = enum { quick, scenario, every };
pub const concrete_suites = [_]Suite{ .quick, .scenario };
pub const wildcard_suite: Suite = .every;
pub fn suiteMatches(required: Suite, observed: Suite) bool {
return required == wildcard_suite or required == observed;
}
pub fn suiteIsConcrete(suite: Suite) bool {
return suite != wildcard_suite;
}
pub fn suiteRunsLocally(suite: Suite) bool {
return suite != .scenario;
}
pub fn requirementIdValid(id: []const u8) bool {
if (!std.mem.startsWith(u8, id, "TJ-")) return false;
const final_hyphen = std.mem.lastIndexOfScalar(u8, id, '-') orelse return false;
if (final_hyphen <= 3 or final_hyphen + 3 != id.len) return false;
for (id[3..final_hyphen]) |byte| if (!std.ascii.isUpper(byte)) return false;
for (id[final_hyphen + 1 ..]) |byte| if (!std.ascii.isDigit(byte)) return false;
return true;
}
pub const tool_invocation = "spec-tool";
pub const generate_command = "spec-tool generate";
pub const verify_command = "spec-tool check";
pub fn requirementOwnerLink(owner: []const u8) []const u8 {
return if (std.mem.startsWith(u8, owner, "spec/")) owner["spec/".len..] else owner;
}
pub const paths = struct {
pub const documents = "test-profile/documents.zon";
pub const concepts = "test-profile/concepts.zon";
pub const requirements = "test-profile/requirements.zon";
pub const test_specs = "test-profile/tests.zon";
pub const verification = "test-profile/verification.zon";
pub const implementations = "test-profile/implementation.zon";
pub const test_bindings = "test-profile/bindings.zon";
pub const fixture_root = "test-profile/fixtures/";
pub const binding_root = "test-profile/";
pub const binding_inventory_root = "test-profile/fixtures";
pub const implementation_root = "test-profile/src/";
pub const implementation_inventory_root = "test-profile/src";
pub const agents = "test-profile/AGENTS.md";
pub const requirements_index = "test-profile/REQUIREMENTS.md";
pub const glossary = "test-profile/GLOSSARY.md";
};
pub const projections = struct {
pub const glossary_preamble = "# Glossary\n";
pub const requirements_preamble = "# Requirements\n";
};