{"packages":{"fragjan-check-markdown":[{"latest":{"fragjan":true},"released":"2026-05-27","tier":"free","description":"fragjan primitive: extract structured content from Markdown files","requires":{"system":{"lua":{"min":5.1}}},"version":"0.1.1+1b35432c","supports":{"fragjan":{"min":"0.1.0"}}},{"latest":{"fragjan":false},"released":"2026-05-24","tier":"free","description":"fragjan primitive: extract structured content from Markdown files","requires":{"system":{"lua":{"min":5.1}}},"version":"0.1.0+4906b51e","supports":{"fragjan":{"min":"0.1.0"}}}],"fragjan-check-listvalues":[{"latest":{"fragjan":true},"released":"2026-05-26","tier":"free","description":"Validate table literal values against allowed or forbidden list","requires":{"system":[]},"version":"0.1.3+4fda08f2","supports":{"fragjan":{"min":"0.2.0"}}},{"latest":{"fragjan":false},"released":"2026-05-26","tier":"free","description":"Validate table literal values against allowed or forbidden list","requires":{"system":[]},"version":"0.1.2+5a1ea021","supports":{"fragjan":{"min":"0.2.0"}}},{"latest":{"fragjan":false},"released":"2026-05-26","tier":"free","description":"Validate table literal values against allowed or forbidden list","requires":{"system":[]},"version":"0.1.1+2b52665d","supports":{"fragjan":{"min":"0.2.0"}}}],"product":[{"latest":{"stapul":true,"steurjan":true,"raidjan":true,"redan":true,"kaupapi":true},"released":"2026-05-03","tier":"free","description":"Shared product module -- validation, category resolution, price lookup, bundle expansion","requires":{"system":[]},"version":"0.2.0+69bf06a6","supports":{"stapul":{"min":"0.1.0","max":"<2.0.0"},"steurjan":{"min":"0.1.0","max":"<2.0.0"},"raidjan":{"min":"0.1.0","max":"<2.0.0"},"redan":{"min":"0.1.0","max":"<2.0.0"},"kaupapi":{"min":"0.1.0","max":"<2.0.0"}}},{"latest":{"stapul":false,"steurjan":false,"raidjan":false,"redan":false,"kaupapi":false},"released":"2026-05-03","tier":"free","description":"Shared product module -- validation, category resolution, price lookup, bundle expansion","requires":{"system":[]},"version":"0.1.2+570bdf80","supports":{"stapul":{"min":"0.1.0","max":"<2.0.0"},"steurjan":{"min":"0.1.0","max":"<2.0.0"},"raidjan":{"min":"0.1.0","max":"<2.0.0"},"redan":{"min":"0.1.0","max":"<2.0.0"},"kaupapi":{"min":"0.1.0","max":"<2.0.0"}}}],"api":[{"latest":{"openbookregister":true},"released":"2026-04-24","tier":"free","description":"API layer for DAW HTTP services -- CORS, rate-limiting, JSON helpers, auth hook","requires":{"system":[]},"version":"0.2.0+f6586377","supports":{"openbookregister":{"min":"0.1.0","max":"<2.0.0"}}},{"latest":{"openbookregister":false},"released":"2026-04-14","tier":"free","description":"API layer for DAW HTTP services -- CORS, rate-limiting, JSON helpers, auth hook","requires":{"system":{}},"version":"0.1.0+7d291211","supports":{"openbookregister":{"min":"0.1.0","max":"<2.0.0"}}}],"fragjan-check-filecorrelation":[{"latest":{"fragjan":true},"released":"2026-05-31","tier":"free","description":"Correlate two patterns within a file (if A present, B must/must-not be present)","requires":{"system":[]},"version":"0.1.0+ccc8b03a","supports":{"fragjan":{"min":"0.2.10"}}}],"fragjan-check-linepattern":[{"latest":{"fragjan":true},"released":"2026-05-27","tier":"free","description":"fragjan primitive: match pattern on a line, with optional line-level exclusion","requires":{"system":{"lua":{"min":5.1}}},"version":"0.1.2+5920794a","supports":{"fragjan":{"min":"0.2.0"}}},{"latest":{"fragjan":false},"released":"2026-05-26","tier":"free","description":"fragjan primitive: match pattern on a line, with optional line-level exclusion","requires":{"system":{"lua":{"min":5.1}}},"version":"0.1.1+09b9c01b","supports":{"fragjan":{"min":"0.2.0"}}}],"smtp":[{"latest":[],"tier":"free","requires":{"system":{"ssl":{"one-of":{"luasec":{"min":"1.0.2"},"luaossl":{"min":20200709}}},"luasocket":{"min":3.0}}},"supports":[],"description":"SMTP mail dispatch (transactional email, self-mode)","version":"0.1.1+3f353f93","released":"2026-07-18"}],"fragjan-check-filehassiblingdir":[{"latest":{"fragjan":true},