
    4jv,                        d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
ddlZddlZddlZdZdZe
j                   j#                  ee      Zej                   j'                  de
j                   j#                  ed             ddlZd Z G d dej.                        Z G d	 d
ej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Zedk(  r ej<                  d       yy)uz  
regression: scripts/verify_task2553_closed_accepted_2553plus59.py
            (task-2553+59 TRACK D — FINAL CLOSED_ACCEPTED marker, additive)

검증 축
-------
1. Layer A NO-CRON: AST 에 subprocess/os.system/Popen/cokacdir/cron-dispatch
   import·call·token 0.
2. read-only / additive: collect() 전후 frozen anchor 6모듈 + remaining-backlog
   3 원천 + 소비 산출물 byte-0 무변(SHA256 EQUAL).
3. write surface = §4 allowlist 한정 — 비-allowlist write 거부 · Track A/B/C
   네임스페이스 0 overlap.
4. CLOSED_ACCEPTED marker 정형 — +32~+55 scope · self-chain QUARANTINED /
   independent ANU authoritative · callback 독립 ANU key only.
5. 잔여 backlog 정직 보존(과장 0): LEGACY_PENDING_FALLBACK_FIRED_AFTER_
   CONVERGENCE(NON_BLOCKING) + DEAD_CODE_CLEANLINESS_CANDIDATE(LOW).
6. closeout 일관성 점검 실 산출물 기반 · hold_for_chair=false.
7. ★ MOCK-ONLY FAIL gate — 빈/mock root 에서 실 검증이 inconsistency 를
   *탐지* (blind PASS 아님). 실 entrypoint 강제(문서-only 금지).
8. 산출 파일 temp out-root 격리 생성 — 실 repo write 0(테스트 자체).
    Nz/home/jay/workspacez5scripts/verify_task2553_closed_accepted_2553plus59.pyscriptsc                     t        j                         }t        | d      5 t        fdd      D ]  }|j	                  |        	 d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbc                  &     j                  d      S )Ni   )read)fhs   P/home/jay/workspace/tests/regression/test_task2553_closed_accepted_2553plus59.py<lambda>z_sha.<locals>.<lambda>*   s    rwwu~     r   )hashlibsha256openiterupdate	hexdigest)pathhchr   s      @r	   _shar   '   si    A	dD	 R-s3 	BHHRL	 ;;= ;;=s   &A!!A9c                       e Zd Zd Zy)LayerANoCronTestc                    t        t        dd      j                         }t        j                  |      }ddh}t        j
                  |      D ]G  }t        |t        j                        rM|j                  D ]>  }| j                  |j                  j                  d      d   |d|j                          @ t        |t        j                        rB|j                  xs d	j                  d      d   }| j                  ||d
|j                          t        |t        j                        st        |j                  t        j                         s| j                  |j                  j"                  h dd|j                  j"                          J dD ]  }| j                  ||d|         | j                  d|       y )Nrzutf-8)encoding
subprocesspty.r   zbanned import  zbanned from-import >   execforkPopenpopenspawnspawnvsystemzbanned call attr )zsubprocess.runz
os.system(z
--sendfilez--cronz--key fedf78d1d09509f5zbanned token present: z/usr/local/bin/cokacdir)r   SCRIPTr   astparsewalk
isinstanceImportnamesassertNotInnamesplit
ImportFrommoduleCallfunc	Attributeattr)selfsrctreebanned_importnodenroottoks           r	   ,test_01_no_subprocess_cokacdir_cron_dispatchz=LayerANoCronTest.test_01_no_subprocess_cokacdir_cron_dispatch0   s   631668yy~%u-HHTN 	GD$

