
    4j:              	      ~   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ dZdZdZ ejB                  jE                  d	g d
      d/d       Z#d0dZ$	 	 	 	 d0dZ%d1dZ&d1dZ'd1dZ(d1dZ)d1dZ*ejB                  jE                  d	g d      d/d       Z+ejB                  jE                  deeddfeeddfe eddfg      	 	 	 	 	 	 	 	 	 	 d2d       Z,d1dZ-d1dZ.	 	 	 	 	 	 d3dZ/	 	 	 	 	 	 d3d Z0	 	 	 	 d4d!Z1d1d"Z2ejB                  jE                  d#eedfeedfe edfg      	 	 	 	 	 	 	 	 d5d$       Z3d1d%Z4	 	 	 	 	 	 d3d&Z5	 	 	 	 	 	 d3d'Z6d1d(Z7d0d)Z8d0d*Z9ejB                  jE                  d#eedfeedfe edfg      	 	 	 	 	 	 	 	 d5d+       Z:d1d,Z;d1d-Z<d1d.Z=y)6u  tests/regression/test_auto_remediation_planner.py — task-2612+1 회귀.

spec: memory/tasks/task-2612+1.md
(sha256 826605c85d8644c7ea5fc1624cb8ff147a094a310b75e44f7abb489f3a26d241)

task-2612 Codex 재audit 잔여 non-Critical HIGH×2 의 AUTO_REMEDIATION:

  - **H1**: ``_read_json()`` 절대경로 무검 허용·상대 ``..`` traversal 미검
    → resolve 후 CANONICAL_WS_ROOT 하위 strict containment·traversal·
    임의 절대경로·symlink 이탈 fail-closed.
  - **H2**: ``_planner_detail`` 의 module_rel/test_rel 정규화 없이
    ``expected_files`` 유입 → 정규화 + containment, 이탈 fail-closed
    (downstream out-of-scope 유도 차단).

불변 검증: planner **산출 성격**(plan 골격 생성만·실 dispatch 0·실 코드수정
0) 은 본 hardening(입력검증 강화)으로 변경되지 않으며, 2604/2605/2609 plan
변환은 byte-0 무회귀(placeholder 보존)다. schema 무변.

100% offline — network/git/subprocess 호출 0건.
    )annotationsN)Path)CANONICAL_WS_ROOTPathContainmentErrorTYPE_COVERAGE_GAP%TYPE_GLOBAL_LEDGER_SHA_FALSE_POSITIVETYPE_STAGE_CLAIM_TEST_MISMATCH_assert_fd_inode_contained_contained_resolved_normalize_expected_rel
_read_jsonassert_plan_onlybuild_plan_from_adjudicationrun_self_checkvalidate_planAmemory/events/task-2604+1.independent-collector-adjudication.jsonzEmemory/events/task-2605+2.independent-anu-collector.adjudication.jsonz?memory/events/task-2609.independent-collector-adjudication.jsonbad)z../../etc/passwdz../outside.jsonzmemory/../../../etc/passwd/etc/passwdz/home/jay/.bashrc..c                v    t        j                  t              5  t        |        d d d        y # 1 sw Y   y xY wN)pytestraisesr   r   r   s    E/home/jay/workspace/tests/regression/test_auto_remediation_planner.py6test_h1_read_json_traversal_and_abs_escape_fail_closedr   4   s-     
+	, 3     /8c                    | dz  }|j                  d       t        j                  t              5  t	        t        |             d d d        y # 1 sw Y   y xY w)Nzescape.jsonr   )
symlink_tor   r   r   r   str)tmp_pathlinks     r   ,test_h1_read_json_symlink_escape_fail_closedr#   D   sH     m#DOOM"	+	, 3t9  s   AAc                f   | dz  }|j                  t        dz         t        |      }t        |      }|j                  }d} ||      }|s[ddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}x}}y )	Nzinto_ws.json)schemas/auto_remediation_plan.schema.jsonrequiredzassert %(py12)s
{%(py12)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
})
}.get
}(%(py10)s)
}r   r    r"   )py0py1py2py4py6py8py10py12)r   r   r    r   get@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation)r!   r"   @py_assert3@py_assert5@py_assert7@py_assert9@py_assert11@py_format13s           r   <test_h1_read_json_resolve_is_applied_symlink_into_ws_allowedr=   M   s     n$DOO%(SST$i0:i 0 $$0Z0$Z00000000:000:000000c000c000000$000$000i000 000$000Z00000000000    c                    t        d      } | j                  }d} ||      }|sddt        j                         v st	        j
                  |       rt	        j                  |       ndt	        j                  |      t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}x}}y )Nr%   r&   zEassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}schema)r'   r)   r*   r+   	r   r/   r0   r1   r2   r3   r4   r5   r6   )r@   @py_assert1r7   r8   @py_format7s        r   ,test_h1_read_json_legit_relative_still_readsrD   X   sy    CDF::!j!:j!!!!!!!!6!!!6!!!:!!!j!!!!!!!!!!r>   c                    t        t        t        z        } t        |       }g }t	        |t
              }|}|r|}|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      dz  }|j                  |       |rXdddt        j                         v st        j                  |      rt        j                  |      ndiz  }|j                  |       t        j                  |d      i z  }d	d
