@@ -27,12 +27,7 @@ if (missing.length > 0) {
2727}
2828
2929const roadmap = fs . readFileSync ( path . join ( root , "docs/PHASE2_ROADMAP.md" ) , "utf8" ) ;
30- const mustContain = [
31- "mandatory security" ,
32- "release gate" ,
33- "observability" ,
34- "failure drills"
35- ] ;
30+ const mustContain = [ "mandatory security" , "release gate" , "observability" , "failure drills" ] ;
3631
3732const missingPhrases = mustContain . filter ( ( p ) => ! roadmap . toLowerCase ( ) . includes ( p ) ) ;
3833if ( missingPhrases . length > 0 ) {
@@ -41,4 +36,29 @@ if (missingPhrases.length > 0) {
4136 process . exit ( 1 ) ;
4237}
4338
39+ const controlPlane = fs . readFileSync ( path . join ( root , "src/control-plane.ts" ) , "utf8" ) ;
40+ const requiredRoutes = [
41+ '/v1/auth/job-token' ,
42+ '/v1/tasks' ,
43+ '/v1/observability/queue-depth' ,
44+ '/v1/observability/node-health-timeline' ,
45+ '/v1/runs/summary'
46+ ] ;
47+
48+ const missingRoutes = requiredRoutes . filter ( ( r ) => ! controlPlane . includes ( r ) ) ;
49+ if ( missingRoutes . length > 0 ) {
50+ console . error ( "AAHP check: FAIL" ) ;
51+ for ( const r of missingRoutes ) console . error ( `- missing route: ${ r } ` ) ;
52+ process . exit ( 1 ) ;
53+ }
54+
55+ const securitySource = fs . readFileSync ( path . join ( root , "src/security.ts" ) , "utf8" ) ;
56+ const requiredSecurityMarkers = [ "token_replay" , "token_expired" , "bootstrapSecret" ] ;
57+ const missingSecurityMarkers = requiredSecurityMarkers . filter ( ( m ) => ! securitySource . includes ( m ) ) ;
58+ if ( missingSecurityMarkers . length > 0 ) {
59+ console . error ( "AAHP check: FAIL" ) ;
60+ for ( const m of missingSecurityMarkers ) console . error ( `- missing security marker: ${ m } ` ) ;
61+ process . exit ( 1 ) ;
62+ }
63+
4464console . log ( "AAHP check: PASS" ) ;
0 commit comments