+ @A$$QVV\\#%6q%9='5affX%>@@ $/)r005a8  }#6t{{m!DF$)j9</H  "<#4TYY^^4D!EG	G. 	GCS#)?u'EF	G 	2C8r   N)__name__
__module____qualname__r>    r   r	   r   r   /   s    9r   r   c                       e Zd Zd Zd Zd Zy)ReadOnlyAdditiveTestc           
      r   t        t        j                  j                               }|t        j                  D cg c]E  }t
        j                  j                  t
        j                  j                  t        |            r|G c}z  }|t        j                  D cg c]E  }t
        j                  j                  t
        j                  j                  t        |            r|G c}z  }|D ci c]0  }|t        t
        j                  j                  t        |            2 }}t        j                  t              }|D ci c]0  }|t        t
        j                  j                  t        |            2 }}| j                  ||d       | j                  |t               y c c}w c c}w c c}w c c}w )Nu8   read-only/additive 위반 — 소스 산출물 변경됨)listVFROZEN_BYTE0keysCONSUMED_PINNEDosr   isfilejoinREPOCONSUMED_PRESENT_ONLYr   collectassertEqualassertIsInstancedict)r6   targetsr   beforeproducedafters         r	   8test_02_frozen_and_sources_byte0_unchanged_after_collectzMReadOnlyAdditiveTest.test_02_frozen_and_sources_byte0_unchanged_after_collectK   s:   q~~**,-q00 >!ww~~bggll4&;<  > 	>q66 >!ww~~bggll4&;<  > 	>:ABQ!T"'',,tQ/00BB99T?9@AADdA.//AAS	Uh->>BAs   A