|iz  }t        t        j                  |            d x}x}}y )Nz.%(py6)s
{%(py6)s = %(py2)s(%(py3)s, %(py4)s)
}
isinstancedatadict)r)   py3r*   r+   z%(py8)sr,   r   assert %(py11)spy11)r    r   _2604r   rF   rH   r0   r1   r2   r3   r4   append_format_boolopr5   r6   )		abs_in_wsrG   rB   r8   @py_assert0rC   @py_format9@py_format10@py_format12s	            r   .test_h1_read_json_legit_absolute_in_ws_allowedrT   ]   s    %-.Ii D*:dD!*!*!d******:***:******d***d******D***D***!****!*****d***d************r>   c                     t        j                  t              5  t        t	        t
                     d d d        y # 1 sw Y   y xY wr   )r   r   r   r   r    r    r>   r   1test_h1_contained_resolved_rejects_ws_root_itselfrW   c   s2    	+	, 4C 1234 4 4s	   <Ac                    dD ]=  } t        |       }|| k(  }|s#t        j                  d|fd|| f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j
                  |       rt        j                  |       nddz  }dd|iz  }t        t        j                  |            d x}}@ y )	N)<entrypoint module>z<regression test><HOLD test/fixture>==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   ph)r'   r(   rI   py5zassert %(py7)spy7	r   r2   _call_reprcomparer0   r1   r3   r4   r5   r6   )r]   @py_assert2@py_assert4@py_format6@py_format8s        r   %test_h2_placeholder_passthrough_byte0rf   i   s    Q 1&r*0*b0000*b000000&000&000000r000r000*000000b000b00000001r>   c                    d} t        |       }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}y )	Nz$anu_v3/./auto_remediation_planner.pyz"anu_v3/auto_remediation_planner.pyr[   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   r'   r)   r*   r_   assert %(py9)spy9r`   )rB   r7   @py_assert6r8   re   rR   s         r   +test_h2_real_path_normalized_to_ws_relativerm   o   s     F FG/G/	0 G/     	    	    !G   	H   0      r>   )z../../../tmp/evil.pyz/etc/cron.d/xzmemory/../../outside.pyr   c                v    t        j                  t              5  t        |        d d d        y # 1 sw Y   y xY wr   )r   r   r   r   r   s    r   +test_h2_out_of_scope_module_rel_fail_closedro   v   s.    
 
+	, %$% % %r   zpath,itype,plan_id,ph0ztask-2604-AR1rZ   ztask-2605-AR1rY   ztask-2609-AR1z<verdict module>c                *   t        | |      j                         }|d   }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}|d   }d}	||	k(  }|slt        j                  d|fd	||	f      t        j                  |      t        j                  |	      d
z  }
dd|
iz  }t        t        j                  |            d x}x}}	|d   d   }|d   }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}|dd  }d| dd| dd| dg}	||	k(  }|slt        j                  d|fd	||	f      t        j                  |      t        j                  |	      d
z  }
dd|
iz  }t        t        j                  |            d x}x}}	t        |      }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nplan_idr[   z%(py1)s == %(py3)sr(   rI   assert %(py5)sr^   dispositionAUTO_REMEDIATION_HOLDz%(py1)s == %(py4)sr(   r*   assert %(py6)sr+   spec_skeletonexpected_filesr   ph0   zmemory/events/z.decision.jsonz.result.jsonzmemory/reports/z.mdz0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   planr'   r(   rI   r+   assert %(py8)sr,   r   to_dictr2   ra   r4   r0   r1   r3   r5   r6   r   )pathityperq   r|   r   rP   rb   @py_format4rd   r7   @py_format5rC   efr8   rc   rQ   s                   r   %test_regression_plan_conversion_byte0r      so    (e4<<>D	?%?g%%%%?g%%%?%%%%%%g%%%g%%%%%%%9"99"99999"9999999"99999999	o	/	0Ba55C<5C5CCab6 
	0
	.
'#& 6    	6    	    	     	 
 $"$"$$$$"$$$$$$=$$$=$$$$$$$$$$$$$$$"$$$$$$$r>   c                 J   t               } | d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d	   }d
}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d   }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t	        t        j
                  |
            d x}x}x}}d | d   D        }t        |      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t	        t        j
                  |            d x}}y )N
all_passedTisz%(py1)s is %(py4)srx   ry   r+   	plan_onlydispatch_performedFcases   r[   rh   lenri   rj   rk   c              3  &   K   | ]	  }|d      yw)passedNrV   ).0cs     r   	<genexpr>z>test_regression_self_check_all_passed_mock0.<locals>.<genexpr>   s     0qq{0s   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)r'   r)   r*   )r   r2   ra   r4   r5   r6   r   r0   r1   r3   r   )scrP   r7   rb   r   rC   rB   rl   r8   re   rR   s              r   +test_regression_self_check_all_passed_mock0r      s   		Bl#t#t####t######t#######k?"d"?d""""?d"""?"""d""""""""#,u,#u,,,,#u,,,#,,,u,,,,,,,'{ 3{ q q    q      3   3   {      q       0BwK0030000000003000300000000000000r>   c                     t                y r   r   rV   r>   r   "test_plan_only_invariant_preservedr      
     r>   c                    | dz  j                  d       |j                  t        dfd       t        j                  t
              5  t        d       d d d        y # 1 sw Y   y xY w)Nzswapped.jsonr   r   c                    S r   rV   )_pswappeds    r   <lambda>zKtest_h1r_final_component_symlink_swap_after_check_blocked.<locals>.<lambda>       w r>   r   )r   setattrarpr   r   r   r   )r!   monkeypatchr   s     @r   9test_h1r_final_component_symlink_swap_after_check_blockedr      s`    
 'G}%24FG	+	, XVWX X Xs   A  A)c                j   | dz  }|j                          |dz  }|j                  t        j                  ddi      d       | dz  }|j	                  |d       |dz  |j                  t        d	fd
       t        j                  t              5  t        d       d d d        y # 1 sw Y   y xY w)Noutdirsecret.jsonleakedTutf-8encoding	evil_link)target_is_directoryr   c                    S r   rV   )r   crafteds    r   r   zLtest_h1r_intermediate_dir_symlink_swap_after_check_blocked.<locals>.<lambda>   r   r>   r%   )mkdir
write_textjsondumpsr   r   r   r   r   r   r   )r!   r   r   secretr   r   s        @r   :test_h1r_intermediate_dir_symlink_swap_after_check_blockedr      s      F
LLNm#F
djj(D!12WE;&IT:-'G24FG	+	, @>?@ @ @s   B))B2c           	     L   t         dz  | j                  t        dfd       d}t        |      }|j                  }d} ||      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}x}}y )Nr%   r   c                    S r   rV   )r   reals    r   r   zDtest_h1r_in_ws_read_no_regression_under_fd_recheck.<locals>.<lambda>   s    t r>   r&   eassert %(py10)s
{%(py10)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}.get
}(%(py8)s)
}r   r'   r)   r*   r+   r,   r-   )r   r   r   r   r/   r0   r1   r2   r3   r4   r5   r6   )r   rB   r7   r8   r9   r:   @py_format11r   s          @r   2test_h1r_in_ws_read_no_regression_under_fd_recheckr      s     JJD2ODAR:ABRBFFRzRFzRRRRRRRR:RRR:RRRARRRBRRRFRRRzRRRRRRRRRRRr>   c            	     D   d} t        |       }|j                  }d} ||      }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}x}x}}t        t        t        z        }t        |      }t        |t              }|shddt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  t               rt	        j                  t               nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      d	t        j                         v st	        j
                  t              rt	        j                  t              nd	t	        j                  |      d