F%A
F*05F/5F4c                     t        j                  t              }| j                  t	        |      d       |j                         D ]7  \  }}| j                  |d   | d       | j                  |d   | d|        9 y )N   presentz missingequalz byte-0 drift )rG   verify_frozen_byte0rN   rQ   lenitems
assertTrue)r6   fzrelvs       r	   'test_03_frozen_byte0_all_equal_expectedz<ReadOnlyAdditiveTest.test_03_frozen_byte0_all_equal_expectedX   sw    ""4(R!$hhj 	CFCOOAiLSE*:;OOAgJ3%~aS(AB	Cr   c                 (   t        j                  t              }| j                  |d   d|d           | j	                  t        t         j                        d       |d   j                         D ]  \  }}| j                  |d   | d|        ! y )Npinned_all_equalu'   remaining-backlog 원천 byte-0 drift: pinned   r\   z drift )rG   verify_consumed_byte0rN   r`   rQ   r^   rJ   r_   )r6   cbrb   rc   s       r	   .test_04_remaining_backlog_sources_pinned_equalzCReadOnlyAdditiveTest.test_04_remaining_backlog_sources_pinned_equal_   s    $$T*-.A"X,P	R 	Q../3l((* 	<FCOOAgJ3%wqc(:;	<r   N)r?   r@   rA   rX   rd   rk   rB   r   r	   rD   rD   J   s    .C<r   rD   c                       e Zd Zd Zd Zd Zy)AllowlistWriteSurfaceTestc                     | j                  t              5  t        j                  d       d d d        t        j                  D ]  }t        j                  |        y # 1 sw Y   4xY w)Nzmemory/events/NOT-ALLOWED.json)assertRaisesRuntimeErrorrG   _assert_allowlisted	ALLOWLIST)r6   rb   s     r	   $test_05_reject_non_allowlisted_writez>AllowlistWriteSurfaceTest.test_05_reject_non_allowlisted_writej   sY    |, 	D!!"BC	D;; 	'C!!#&	'	D 	Ds   AA(c           
         t        j                  t              }t        j                         5 }t        j
                  ||      }|D ]n  }| j                  |t         j                         | j                  t        j                  j                  t        j                  j                  ||                   p | j                  t        |      d       d d d        | j                  t               y # 1 sw Y    xY w)NrZ   )rG   rP   rN   tempfileTemporaryDirectorywrite_outputsassertInrr   r`   rK   r   rL   rM   assertGreaterEqualr^   assertNotEqual)r6   rV   tdwrittenrb   s        r	   4test_06_write_outputs_only_allowlisted_temp_isolatedzNAllowlistWriteSurfaceTest.test_06_write_outputs_only_allowlisted_temp_isolatedp   s    99T?((* 	5boob(3G Gc1;;/rww||B/D EFG ##CL!4	5 	B%	5 	5s   B%C22C;c                    t         j                  D ]m  }|j                         }| j                  d|       | j                  d|       | j                  d|       |j	                  d      r| j                  d|      nd  o y )Ntrackatrackbtrackc)zscripts/ztests/
2553plus59)rG   rr   lowerr-   
startswithrx   )r6   rb   lows      r	   %test_07_track_abc_disjoint_no_overlapz?AllowlistWriteSurfaceTest.test_07_track_abc_disjoint_no_overlap{   sp    ;; 	2C))+CXs+Xs+Xs+03&1(DMM,,-1	2r   N)r?   r@   rA   rs   r}   r   rB   r   r	   rm   rm   i   s    '	&2r   rm   c                   @    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
y)	MarkerShapeTestc                     t        j                  t              | _        | j                  d   | _        | j                  d   | _        | j                  d   | _        y )N,memory/events/task-2553.closed-accepted.json&memory/events/task-2553+59.result.jsonz(memory/events/task-2553+59.decision.json)rG   rP   rN   outmarkerresultdecision)clss    r	   
setUpClasszMarkerShapeTest.setUpClass   sD    ))D/WWKL
WWEF
wwIJr   c                    dj                  d | j                  d   D              }dD ]  }| j                  ||d|         | j                  | j                  d   d       | j                  | j                  d   d	       y )
N c              3   &   K   | ]	  }|d      yw)refNrB   ).0ss     r	   	<genexpr>zPMarkerShapeTest.test_08_closed_accepted_scope_covers_32_to_55.<locals>.<genexpr>   s     OQ%Os   scope_closed_accepted)z+32z+37z+44z+46z+47z+48z+49z+50~+52z+53z+54z+55u   scope 누락: round_dispositionCLOSED_ACCEPTEDr   &TASK_2553_FINAL_CLOSED_ACCEPTED_MARKER)rM   r   rx   rQ   )r6   refsneeds      r	   -test_08_closed_accepted_scope_covers_32_to_55z=MarkerShapeTest.test_08_closed_accepted_scope_covers_32_to_55   s    xxO$++6M*NOO5 	?DMM$tf&=>	? 	%89;LMX.A	Cr   c                     t        j                  | j                  d   d      }| j                  d|       | j                  d|       | j                  d|       y )Nself_chain_vs_independent_anuF)ensure_asciiQUARANTINEDc119085addb0f8b7zfail-closed)jsondumpsr   rx   )r6   scs     r	   ;test_09_selfchain_quarantined_independent_anu_authoritativezKMarkerShapeTest.test_09_selfchain_quarantined_independent_anu_authoritative   sJ    ZZ$CD%*,mR(("-mR(r   c                 8   | j                   d   }| j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  d|d          | j                  d|d          | j                  | j                  d   d   d       y )	N
callback_acollector_owner_keyr   collector_roleANUexecutor_self_key_forbiddenfedf78d1d09509f5rule)r   rQ   rx   r   )r6   cas     r	   )test_10_callback_independent_anu_key_onlyz9MarkerShapeTest.test_10_callback_independent_anu_key_only   s    [[&124FG,-u59:+	-("V*5("V*5MM,'(=>	 r   c                    | j                   d   }|d   }|d   D ch c]  }|d   	 }}|d   D ch c]  }|d   	 }}| j                  d|       | j                  d|       dD ]O  }| j                  ||d	          | j                  |d	   |   d
   | d       | j                  |d	   |   d          Q | j                  | j                  d          | j                  |d   d          y c c}w c c}w )Nz;memory/events/task-2553.remaining-backlog.final_260518.jsonconsolidated_remainingnon_blockingidr   /LEGACY_PENDING_FALLBACK_FIRED_AFTER_CONVERGENCEDEAD_CODE_CLEANLINESS_CANDIDATE)primary_backlog legacy_pending_fallback_addendumdeadcode_cleanliness_lowsource_filesembedded_verbatimu    원천 임베드 누락r   pending_overclaim_zerooverclaim_zero	principle)r   rx   assertIsNotNoner`   r   )r6   blcrxnb_idslow_idsks          r	   &test_11_no_overclaim_backlog_preservedz6MarkerShapeTest.test_11_no_overclaim_backlog_preserved   s   XXIK()#%n#56a!D'66$&uI.q1T7..G	7A. 	BAMM!R/0  >"1%&9:#-.0   N!3A!6x!@A	B 	$<=>+,[9: 7.s
   C-C2c                    | j                   d   }| j                  |d   d|d           | j                  | j                  d          | j                  | j                   d          | j                  d   d   j	                         D ]  \  }}| j                  |d|         | j                   d	   }| j                  |d
          | j                  |d          | j                  |d          | j                  |d          y )Ncloseout_consistencyall_consistentu   closeout 불일치: checkshold_for_chairhold_assessmenttriggersu   HOLD 트리거 적중: 
invariantsgit_branch_matches_expectedgit_head_matches_expectedfrozen_byte0_all_equaladditive_only)r   r`   assertFalser   r_   )r6   consr   rc   invs        r	   'test_12_closeout_consistent_and_no_holdz7MarkerShapeTest.test_12_closeout_consistent_and_no_hold   s    {{12-..tH~.>?	A%567%567KK 12:>DDF 	?DAqQ"9! =>	?kk,'9:;789456O,-r   c                 6   | j                  | j                  d          | j                  | j                  d   t               | j	                  d| j                  d          | j                  d   }| j                  t        |j                               dd       y )Ndocumentation_onlyreal_entrypointzmock-only FAIL
regressionexecutor_self_actionsr   u   executor self-* 비-0)r   r   rQ   
SCRIPT_RELrx   sumvalues)r6   sas     r	   test_13_not_documentation_onlyz.MarkerShapeTest.test_13_not_documentation_only   sy    %9:;%67D&L(AB[[01RYY[)1.EFr   N)r?   r@   rA   classmethodr   r   r   r   r   r   r   rB   r   r	   r   r      s6    K KC) ;(.Gr   r   c                       e Zd ZdZd Zd Zy)MockOnlyFailGateTestuS   ★ 실 entrypoint 강제 — mock/빈 root 에서 blind PASS 가 아님을 입증.c                    t        j                         5 }t        j                  |      }|d   }|d   }| j	                  |d   d   d       | j                  |d   d       | j	                  |d   d	          d d d        y # 1 sw Y   y xY w)
Nr   r   r   r   u=   mock-only 인데 일관성 PASS — blind rubber-stamp 의심r   uB   mock-only 인데 HOLD 미적중 — 실 검증 아님(문서-only)r   r   )ru   rv   rG   rP   r   r`   )r6   
empty_rootrV   r   ress        r	   7test_14_empty_root_detects_inconsistency_not_blind_passzLMockOnlyFailGateTest.test_14_empty_root_detects_inconsistency_not_blind_pass   s    ((* 	Mjyy,HLMFCDC *+,<=OQ OO'(TV VL12JKL	M 	M 	Ms   A$BBc                     t        j                  t              }|d   }|d   }| j                  |d   d          | j	                  |d          y )Nr   r   r   r   r   )rG   rP   rN   r`   r   )r6   realr   r   s       r	   :test_15_real_root_passes_only_because_real_artifacts_existzOMockOnlyFailGateTest.test_15_real_root_passes_only_because_real_artifacts_exist   sQ    yy;<DE234DEF 012r   N)r?   r@   rA   __doc__r   r   rB   r   r	   r   r      s    ]M3r   r   __main__   )	verbosity)r   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr'   r   r   rK   sysru   unittestrN   r   r   rM   r&   insert*verify_task2553_closed_accepted_2553plus59rG   r   TestCaser   rD   rm   r   r   r?   mainrB   r   r	   <module>r      s   *  
   	 
  D
	dJ	' 277<<i0 1 69x(( 96<8,, <>2 1 1 28MGh'' MG`38,, 36 zHMMA r   