z  }t        t	        j                  |            d x}}y )Nr%   r&   r   r   r   zSassert %(py7)s
{%(py7)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
}, %(py5)s)
}rF   rO   rH   )r'   r(   r)   r*   r^   r_   )r   r/   r0   r1   r2   r3   r4   r5   r6   r    r   rL   rF   rH   )	rB   r7   r8   r9   r:   r   rO   rl   re   s	            r   5test_h1r_legit_relative_and_absolute_in_ws_still_readr      sl   AR:ABRBFFRzRFzRRRRRRRR:RRR:RRRARRRBRRRFRRRzRRRRRRRRRRR%-.I +2:+T22222222:222:222222j222j222222222222+222222T222T2222222222r>   zpath,itype,plan_idc                   t        | |      j                         }|d   }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}|d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}t        |      }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}}y Nrq   r[   rr   rs   rt   r^   ru   rv   rw   rx   ry   r+   r   Tr   r   r   Fr~   r   r   r   r   r,   r   r   r   rq   r   rP   rb   r   rd   r7   r   rC   r8   rc   rQ   s                 r   6test_h1r_plan_conversion_no_regression_after_hardeningr          (e4<<>D	?%?g%%%%?g%%%?%%%%%%g%%%g%%%%%%%9"99"99999"9999999"99999999$$$$$$$$$$$$$$$$$$$$%..%....%...%..........$"$"$$$$"$$$$$$=$$$=$$$$$$$$$$$$$$$"$$$$$$$r>   c                     t                y r   r   rV   r>   r   3test_h1r_plan_only_ast_guard_passes_after_hardeningr      r   r>   c                   | dz  }|j                          | dz  }|j                          |dz  }|j                  t        j                  ddi      d       |dz  t	        j
                  |       |j                  t        d	|       |j                  t        d
fd       t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nwsoutsider   r   Tr   r   zinnocent.jsonr   r   c                    S r   rV   )r   hlinks    r   r   zGtest_h1h_in_ws_hardlink_to_out_of_scope_inode_blocked.<locals>.<lambda>  s    u r>   )r   r   r   r   osr"   r   r   r   r   r   r   )r!   r   r   r   r   r   s        @r   5test_h1h_in_ws_hardlink_to_out_of_scope_inode_blockedr      s     
DBHHJ"GMMO}$F
djj(D!12WE EGGFE 0"524DE	+	, ('( ( (s   >CC&c                  
 | dz  }|j                          |dz  

j                  t        j                  ddi      d       |j	                  t
        d|       |j	                  t
        d
fd	       t
        j                  }d} ||      }ddi}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}x}}y )Nr   ok.jsonok   r   r   r   r   c                    S r   rV   )r   fs    r   r   zGtest_h1h_single_link_regular_file_reads_no_regression.<locals>.<lambda>  s    q r>   r[   )zP%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._read_json
}(%(py4)s)
} == %(py9)sr   )r'   r)   r*   r+   rk   rJ   rK   )r   r   r   r   r   r   r   r2   ra   r0   r1   r3   r4   r5   r6   )r!   r   r   rB   r7   r8   @py_assert8r9   rR   rS   r   s             @r   5test_h1h_single_link_regular_file_reads_no_regressionr     s     
DBHHJ
YALLT1I&L90"52LA>>1)1>)$1q	1$	1111$	11111131113111>111)111$111	11111111r>   c            	        d} t        |       }|j                  }d} ||      }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}x}x}}y )Nr%   r&   r   r   r   rA   )rB   r7   r8   r9   r:   r   s         r   9test_h1h_real_schema_single_link_end_to_end_no_regressionr     s    AR:ABRBFFRzRFzRRRRRRRR:RRR:RRRARRRBRRRFRRRzRRRRRRRRRRRr>   c                   | dz  }|j                  dd       | dz  }|j                  dd       t        j                  |t        j                        }	 t	        j
                  t              5  t        ||       d d d        t        j                  |       y # 1 sw Y   xY w# t        j                  |       w xY w)Nza.json{}r   r   zb.json)	r   r   openO_RDONLYr   r   r   r
   close)r!   abfds       r   -test_h1h_helper_fd_inode_mismatch_fail_closedr   "  s     	8ALLL(8ALLL(	BKK	 B]]/0 	.&r1-	. 		. 	. 	s$   B& /B<B& B#B& &B=c                    | dz  }|j                  dd       t        j                  |t        j                        }	 t	        ||       t        j
                  |       y # t        j
                  |       w xY w)Nr   r   r   r   )r   r   r   r   r
   r   )r!   r   r   s      r   -test_h1h_helper_single_link_same_inode_passesr   2  sV    9ALLL(	BKK	 B"2q)
s   A   A7c                   t        | |      j                         }|d   }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}|d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}}t        |      }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}}y r   r   r   s                 r   6test_h1h_plan_conversion_no_regression_after_hardeningr   =  r   r>   c                     t                y r   r   rV   r>   r   3test_h1h_plan_only_ast_guard_passes_after_hardeningr   Q  r   r>   c                    t               } | d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d	   }d
}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}y )Nr   Tr   r   rx   ry   r+   r   r   F)r   r2   ra   r4   r5   r6   )r   rP   r7   rb   r   rC   s         r   7test_h1h_self_check_all_passed_plan_only_dispatch_falser   W  s     
	Bl#t#t####t######t#######k?"d"?d""""?d"""?"""d""""""""#,u,#u,,,,#u,,,#,,,u,,,,,,,r>   c                 \   t        j                  t        dz  j                               } | d   }g d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}y )	Nr%   r&   )r@   rq   remediation_of
issue_typeru   severityr   r   rz   shared_invariant_preservedhold_for_chairreasonsr[   rw   rx   ry   r+   )	r   loadsr   	read_textr2   ra   r4   r5   r6   )r@   rP   r7   rb   r   rC   s         r   test_schema_byte0r   `  s    ZZ	H	HSSUF *  "  "    "       "       r>   )r   r    returnNone)r!   r   r   r   )r   r   )
r   r    r   r    rq   r    r|   r    r   r   )r!   r   r   pytest.MonkeyPatchr   r   )r   r   r   r   )r   r    r   r    rq   r    r   r   )>__doc__
__future__r   builtinsr0   _pytest.assertion.rewrite	assertionrewriter2   r   r   pathlibr   r   anu_v3.auto_remediation_plannerauto_remediation_plannerr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   rL   _2605_2609markparametrizer   r#   r=   rD   rT   rW   rf   rm   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r>   r   <module>r     s  ( #    	   -     	LOI 	


11	1"
+41 	N%	% 	5H]^	.AVW	!?4FG%
%%$'%.1%	%%"1	X	X!3	X		X@@!3@	@$S#S	S3 	5G	.@	!?3	%
	%	%$'	%		%	%((!3(	(&
2
2!3
2	
2S
  	5G	.@	!?3	%
	%	%$'	%		%	%-r>   