From a3ac5b69d801f0b3806f7f12e9c3e72d45aab245 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Tue, 29 Sep 2026 01:16:47 -0400 Subject: [PATCH 01/12] Track bounded complete FULL audit repair and validation scope --- docs/plans/bounded_full_audit_20260929.md | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/plans/bounded_full_audit_20260929.md diff --git a/docs/plans/bounded_full_audit_20260929.md b/docs/plans/bounded_full_audit_20260929.md new file mode 100644 index 0000000..2aaddac --- /dev/null +++ b/docs/plans/bounded_full_audit_20260929.md @@ -0,0 +1,72 @@ +# Bounded complete FULL audit + +Status: repair in progress. No production repair or complete audit is claimed. +Tracking: [issue 11](https://github.com/OpenHCSDev/NominalRefactorAdvisor/issues/11). +Base: `0844525ecaba93e090a064a4ae4914466b2dae60` (current remote main, +29 September 2026). Worktree: `fix/bounded-full-audit-20260929`. + +## Required behavior + +Retain the complete declared production and dependency source corpus, every +registered detector, authenticated source identities and existing native proof +admission. `--json --raw-findings --json-payload full` must retain source index, +observation graph and fibers, semantic-descent graph and refactor gate, +finding-recipe plan, and raw-record evidence. A compact `agent` or `summary` +payload is not a substitute. Increasing timeouts is not the repair. + +The motivating workload is OpenHCS plus its eight bundled libraries' production +source roots. Tests follow the existing discovery policy. Scientific images, +held-out annotations and notebook reference answers are not inputs to this task. + +## Source evidence at the base + +- `cli.py:754`, `JsonPayloadSections.compact_analysis_compatible`, excludes + source-index, observations/fibers and finding-recipe demand. +- `cli.py:3911`, the compact analysis branch, therefore does not serve FULL. +- `cli.py:3960`, the FULL branch, eagerly obtains all parsed modules before + `analyze_modules_with_cache`. +- `ast_tools.py:2738`, `parse_python_module_roots`, retains every parsed result + in a list. `PythonModuleRootParser.parsed_source_paths` also returns a list. +- `cli.py:1197`, `JsonPayloadBuilder`, consumes parsed modules for observations, + semantic descent and `CodemodSourceSnapshot.from_modules` for source-index and + recipe exports. These obligations cannot simply be removed from eligibility. +- `analysis.py:273`, `DetectorAnalysisWorkerPlan`, uses no process pool with one + requested analysis worker. The baseline requests one parse and analysis worker. + +The shared checkout at `52fe8b4` is preserved but is not the repair base: it +predates merged R1 detectors and subsequent native-proof changes. Historical +79-detector receipts do not establish current main's detector coverage. +The current source's `default_detector_types_for_analysis()` returns 85 +registered detectors. Import location was verified against the isolated worktree. + +## Current baseline and resource contract + +One FULL scan is running against the isolated current source and the same nine +analysis/context roots. Its separate receipt is +`scan-recovery-full-2048-cli-restart-current-main.*`; it does not overwrite the +earlier held-prelaunch receipt. Native scan budget is 160 seconds, guarded shell +shard 165 seconds, sampled scanner RSS ceiling 2 GiB. Start requires 11 GiB +available and memory PSI full at most 1 percent for ten seconds. Stop on less +than 8 GiB available, sampled RSS over the ceiling, or sustained pressure. +This is a diagnostic envelope, not a new production default or a proof of +constant-space behavior. No complete coverage result is available yet. + +## Ownership and validation work + +Main owns integration, the baseline and public tracking. Darwin reviews existing +source/fact/snapshot lifetime owners; Nash independently reviews full-export, +cache-invalidation and proof tests. Both initial reviews are read-only and use +the same base. No competing heavy scan or scientific execution is authorized +for these reviews. + +Prefer one source owner with bounded native materialization and derived exports +over another source roster, parser, proof cache or metadata mirror. Exact target +ownership remains under investigation. Preserve fail-closed absent, ambiguous, +changed and unsupported source/proof results. Tooling meets the same ownership +standard as product code (refactor-audit AGENT-8); a partially migrated second +route is not a completed repair (AGENT-2). + +Acceptance requires real all-detector/global completion, native FULL export +behavior, raw-record evidence, authenticated context invalidation, and bounded +wall time/RSS on this workload. Focused tests, cache hits or parse-only success +must be reported separately, not promoted to full audit or biological proof. From ba816d4eb9f264e863ba2689346ae94d5026489c Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Tue, 29 Sep 2026 01:21:52 -0400 Subject: [PATCH 02/12] Record guarded FULL baseline failure on current main --- docs/plans/bounded_full_audit_20260929.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/plans/bounded_full_audit_20260929.md b/docs/plans/bounded_full_audit_20260929.md index 2aaddac..3b8c50d 100644 --- a/docs/plans/bounded_full_audit_20260929.md +++ b/docs/plans/bounded_full_audit_20260929.md @@ -41,7 +41,7 @@ registered detectors. Import location was verified against the isolated worktree ## Current baseline and resource contract -One FULL scan is running against the isolated current source and the same nine +One FULL scan ran against the isolated current source and the same nine analysis/context roots. Its separate receipt is `scan-recovery-full-2048-cli-restart-current-main.*`; it does not overwrite the earlier held-prelaunch receipt. Native scan budget is 160 seconds, guarded shell @@ -49,7 +49,18 @@ shard 165 seconds, sampled scanner RSS ceiling 2 GiB. Start requires 11 GiB available and memory PSI full at most 1 percent for ten seconds. Stop on less than 8 GiB available, sampled RSS over the ceiling, or sustained pressure. This is a diagnostic envelope, not a new production default or a proof of -constant-space behavior. No complete coverage result is available yet. +constant-space behavior. + +Actual result: the guard stopped the scanner at 94 seconds when sampled RSS +reached 2,105,892 KiB, above the 2,097,152 KiB ceiling. Exit 143 reflects that +guard termination, not a native deadline. The FULL JSON is empty and the owned +scanner is absent after cleanup. Thus no complete coverage or full/raw R1 result +is available. This is a reproduced resource failure on current main with the +original source context, not just the earlier held-prelaunch condition. + +An attempted 20-second `py-spy` attach to this owned scanner was denied by the +operating system. It exited 1 and produced no profile. No privilege or kernel +policy was changed. The scan result is not presented as controlled timing. ## Ownership and validation work From 673c062fc656e9c74f1eddcab30f036c9befbc1f Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Tue, 29 Sep 2026 01:22:53 -0400 Subject: [PATCH 03/12] Separate lightweight OpenHCS progress from FULL audit repair --- docs/plans/bounded_full_audit_20260929.md | 31 ++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/plans/bounded_full_audit_20260929.md b/docs/plans/bounded_full_audit_20260929.md index 3b8c50d..73314b5 100644 --- a/docs/plans/bounded_full_audit_20260929.md +++ b/docs/plans/bounded_full_audit_20260929.md @@ -66,9 +66,34 @@ policy was changed. The scan result is not presented as controlled timing. Main owns integration, the baseline and public tracking. Darwin reviews existing source/fact/snapshot lifetime owners; Nash independently reviews full-export, -cache-invalidation and proof tests. Both initial reviews are read-only and use -the same base. No competing heavy scan or scientific execution is authorized -for these reviews. +cache-invalidation and proof tests. Both initial reviews completed read-only +against the same production base. Neither produced a production patch. Nash's +test worktree is clean; no test patch or test run was made. Both workers are now +closed to reduce the fleet after the desktop resource check warned about disk +headroom and swap. The two owned worktrees were moved intact under `/home/ts/wt`. + +The user explicitly directed that NRA must not block OpenHCS work. Use the +lightweight census/overlay scripts and bounded canonical Python queries for +local ownership investigation, followed by actual native regression and MCP +checks. Keep the FULL repair independent, without relabeling local evidence as +global audit completion. The next OpenHCS defect is the already reproduced +PolyStore POINT archive codec issue, tracked in PolyStore issue 12 / draft PR13. + +The census and overlay completed against current NRA production sources with +no parse warning. A bounded Python query through `parse_python_modules` and +`ModuleSyntaxIndex` inspected all 24 original classes in `roi.py` and 29 in +`roi_converters.py`, exposing the existing ImageJ converter family. It exited 0 +in 0.94 seconds at 64,300 KiB maximum RSS. This is original-syntax inspection, +not resolved native binding/MRO, invocation, codec or biological proof. + +The architecture review identified the decisive FULL lifetime problem: cached +`CodemodSourceContext` still carries AST-bearing `ClassFamilyIndex`, and recipe +compilation/simulation retains complete parsed snapshots. Extending bounded +projection/source-index/observation owners is insufficient unless native recipe +and proof materialization also gains a bounded original-identity lifetime. +Do not merely enable compact eligibility or defer the same eager snapshot. +The independent test review identified missing combined FULL cold/warm export, +complete-status, dependency-invalidation and native-proof rejection regressions. Prefer one source owner with bounded native materialization and derived exports over another source roster, parser, proof cache or metadata mirror. Exact target From 6bd67dec161c44712e96fa3ff4333870b98cc08a Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 09:01:59 -0400 Subject: [PATCH 04/12] docs: claim original R1 preparation ownership and bounded profile --- .../r1_preparation_owner_357_20261001.md | 61 ++++++++++++++++++ tools/profile_r1_preparation.py | 63 +++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 docs/plans/r1_preparation_owner_357_20261001.md create mode 100644 tools/profile_r1_preparation.py diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md new file mode 100644 index 0000000..8bbdb77 --- /dev/null +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -0,0 +1,61 @@ +# R1 preparation owner checkpoint + +Source owner: Schrodinger/Codex. Integration and original complete acceptance: +parent. References: [NRA issue11](https://github.com/OpenHCSDev/NominalRefactorAdvisor/issues/11), +[pinned PR12](https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/12), +[OpenHCS issue357](https://github.com/OpenHCSDev/openhcs/issues/357). + +Worktree: `/home/ts/wt/nra-r1-preparation-owner-357-20261001`. +Branch: `fix/r1-preparation-owner-357-20261001`. +Pinned baseline: `673c062fc656e9c74f1eddcab30f036c9befbc1f`. +The baseline worktree and live main are read-only. No newer separate NRA +implementer was present in PR12/issue11 comments or open PRs at admission. +PR359's original consumer repair is already independently qualified; this +source assignment does not duplicate that consumer/revision staging owner. + +## Required relation and current evidence + +Retain original revisions `791650087e01c9d25766f12802a37296851f37cf` and +`3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4`, all three production roots and +eight exact recursive dependencies. Original repaired consumer SHA256: +`4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca`. +No detector copy, context pruning, source-cache spoofing, proof weakening, +resource increase or global completion claim. + +Original complete attempt: 165.05s, 178.82MiB, exit-9. Original phase diagnostic: +60.03s, 179.55MiB, exit124. Its 15/30/45s stacks point into preparation before +the first scan_counts result, not a dominant-cost proof. Preserve both failures. +The immutable diagnostic and transcript are the parent's +`paired350-installed-20261001/diagnose-r1-phase-20261001.sh` and +`producer-installed-20261001/paired350-r1-phase-diagnostic-20261001.{log,command.json}` +under `/home/ts/wt/openhcs-issue-batch-20260929`. +Its archived scratch address is terminal and must not be reused. + +## Admission and next source boundary + +Serial source diagnostics/tests only: one CPU, kernel512MiB/no swap, outer60s. +Exact frozen installed Python3.12, read-only dependencies. No installs, +downloads, native/UI/MCP/science, shared locks, subagents or paid provider calls. +Startup helper reported 18.0GiB available RAM, home7.5GiB, swap13.6GiB and +advisory critical disk/swap status. No additional worker fleet is started. +The new owned disposable root is +`/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001`. +Retain recipes/profiles/resource receipts before cleaning exact owned scratch. + +No repository/ancestor AGENTS.md exists in the pinned source checkout or +checked `/home/ts/code/projects` ancestry. Supplied standing AGENTS instructions +and current NRA/refactor-audit skills remain binding. + +First obtain one bounded useful original-source profile, not another identical +full scan. Trace actual determining declarations and their consumers before +choosing a production change. Existing CollectedFamily/cache/source identities +and proof admission remain the authority. Shared algorithms must live on an +existing behavior-owning ancestor; leaves provide only varying hooks. Independent +capabilities compose through genuine cooperative MRO only where justified. +Relevant review: IMPL-12/13 repeated preparation, BOUND-1/2 admission boundaries, +MEMB-1/2/5 declaration-derived inventories and TIME-1/3/9 replacement closure. +Do not invent container dispatch families, a parallel schema or a compatibility +facade. A new family/capability must need only its declaration, not consumer edits. + +Status: ownership and diagnosis checkpoint only. No production fix, focused +pass, complete two-revision R1 or global85-detector/FULL audit is yet claimed. diff --git a/tools/profile_r1_preparation.py b/tools/profile_r1_preparation.py new file mode 100644 index 0000000..5e9513d --- /dev/null +++ b/tools/profile_r1_preparation.py @@ -0,0 +1,63 @@ +"""Bound a useful profile of the unchanged original R1 consumer, not a pass. + +SIGPROF bounds CPU profiling independently of NRA's unchanged real-time scan +deadline. Call under an outer60s/512MiB/oneCPU supervisor with a new owned cache. +The consumer still stages both exact revisions and its complete source context. +""" + +from __future__ import annotations + +import argparse +import cProfile +import pstats +import runpy +import signal +import sys +import traceback +from pathlib import Path + + +class PreparationProfileBudgetReached(BaseException): + """Diagnostic terminal condition; never a successful audit result.""" + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--consumer", required=True, type=Path) + parser.add_argument("--profile", required=True, type=Path) + parser.add_argument("--cpu-seconds", type=float, default=20.0) + parser.add_argument("consumer_arguments", nargs=argparse.REMAINDER) + args = parser.parse_args() + source_root = Path(__file__).resolve().parents[1] + sys.path.insert(0, str(source_root)) + import nominal_refactor_advisor + + assert Path(nominal_refactor_advisor.__file__).is_relative_to(source_root) + sys.argv = [str(args.consumer), *args.consumer_arguments] + if len(sys.argv) > 1 and sys.argv[1] == "--": + del sys.argv[1] + profiler = cProfile.Profile() + + def finish_profile(_signal, frame): + traceback.print_stack(frame, file=sys.stderr) + raise PreparationProfileBudgetReached() + + signal.signal(signal.SIGPROF, finish_profile) + signal.setitimer(signal.ITIMER_PROF, args.cpu_seconds) + profiler.enable() + try: + runpy.run_path(str(args.consumer), run_name="__main__") + except PreparationProfileBudgetReached: + print("INCOMPLETE: diagnostic CPU profiling bound reached", file=sys.stderr) + return 75 + finally: + profiler.disable() + signal.setitimer(signal.ITIMER_PROF, 0.0) + profiler.dump_stats(str(args.profile)) + pstats.Stats(profiler, stream=sys.stderr).sort_stats("cumulative").print_stats(50) + pstats.Stats(profiler, stream=sys.stderr).sort_stats("tottime").print_stats(30) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From b718ee76961cf7b22b4d297bc7acb84ea6bd4692 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 09:26:46 -0400 Subject: [PATCH 05/12] Compose semantic preparation capabilities through their scope owner --- .../r1_preparation_owner_357_20261001.md | 51 ++++- nominal_refactor_advisor/ast_tools.py | 15 ++ nominal_refactor_advisor/record_checks.py | 39 ++-- nominal_refactor_advisor/semantic_descent.py | 95 ++++++---- .../test_cooperative_semantic_preparation.py | 179 ++++++++++++++++++ tools/check_semantic_preparation_parity.py | 59 ++++++ tools/profile_r1_preparation.py | 4 +- 7 files changed, 393 insertions(+), 49 deletions(-) create mode 100644 tests/test_cooperative_semantic_preparation.py create mode 100644 tools/check_semantic_preparation_parity.py diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md index 8bbdb77..95fe4e4 100644 --- a/docs/plans/r1_preparation_owner_357_20261001.md +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -57,5 +57,52 @@ MEMB-1/2/5 declaration-derived inventories and TIME-1/3/9 replacement closure. Do not invent container dispatch families, a parallel schema or a compatibility facade. A new family/capability must need only its declaration, not consumer edits. -Status: ownership and diagnosis checkpoint only. No production fix, focused -pass, complete two-revision R1 or global85-detector/FULL audit is yet claimed. +Status: source implementation checkpoint. Original complete two-revision R1, +installed acceptance and global85-detector/FULL audit remain unqualified. + +## Admitted source-owner move (2026-10-01) + +The bounded original-consumer profile contains eight parses and is not a full +audit. `CompactSemanticModuleProjectionFamily._collect` consumed 3.231s; +its presentation visitor and `DeclaredTypeCheckModule.collect` independently +walked the same live AST (the check visitor's function handlers alone consumed +0.702s). AST admission checks consumed 0.829s overall: the sparse predecessor +stack does not establish them as dominant. No whole-context dominance is claimed. + +Required answers are unchanged presentation/class supplements and unchanged +declared-attribute checks, including ignored lambda checks, shadowed builtins, +nested scope ownership and exact original source locations. These independently +meaningful capabilities already inherit `ClassFunctionStackNodeVisitor`; that +ancestor owns stack lifecycle and the single traversal endpoints. A source-bound +ancestor owns the shared parsed-module context, not a second identity store. +The compact semantic collector composes both existing capabilities via C3 and +cooperative `super()`, rather than invoking a second module traversal. The +type-check record owns construction from its collector. No consumer type switch, +new registry, detector copy or cache policy change is required. + +Catalog review: IMPL-12/13 (duplicate traversal mechanism), IMPL-4 (capabilities +must really participate in cooperative traversal), MEMB-1/2 (no parallel roster), +IDEN-5 (one source context), TIME-1/3 (delete second traversal; no fallback facade). +The supported refactor DSL does not certify this cooperative visitor fusion; +it is a manually authored source refactor with separate behavioral/proof gates. +No native equivalence, installed acceptance or global audit claim follows. + +## First behavioral checkpoint + +Composition/publication suite: 20 passed, 5.79s wall, 86.79MiB maxRSS. +The first invocation rejected pytest's inherited parallel flags (exit4); the +next retained one failed new-case test (6 passed) exposing presentation early +returns hiding another capability's events. Fixed by capability-local subtree +suppression and continued shared traversal, not weakened assertions. Subsequent +check cases cover projected assignment/annotated-assignment/return descendants. + +Original four-file source-family comparison: identical raw SHA256 and content +signatures, 458 presentations, 36 declared checks, 292 class supplements. +Collection 0.708180s baseline -> 0.619938s candidate (single sample, about12.5%). +Process wall was 2.77s -> 3.61s; no cold-process/full-context improvement claim. +Baseline/candidate maxRSS 80.92/83.10MiB. No source pruning of the original +two-revision acceptance inputs is licensed by this bounded component comparison. + +Broader five-file test shard: INCOMPLETE exit124, 60.01s, 88.42MiB. Partial dots +are not an accepted test count. Remaining checks split under the same bounds. +All failures and profiles remain retained for the final source handoff. diff --git a/nominal_refactor_advisor/ast_tools.py b/nominal_refactor_advisor/ast_tools.py index cdaeb7d..37b35a8 100644 --- a/nominal_refactor_advisor/ast_tools.py +++ b/nominal_refactor_advisor/ast_tools.py @@ -1510,6 +1510,7 @@ class ClassFunctionStackNodeVisitor(ast.NodeVisitor, ABC): """Nominal AST visitor base that owns class/function scope stack lifecycle.""" def __init__(self) -> None: + super().__init__() self.class_stack: list[str] = [] self.function_stack: list[str] = [] @@ -1571,6 +1572,20 @@ def visit_FunctionDef(self, node: ast.FunctionDef) -> None: visit_AsyncFunctionDef = visit_FunctionDef + # Cooperative capabilities observe an event before delegating here. The + # owning ancestor traverses children once, regardless of capability count. + visit_Call = ast.NodeVisitor.generic_visit + visit_Compare = ast.NodeVisitor.generic_visit + visit_Lambda = ast.NodeVisitor.generic_visit + + +class ParsedModuleClassFunctionStackNodeVisitor(ClassFunctionStackNodeVisitor): + """Source-bound scope traversal shared by independent module capabilities.""" + + def __init__(self, parsed_module: ParsedModule) -> None: + super().__init__() + self.parsed_module = parsed_module + _TRegistered = TypeVar("_TRegistered") _TRegisteredType = TypeVar("_TRegisteredType") diff --git a/nominal_refactor_advisor/record_checks.py b/nominal_refactor_advisor/record_checks.py index b65cb95..f888a43 100644 --- a/nominal_refactor_advisor/record_checks.py +++ b/nominal_refactor_advisor/record_checks.py @@ -6,7 +6,7 @@ from dataclasses import dataclass from .annotation_semantics import NOMINAL_ANNOTATION_SOURCE_AUTHORITY -from .ast_tools import ClassFunctionStackNodeVisitor, ParsedModule +from .ast_tools import ParsedModuleClassFunctionStackNodeVisitor, ParsedModule from .class_index import ( CompactClassFamilyIndex, CompactClassReferenceResolver, @@ -43,18 +43,23 @@ def collect( collector = DeclaredAttributeCheckCollector(module) if include_checks: collector.visit(module.module) + return cls.from_collector(collector) + + @classmethod + def from_collector( + cls, collector: DeclaredAttributeCheckCollector + ) -> DeclaredTypeCheckModule: return cls(collector.module_bindings, tuple(collector.checks)) -class DeclaredAttributeCheckCollector(ClassFunctionStackNodeVisitor): +class DeclaredAttributeCheckCollector(ParsedModuleClassFunctionStackNodeVisitor): """Collect contracts once at the lexical boundary, without a second class index.""" - def __init__(self, module: ParsedModule) -> None: - super().__init__() - self.module = module - self.module_bindings = ModuleNominalBindingAuthority(module).snapshot_before( - None - ) + def __init__(self, parsed_module: ParsedModule) -> None: + super().__init__(parsed_module) + self.module_bindings = ModuleNominalBindingAuthority( + parsed_module + ).snapshot_before(None) self.subjects: list[dict[str, tuple[str, ...]]] = [] self.locals: list[frozenset[str]] = [] self.checks: list[DeclaredAttributeCheck] = [] @@ -95,7 +100,15 @@ def visit_FunctionDef(self, node: ast.FunctionDef | ast.AsyncFunctionDef) -> Non visit_AsyncFunctionDef = visit_FunctionDef def visit_Lambda(self, node: ast.Lambda) -> None: - pass + # This capability has never admitted checks in lambda bodies. Other + # composed capabilities may still require those syntax events. + self.subjects.append({}) + self.locals.append(frozenset()) + try: + super().visit_Lambda(node) + finally: + self.locals.pop() + self.subjects.pop() def _builtin(self, node: ast.AST, name: str) -> bool: return ( @@ -112,7 +125,7 @@ def visit_Call(self, node: ast.Call) -> None: and not node.keywords ): self._record(node, node.args[0], node.args[1]) - self.generic_visit(node) + super().visit_Call(node) def visit_Compare(self, node: ast.Compare) -> None: if len(node.ops) == 1 and isinstance( @@ -129,7 +142,7 @@ def visit_Compare(self, node: ast.Compare) -> None: and not call.keywords ): self._record(node, call.args[0], expected) - self.generic_visit(node) + super().visit_Compare(node) def _record(self, node: ast.AST, value: ast.AST, expected: ast.AST) -> None: if ( @@ -150,7 +163,9 @@ def _record(self, node: ast.AST, value: ast.AST, expected: ast.AST) -> None: return self.checks.append( DeclaredAttributeCheck( - SourceLocation(self.module.file_path, node.lineno, self.qualname), + SourceLocation( + self.parsed_module.file_path, node.lineno, self.qualname + ), subject_type, value.attr, self.module_bindings.reference_for(expected_parts), diff --git a/nominal_refactor_advisor/semantic_descent.py b/nominal_refactor_advisor/semantic_descent.py index eb70283..028dbfc 100644 --- a/nominal_refactor_advisor/semantic_descent.py +++ b/nominal_refactor_advisor/semantic_descent.py @@ -36,10 +36,10 @@ from .assignment_projection import SingleAssignmentAndValueNameProjection from .ast_tools import ( AstExpressionProjection, - ClassFunctionStackNodeVisitor, CollectedFamily, CompactModuleIdentity, ParsedModule, + ParsedModuleClassFunctionStackNodeVisitor, PythonSourcePathPolicy, module_syntax_index, python_module_path_identities_for_roots, @@ -95,7 +95,7 @@ ) from .name_algebra import CLASS_NAME_ALGEBRA from .python_module_identity import PythonModulePathIdentity -from .record_checks import DeclaredTypeCheckModule +from .record_checks import DeclaredAttributeCheckCollector, DeclaredTypeCheckModule from .registry_identity import AutoRegisterClassAuthority, class_name_registry_key from .semantic_identity import ( SemanticIdentifierTokenProjection, @@ -4351,14 +4351,18 @@ def _collect( ) -> list[CompactSemanticModuleProjection]: visitor = None if include_presentations: - visitor = _ProjectionVisitor(parsed_module, None) + visitor = _CompactSemanticProjectionVisitor(parsed_module, None) visitor.visit(parsed_module.module) return [ CompactSemanticModuleProjection( module_name=parsed_module.module_name, file_path=parsed_module.file_path, - type_checks=DeclaredTypeCheckModule.collect( - parsed_module, include_checks=include_presentations + type_checks=( + DeclaredTypeCheckModule.from_collector(visitor) + if visitor is not None + else DeclaredTypeCheckModule.collect( + parsed_module, include_checks=False + ) ), projections=sorted_tuple( (() if visitor is None else visitor.projections), @@ -4772,17 +4776,17 @@ class CompactSemanticClassSupplementFrame: constructed_type_names: set[str] = field(default_factory=set) -class _ProjectionVisitor(ClassFunctionStackNodeVisitor): +class _ProjectionVisitor(ParsedModuleClassFunctionStackNodeVisitor): def __init__( self, parsed_module: ParsedModule, - class_index: ClassFamilyIndex | None, + class_index: ClassFamilyIndex | None = None, *, include_presentations: bool = True, ) -> None: - super().__init__() - self.parsed_module = parsed_module + super().__init__(parsed_module) self.include_presentations = include_presentations + self._projection_suppression_depth = 0 self.class_reference_resolver = ( None if class_index is None or not include_presentations @@ -4977,15 +4981,15 @@ def _axis_type_names_for_node(self, node: ast.AST) -> tuple[str, ...]: ) def visit_Call(self, node: ast.Call) -> None: - if self.active_class_method_frames: + if self.active_class_method_frames and not self._projection_suppression_depth: self._record_class_construction_type_names( PresentationAuthorityConstructionCollector.construction_type_names(node) ) - if self.include_presentations: + if self.include_presentations and not self._projection_suppression_depth: self._record_owner_constructions( PresentationAuthorityConstructionCollector.constructions_for_call(node) ) - self.generic_visit(node) + super().visit_Call(node) def _record_class_construction_type_names( self, @@ -5016,32 +5020,44 @@ def _record_owner_constructions( frame.constructions.update(constructions) def visit_Assign(self, node: ast.Assign) -> None: - if not self.include_presentations: - self.generic_visit(node) - return - if self._collect_assignment_projection(node, node.value): - return - self.generic_visit(node) + projected = ( + self.include_presentations + and not self._projection_suppression_depth + and self._collect_assignment_projection(node, node.value) + ) + self._traverse_projection_children(node, suppress=projected) def visit_AnnAssign(self, node: ast.AnnAssign) -> None: - if not self.include_presentations: - self.generic_visit(node) - return - if node.value is not None and self._collect_assignment_projection( - node, - node.value, - axis_type_names=ProjectionTypeScope.annotation_type_names(node.annotation), - ): - return - self.generic_visit(node) + projected = ( + self.include_presentations + and not self._projection_suppression_depth + and node.value is not None + and self._collect_assignment_projection( + node, + node.value, + axis_type_names=ProjectionTypeScope.annotation_type_names(node.annotation), + ) + ) + self._traverse_projection_children(node, suppress=projected) def visit_Return(self, node: ast.Return) -> None: - if not self.include_presentations: - self.generic_visit(node) - return - if node.value is not None and self._collect_return_projection(node, node.value): - return - self.generic_visit(node) + projected = ( + self.include_presentations + and not self._projection_suppression_depth + and node.value is not None + and self._collect_return_projection(node, node.value) + ) + self._traverse_projection_children(node, suppress=projected) + + def _traverse_projection_children(self, node: ast.AST, *, suppress: bool) -> None: + # An emitted presentation has already consumed this expression's + # descendant facts. Suppress only this capability, never another + # cooperative capability's required syntax events. + self._projection_suppression_depth += int(suppress) + try: + super().generic_visit(node) + finally: + self._projection_suppression_depth -= int(suppress) def visit_If(self, node: ast.If) -> None: if not self.include_presentations: @@ -5297,6 +5313,17 @@ def _append_projection( ) +class _CompactSemanticProjectionVisitor( + _ProjectionVisitor, DeclaredAttributeCheckCollector +): + """Independent presentation/check capabilities sharing one C3 traversal. + + Presentation scope prelude precedes declared-check prelude, followed by the + common class/function lifecycle. Both postludes unwind in reverse order. + Neither capability owns or repeats the other's extraction algorithm. + """ + + @dataclass(frozen=True) class SemanticMirrorPolicyCatalog: """Nominal policy lookup for semantic mirror authority kinds.""" diff --git a/tests/test_cooperative_semantic_preparation.py b/tests/test_cooperative_semantic_preparation.py new file mode 100644 index 0000000..6d2b9c3 --- /dev/null +++ b/tests/test_cooperative_semantic_preparation.py @@ -0,0 +1,179 @@ +"""Independent semantic capabilities compose without a second AST traversal.""" + +import ast +from collections import Counter +from dataclasses import replace + +import pytest + +from nominal_refactor_advisor.ast_tools import ( + ParsedModuleClassFunctionStackNodeVisitor, + SourceModule, + retains_python_ast, +) +from nominal_refactor_advisor.record_checks import ( + DeclaredAttributeCheckCollector, + DeclaredTypeCheckModule, +) +from nominal_refactor_advisor.semantic_descent import ( + CompactSemanticModuleProjectionFamily, + _CompactSemanticProjectionVisitor, + _ProjectionVisitor, +) + +SOURCE = """\ +class Value: + count: int + +class Example: + def method(self, value: Value, payload): + if isinstance(value.count, int): + pass + type(value.count) is int + ignored = lambda: isinstance(value.count, str) + data = {'value': payload['value'], 'count': payload.get('count')} + def nested(other: Value): + return isinstance(other.count, int) + return data + +async def async_function(value: Value): + return isinstance(value.count, int) + +def shadowed(value: Value, isinstance): + return isinstance(value.count, int) + +def reassigned(value: Value): + value = None + return isinstance(value.count, int) +""" + + +@pytest.mark.parametrize( + "suffix", + ( + "", + "\nisinstance = lambda *args: True\n", + "\ntype = lambda value: int\n", + ), +) +def test_composed_facts_equal_independent_capabilities(tmp_path, suffix): + module = SourceModule(tmp_path / "case.py", "case", SOURCE + suffix).parse() + independent = _ProjectionVisitor(module, None) + independent.visit(module.module) + checks = DeclaredTypeCheckModule.collect(module) + composed = _CompactSemanticProjectionVisitor(module, None) + composed.visit(module.module) + assert composed.projections == independent.projections + assert composed.class_supplements == independent.class_supplements + assert DeclaredTypeCheckModule.from_collector(composed) == checks + assert not retains_python_ast(tuple(composed.projections)) + assert not retains_python_ast(checks) + assert composed.class_stack == composed.function_stack == [] + assert composed.subjects == composed.locals == [] + assert composed.parsed_module is module + if not suffix: + assert len(checks.checks) == 4 + assert tuple(check.location.symbol for check in checks.checks) == ( + "Example.method", + "Example.method", + "Example.method.nested", + "async_function", + ) + assert all("str" not in check.expression for check in checks.checks) + + +def test_compact_family_does_not_reenter_independent_check_collection( + tmp_path, monkeypatch +): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + + def forbidden(*args, **kwargs): + raise AssertionError("The complete family must not traverse checks again") + + monkeypatch.setattr(DeclaredTypeCheckModule, "collect", forbidden) + (projection,) = CompactSemanticModuleProjectionFamily.collect(module) + assert len(projection.type_checks.checks) == 4 + assert projection.projections + assert not retains_python_ast(projection) + + +def test_new_capability_is_only_a_declaration_and_cooperative_hook(tmp_path): + class CallCensus(ParsedModuleClassFunctionStackNodeVisitor): + def __init__(self, parsed_module): + super().__init__(parsed_module) + self.calls = Counter() + + def visit_Call(self, node): + self.calls[id(node)] += 1 + super().visit_Call(node) + + class Extended(CallCensus, _CompactSemanticProjectionVisitor): + pass + + # All constructors and event handlers reach the original shared owner once. + # The new capability has no taxonomy registration or generic consumer edit. + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + visitor = Extended(module) + visitor.visit(module.module) + assert visitor.calls == Counter( + {id(node): 1 for node in ast.walk(module.module) if isinstance(node, ast.Call)} + ) + assert DeclaredTypeCheckModule.from_collector( + visitor + ) == DeclaredTypeCheckModule.collect(module) + mro = Extended.__mro__ + assert mro.index(_ProjectionVisitor) < mro.index(DeclaredAttributeCheckCollector) + assert mro.count(ParsedModuleClassFunctionStackNodeVisitor) == 1 + + +def test_exception_unwinds_both_capabilities_and_shared_owner(tmp_path): + class FailOnCall(ParsedModuleClassFunctionStackNodeVisitor): + def visit_Call(self, node): + raise RuntimeError("controlled syntax failure") + + class Failing(_CompactSemanticProjectionVisitor, FailOnCall): + pass + + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + visitor = Failing(module, None) + with pytest.raises(RuntimeError, match="controlled syntax failure"): + visitor.visit(module.module) + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.owner_construction_stack == visitor.type_scopes == [] + assert visitor.class_supplement_stack == visitor.active_class_method_frames == [] + assert visitor._projection_suppression_depth == 0 + + +@pytest.mark.parametrize( + "statement", + ( + "result = {'left': isinstance(value.count, int), 'right': 'name'}", + "result: dict = {'left': isinstance(value.count, int), 'right': 'name'}", + "return {'left': isinstance(value.count, int), 'right': 'name'}", + ), +) +def test_presentation_short_circuit_does_not_hide_another_capability( + tmp_path, statement +): + source = "def target(value: Value):\n " + statement + "\n" + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor(module, None) + independent.visit(module.module) + composed = _CompactSemanticProjectionVisitor(module, None) + composed.visit(module.module) + assert composed.projections == independent.projections + checks = DeclaredTypeCheckModule.from_collector(composed) + assert checks == DeclaredTypeCheckModule.collect(module) + assert len(checks.checks) == 1 + assert composed._projection_suppression_depth == 0 + + +def test_context_only_family_keeps_its_existing_no_checks_contract(tmp_path): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + demand = CompactSemanticModuleProjectionFamily.report_demand((), None) + (focused,) = CompactSemanticModuleProjectionFamily.collect_demanded(module, demand) + (complete,) = CompactSemanticModuleProjectionFamily.collect(module) + assert focused.type_checks == replace(complete.type_checks, checks=()) + assert focused.projections == () + assert focused.class_supplements == complete.class_supplements diff --git a/tools/check_semantic_preparation_parity.py b/tools/check_semantic_preparation_parity.py new file mode 100644 index 0000000..3a7e6ad --- /dev/null +++ b/tools/check_semantic_preparation_parity.py @@ -0,0 +1,59 @@ +"""Measure the original family on fixed source files; not a detector/audit copy.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import sys +from pathlib import Path +from time import perf_counter + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--advisor-root", required=True, type=Path) + parser.add_argument("sources", nargs="+", type=Path) + args = parser.parse_args() + sys.path.insert(0, str(args.advisor_root)) + import nominal_refactor_advisor + from nominal_refactor_advisor.analysis import release_module_analysis_memory + from nominal_refactor_advisor.ast_tools import ( + SourceModule, + collected_family_items_content_signature, + retains_python_ast, + ) + from nominal_refactor_advisor.semantic_descent import ( + CompactSemanticModuleProjectionFamily, + ) + + assert Path(nominal_refactor_advisor.__file__).is_relative_to(args.advisor_root) + for path in args.sources: + source = path.read_text(encoding="utf-8") + module = SourceModule(path, path.stem, source).parse() + started = perf_counter() + items = tuple(CompactSemanticModuleProjectionFamily.collect(module)) + elapsed = perf_counter() - started + assert not retains_python_ast(items) + print( + json.dumps( + { + "path": str(path), + "raw_sha256": hashlib.sha256(path.read_bytes()).hexdigest(), + "content_signature": collected_family_items_content_signature( + items + ), + "collection_seconds": elapsed, + "presentations": sum(len(item.projections) for item in items), + "checks": sum(len(item.type_checks.checks) for item in items), + "supplements": sum(len(item.class_supplements) for item in items), + } + ), + flush=True, + ) + del module, items + release_module_analysis_memory() + + +if __name__ == "__main__": + main() diff --git a/tools/profile_r1_preparation.py b/tools/profile_r1_preparation.py index 5e9513d..86d928c 100644 --- a/tools/profile_r1_preparation.py +++ b/tools/profile_r1_preparation.py @@ -54,7 +54,9 @@ def finish_profile(_signal, frame): profiler.disable() signal.setitimer(signal.ITIMER_PROF, 0.0) profiler.dump_stats(str(args.profile)) - pstats.Stats(profiler, stream=sys.stderr).sort_stats("cumulative").print_stats(50) + pstats.Stats(profiler, stream=sys.stderr).sort_stats("cumulative").print_stats( + 50 + ) pstats.Stats(profiler, stream=sys.stderr).sort_stats("tottime").print_stats(30) return 0 From 2ae2309967904e0195f0d8e75b9b9988c736a52a Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 09:45:42 -0400 Subject: [PATCH 06/12] Keep capability-local suppression and canonical source diagnostics --- nominal_refactor_advisor/semantic_descent.py | 16 ++--- tools/census_semantic_preparation_owners.py | 62 ++++++++++++++++++++ tools/check_semantic_preparation_parity.py | 7 ++- 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 tools/census_semantic_preparation_owners.py diff --git a/nominal_refactor_advisor/semantic_descent.py b/nominal_refactor_advisor/semantic_descent.py index 028dbfc..9739faa 100644 --- a/nominal_refactor_advisor/semantic_descent.py +++ b/nominal_refactor_advisor/semantic_descent.py @@ -4812,6 +4812,11 @@ def class_supplements(self) -> tuple[SemanticClassSupplement, ...]: if supplement is not None ) + @property + def _collecting_presentations(self) -> bool: + """Whether this capability still needs this subtree's facts.""" + return self.include_presentations and not self._projection_suppression_depth + def visit_ClassDef(self, node: ast.ClassDef) -> None: frame: CompactSemanticClassSupplementFrame | None = None if not self.function_stack: @@ -4985,7 +4990,7 @@ def visit_Call(self, node: ast.Call) -> None: self._record_class_construction_type_names( PresentationAuthorityConstructionCollector.construction_type_names(node) ) - if self.include_presentations and not self._projection_suppression_depth: + if self._collecting_presentations: self._record_owner_constructions( PresentationAuthorityConstructionCollector.constructions_for_call(node) ) @@ -5021,16 +5026,14 @@ def _record_owner_constructions( def visit_Assign(self, node: ast.Assign) -> None: projected = ( - self.include_presentations - and not self._projection_suppression_depth + self._collecting_presentations and self._collect_assignment_projection(node, node.value) ) self._traverse_projection_children(node, suppress=projected) def visit_AnnAssign(self, node: ast.AnnAssign) -> None: projected = ( - self.include_presentations - and not self._projection_suppression_depth + self._collecting_presentations and node.value is not None and self._collect_assignment_projection( node, @@ -5042,8 +5045,7 @@ def visit_AnnAssign(self, node: ast.AnnAssign) -> None: def visit_Return(self, node: ast.Return) -> None: projected = ( - self.include_presentations - and not self._projection_suppression_depth + self._collecting_presentations and node.value is not None and self._collect_return_projection(node, node.value) ) diff --git a/tools/census_semantic_preparation_owners.py b/tools/census_semantic_preparation_owners.py new file mode 100644 index 0000000..8d5c67d --- /dev/null +++ b/tools/census_semantic_preparation_owners.py @@ -0,0 +1,62 @@ +"""Original syntax/class-family census; unmatched declarations remain OPEN.""" + +from __future__ import annotations + +import argparse +import ast +import json +import sys +from pathlib import Path + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--advisor-root", required=True, type=Path) + parser.add_argument("sources", nargs="+", type=Path) + args = parser.parse_args() + sys.path.insert(0, str(args.advisor_root)) + from nominal_refactor_advisor.ast_tools import ( + PythonModuleRootParser, + module_syntax_index, + ) + from nominal_refactor_advisor.class_index import ( + CompactModuleClassProjectionFamily, + build_compact_class_family_index, + ) + from nominal_refactor_advisor.analysis import release_module_analysis_memory + + for path in args.sources: + module = PythonModuleRootParser.for_root( + path, use_parse_cache=False, parse_workers=1 + ).parsed_source_path(path) + syntax = module_syntax_index(module.module) + indexed = tuple( + build_compact_class_family_index( + CompactModuleClassProjectionFamily.collect(module) + ).classes_by_symbol.values() + ) + for index, node in syntax.indexed_nodes_of_type(ast.ClassDef): + matches = tuple(owner for owner in indexed if owner.line == node.lineno) + print( + json.dumps( + { + "file_path": str(path), + "line": node.lineno, + "name": node.name, + "scope": syntax.scopes[syntax.scope_ids[index]].names, + "admitted_owners": [owner.symbol for owner in matches], + "status": ( + "INDEX_ADMITTED" + if len(matches) == 1 + else "OPEN_UNPROJECTED_OR_AMBIGUOUS" + ), + } + ), + flush=True, + ) + del module, syntax, indexed + release_module_analysis_memory() + + +if __name__ == "__main__": + main() diff --git a/tools/check_semantic_preparation_parity.py b/tools/check_semantic_preparation_parity.py index 3a7e6ad..b86e76b 100644 --- a/tools/check_semantic_preparation_parity.py +++ b/tools/check_semantic_preparation_parity.py @@ -19,7 +19,7 @@ def main() -> None: import nominal_refactor_advisor from nominal_refactor_advisor.analysis import release_module_analysis_memory from nominal_refactor_advisor.ast_tools import ( - SourceModule, + PythonModuleRootParser, collected_family_items_content_signature, retains_python_ast, ) @@ -29,8 +29,9 @@ def main() -> None: assert Path(nominal_refactor_advisor.__file__).is_relative_to(args.advisor_root) for path in args.sources: - source = path.read_text(encoding="utf-8") - module = SourceModule(path, path.stem, source).parse() + module = PythonModuleRootParser.for_root( + path, use_parse_cache=False, parse_workers=1 + ).parsed_source_path(path) started = perf_counter() items = tuple(CompactSemanticModuleProjectionFamily.collect(module)) elapsed = perf_counter() - started From c6ec13f8bf2b6c07b8fae8db8533fcd6fb5d6d2b Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 09:51:03 -0400 Subject: [PATCH 07/12] Freeze R1 preparation source evidence and bounded failures --- .../r1_preparation_owner_357_20261001.md | 27 ++ .../INDEX.md | 129 ++++++++++ .../SHA256SUMS | 21 ++ .../baseline-profile.log | 160 ++++++++++++ .../baseline.pstats | Bin 0 -> 236116 bytes .../cache-tests-05.log | 48 ++++ .../candidate-profile.log | 180 +++++++++++++ .../candidate.pstats | Bin 0 -> 236486 bytes .../canonical-parity-baseline.log | 27 ++ .../canonical-parity-candidate.log | 27 ++ .../cli-tests-09.log | 43 ++++ .../cli-tests-10.log | 33 +++ .../cooperative-tests-01.log | 29 +++ .../cooperative-tests-02.log | 61 +++++ .../cooperative-tests-03.log | 25 ++ .../family-parity-baseline.log | 27 ++ .../family-parity-candidate.log | 27 ++ .../freeze-manifest.json | 25 ++ .../graph-tests-07.log | 90 +++++++ .../owner-census-baseline.log | 235 +++++++++++++++++ .../owner-census-canonical-baseline.log | 235 +++++++++++++++++ .../owner-census-canonical-candidate.log | 237 ++++++++++++++++++ .../owner-tests-06.log | 63 +++++ .../predecessor-test-08.log | 63 +++++ .../proof-tests-04.log | 24 ++ 25 files changed, 1836 insertions(+) create mode 100644 docs/validation/r1_preparation_owner_357_20261001/INDEX.md create mode 100644 docs/validation/r1_preparation_owner_357_20261001/SHA256SUMS create mode 100644 docs/validation/r1_preparation_owner_357_20261001/baseline-profile.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/baseline.pstats create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cache-tests-05.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/candidate-profile.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/candidate.pstats create mode 100644 docs/validation/r1_preparation_owner_357_20261001/canonical-parity-baseline.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/canonical-parity-candidate.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cli-tests-09.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cli-tests-10.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-01.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-02.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-03.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/family-parity-baseline.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/family-parity-candidate.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/freeze-manifest.json create mode 100644 docs/validation/r1_preparation_owner_357_20261001/graph-tests-07.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/owner-census-baseline.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-baseline.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-candidate.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/owner-tests-06.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/predecessor-test-08.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/proof-tests-04.log diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md index 95fe4e4..44cd0a5 100644 --- a/docs/plans/r1_preparation_owner_357_20261001.md +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -106,3 +106,30 @@ two-revision acceptance inputs is licensed by this bounded component comparison. Broader five-file test shard: INCOMPLETE exit124, 60.01s, 88.42MiB. Partial dots are not an accepted test count. Remaining checks split under the same bounds. All failures and profiles remain retained for the final source handoff. + +## Frozen source handoff + +Production checkpoint `2ae2309967904e0195f0d8e75b9b9988c736a52a`. +[Validation index](../validation/r1_preparation_owner_357_20261001/INDEX.md) +and [freeze manifest](../validation/r1_preparation_owner_357_20261001/freeze-manifest.json) +retain exact commands, profiles, source/consumer hashes, all failed attempts, +ownership/new-case review and cleanup. Draft PR16 is the visible source vehicle. + +83distinct source cases pass; one native proof test remains failing identically +on candidate and unchanged baseline with `unproved_execution_effects`. The60s +broader shard timeout, first pytest rejection and repaired new-case failure are +retained. No proof weakening or blanket success claim. Peak observed source +shard443.25MiB remained below512MiB. + +Canonical four-file component comparison via original module/path owner gives +identical content signatures at0.747386 ->0.612257s collection in one sample; +cold-process wall2.99 ->3.73s, so no overall startup claim. Original unchanged +consumer profiles both stop intentionally at20CPU (exit75); semantic family +cost3.231 ->2.853s, second standalone check traversal absent, not a completed +two-revision comparison. Original3roots/eightexactdeps remain intact. + +Parent retains original R0/R1 160/165complete qualification and installed +acceptance. Global85detector/FULL remains separately unqualified. No native/UI, +science replay, install, lock, provider, download or other-owner source change. +Owned19MiB scratch removed after handle/process proof and evidence preservation; +the parent's original terminal cache address was neither reused nor removed. diff --git a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md new file mode 100644 index 0000000..aaad751 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md @@ -0,0 +1,129 @@ +# Source checkpoint and retained evidence + +Source owner Schrodinger/Codex; integration and original R0/R1/installed +qualification parent. Draft https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16. +Production source checkpoint `2ae2309967904e0195f0d8e75b9b9988c736a52a`; +baseline `673c062fc656e9c74f1eddcab30f036c9befbc1f` remains unchanged/clean. +No native/UI/science, installations, shared locks, providers or downloads. + +## Common execution envelope + +Read-only interpreter: +`/home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python`. +Python3.12.3, `-I -B`, source import explicitly pinned before importing NRA. +Each process: `systemd-run --user --scope --quiet -p MemoryMax=512M +-p MemorySwapMax=0 -p CPUQuota=100%`, `/usr/bin/time -v`, +`timeout --signal=TERM --kill-after=3s 60s`, `taskset -c 0`. +Serial processes only. `PYTHONDONTWRITEBYTECODE=1`; OMP/OPENBLAS/MKL/NUMBA +thread counts1. XDG_CACHE_HOME, NRA_CACHE_HOME and TMPDIR all under the new +owned scratch root, never the terminal parent diagnostic address. +Tests disable plugin autoload, `-o addopts=`, `-p no:cacheprovider` and have +explicit separate owned basetemps. The command line in every log identifies +the exact tests/arguments. Source diagnostic drivers import original NRA APIs; +none copies a detector or implements another parser/proof engine. + +Tests/diagnostics cwd is the owned NRA WT except baseline proof test08 (pinned +baseline WT) and original-context profiles (original OpenHCS UI workflow WT). +Original-context profiles retain consumer SHA256 +`4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca`, +the original791650087 ->3d58912 revisions, all3roots/eightexactdeps and +`--budget-seconds160`. The SIGPROF20CPU diagnostic stop is separate from the +original SIGALRM deadline. Git packed window/limit8m/128m match admission. + +## Results (not original complete qualification) + +| Receipt | Outcome | Wall seconds | Peak KiB | +| --- | --- | ---: | ---: | +| cooperative-tests-01.log | rejected pytest parallel defaults; exit4 | 2.67 | 83596 | +| cooperative-tests-02.log | 6passed/1failed; capability event lost | 2.77 | 85216 | +| cooperative-tests-03.log | 20passed | 5.79 | 88868 | +| proof-tests-04.log | INCOMPLETE exit124; partial dots not counted | 60.01 | 90540 | +| cache-tests-05.log | 17passed/4CLI tests deferred to09/10 | 30.23 | 89540 | +| owner-tests-06.log | 32passed | 7.55 | 87268 | +| graph-tests-07.log | 20passed/1native proof failure | 14.84 | 453892 | +| predecessor-test-08.log | same native proof failure on673c062f | 2.18 | 86920 | +| cli-tests-09.log | 12passed (includes10 repeated focused cases) | 17.91 | 89560 | +| cli-tests-10.log | 2passed | 18.57 | 88644 | +| baseline-profile.log +baseline.pstats | INCOMPLETE exit75,20CPU | 23.37 | 122328 | +| candidate-profile.log +candidate.pstats | INCOMPLETE exit75,20CPU | 23.34 | 121804 | + +Accepted source shards cover83distinct passing cases plus one retained failing +native-capture case; do not sum repeated cases or partial dots. The failing +`test_completion_does_not_repeat_whole_module_syntax_walk` raises +`CapturedReferenceRejection: Object capture remains open: unproved_execution_effects` +on both candidate and baseline under the same frozen environment. Its admission +is not weakened, skipped or converted to success. No blanket green-suite claim. + +The initial new-case failure02 exposed another capability being hidden by +presentation early returns. It was fixed, not waived: projected assignment, +annotated assignment and return now suppress only presentation descendants, +while continuing shared traversal. Lambda check exclusion, scope/shadowing, +exception unwind, one-event-per-call and declaration-only extension are tested. + +Original-context partial profile: semantic family collection3.231 ->2.853s; +`DeclaredTypeCheckModule.collect` second traversal is absent in candidate, +`from_collector` called8times. Generic AST visits534623 ->411402. Both samples +have8parse calls but stop at different syntax events; these are NOT full-context +throughput estimates or R1 results. AST retention checks0.829 ->0.957s are +preserved, not declared dominant or weakened. + +`family-parity-{baseline,candidate}.log` is the initial source-component +comparison. `canonical-parity-{baseline,candidate}.log` improves its provenance: +the existing PythonModuleRootParser supplies actual package/module identities. +Both canonical runs retain the same four baseline source files/rawSHA256s and +identical complete content signatures, 458presentations/36checks/292supplements. +Collection total0.747386 ->0.612257s in this single sample (~18.1%); process +wall2.99 ->3.73s. **No cold-process or end-to-end speed improvement claim.** + +## Ownership and architecture review + +The original ClassFunctionStackNodeVisitor ABC remains traversal/stack owner. +ParsedModuleClassFunctionStackNodeVisitor centralizes the one parsed source +context formerly assigned separately by both capabilities. The concrete +composition declaration owns C3 order: presentation ->declared check ->shared +source/scope ancestor ->ast.NodeVisitor. The shared record constructor belongs +to DeclaredTypeCheckModule. No copied extraction body or fallback facade. + +Required pairs: presentation observations ->semantic family; declared checks +->semantic family; class/function scope ->both capabilities; parsed-module +identity ->both capabilities. Lambda checks remain forbidden while another +capability's lambda events remain admitted. Previously projected descendants +remain forbidden for the presentation capability, not for declared checks. +This preserves distinct independently varying questions, not a merged record. + +Catalog: IMPL-12/13 duplicate traversal removed; IMPL-4 completed cooperative +participation; IMPL-1/2/3/5 reviewed, no new domain string/enum/type dispatch; +MEMB-1/2 no roster introduced; IDEN-5 one source context; TIME-1/3 no duplicate +cutover/compatibility path. Python AST's external vocabulary remains honored. +The new-case CallCensus test adds only its declaration/hooks and a composition +declaration: no generic consumer edits. It proves the admitted event contract, +not every possible future AST policy. No ornamental MI or mirrored schema/store. + +`owner-census-*.log`: original ModuleSyntaxIndex census and compact class-family +projection; canonical variants also join through original class-family index. +Baseline212ClassDefs,211index-admitted,1OPEN function-nested Visitor; candidate +214ClassDefs,213index-admitted, same1OPEN. Alternative owners are retained, not +heuristically invented. Census is a source-review receipt, not global proof. +This cooperative fusion is manually authored; no unsupported DSL/native +equivalence certificate or global ancestry-minimum certificate is claimed. + +## Remaining limits / cleanup + +Parent runs original160NRA/165wall two-revision qualification and original R0, +then any paired installed acceptance. Global85detector/FULL is separately +unqualified. No baseline/main/backing package or other owner's source modified. +The original archived failure/60s diagnostic remain immutable predecessor +evidence, and their old scratch address was never reused or cleaned by us. + +All retained receipts/profiles have SHA256 in SHA256SUMS. Source file digests +and exact predecessor references are in freeze-manifest.json. Only the owned +`/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001` is disposable; +cleanup disposition is recorded after process/open-handle proof below. + +Cleanup complete: lsof +D exact owned root returned1/no handles; scoped process +search found no remaining worker. Every retained receipt/profile verified with +sha256sum -c before removal. realpath matched the explicit owned root. Removed +only that19MiB root with `rm -r --` and verified absence; disposable synthetic +test/cache artifacts are removed permanently, while all logs/profiles/recipes +are retained here. No parent cache, original archive, input, installed package, +baseline WT or other owner's work was removed. All tool PTY sessions terminal. diff --git a/docs/validation/r1_preparation_owner_357_20261001/SHA256SUMS b/docs/validation/r1_preparation_owner_357_20261001/SHA256SUMS new file mode 100644 index 0000000..74e3a4f --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/SHA256SUMS @@ -0,0 +1,21 @@ +65332a5bda92c10a350d94d073188e0382db91cf75d5ba988d694e9b901915e9 docs/validation/r1_preparation_owner_357_20261001/baseline-profile.log +3e496ef94773dd64876446429bcc455cb7d996851cbcfc370d20361a2f21bcd6 docs/validation/r1_preparation_owner_357_20261001/cache-tests-05.log +a944eeb1f6fb6f6b7230a8717ccf4a5917bf88e6a2aa5189901586081616a8d4 docs/validation/r1_preparation_owner_357_20261001/candidate-profile.log +934ead182a197733baae37d9e195ef58e3dccc6b705a1bb2d0b318fc4ecda244 docs/validation/r1_preparation_owner_357_20261001/canonical-parity-baseline.log +f09fcd3ecc2985960bd6358e67f1124fe603b4fadb0dbbfa17c3514ffdbbefa2 docs/validation/r1_preparation_owner_357_20261001/canonical-parity-candidate.log +3ceeab729e7e11668c1a71e8368fbb2158c8e10e40b5ed268a53ff6a1120adf4 docs/validation/r1_preparation_owner_357_20261001/cli-tests-09.log +e196dbda3cd969b307aacead923e98406bc8fd8c5bc7f0f0dba5b19b74f25d35 docs/validation/r1_preparation_owner_357_20261001/cli-tests-10.log +034296078fcbf48db6fd6e6d807ba2703861d8babb4d018697942d184ff493c3 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-01.log +7a30b4c19b77a926221dff2d20537332efd8da04f39fcbfdd20b6d3881cf0687 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-02.log +b1ab44f74e2b28eef37c19303326807bd6af38fbd8e7b6424cece0a6230fe333 docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-03.log +cf053c39ee35d9f216141e55e620d2bfc4ac3d233a83d64db32687ec4797c49f docs/validation/r1_preparation_owner_357_20261001/family-parity-baseline.log +9fdf9f8e2df3323d972651d017235f6666ff7d6e6b8efdfc61b514ba2ed13aa3 docs/validation/r1_preparation_owner_357_20261001/family-parity-candidate.log +3311a969fccb131fe8e2f48b3cf895d9e83efa8690e95d24b8016940882befce docs/validation/r1_preparation_owner_357_20261001/graph-tests-07.log +20839f52524d94ce65a5215ca0ed6994a00e90bcc447a58e3b7d69635106a854 docs/validation/r1_preparation_owner_357_20261001/owner-census-baseline.log +48ccfaaf8507242c977fc966386ccf121831ad00ae53d23f035c0b984f645cc0 docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-baseline.log +508219f96461a45e8383c1ef3f6064bbd50118534722657b8ac3dc6fc3ffc6cf docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-candidate.log +f40909e1e611784f8210ec8dac394622d7b9be622b2d60fcc086d3dbc9786da1 docs/validation/r1_preparation_owner_357_20261001/owner-tests-06.log +71aaf21f0239dfba0a7036f84567801b0805168a270e98b06a762cf69d1a11bd docs/validation/r1_preparation_owner_357_20261001/predecessor-test-08.log +e01251e40333dc68ff9c7ceb36e12192ec49b6149b566eee5b8731e8641ad691 docs/validation/r1_preparation_owner_357_20261001/proof-tests-04.log +d1f93c92abf21649b4a3380478f105ea02325e8e3bfb2b40bd83da8f5466e8db docs/validation/r1_preparation_owner_357_20261001/baseline.pstats +45f1c4744d5391e54dc67c217e5648b4257bc0f9dd31d0f616e41f4407e1b0e0 docs/validation/r1_preparation_owner_357_20261001/candidate.pstats diff --git a/docs/validation/r1_preparation_owner_357_20261001/baseline-profile.log b/docs/validation/r1_preparation_owner_357_20261001/baseline-profile.log new file mode 100644 index 0000000..79125f5 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/baseline-profile.log @@ -0,0 +1,160 @@ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py", line 63, in + raise SystemExit(main()) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py", line 49, in main + runpy.run_path(str(args.consumer), run_name="__main__") + File "", line 286, in run_path + File "", line 98, in _run_module_code + File "", line 88, in _run_code + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 338, in + raise SystemExit(main()) + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 326, in main + result = compare( + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 310, in compare + scan_counts(snapshot, roots, changed, cache_root=work / "nra") + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 183, in scan_counts + result = analyze_compact_roots_with_cache( + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 2292, in analyze_compact_roots_with_cache + build_results = worker_plan.map( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 288, in map + return [function(item) for item in items] + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1265, in build_compact_projection_shard + full_batch = collect_family_batch(module, family) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 2282, in collect_family_batch + for item in COLLECTED_ITEM_PROJECTION.flatten(family.collect(parsed_module)) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py", line 3908, in collect + return cls._collect(parsed_module, None) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py", line 4013, in _collect + public_export_contract=module_public_export_contract(parsed_module), + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py", line 2755, in module_public_export_contract + LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names(module.body) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py", line 612, in bound_names + collector.visit(node) + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py", line 407, in visit + return visitor(node) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py", line 542, in visit_ClassDef + self.bound_names.add(node.name) +INCOMPLETE: diagnostic CPU profiling bound reached + 38096319 function calls (35410770 primitive calls) in 20.618 seconds + + Ordered by: cumulative time + List reduced from 1569 to 50 due to restriction <50> + + ncalls tottime percall cumtime percall filename:lineno(function) + 1 0.000 0.000 20.790 20.790 :262(run_path) + 1 0.000 0.000 20.787 20.787 :91(_run_module_code) + 1 0.000 0.000 20.787 20.787 :65(_run_code) + 43/1 0.003 0.000 20.787 20.787 {built-in method builtins.exec} + 1 0.000 0.000 20.787 20.787 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:1() + 1 0.000 0.000 20.780 20.780 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:319(main) + 1 0.001 0.001 20.779 20.779 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:277(compare) + 1 0.000 0.000 18.912 18.912 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:169(scan_counts) + 4/1 0.015 0.004 18.910 18.910 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py:78(inner) + 1 0.043 0.043 18.907 18.907 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1836(analyze_compact_roots_with_cache) + 16 0.000 0.000 8.723 0.545 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2267(collect_family_batch) + 1 0.000 0.000 6.064 6.064 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:281(map) + 3 0.001 0.000 6.048 2.016 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1100(build_compact_projection_shard) + 10 0.000 0.000 4.164 0.416 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2292(collect_family_items) +648502/16788 0.452 0.000 3.783 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) +67307/33811 0.089 0.000 3.742 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/scan_cache.py:41(invoke) +534623/11785 0.735 0.000 3.607 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) + 8 0.000 0.000 3.567 0.446 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3903(collect) + 8 0.003 0.000 3.567 0.446 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3981(_collect) + 8 0.000 0.000 3.231 0.404 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4325(collect) + 8 0.000 0.000 3.231 0.404 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4345(_collect) + 2 0.001 0.001 3.172 1.586 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:2923(cache_identity) + 2 0.001 0.000 3.171 1.586 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis_cache.py:824(from_source_paths) +3346/1536 0.001 0.000 2.586 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1543(traverse_node_body) + 19039 0.034 0.000 2.475 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:1228(resolve) + 3070 0.009 0.000 2.159 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis_cache.py:842() + 3073 0.016 0.000 2.148 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:88(checkout_relative_path) + 22109 0.035 0.000 2.142 0.000 :431(realpath) + 8 0.105 0.013 2.105 0.263 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5321(_compact_class_syntax_facets) +1180/1165 0.022 0.000 2.078 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4842(visit_FunctionDef) + 8 0.000 0.000 2.062 0.258 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:657(_parse_source_module) + 22109 0.407 0.000 1.951 0.000 :440(_joinrealpath) + 7678 0.073 0.000 1.901 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:663(relative_to) + 986 0.002 0.000 1.864 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1556(visit_ClassDef) + 9/1 0.004 0.000 1.695 1.695 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:151(materialize) + 1534 0.006 0.000 1.684 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:37(_admitted_checkout_path) + 9/1 0.023 0.003 1.657 1.657 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:84(materialize) +2360/2330 0.004 0.000 1.618 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1564(visit_FunctionDef) + 8 0.001 0.000 1.614 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:3020(module_syntax_index) + 8 0.770 0.096 1.613 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2943(build) + 3068 0.004 0.000 1.609 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:40() + 6136 0.007 0.000 1.605 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:28(relative_path) +136269/90820 0.101 0.000 1.563 0.000 {built-in method builtins.any} + 8061013 1.344 0.000 1.528 0.000 {built-in method builtins.isinstance} + 394817 0.292 0.000 1.457 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) + 493 0.004 0.000 1.444 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4811(visit_ClassDef) + 15 0.001 0.000 1.395 0.093 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2153(store_items) + 4 0.000 0.000 1.350 0.338 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:57(declaration_implementation_module_names) + 3 0.000 0.000 1.350 0.450 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:65(_declaration_implementation_module_names) + 3 0.002 0.001 1.350 0.450 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:48(implementation_module_names) + + + 38096319 function calls (35410770 primitive calls) in 20.618 seconds + + Ordered by: internal time + List reduced from 1569 to 30 due to restriction <30> + + ncalls tottime percall cumtime percall filename:lineno(function) + 8061013 1.344 0.000 1.528 0.000 {built-in method builtins.isinstance} + 8 0.770 0.096 1.613 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2943(build) +534623/11785 0.735 0.000 3.607 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) +3368723/3368243 0.721 0.000 0.722 0.000 {built-in method builtins.getattr} + 2832679 0.688 0.000 0.966 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:257(iter_fields) + 259408 0.675 0.000 0.675 0.000 {built-in method posix.lstat} +23482/21207 0.622 0.000 0.647 0.000 {method 'read' of '_io.BufferedReader' objects} + 1054402 0.589 0.000 1.285 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:269(iter_child_nodes) + 286212 0.471 0.000 0.826 0.000 :71(join) + 8 0.453 0.057 0.996 0.125 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:476(semantic_python_source_hash) +648502/16788 0.452 0.000 3.783 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) + 22109 0.407 0.000 1.951 0.000 :440(_joinrealpath) + 64090 0.402 0.000 0.713 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:387(_parse_path) +142717/15 0.345 0.000 0.748 0.050 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1932(_stable_collected_family_cache_value) +252505/98 0.345 0.000 1.348 0.014 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:98(_visit) + 394817 0.292 0.000 1.457 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) +1762049/1477797 0.271 0.000 0.322 0.000 {built-in method builtins.len} + 65258 0.261 0.000 0.962 0.000 {built-in method posix.stat} + 213539 0.233 0.000 0.404 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:358(__init__) + 204562 0.224 0.000 0.907 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:380(with_segments) + 211984 0.224 0.000 0.398 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:484(_str_normcase) +187791/20 0.221 0.000 0.829 0.041 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) + 2596 0.214 0.000 0.214 0.000 {built-in method builtins.compile} + 171268 0.196 0.000 0.320 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/tokenize.py:569(_generate_tokens_from_c_tokenizer) + 243397 0.189 0.000 1.094 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:437(__str__) + 212005 0.182 0.000 0.583 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:1157(__init__) + 380464 0.180 0.000 1.076 0.000 {method 'extend' of 'collections.deque' objects} + 668875 0.173 0.000 0.173 0.000 {built-in method sys.intern} + 692161 0.164 0.000 0.164 0.000 {method 'append' of 'list' objects} + 148256 0.157 0.000 1.125 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:277(__getitem__) + + +Command exited with non-zero status 75 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u /home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py --consumer /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py --profile /home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/baseline.pstats --cpu-seconds 20 -- --base 791650087e01c9d25766f12802a37296851f37cf --head 3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4 --scratch-root /home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/baseline-r1 --budget-seconds 160" + User time (seconds): 22.22 + System time (seconds): 1.01 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:23.37 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 122328 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 57953 + Voluntary context switches: 25045 + Involuntary context switches: 24487 + Swaps: 0 + File system inputs: 0 + File system outputs: 65016 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 75 diff --git a/docs/validation/r1_preparation_owner_357_20261001/baseline.pstats b/docs/validation/r1_preparation_owner_357_20261001/baseline.pstats new file mode 100644 index 0000000000000000000000000000000000000000..11329045e0e707d2abd2b38d699122e723f263b8 GIT binary patch literal 236116 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 + raise SystemExit(main()) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py", line 49, in main + runpy.run_path(str(args.consumer), run_name="__main__") + File "", line 286, in run_path + File "", line 98, in _run_module_code + File "", line 88, in _run_code + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 338, in + raise SystemExit(main()) + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 326, in main + result = compare( + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 310, in compare + scan_counts(snapshot, roots, changed, cache_root=work / "nra") + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 183, in scan_counts + result = analyze_compact_roots_with_cache( + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 2292, in analyze_compact_roots_with_cache + build_results = worker_plan.map( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 288, in map + return [function(item) for item in items] + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1265, in build_compact_projection_shard + full_batch = collect_family_batch(module, family) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 2303, in collect_family_batch + parsed_module.collected_family_cache.store_items(family, items), + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 2197, in store_items + return _store_collected_family_content_signature( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1996, in _store_collected_family_content_signature + signature = collected_family_items_content_signature(items) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1941, in collected_family_items_content_signature + _stable_collected_family_cache_value(items), + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1974, in _stable_collected_family_cache_value + return "tuple", tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1975, in + _stable_collected_family_cache_value(item) for item in value + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1953, in _stable_collected_family_cache_value + tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1956, in + _stable_collected_family_cache_value(getattr(value, item.name)), + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1974, in _stable_collected_family_cache_value + return "tuple", tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1975, in + _stable_collected_family_cache_value(item) for item in value + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1953, in _stable_collected_family_cache_value + tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1956, in + _stable_collected_family_cache_value(getattr(value, item.name)), + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1974, in _stable_collected_family_cache_value + return "tuple", tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1975, in + _stable_collected_family_cache_value(item) for item in value + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1974, in _stable_collected_family_cache_value + return "tuple", tuple( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1975, in + _stable_collected_family_cache_value(item) for item in value + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1961, in _stable_collected_family_cache_value + if isinstance(value, dict): +INCOMPLETE: diagnostic CPU profiling bound reached + 37124090 function calls (34620967 primitive calls) in 20.630 seconds + + Ordered by: cumulative time + List reduced from 1572 to 50 due to restriction <50> + + ncalls tottime percall cumtime percall filename:lineno(function) + 1 0.000 0.000 20.802 20.802 :262(run_path) + 1 0.000 0.000 20.799 20.799 :91(_run_module_code) + 1 0.000 0.000 20.799 20.799 :65(_run_code) + 43/1 0.003 0.000 20.799 20.799 {built-in method builtins.exec} + 1 0.000 0.000 20.799 20.799 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:1() + 1 0.000 0.000 20.792 20.792 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:319(main) + 1 0.001 0.001 20.791 20.791 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:277(compare) + 1 0.000 0.000 18.883 18.883 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:169(scan_counts) + 4/1 0.015 0.004 18.881 18.881 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py:78(inner) + 1 0.045 0.045 18.878 18.878 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1836(analyze_compact_roots_with_cache) + 16 0.000 0.000 8.568 0.536 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2282(collect_family_batch) + 1 0.000 0.000 6.059 6.059 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:281(map) + 3 0.001 0.000 6.044 2.015 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1100(build_compact_projection_shard) + 10 0.000 0.000 4.020 0.402 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2307(collect_family_items) +67328/33812 0.087 0.000 3.763 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/scan_cache.py:41(invoke) + 8 0.000 0.000 3.642 0.455 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3903(collect) + 8 0.004 0.000 3.642 0.455 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3981(_collect) +525060/16856 0.380 0.000 3.419 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) +411402/11795 0.593 0.000 3.238 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) + 2 0.001 0.000 3.158 1.579 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:2923(cache_identity) + 2 0.001 0.000 3.157 1.579 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis_cache.py:824(from_source_paths) + 8 0.000 0.000 2.853 0.357 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4325(collect) + 8 0.000 0.000 2.853 0.357 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4345(_collect) + 19039 0.035 0.000 2.522 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:1228(resolve) +1180/1165 0.023 0.000 2.430 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4851(visit_FunctionDef) + 1673/768 0.001 0.000 2.206 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1544(traverse_node_body) + 22109 0.035 0.000 2.183 0.000 :431(realpath) + 3070 0.008 0.000 2.176 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis_cache.py:842() + 3073 0.015 0.000 2.165 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:88(checkout_relative_path) + 8 0.119 0.015 2.133 0.267 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5321(_compact_class_syntax_facets) + 8 0.000 0.000 2.112 0.264 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:657(_parse_source_module) + 22109 0.415 0.000 1.986 0.000 :440(_joinrealpath) + 7678 0.075 0.000 1.945 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:663(relative_to) + 9/1 0.005 0.001 1.743 1.743 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:151(materialize) + 1534 0.007 0.000 1.723 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:37(_admitted_checkout_path) + 9/1 0.023 0.003 1.702 1.702 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:84(materialize) +141310/90872 0.109 0.000 1.693 0.000 {built-in method builtins.any} + 493 0.005 0.000 1.692 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4820(visit_ClassDef) + 3068 0.004 0.000 1.646 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:40() + 6136 0.007 0.000 1.643 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/cache_checkout.py:28(relative_path) + 493 0.001 0.000 1.639 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1557(visit_ClassDef) + 8 0.001 0.000 1.616 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:3035(module_syntax_index) + 8 0.770 0.096 1.616 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2958(build) + 7798362 1.339 0.000 1.577 0.000 {built-in method builtins.isinstance} +1180/1165 0.010 0.000 1.545 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/record_checks.py:67(visit_FunctionDef) + 16 0.002 0.000 1.535 0.096 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2168(store_items) + 394853 0.299 0.000 1.483 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) + 4 0.000 0.000 1.331 0.333 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:57(declaration_implementation_module_names) + 3 0.000 0.000 1.331 0.444 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:65(_declaration_implementation_module_names) + 3 0.003 0.001 1.331 0.444 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:48(implementation_module_names) + + + 37124090 function calls (34620967 primitive calls) in 20.630 seconds + + Ordered by: internal time + List reduced from 1572 to 30 due to restriction <30> + + ncalls tottime percall cumtime percall filename:lineno(function) + 7798362 1.339 0.000 1.577 0.000 {built-in method builtins.isinstance} + 8 0.770 0.096 1.616 0.202 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2958(build) + 259408 0.686 0.000 0.686 0.000 {built-in method posix.lstat} +3052055/3051575 0.659 0.000 0.660 0.000 {built-in method builtins.getattr} +23482/21207 0.650 0.000 0.676 0.000 {method 'read' of '_io.BufferedReader' objects} + 2511879 0.616 0.000 0.870 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:257(iter_fields) + 1054476 0.598 0.000 1.297 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:269(iter_child_nodes) +411402/11795 0.593 0.000 3.238 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) + 286214 0.477 0.000 0.841 0.000 :71(join) + 8 0.451 0.056 0.991 0.124 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:476(semantic_python_source_hash) + 22109 0.415 0.000 1.986 0.000 :440(_joinrealpath) + 64091 0.412 0.000 0.736 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:387(_parse_path) +525060/16856 0.380 0.000 3.419 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) +146305/16 0.345 0.000 0.756 0.047 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1947(_stable_collected_family_cache_value) +253034/98 0.342 0.000 1.328 0.014 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:98(_visit) + 394853 0.299 0.000 1.483 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) +1765838/1481586 0.272 0.000 0.324 0.000 {built-in method builtins.len} + 65256 0.265 0.000 0.983 0.000 {built-in method posix.stat} +210680/21 0.238 0.000 0.957 0.046 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) + 213540 0.238 0.000 0.412 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:358(__init__) + 211984 0.230 0.000 0.411 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:484(_str_normcase) + 204563 0.228 0.000 0.923 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:380(with_segments) + 2597 0.220 0.000 0.220 0.000 {built-in method builtins.compile} + 171268 0.194 0.000 0.316 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/tokenize.py:569(_generate_tokens_from_c_tokenizer) + 243400 0.192 0.000 1.120 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:437(__str__) + 210717 0.184 0.000 0.239 0.000 :117(__instancecheck__) + 668886 0.184 0.000 0.184 0.000 {built-in method sys.intern} + 380499 0.184 0.000 1.094 0.000 {method 'extend' of 'collections.deque' objects} + 212006 0.183 0.000 0.592 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:1157(__init__) + 691157 0.168 0.000 0.168 0.000 {method 'append' of 'list' objects} + + +Command exited with non-zero status 75 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u /home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py --consumer /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py --profile /home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/candidate.pstats --cpu-seconds 20 -- --base 791650087e01c9d25766f12802a37296851f37cf --head 3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4 --scratch-root /home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/candidate-r1 --budget-seconds 160" + User time (seconds): 22.12 + System time (seconds): 1.07 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:23.34 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 121804 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 57775 + Voluntary context switches: 25284 + Involuntary context switches: 24676 + Swaps: 0 + File system inputs: 1000 + File system outputs: 65592 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 75 diff --git a/docs/validation/r1_preparation_owner_357_20261001/candidate.pstats b/docs/validation/r1_preparation_owner_357_20261001/candidate.pstats new file mode 100644 index 0000000000000000000000000000000000000000..b6b5592885fb3aac4b2186b9ab5710e324208222 GIT binary patch literal 236486 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 f~) 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 OioSz;f assert visitor.calls == Counter({id(node): 1 for node in ast.walk(module.module) + if isinstance(node, ast.Call)}) +E assert Counter({1398...503860688: 1}) == Counter({1398...503687440: 1}) +E +E Omitting 7 identical items, use -vv to show +E Right contains 1 more item: +E {139821503796624: 1} +E Use -v to get more diff + +tests/test_cooperative_semantic_preparation.py:111: AssertionError +=========================== short test summary info ============================ +FAILED tests/test_cooperative_semantic_preparation.py::test_new_capability_is_only_a_declaration_and_cooperative_hook +1 failed, 6 passed in 0.18s +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-q","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-cooperative-02","tests/test_cooperative_semantic_preparation.py"]))" + User time (seconds): 2.67 + System time (seconds): 0.11 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.77 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85216 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 25197 + Voluntary context switches: 28 + Involuntary context switches: 20 + Swaps: 0 + File system inputs: 0 + File system outputs: 16 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-03.log b/docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-03.log new file mode 100644 index 0000000..66280e9 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/cooperative-tests-03.log @@ -0,0 +1,25 @@ +.................... [100%] +20 passed in 3.18s + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-q","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-cooperative-03","tests/test_cooperative_semantic_preparation.py","tests/test_projection_shard_publication.py"]))" + User time (seconds): 5.16 + System time (seconds): 0.61 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:05.79 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 88868 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 99905 + Voluntary context switches: 28 + Involuntary context switches: 36 + Swaps: 0 + File system inputs: 0 + File system outputs: 296 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/family-parity-baseline.log b/docs/validation/r1_preparation_owner_357_20261001/family-parity-baseline.log new file mode 100644 index 0000000..45d13e0 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/family-parity-baseline.log @@ -0,0 +1,27 @@ +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "raw_sha256": "7a30d8cb97412abfbd6a113368712e4f56a71897cc1858d1b4c640ebeca019a1", "content_signature": "0a9ab8d0c987ac754232f6da054bc4d5", "collection_seconds": 0.2414114170242101, "presentations": 116, "checks": 10, "supplements": 138} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py", "raw_sha256": "245f8e47ebc4456c67db8d180efa223362af292d73e7facb62264b7ae5f53a9f", "content_signature": "a6103a7a18fa058c7ddabd0472f5262d", "collection_seconds": 0.28476344601949677, "presentations": 215, "checks": 19, "supplements": 88} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "raw_sha256": "ca795d41eac570fab9eb81d94f71cce01f21529a2ab3c143519328654104b1e1", "content_signature": "cfa0fcbde095e4aa3f0897e78c74f445", "collection_seconds": 0.16953488101717085, "presentations": 119, "checks": 6, "supplements": 62} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "raw_sha256": "2a31a0a132ac3ca611a1c53daa575b8fa471cf6a53f0d88738a926d14a194eaf", "content_signature": "5d0f4015b5d82d4ef9f9ce9d76b4b14f", "collection_seconds": 0.012470039015170187, "presentations": 8, "checks": 1, "supplements": 4} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/check_semantic_preparation_parity.py --advisor-root /home/ts/wt/nra-bounded-full-audit-20260929 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py" + User time (seconds): 2.66 + System time (seconds): 0.10 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.77 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 82860 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 26011 + Voluntary context switches: 26 + Involuntary context switches: 24 + Swaps: 0 + File system inputs: 0 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/family-parity-candidate.log b/docs/validation/r1_preparation_owner_357_20261001/family-parity-candidate.log new file mode 100644 index 0000000..a6c4ce2 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/family-parity-candidate.log @@ -0,0 +1,27 @@ +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "raw_sha256": "7a30d8cb97412abfbd6a113368712e4f56a71897cc1858d1b4c640ebeca019a1", "content_signature": "0a9ab8d0c987ac754232f6da054bc4d5", "collection_seconds": 0.21006925404071808, "presentations": 116, "checks": 10, "supplements": 138} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py", "raw_sha256": "245f8e47ebc4456c67db8d180efa223362af292d73e7facb62264b7ae5f53a9f", "content_signature": "a6103a7a18fa058c7ddabd0472f5262d", "collection_seconds": 0.26070872601121664, "presentations": 215, "checks": 19, "supplements": 88} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "raw_sha256": "ca795d41eac570fab9eb81d94f71cce01f21529a2ab3c143519328654104b1e1", "content_signature": "cfa0fcbde095e4aa3f0897e78c74f445", "collection_seconds": 0.13834056904306635, "presentations": 119, "checks": 6, "supplements": 62} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "raw_sha256": "2a31a0a132ac3ca611a1c53daa575b8fa471cf6a53f0d88738a926d14a194eaf", "content_signature": "5d0f4015b5d82d4ef9f9ce9d76b4b14f", "collection_seconds": 0.010819121962413192, "presentations": 8, "checks": 1, "supplements": 4} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/check_semantic_preparation_parity.py --advisor-root /home/ts/wt/nra-r1-preparation-owner-357-20261001 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py" + User time (seconds): 3.52 + System time (seconds): 0.09 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.61 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85092 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 24999 + Voluntary context switches: 27 + Involuntary context switches: 25 + Swaps: 0 + File system inputs: 0 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/freeze-manifest.json b/docs/validation/r1_preparation_owner_357_20261001/freeze-manifest.json new file mode 100644 index 0000000..55a77bc --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/freeze-manifest.json @@ -0,0 +1,25 @@ +{ + "source_owner": "Schrodinger/Codex", + "integration_and_original_qualification_owner": "parent", + "draft_pr": "https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16", + "worktree": "/home/ts/wt/nra-r1-preparation-owner-357-20261001", + "source_checkpoint": "2ae2309967904e0195f0d8e75b9b9988c736a52a", + "baseline": "673c062fc656e9c74f1eddcab30f036c9befbc1f", + "source_sha256": { + "nominal_refactor_advisor/ast_tools.py": "e41ef8011aac67857131f5f79b140c201c9a0f6ca4584a92d57789cd234b354e", + "nominal_refactor_advisor/record_checks.py": "4b77a6fc7af2eaff8d81e5a7e764b8f3db0fd6b4a7af687c4bb8c7831512fd53", + "nominal_refactor_advisor/semantic_descent.py": "7ba2cf06a9e2a175e45e7f213ba111fdebf1bf2a17e83df4ac7926aa4a1e8ff9" + }, + "immutable_consumer": "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", + "consumer_sha256": "4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca", + "base_revision": "791650087e01c9d25766f12802a37296851f37cf", + "head_revision": "3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4", + "original_context_roots": 3, + "original_recursive_dependencies": 8, + "source_limits": {"cpu": 1, "memory_mib": 512, "swap_mib": 0, "outer_seconds": 60}, + "profile_disposition": "both intentional20CPU stops exit75 INCOMPLETE", + "original_r0_r1": "pending parent qualification", + "global_85_detector_full": "unqualified", + "retained_native_failure": "unproved_execution_effects reproduced on unchanged baseline", + "science_native_installs_locks_providers_downloads": "none" +} diff --git a/docs/validation/r1_preparation_owner_357_20261001/graph-tests-07.log b/docs/validation/r1_preparation_owner_357_20261001/graph-tests-07.log new file mode 100644 index 0000000..e077c94 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/graph-tests-07.log @@ -0,0 +1,90 @@ +/home/ts/code/projects/openhcs-sequential/.venv/lib/python3.12/site-packages/pytest_asyncio/plugin.py:208: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset. +The event loop scope for asynchronous fixtures will default to the fixture caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to function scope. Set the default fixture loop scope explicitly in order to avoid unexpected behavior in the future. Valid fixture loop scopes are: "function", "class", "module", "package", "session" + + warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET)) +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +PyQt6 6.11.0 -- Qt runtime 6.11.2 -- Qt compiled 6.11.0 +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +plugins: asyncio-1.0.0, napari-0.6.1, napari-plugin-engine-0.2.0, anyio-4.9.0, timeout-2.4.0, zarr-3.4.0, xdist-3.8.0, langsmith-0.4.37, cov-6.1.1, npe2-0.7.8, qt-4.5.0 +asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function +collecting ... collected 21 items + +tests/test_syntax_children_projection.py::test_children_preserve_original_order_and_share_parent_authority PASSED [ 4%] +tests/test_syntax_children_projection.py::test_ambiguous_original_child_cannot_gain_an_owner[False] PASSED [ 9%] +tests/test_syntax_children_projection.py::test_ambiguous_original_child_cannot_gain_an_owner[True] PASSED [ 14%] +tests/test_syntax_children_projection.py::test_lazily_derived_children_still_refer_to_original_tree PASSED [ 19%] +tests/test_syntax_children_projection.py::test_completion_does_not_repeat_whole_module_syntax_walk FAILED [ 23%] +tests/test_deferred_projection_family.py::test_complete_content_signature_does_not_require_loading_all_graphs PASSED [ 28%] +tests/test_deferred_projection_family.py::test_missing_signature_requires_complete_original_content_evidence PASSED [ 33%] +tests/test_deferred_projection_family.py::test_materialized_public_api_retains_its_tuple_contract PASSED [ 38%] +tests/test_deferred_projection_family.py::test_count_derives_unique_source_materializations_without_rescanning_batches PASSED [ 42%] +tests/test_deferred_projection_family.py::test_corrupt_cache_repairs_only_the_requested_original_source PASSED [ 47%] +tests/test_deferred_projection_family.py::test_repair_rejects_a_changed_source_and_can_retry_the_original PASSED [ 52%] +tests/test_deferred_projection_family.py::test_global_lookup_still_reads_later_ambiguous_modules PASSED [ 57%] +tests/test_deferred_projection_family.py::test_eligibility_short_circuit_does_not_truncate_later_queries PASSED [ 61%] +tests/test_analysis_cache.py::test_module_analysis_memory_release_clears_ast_bound_lru_caches PASSED [ 66%] +tests/test_analysis_cache.py::test_module_analysis_memory_release_preserves_compiled_native_queries PASSED [ 71%] +tests/test_analysis_cache.py::test_compact_family_projection_batch_rejects_ast_payloads PASSED [ 76%] +tests/test_analysis_cache.py::test_compact_family_cache_identity_derives_projection_implementation PASSED [ 80%] +tests/test_analysis_cache.py::test_compact_semantic_descent_graph_matches_legacy_ast_graph PASSED [ 85%] +tests/test_analysis_cache.py::test_compact_analysis_returns_semantic_graph_on_cold_and_aggregate_hits PASSED [ 90%] +tests/test_analysis_cache.py::test_cold_focused_semantic_scan_omits_only_context_presentations PASSED [ 95%] +tests/test_analysis_cache.py::test_mixed_projection_shard_uses_only_python_ast PASSED [100%] + +=================================== FAILURES =================================== +___________ test_completion_does_not_repeat_whole_module_syntax_walk ___________ +ValueError: Native class capture remains unproved + +The above exception was the direct cause of the following exception: + + def test_completion_does_not_repeat_whole_module_syntax_walk(): + entry = entry_for("key = None\npass") + syntax = module_syntax_index(entry.execution.module.module) +> expected = entry.final_evaluation + +tests/test_syntax_children_projection.py:55: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +nominal_refactor_advisor/source_execution.py:2922: in final_evaluation + self.execution.require_terminal_evaluation(evaluation) +nominal_refactor_advisor/source_execution.py:3867: in require_terminal_evaluation + prefix = self.required_prefix(context, None) +nominal_refactor_advisor/source_execution.py:3879: in required_prefix + result.require_closed() +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = OpenCapturedReference(violation=, mutation=None) + + def require_closed(self) -> None: +> raise self.rejection("Object capture") +E nominal_refactor_advisor.captured_reference.CapturedReferenceRejection: Object capture remains open: unproved_execution_effects + +nominal_refactor_advisor/captured_reference.py:533: CapturedReferenceRejection +=========================== short test summary info ============================ +FAILED tests/test_syntax_children_projection.py::test_completion_does_not_repeat_whole_module_syntax_walk +========================= 1 failed, 20 passed in 8.66s ========================= +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-graph-07","tests/test_syntax_children_projection.py","tests/test_deferred_projection_family.py","tests/test_analysis_cache.py::test_module_analysis_memory_release_clears_ast_bound_lru_caches","tests/test_analysis_cache.py::test_module_analysis_memory_release_preserves_compiled_native_queries","tests/test_analysis_cache.py::test_compact_family_projection_batch_rejects_ast_payloads","tests/test_analysis_cache.py::test_compact_family_cache_identity_derives_projection_implementation","tests/test_analysis_cache.py::test_compact_semantic_descent_graph_matches_legacy_ast_graph","tests/test_analysis_cache.py::test_compact_analysis_returns_semantic_graph_on_cold_and_aggregate_hits","tests/test_analysis_cache.py::test_cold_focused_semantic_scan_omits_only_context_presentations","tests/test_analysis_cache.py::test_mixed_projection_shard_uses_only_python_ast"]))" + User time (seconds): 13.47 + System time (seconds): 1.10 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:14.84 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 453892 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 174489 + Voluntary context switches: 299 + Involuntary context switches: 1788 + Swaps: 0 + File system inputs: 496 + File system outputs: 4392 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/owner-census-baseline.log b/docs/validation/r1_preparation_owner_357_20261001/owner-census-baseline.log new file mode 100644 index 0000000..fede6b1 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/owner-census-baseline.log @@ -0,0 +1,235 @@ +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 109, "name": "AstKeywordSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstKeywordSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 152, "name": "AstParseCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 158, "name": "AstCachePayloadUnavailable", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCachePayloadUnavailable"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 163, "name": "AstParseCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 196, "name": "CollectedFamilyCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 204, "name": "CollectedFamilyContentSignatureIndexSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 211, "name": "CollectedFamilyImplementationSource", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationSource"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 216, "name": "CollectedFamilyImplementationIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 235, "name": "CollectedFamilySchemaIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilySchemaIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 263, "name": "CollectedFamilyProjectionIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyProjectionIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 281, "name": "CollectedFamilyContentSignatureIndexKey", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexKey"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 301, "name": "CollectedFamilyContentSignatureIndexPayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexPayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 314, "name": "CollectedFamilyCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 335, "name": "CollectedFamilyDemandCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyDemandCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 351, "name": "CollectedFamilyContentSignatureIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 449, "name": "CollectedFamilyPresenceDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyPresenceDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 456, "name": "PythonModuleParseContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleParseContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 495, "name": "PythonSourceSemanticHash", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourceSemanticHash"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 735, "name": "PythonParseWorkerPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonParseWorkerPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 751, "name": "CompactModuleIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CompactModuleIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 759, "name": "ParsedModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 825, "name": "AstParentIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParentIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 862, "name": "SourceModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 922, "name": "PythonModulePathAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModulePathAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1002, "name": "ParsedModuleSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModuleSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1091, "name": "SourceModuleBatchParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModuleBatchParser"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1135, "name": "BuiltinCallName", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.BuiltinCallName"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1262, "name": "VariableAnnotationVisitorABC", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.VariableAnnotationVisitorABC"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1274, "name": "ModuleAnnotationEvaluationMode", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleAnnotationEvaluationMode"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1341, "name": "EagerFunctionAnnotationVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerFunctionAnnotationVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1348, "name": "EagerNameLoadCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerNameLoadCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1414, "name": "AstCallObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCallObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1420, "name": "_BuilderCallContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._BuilderCallContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1430, "name": "ScopedAstObservationRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservationRole"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1447, "name": "ScopedAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1504, "name": "ClassAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1509, "name": "ClassFunctionStackNodeVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassFunctionStackNodeVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1587, "name": "CollectedFamilyCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1629, "name": "RegisteredTypeLineage", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredTypeLineage"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1665, "name": "ModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1673, "name": "SharedRegistryRootBase", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SharedRegistryRootBase"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1679, "name": "AutoRegisteredModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AutoRegisteredModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1714, "name": "CollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2008, "name": "CollectedFamilyCacheContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2260, "name": "CollectedFamilyBatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyBatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2300, "name": "RegisteredSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2315, "name": "SingleSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SingleSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2332, "name": "ScopedShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2359, "name": "ObservationShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ObservationShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2374, "name": "ContextForwardingShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextForwardingShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2404, "name": "ContextHelperShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextHelperShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2431, "name": "FunctionObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.FunctionObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2456, "name": "AssignObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AssignObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2479, "name": "SentinelTypeObservationSpecRoot", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SentinelTypeObservationSpecRoot"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2527, "name": "PythonSourcePathPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2569, "name": "PythonSourcePathDiscovery", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathDiscovery"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2621, "name": "PythonModuleRootParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleRootParser"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2847, "name": "LexicalSyntaxScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LexicalSyntaxScope"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2858, "name": "ModuleSyntaxIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleSyntaxIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3153, "name": "CollectedItemProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedItemProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3193, "name": "ClassObservationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassObservationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3347, "name": "LiteralDispatchCaseMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LiteralDispatchCaseMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3363, "name": "_LiteralDispatchCompare", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompare"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3368, "name": "_LiteralDispatchCompareStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompareStep"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3377, "name": "_LiteralDispatchCaseStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCaseStep"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3838, "name": "RootNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RootNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3842, "name": "Visitor", "scope": ["RootNameProjection", "root_names"], "admitted_owners": [], "status": "OPEN_UNPROJECTED_OR_AMBIGUOUS"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 24, "name": "DeclaredAttributeCheck", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheck"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 33, "name": "DeclaredTypeCheckModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredTypeCheckModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 49, "name": "DeclaredAttributeCheckCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheckCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 163, "name": "DeclaredAttributeContractResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeContractResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 129, "name": "SemanticAuthorityKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 203, "name": "SemanticFactKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 212, "name": "AuthorityClaimStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 257, "name": "AuthorityClaimProvenance", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimProvenance"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 279, "name": "AuthorityProofEdgeKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdgeKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 292, "name": "PresentationProjectionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 303, "name": "PresentationProjectionKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 391, "name": "PresentationProjectionSiteKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionSiteKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 405, "name": "PresentationTokenKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 433, "name": "PresentationTokenRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenRole"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 447, "name": "DescentStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 455, "name": "SemanticDescentGraphCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 466, "name": "SemanticDescentImplementationSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentImplementationSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 503, "name": "SemanticDescentModuleFamilySignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleFamilySignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 512, "name": "SemanticDescentModuleSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 555, "name": "SemanticDescentGraphCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 681, "name": "SemanticDescentGraphCacheFamilyIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheFamilyIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 730, "name": "SemanticAuthorityReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 737, "name": "SemanticFactReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 744, "name": "SemanticProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 751, "name": "SemanticAuthorityProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 759, "name": "SemanticFact", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFact"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 842, "name": "SemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 855, "name": "AuthorityClaim", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaim"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 959, "name": "AuthorityClaimCarrier", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimCarrier"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 966, "name": "AuthorityProofEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1013, "name": "AuthorityDiscoveryRequired", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityDiscoveryRequired"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1023, "name": "AuthorityClaimResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1119, "name": "AuthorityClaimResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1197, "name": "PresentationToken", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationToken"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1207, "name": "PresentationAuthorityConstruction", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstruction"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1219, "name": "ProjectionOwnerSymbol", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerSymbol"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1243, "name": "PresentationKeyValuePair", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationKeyValuePair"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1282, "name": "MappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1294, "name": "KeywordMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.KeywordMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1302, "name": "PositionalMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PositionalMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1310, "name": "MappingReadConstructor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadConstructor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1337, "name": "PresentationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1395, "name": "SemanticClassSupplement", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticClassSupplement"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1476, "name": "CompactSemanticModuleProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1485, "name": "CompactSemanticProjectionDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticProjectionDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1503, "name": "DeferredModuleClassReferenceCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DeferredModuleClassReferenceCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1536, "name": "_DeferredClassReferencePartsVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._DeferredClassReferencePartsVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1569, "name": "ProjectionSuppressionIntent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionIntent"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1583, "name": "ProjectionSuppressionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1599, "name": "SemanticAuthorityAffinityPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityAffinityPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1637, "name": "SemanticAuthorityMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1701, "name": "SemanticAuthorityProjectionRelation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionRelation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1739, "name": "MirrorEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MirrorEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1781, "name": "SemanticDerivationEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1821, "name": "SemanticAuthorityProjectionResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1890, "name": "SemanticMirrorEdgeCandidate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorEdgeCandidate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1926, "name": "SemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1992, "name": "ClassFamilyLikeMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyLikeMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2092, "name": "ClassFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2098, "name": "AutoRegisterFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AutoRegisterFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2104, "name": "MappingSemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingSemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2120, "name": "DataclassSchemaMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSchemaMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2243, "name": "EnumMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.EnumMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2270, "name": "FindingDeclaredAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDeclaredAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2287, "name": "SemanticFactAuthorityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactAuthorityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2324, "name": "SemanticFactSpecificityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactSpecificityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2370, "name": "SemanticAuthorityNameIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityNameIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2397, "name": "SemanticAuthorityCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2417, "name": "PresentationProjectionCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2437, "name": "SemanticFactTokenIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2464, "name": "SemanticFactTokenMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2471, "name": "SemanticFactMatchIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactMatchIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2504, "name": "ProjectionClassSymbolFactMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolFactMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2547, "name": "SemanticDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2559, "name": "DescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2584, "name": "SemanticDerivationCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2596, "name": "SemanticAuthorityInventory", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityInventory"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2604, "name": "SemanticDescentGraphSpace", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphSpace"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2637, "name": "ResolvedDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2680, "name": "ResolvedDescentCertificateSelection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificateSelection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2728, "name": "FindingDescentCertificateAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDescentCertificateAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2794, "name": "SemanticDescentGraph", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraph"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2847, "name": "SemanticDescentGraphModuleOverlay", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphModuleOverlay"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2917, "name": "SemanticDescentAuthorityKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentAuthorityKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2925, "name": "SemanticDescentProjectionKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentProjectionKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2933, "name": "SemanticDescentCertificateSummary", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificateSummary"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2973, "name": "SemanticDescentGraphReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphReport"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3029, "name": "SemanticDescentGraphPayloadReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphPayloadReport"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3079, "name": "FindingBackedSemanticDescentGraphRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescentGraphRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3116, "name": "FindingBackedAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3134, "name": "DetectorSourceFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DetectorSourceFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3150, "name": "InferredProjectionFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.InferredProjectionFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3171, "name": "FindingBackedSemanticDescent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescent"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3316, "name": "FindingAuthorityNamePolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingAuthorityNamePolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3356, "name": "SemanticDescentGraphCacheLookup", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheLookup"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3364, "name": "SemanticDescentGraphCacheDisabled", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDisabled"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3369, "name": "SemanticDescentGraphCacheMiss", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheMiss"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3374, "name": "SemanticDescentGraphCacheHit", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheHit"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3516, "name": "SemanticDescentGraphCacheEntry", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheEntry"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3544, "name": "SemanticDescentGraphLatestPointer", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphLatestPointer"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3584, "name": "SemanticDescentGraphCache", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCache"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3808, "name": "SemanticDescentGraphBuildRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphBuildRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3913, "name": "SemanticDescentGraphCacheDirAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDirAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3930, "name": "SemanticAuthorityBuilder", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuilder"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4003, "name": "SemanticAuthorityProviderResult", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProviderResult"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4010, "name": "SemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4058, "name": "AstSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AstSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4090, "name": "CompactSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4117, "name": "SemanticAuthorityDeclaration", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityDeclaration"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4131, "name": "ClassFamilySemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilySemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4151, "name": "DataclassSemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4177, "name": "SemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4205, "name": "SemanticProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4223, "name": "CompactSemanticModuleProjectionFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjectionFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4381, "name": "CompactSemanticDescentResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4395, "name": "CompactSemanticDescentRepository", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentRepository"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4609, "name": "MappingReadProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4680, "name": "ProjectionOwnerConstructionFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerConstructionFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4688, "name": "ProjectionTypeScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionTypeScope"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4765, "name": "CompactSemanticClassSupplementFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticClassSupplementFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4775, "name": "_ProjectionVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._ProjectionVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5301, "name": "SemanticMirrorPolicyCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorPolicyCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5320, "name": "ProjectionSemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5424, "name": "ProjectionClassSymbolLineageIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolLineageIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5474, "name": "ConstructionAuthorityResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstructionAuthorityResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5813, "name": "DataclassProjectionDescentAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassProjectionDescentAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6240, "name": "SemanticAuthorityProjectionResolutionContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolutionContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6250, "name": "SemanticMirrorResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6455, "name": "NormalizeNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NormalizeNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6504, "name": "PresentationTokenNodeProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenNodeProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6550, "name": "PresentationTokenProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6573, "name": "IterChildPresentationTokenProjectorMixin", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.IterChildPresentationTokenProjectorMixin"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6590, "name": "ConstantPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstantPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6614, "name": "NamePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NamePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6634, "name": "AttributePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AttributePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6666, "name": "DictPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DictPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6697, "name": "SequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6717, "name": "StarredPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.StarredPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6734, "name": "CallPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CallPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6778, "name": "ComparePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ComparePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6787, "name": "BoolOpPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.BoolOpPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6796, "name": "MatchValuePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchValuePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6813, "name": "MatchSequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchSequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6822, "name": "MatchOrPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchOrPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6831, "name": "PresentationAuthorityConstructionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstructionCollector"], "status": "INDEX_ADMITTED"} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/census_semantic_preparation_owners.py --advisor-root /home/ts/wt/nra-bounded-full-audit-20260929 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py" + User time (seconds): 2.47 + System time (seconds): 0.07 + Percent of CPU this job got: 56% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.50 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 82240 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 22640 + Voluntary context switches: 27 + Involuntary context switches: 766 + Swaps: 0 + File system inputs: 0 + File system outputs: 120 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-baseline.log b/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-baseline.log new file mode 100644 index 0000000..b23b244 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-baseline.log @@ -0,0 +1,235 @@ +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 109, "name": "AstKeywordSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstKeywordSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 152, "name": "AstParseCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 158, "name": "AstCachePayloadUnavailable", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCachePayloadUnavailable"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 163, "name": "AstParseCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 196, "name": "CollectedFamilyCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 204, "name": "CollectedFamilyContentSignatureIndexSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 211, "name": "CollectedFamilyImplementationSource", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationSource"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 216, "name": "CollectedFamilyImplementationIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 235, "name": "CollectedFamilySchemaIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilySchemaIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 263, "name": "CollectedFamilyProjectionIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyProjectionIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 281, "name": "CollectedFamilyContentSignatureIndexKey", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexKey"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 301, "name": "CollectedFamilyContentSignatureIndexPayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexPayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 314, "name": "CollectedFamilyCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 335, "name": "CollectedFamilyDemandCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyDemandCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 351, "name": "CollectedFamilyContentSignatureIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 449, "name": "CollectedFamilyPresenceDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyPresenceDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 456, "name": "PythonModuleParseContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleParseContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 495, "name": "PythonSourceSemanticHash", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourceSemanticHash"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 735, "name": "PythonParseWorkerPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonParseWorkerPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 751, "name": "CompactModuleIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CompactModuleIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 759, "name": "ParsedModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 825, "name": "AstParentIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParentIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 862, "name": "SourceModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 922, "name": "PythonModulePathAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModulePathAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1002, "name": "ParsedModuleSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModuleSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1091, "name": "SourceModuleBatchParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModuleBatchParser"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1135, "name": "BuiltinCallName", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.BuiltinCallName"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1262, "name": "VariableAnnotationVisitorABC", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.VariableAnnotationVisitorABC"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1274, "name": "ModuleAnnotationEvaluationMode", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleAnnotationEvaluationMode"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1341, "name": "EagerFunctionAnnotationVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerFunctionAnnotationVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1348, "name": "EagerNameLoadCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerNameLoadCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1414, "name": "AstCallObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCallObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1420, "name": "_BuilderCallContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._BuilderCallContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1430, "name": "ScopedAstObservationRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservationRole"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1447, "name": "ScopedAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1504, "name": "ClassAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1509, "name": "ClassFunctionStackNodeVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassFunctionStackNodeVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1587, "name": "CollectedFamilyCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1629, "name": "RegisteredTypeLineage", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredTypeLineage"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1665, "name": "ModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1673, "name": "SharedRegistryRootBase", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SharedRegistryRootBase"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1679, "name": "AutoRegisteredModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AutoRegisteredModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 1714, "name": "CollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2008, "name": "CollectedFamilyCacheContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2260, "name": "CollectedFamilyBatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyBatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2300, "name": "RegisteredSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2315, "name": "SingleSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SingleSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2332, "name": "ScopedShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2359, "name": "ObservationShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ObservationShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2374, "name": "ContextForwardingShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextForwardingShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2404, "name": "ContextHelperShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextHelperShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2431, "name": "FunctionObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.FunctionObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2456, "name": "AssignObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AssignObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2479, "name": "SentinelTypeObservationSpecRoot", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SentinelTypeObservationSpecRoot"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2527, "name": "PythonSourcePathPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2569, "name": "PythonSourcePathDiscovery", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathDiscovery"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2621, "name": "PythonModuleRootParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleRootParser"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2847, "name": "LexicalSyntaxScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LexicalSyntaxScope"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 2858, "name": "ModuleSyntaxIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleSyntaxIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3153, "name": "CollectedItemProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedItemProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3193, "name": "ClassObservationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassObservationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3347, "name": "LiteralDispatchCaseMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LiteralDispatchCaseMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3363, "name": "_LiteralDispatchCompare", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompare"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3368, "name": "_LiteralDispatchCompareStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompareStep"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3377, "name": "_LiteralDispatchCaseStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCaseStep"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3838, "name": "RootNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RootNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "line": 3842, "name": "Visitor", "scope": ["RootNameProjection", "root_names"], "admitted_owners": [], "status": "OPEN_UNPROJECTED_OR_AMBIGUOUS"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 24, "name": "DeclaredAttributeCheck", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheck"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 33, "name": "DeclaredTypeCheckModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredTypeCheckModule"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 49, "name": "DeclaredAttributeCheckCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheckCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "line": 163, "name": "DeclaredAttributeContractResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeContractResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 129, "name": "SemanticAuthorityKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 203, "name": "SemanticFactKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 212, "name": "AuthorityClaimStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 257, "name": "AuthorityClaimProvenance", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimProvenance"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 279, "name": "AuthorityProofEdgeKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdgeKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 292, "name": "PresentationProjectionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 303, "name": "PresentationProjectionKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 391, "name": "PresentationProjectionSiteKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionSiteKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 405, "name": "PresentationTokenKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenKind"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 433, "name": "PresentationTokenRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenRole"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 447, "name": "DescentStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 455, "name": "SemanticDescentGraphCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 466, "name": "SemanticDescentImplementationSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentImplementationSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 503, "name": "SemanticDescentModuleFamilySignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleFamilySignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 512, "name": "SemanticDescentModuleSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 555, "name": "SemanticDescentGraphCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 681, "name": "SemanticDescentGraphCacheFamilyIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheFamilyIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 730, "name": "SemanticAuthorityReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 737, "name": "SemanticFactReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 744, "name": "SemanticProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 751, "name": "SemanticAuthorityProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 759, "name": "SemanticFact", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFact"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 842, "name": "SemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 855, "name": "AuthorityClaim", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaim"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 959, "name": "AuthorityClaimCarrier", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimCarrier"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 966, "name": "AuthorityProofEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1013, "name": "AuthorityDiscoveryRequired", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityDiscoveryRequired"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1023, "name": "AuthorityClaimResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1119, "name": "AuthorityClaimResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1197, "name": "PresentationToken", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationToken"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1207, "name": "PresentationAuthorityConstruction", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstruction"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1219, "name": "ProjectionOwnerSymbol", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerSymbol"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1243, "name": "PresentationKeyValuePair", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationKeyValuePair"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1282, "name": "MappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1294, "name": "KeywordMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.KeywordMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1302, "name": "PositionalMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PositionalMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1310, "name": "MappingReadConstructor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadConstructor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1337, "name": "PresentationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1395, "name": "SemanticClassSupplement", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticClassSupplement"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1476, "name": "CompactSemanticModuleProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1485, "name": "CompactSemanticProjectionDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticProjectionDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1503, "name": "DeferredModuleClassReferenceCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DeferredModuleClassReferenceCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1536, "name": "_DeferredClassReferencePartsVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._DeferredClassReferencePartsVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1569, "name": "ProjectionSuppressionIntent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionIntent"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1583, "name": "ProjectionSuppressionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1599, "name": "SemanticAuthorityAffinityPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityAffinityPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1637, "name": "SemanticAuthorityMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1701, "name": "SemanticAuthorityProjectionRelation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionRelation"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1739, "name": "MirrorEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MirrorEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1781, "name": "SemanticDerivationEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1821, "name": "SemanticAuthorityProjectionResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1890, "name": "SemanticMirrorEdgeCandidate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorEdgeCandidate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1926, "name": "SemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 1992, "name": "ClassFamilyLikeMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyLikeMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2092, "name": "ClassFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2098, "name": "AutoRegisterFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AutoRegisterFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2104, "name": "MappingSemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingSemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2120, "name": "DataclassSchemaMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSchemaMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2243, "name": "EnumMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.EnumMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2270, "name": "FindingDeclaredAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDeclaredAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2287, "name": "SemanticFactAuthorityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactAuthorityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2324, "name": "SemanticFactSpecificityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactSpecificityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2370, "name": "SemanticAuthorityNameIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityNameIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2397, "name": "SemanticAuthorityCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2417, "name": "PresentationProjectionCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2437, "name": "SemanticFactTokenIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2464, "name": "SemanticFactTokenMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2471, "name": "SemanticFactMatchIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactMatchIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2504, "name": "ProjectionClassSymbolFactMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolFactMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2547, "name": "SemanticDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2559, "name": "DescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2584, "name": "SemanticDerivationCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2596, "name": "SemanticAuthorityInventory", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityInventory"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2604, "name": "SemanticDescentGraphSpace", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphSpace"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2637, "name": "ResolvedDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2680, "name": "ResolvedDescentCertificateSelection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificateSelection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2728, "name": "FindingDescentCertificateAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDescentCertificateAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2794, "name": "SemanticDescentGraph", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraph"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2847, "name": "SemanticDescentGraphModuleOverlay", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphModuleOverlay"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2917, "name": "SemanticDescentAuthorityKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentAuthorityKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2925, "name": "SemanticDescentProjectionKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentProjectionKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2933, "name": "SemanticDescentCertificateSummary", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificateSummary"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 2973, "name": "SemanticDescentGraphReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphReport"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3029, "name": "SemanticDescentGraphPayloadReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphPayloadReport"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3079, "name": "FindingBackedSemanticDescentGraphRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescentGraphRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3116, "name": "FindingBackedAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3134, "name": "DetectorSourceFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DetectorSourceFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3150, "name": "InferredProjectionFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.InferredProjectionFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3171, "name": "FindingBackedSemanticDescent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescent"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3316, "name": "FindingAuthorityNamePolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingAuthorityNamePolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3356, "name": "SemanticDescentGraphCacheLookup", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheLookup"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3364, "name": "SemanticDescentGraphCacheDisabled", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDisabled"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3369, "name": "SemanticDescentGraphCacheMiss", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheMiss"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3374, "name": "SemanticDescentGraphCacheHit", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheHit"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3516, "name": "SemanticDescentGraphCacheEntry", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheEntry"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3544, "name": "SemanticDescentGraphLatestPointer", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphLatestPointer"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3584, "name": "SemanticDescentGraphCache", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCache"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3808, "name": "SemanticDescentGraphBuildRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphBuildRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3913, "name": "SemanticDescentGraphCacheDirAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDirAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 3930, "name": "SemanticAuthorityBuilder", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuilder"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4003, "name": "SemanticAuthorityProviderResult", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProviderResult"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4010, "name": "SemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4058, "name": "AstSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AstSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4090, "name": "CompactSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4117, "name": "SemanticAuthorityDeclaration", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityDeclaration"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4131, "name": "ClassFamilySemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilySemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4151, "name": "DataclassSemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4177, "name": "SemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4205, "name": "SemanticProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4223, "name": "CompactSemanticModuleProjectionFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjectionFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4381, "name": "CompactSemanticDescentResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4395, "name": "CompactSemanticDescentRepository", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentRepository"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4609, "name": "MappingReadProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4680, "name": "ProjectionOwnerConstructionFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerConstructionFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4688, "name": "ProjectionTypeScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionTypeScope"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4765, "name": "CompactSemanticClassSupplementFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticClassSupplementFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 4775, "name": "_ProjectionVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._ProjectionVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5301, "name": "SemanticMirrorPolicyCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorPolicyCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5320, "name": "ProjectionSemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5424, "name": "ProjectionClassSymbolLineageIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolLineageIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5474, "name": "ConstructionAuthorityResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstructionAuthorityResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 5813, "name": "DataclassProjectionDescentAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassProjectionDescentAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6240, "name": "SemanticAuthorityProjectionResolutionContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolutionContext"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6250, "name": "SemanticMirrorResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6455, "name": "NormalizeNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NormalizeNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6504, "name": "PresentationTokenNodeProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenNodeProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6550, "name": "PresentationTokenProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6573, "name": "IterChildPresentationTokenProjectorMixin", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.IterChildPresentationTokenProjectorMixin"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6590, "name": "ConstantPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstantPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6614, "name": "NamePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NamePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6634, "name": "AttributePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AttributePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6666, "name": "DictPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DictPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6697, "name": "SequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6717, "name": "StarredPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.StarredPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6734, "name": "CallPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CallPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6778, "name": "ComparePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ComparePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6787, "name": "BoolOpPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.BoolOpPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6796, "name": "MatchValuePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchValuePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6813, "name": "MatchSequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchSequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6822, "name": "MatchOrPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchOrPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "line": 6831, "name": "PresentationAuthorityConstructionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstructionCollector"], "status": "INDEX_ADMITTED"} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/census_semantic_preparation_owners.py --advisor-root /home/ts/wt/nra-bounded-full-audit-20260929 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py" + User time (seconds): 2.36 + System time (seconds): 0.08 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.44 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 81120 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 23110 + Voluntary context switches: 27 + Involuntary context switches: 14 + Swaps: 0 + File system inputs: 0 + File system outputs: 120 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-candidate.log b/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-candidate.log new file mode 100644 index 0000000..98074f6 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/owner-census-canonical-candidate.log @@ -0,0 +1,237 @@ +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 109, "name": "AstKeywordSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstKeywordSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 152, "name": "AstParseCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 158, "name": "AstCachePayloadUnavailable", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCachePayloadUnavailable"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 163, "name": "AstParseCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParseCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 196, "name": "CollectedFamilyCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 204, "name": "CollectedFamilyContentSignatureIndexSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 211, "name": "CollectedFamilyImplementationSource", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationSource"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 216, "name": "CollectedFamilyImplementationIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyImplementationIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 235, "name": "CollectedFamilySchemaIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilySchemaIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 263, "name": "CollectedFamilyProjectionIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyProjectionIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 281, "name": "CollectedFamilyContentSignatureIndexKey", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexKey"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 301, "name": "CollectedFamilyContentSignatureIndexPayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndexPayload"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 314, "name": "CollectedFamilyCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 335, "name": "CollectedFamilyDemandCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyDemandCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 351, "name": "CollectedFamilyContentSignatureIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyContentSignatureIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 449, "name": "CollectedFamilyPresenceDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyPresenceDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 456, "name": "PythonModuleParseContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleParseContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 495, "name": "PythonSourceSemanticHash", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourceSemanticHash"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 735, "name": "PythonParseWorkerPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonParseWorkerPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 751, "name": "CompactModuleIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CompactModuleIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 759, "name": "ParsedModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModule"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 825, "name": "AstParentIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstParentIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 862, "name": "SourceModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModule"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 922, "name": "PythonModulePathAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModulePathAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1002, "name": "ParsedModuleSourceProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModuleSourceProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1091, "name": "SourceModuleBatchParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SourceModuleBatchParser"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1135, "name": "BuiltinCallName", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.BuiltinCallName"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1262, "name": "VariableAnnotationVisitorABC", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.VariableAnnotationVisitorABC"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1274, "name": "ModuleAnnotationEvaluationMode", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleAnnotationEvaluationMode"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1341, "name": "EagerFunctionAnnotationVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerFunctionAnnotationVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1348, "name": "EagerNameLoadCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.EagerNameLoadCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1414, "name": "AstCallObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AstCallObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1420, "name": "_BuilderCallContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._BuilderCallContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1430, "name": "ScopedAstObservationRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservationRole"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1447, "name": "ScopedAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1504, "name": "ClassAstObservation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassAstObservation"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1509, "name": "ClassFunctionStackNodeVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassFunctionStackNodeVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1582, "name": "ParsedModuleClassFunctionStackNodeVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ParsedModuleClassFunctionStackNodeVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1602, "name": "CollectedFamilyCachePayload", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCachePayload"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1644, "name": "RegisteredTypeLineage", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredTypeLineage"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1680, "name": "ModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1688, "name": "SharedRegistryRootBase", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SharedRegistryRootBase"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1694, "name": "AutoRegisteredModuleShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AutoRegisteredModuleShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 1729, "name": "CollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2023, "name": "CollectedFamilyCacheContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyCacheContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2275, "name": "CollectedFamilyBatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedFamilyBatch"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2315, "name": "RegisteredSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RegisteredSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2330, "name": "SingleSpecCollectedFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SingleSpecCollectedFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2347, "name": "ScopedShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ScopedShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2374, "name": "ObservationShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ObservationShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2389, "name": "ContextForwardingShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextForwardingShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2419, "name": "ContextHelperShapeSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ContextHelperShapeSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2446, "name": "FunctionObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.FunctionObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2471, "name": "AssignObservationSpec", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.AssignObservationSpec"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2494, "name": "SentinelTypeObservationSpecRoot", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.SentinelTypeObservationSpecRoot"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2542, "name": "PythonSourcePathPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2584, "name": "PythonSourcePathDiscovery", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonSourcePathDiscovery"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2636, "name": "PythonModuleRootParser", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.PythonModuleRootParser"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2862, "name": "LexicalSyntaxScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LexicalSyntaxScope"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 2873, "name": "ModuleSyntaxIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ModuleSyntaxIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3168, "name": "CollectedItemProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.CollectedItemProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3208, "name": "ClassObservationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.ClassObservationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3362, "name": "LiteralDispatchCaseMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.LiteralDispatchCaseMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3378, "name": "_LiteralDispatchCompare", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompare"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3383, "name": "_LiteralDispatchCompareStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCompareStep"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3392, "name": "_LiteralDispatchCaseStep", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools._LiteralDispatchCaseStep"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3853, "name": "RootNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.ast_tools.RootNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/ast_tools.py", "line": 3857, "name": "Visitor", "scope": ["RootNameProjection", "root_names"], "admitted_owners": [], "status": "OPEN_UNPROJECTED_OR_AMBIGUOUS"} +{"file_path": "nominal_refactor_advisor/record_checks.py", "line": 24, "name": "DeclaredAttributeCheck", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheck"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/record_checks.py", "line": 33, "name": "DeclaredTypeCheckModule", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredTypeCheckModule"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/record_checks.py", "line": 55, "name": "DeclaredAttributeCheckCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeCheckCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/record_checks.py", "line": 178, "name": "DeclaredAttributeContractResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.record_checks.DeclaredAttributeContractResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 129, "name": "SemanticAuthorityKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 203, "name": "SemanticFactKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 212, "name": "AuthorityClaimStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 257, "name": "AuthorityClaimProvenance", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimProvenance"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 279, "name": "AuthorityProofEdgeKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdgeKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 292, "name": "PresentationProjectionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 303, "name": "PresentationProjectionKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 391, "name": "PresentationProjectionSiteKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionSiteKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 405, "name": "PresentationTokenKind", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenKind"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 433, "name": "PresentationTokenRole", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenRole"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 447, "name": "DescentStatus", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentStatus"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 455, "name": "SemanticDescentGraphCacheSchema", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheSchema"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 466, "name": "SemanticDescentImplementationSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentImplementationSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 503, "name": "SemanticDescentModuleFamilySignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleFamilySignature"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 512, "name": "SemanticDescentModuleSignature", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentModuleSignature"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 555, "name": "SemanticDescentGraphCacheIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 681, "name": "SemanticDescentGraphCacheFamilyIdentity", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheFamilyIdentity"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 730, "name": "SemanticAuthorityReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityReference"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 737, "name": "SemanticFactReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactReference"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 744, "name": "SemanticProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 751, "name": "SemanticAuthorityProjectionReference", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionReference"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 759, "name": "SemanticFact", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFact"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 842, "name": "SemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 855, "name": "AuthorityClaim", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaim"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 959, "name": "AuthorityClaimCarrier", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimCarrier"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 966, "name": "AuthorityProofEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityProofEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1013, "name": "AuthorityDiscoveryRequired", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityDiscoveryRequired"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1023, "name": "AuthorityClaimResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1119, "name": "AuthorityClaimResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AuthorityClaimResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1197, "name": "PresentationToken", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationToken"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1207, "name": "PresentationAuthorityConstruction", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstruction"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1219, "name": "ProjectionOwnerSymbol", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerSymbol"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1243, "name": "PresentationKeyValuePair", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationKeyValuePair"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1282, "name": "MappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1294, "name": "KeywordMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.KeywordMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1302, "name": "PositionalMappingReadArgument", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PositionalMappingReadArgument"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1310, "name": "MappingReadConstructor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadConstructor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1337, "name": "PresentationProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1395, "name": "SemanticClassSupplement", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticClassSupplement"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1476, "name": "CompactSemanticModuleProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1485, "name": "CompactSemanticProjectionDemand", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticProjectionDemand"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1503, "name": "DeferredModuleClassReferenceCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DeferredModuleClassReferenceCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1536, "name": "_DeferredClassReferencePartsVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._DeferredClassReferencePartsVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1569, "name": "ProjectionSuppressionIntent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionIntent"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1583, "name": "ProjectionSuppressionPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSuppressionPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1599, "name": "SemanticAuthorityAffinityPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityAffinityPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1637, "name": "SemanticAuthorityMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1701, "name": "SemanticAuthorityProjectionRelation", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionRelation"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1739, "name": "MirrorEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MirrorEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1781, "name": "SemanticDerivationEdge", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationEdge"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1821, "name": "SemanticAuthorityProjectionResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1890, "name": "SemanticMirrorEdgeCandidate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorEdgeCandidate"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1926, "name": "SemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 1992, "name": "ClassFamilyLikeMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyLikeMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2092, "name": "ClassFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2098, "name": "AutoRegisterFamilyMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AutoRegisterFamilyMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2104, "name": "MappingSemanticAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingSemanticAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2120, "name": "DataclassSchemaMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSchemaMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2243, "name": "EnumMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.EnumMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2270, "name": "FindingDeclaredAuthorityMirrorPolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDeclaredAuthorityMirrorPolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2287, "name": "SemanticFactAuthorityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactAuthorityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2324, "name": "SemanticFactSpecificityIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactSpecificityIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2370, "name": "SemanticAuthorityNameIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityNameIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2397, "name": "SemanticAuthorityCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2417, "name": "PresentationProjectionCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationProjectionCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2437, "name": "SemanticFactTokenIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2464, "name": "SemanticFactTokenMatch", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactTokenMatch"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2471, "name": "SemanticFactMatchIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticFactMatchIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2504, "name": "ProjectionClassSymbolFactMatcher", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolFactMatcher"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2547, "name": "SemanticDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2559, "name": "DescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2584, "name": "SemanticDerivationCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDerivationCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2596, "name": "SemanticAuthorityInventory", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityInventory"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2604, "name": "SemanticDescentGraphSpace", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphSpace"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2637, "name": "ResolvedDescentCertificate", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificate"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2680, "name": "ResolvedDescentCertificateSelection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ResolvedDescentCertificateSelection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2728, "name": "FindingDescentCertificateAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingDescentCertificateAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2794, "name": "SemanticDescentGraph", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraph"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2847, "name": "SemanticDescentGraphModuleOverlay", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphModuleOverlay"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2917, "name": "SemanticDescentAuthorityKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentAuthorityKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2925, "name": "SemanticDescentProjectionKindCount", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentProjectionKindCount"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2933, "name": "SemanticDescentCertificateSummary", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentCertificateSummary"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 2973, "name": "SemanticDescentGraphReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphReport"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3029, "name": "SemanticDescentGraphPayloadReport", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphPayloadReport"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3079, "name": "FindingBackedSemanticDescentGraphRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescentGraphRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3116, "name": "FindingBackedAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3134, "name": "DetectorSourceFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DetectorSourceFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3150, "name": "InferredProjectionFindingAuthorityEvidence", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.InferredProjectionFindingAuthorityEvidence"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3171, "name": "FindingBackedSemanticDescent", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingBackedSemanticDescent"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3316, "name": "FindingAuthorityNamePolicy", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.FindingAuthorityNamePolicy"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3356, "name": "SemanticDescentGraphCacheLookup", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheLookup"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3364, "name": "SemanticDescentGraphCacheDisabled", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDisabled"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3369, "name": "SemanticDescentGraphCacheMiss", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheMiss"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3374, "name": "SemanticDescentGraphCacheHit", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheHit"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3516, "name": "SemanticDescentGraphCacheEntry", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheEntry"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3544, "name": "SemanticDescentGraphLatestPointer", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphLatestPointer"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3584, "name": "SemanticDescentGraphCache", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCache"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3808, "name": "SemanticDescentGraphBuildRequest", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphBuildRequest"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3913, "name": "SemanticDescentGraphCacheDirAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticDescentGraphCacheDirAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 3930, "name": "SemanticAuthorityBuilder", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuilder"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4003, "name": "SemanticAuthorityProviderResult", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProviderResult"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4010, "name": "SemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4058, "name": "AstSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AstSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4090, "name": "CompactSemanticAuthorityBuildContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticAuthorityBuildContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4117, "name": "SemanticAuthorityDeclaration", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityDeclaration"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4131, "name": "ClassFamilySemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ClassFamilySemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4151, "name": "DataclassSemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassSemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4177, "name": "SemanticAuthorityProvider", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProvider"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4205, "name": "SemanticProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4223, "name": "CompactSemanticModuleProjectionFamily", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticModuleProjectionFamily"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4385, "name": "CompactSemanticDescentResolution", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentResolution"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4399, "name": "CompactSemanticDescentRepository", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticDescentRepository"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4613, "name": "MappingReadProjectionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MappingReadProjectionCollector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4684, "name": "ProjectionOwnerConstructionFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionOwnerConstructionFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4692, "name": "ProjectionTypeScope", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionTypeScope"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4769, "name": "CompactSemanticClassSupplementFrame", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CompactSemanticClassSupplementFrame"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 4779, "name": "_ProjectionVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._ProjectionVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5318, "name": "_CompactSemanticProjectionVisitor", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent._CompactSemanticProjectionVisitor"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5330, "name": "SemanticMirrorPolicyCatalog", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorPolicyCatalog"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5349, "name": "ProjectionSemanticAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionSemanticAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5453, "name": "ProjectionClassSymbolLineageIndex", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ProjectionClassSymbolLineageIndex"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5503, "name": "ConstructionAuthorityResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstructionAuthorityResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 5842, "name": "DataclassProjectionDescentAuthority", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DataclassProjectionDescentAuthority"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6269, "name": "SemanticAuthorityProjectionResolutionContext", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticAuthorityProjectionResolutionContext"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6279, "name": "SemanticMirrorResolver", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SemanticMirrorResolver"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6484, "name": "NormalizeNameProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NormalizeNameProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6533, "name": "PresentationTokenNodeProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenNodeProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6579, "name": "PresentationTokenProjection", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationTokenProjection"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6602, "name": "IterChildPresentationTokenProjectorMixin", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.IterChildPresentationTokenProjectorMixin"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6619, "name": "ConstantPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ConstantPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6643, "name": "NamePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.NamePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6663, "name": "AttributePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.AttributePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6695, "name": "DictPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.DictPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6726, "name": "SequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.SequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6746, "name": "StarredPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.StarredPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6763, "name": "CallPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.CallPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6807, "name": "ComparePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.ComparePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6816, "name": "BoolOpPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.BoolOpPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6825, "name": "MatchValuePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchValuePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6842, "name": "MatchSequencePresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchSequencePresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6851, "name": "MatchOrPresentationTokenProjector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.MatchOrPresentationTokenProjector"], "status": "INDEX_ADMITTED"} +{"file_path": "nominal_refactor_advisor/semantic_descent.py", "line": 6860, "name": "PresentationAuthorityConstructionCollector", "scope": [], "admitted_owners": ["nominal_refactor_advisor.semantic_descent.PresentationAuthorityConstructionCollector"], "status": "INDEX_ADMITTED"} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/census_semantic_preparation_owners.py --advisor-root /home/ts/wt/nra-r1-preparation-owner-357-20261001 nominal_refactor_advisor/ast_tools.py nominal_refactor_advisor/record_checks.py nominal_refactor_advisor/semantic_descent.py" + User time (seconds): 3.40 + System time (seconds): 0.09 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.48 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 83640 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 23708 + Voluntary context switches: 27 + Involuntary context switches: 21 + Swaps: 0 + File system inputs: 0 + File system outputs: 104 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/owner-tests-06.log b/docs/validation/r1_preparation_owner_357_20261001/owner-tests-06.log new file mode 100644 index 0000000..8c9e7e3 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/owner-tests-06.log @@ -0,0 +1,63 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 32 items + +tests/test_raw_record_detectors.py::test_mapping_reads_match_schema_but_only_actual_decode_descends PASSED [ 3%] +tests/test_raw_record_detectors.py::test_unmodeled_shapes_aggregate_same_keys_and_ignore_small_dynamic_reads PASSED [ 6%] +tests/test_raw_record_detectors.py::test_redundant_checks_resolve_declared_self_parameters_and_keep_unknowns PASSED [ 9%] +tests/test_raw_record_detectors.py::test_detector_ids_are_derived_and_registered PASSED [ 12%] +tests/test_raw_record_detectors.py::test_cross_module_schema_and_annotated_owner_use_complete_context PASSED [ 15%] +tests/test_family_identity_lifetime.py::test_unscoped_identity_remains_fresh PASSED [ 18%] +tests/test_family_identity_lifetime.py::test_shared_schema_and_source_identity_live_only_within_outer_scan PASSED [ 21%] +tests/test_family_identity_lifetime.py::test_token_format_is_unchanged_and_computed_once_per_identity[] PASSED [ 25%] +tests/test_family_identity_lifetime.py::test_token_format_is_unchanged_and_computed_once_per_identity[focused-demand] PASSED [ 28%] +tests/test_family_identity_lifetime.py::test_changed_source_demand_module_and_schema_keep_distinct_keys PASSED [ 31%] +tests/test_family_identity_lifetime.py::test_changed_family_declaration_is_observed_on_the_next_invocation PASSED [ 34%] +tests/test_family_identity_lifetime.py::test_replacement_does_not_inherit_an_old_derived_token PASSED [ 37%] +tests/test_family_identity_lifetime.py::test_exception_releases_scoped_identities_and_contexts PASSED [ 40%] +tests/test_source_projection_owner.py::test_source_projection_retains_actual_parsed_owner_without_compact_ast_debt PASSED [ 43%] +tests/test_source_projection_owner.py::test_another_revision_reusing_ast_cannot_relabel_existing_source_observations PASSED [ 46%] +tests/test_source_projection_owner.py::test_reparsed_source_owns_distinct_canonical_read_nodes PASSED [ 50%] +tests/test_source_projection_owner.py::test_pickle_preserves_shared_module_node_identity_inside_source_projection PASSED [ 53%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[] PASSED [ 56%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\nisinstance = lambda *args: True\n] PASSED [ 59%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\ntype = lambda value: int\n] PASSED [ 62%] +tests/test_cooperative_semantic_preparation.py::test_compact_family_does_not_reenter_independent_check_collection PASSED [ 65%] +tests/test_cooperative_semantic_preparation.py::test_new_capability_is_only_a_declaration_and_cooperative_hook PASSED [ 68%] +tests/test_cooperative_semantic_preparation.py::test_exception_unwinds_both_capabilities_and_shared_owner PASSED [ 71%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 75%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result: dict = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 78%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[return {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 81%] +tests/test_cooperative_semantic_preparation.py::test_context_only_family_keeps_its_existing_no_checks_contract PASSED [ 84%] +tests/test_context_projection_reuse.py::test_cross_module_preparation_reuses_exact_candidate_snapshot PASSED [ 87%] +tests/test_context_projection_reuse.py::test_grouped_shape_preparation_reuses_exact_shape_snapshot PASSED [ 90%] +tests/test_context_projection_reuse.py::test_process_cli_hard_exits_after_publishing_deadline_payload PASSED [ 93%] +tests/test_context_projection_reuse.py::test_hard_deadline_terminates_at_signal_boundary PASSED [ 96%] +tests/test_context_projection_reuse.py::test_repository_semantic_signature_changes_for_contextual_source_edit PASSED [100%] + +============================== 32 passed in 2.54s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-owner-06","tests/test_raw_record_detectors.py","tests/test_family_identity_lifetime.py","tests/test_source_projection_owner.py","tests/test_cooperative_semantic_preparation.py","tests/test_context_projection_reuse.py"]))" + User time (seconds): 4.12 + System time (seconds): 0.15 + Percent of CPU this job got: 56% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:07.55 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 87268 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 27536 + Voluntary context switches: 34 + Involuntary context switches: 1286 + Swaps: 0 + File system inputs: 0 + File system outputs: 152 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/predecessor-test-08.log b/docs/validation/r1_preparation_owner_357_20261001/predecessor-test-08.log new file mode 100644 index 0000000..23936e5 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/predecessor-test-08.log @@ -0,0 +1,63 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-bounded-full-audit-20260929 +configfile: pyproject.toml +collecting ... collected 1 item + +tests/test_syntax_children_projection.py::test_completion_does_not_repeat_whole_module_syntax_walk FAILED [100%] + +=================================== FAILURES =================================== +___________ test_completion_does_not_repeat_whole_module_syntax_walk ___________ +ValueError: Native class capture remains unproved + +The above exception was the direct cause of the following exception: + + def test_completion_does_not_repeat_whole_module_syntax_walk(): + entry = entry_for("key = None\npass") + syntax = module_syntax_index(entry.execution.module.module) +> expected = entry.final_evaluation + +tests/test_syntax_children_projection.py:55: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +nominal_refactor_advisor/source_execution.py:2922: in final_evaluation + self.execution.require_terminal_evaluation(evaluation) +nominal_refactor_advisor/source_execution.py:3867: in require_terminal_evaluation + prefix = self.required_prefix(context, None) +nominal_refactor_advisor/source_execution.py:3879: in required_prefix + result.require_closed() +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = OpenCapturedReference(violation=, mutation=None) + + def require_closed(self) -> None: +> raise self.rejection("Object capture") +E nominal_refactor_advisor.captured_reference.CapturedReferenceRejection: Object capture remains open: unproved_execution_effects + +nominal_refactor_advisor/captured_reference.py:533: CapturedReferenceRejection +=========================== short test summary info ============================ +FAILED tests/test_syntax_children_projection.py::test_completion_does_not_repeat_whole_module_syntax_walk +============================== 1 failed in 0.39s =============================== +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-bounded-full-audit-20260929"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-predecessor-08","tests/test_syntax_children_projection.py::test_completion_does_not_repeat_whole_module_syntax_walk"]))" + User time (seconds): 2.06 + System time (seconds): 0.11 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.18 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 86920 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 24557 + Voluntary context switches: 34 + Involuntary context switches: 229 + Swaps: 0 + File system inputs: 88 + File system outputs: 16 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/proof-tests-04.log b/docs/validation/r1_preparation_owner_357_20261001/proof-tests-04.log new file mode 100644 index 0000000..7b3d89e --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/proof-tests-04.log @@ -0,0 +1,24 @@ +.................................Command exited with non-zero status 124 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-q","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-preparation-owner-357-20261001/pytest-proofs-04","tests/test_raw_record_detectors.py","tests/test_family_identity_lifetime.py","tests/test_exact_cache_coverage.py","tests/test_context_projection_reuse.py","tests/test_source_projection_owner.py"]))" + User time (seconds): 49.51 + System time (seconds): 3.14 + Percent of CPU this job got: 87% + Elapsed (wall clock) time (h:mm:ss or m:ss): 1:00.01 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 90540 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 3 + Minor (reclaiming a frame) page faults: 482044 + Voluntary context switches: 645 + Involuntary context switches: 2439 + Swaps: 0 + File system inputs: 664 + File system outputs: 16976 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 124 From 19f21b6cb660826fa7c593af1d59101009b46019 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 10:52:15 -0400 Subject: [PATCH 08/12] Preserve cooperative same-node assignment and return hooks --- nominal_refactor_advisor/ast_tools.py | 3 + nominal_refactor_advisor/semantic_descent.py | 16 ++- .../test_cooperative_semantic_preparation.py | 118 ++++++++++++++++++ 3 files changed, 132 insertions(+), 5 deletions(-) diff --git a/nominal_refactor_advisor/ast_tools.py b/nominal_refactor_advisor/ast_tools.py index 37b35a8..69ec095 100644 --- a/nominal_refactor_advisor/ast_tools.py +++ b/nominal_refactor_advisor/ast_tools.py @@ -1577,6 +1577,9 @@ def visit_FunctionDef(self, node: ast.FunctionDef) -> None: visit_Call = ast.NodeVisitor.generic_visit visit_Compare = ast.NodeVisitor.generic_visit visit_Lambda = ast.NodeVisitor.generic_visit + visit_Assign = ast.NodeVisitor.generic_visit + visit_AnnAssign = ast.NodeVisitor.generic_visit + visit_Return = ast.NodeVisitor.generic_visit class ParsedModuleClassFunctionStackNodeVisitor(ClassFunctionStackNodeVisitor): diff --git a/nominal_refactor_advisor/semantic_descent.py b/nominal_refactor_advisor/semantic_descent.py index 9739faa..d9d9424 100644 --- a/nominal_refactor_advisor/semantic_descent.py +++ b/nominal_refactor_advisor/semantic_descent.py @@ -21,9 +21,11 @@ from collections.abc import ( Callable, Iterable, + Iterator, Mapping, Sequence, ) +from contextlib import contextmanager from dataclasses import dataclass, field, replace from enum import Flag, StrEnum, auto from functools import cached_property, lru_cache @@ -5029,7 +5031,8 @@ def visit_Assign(self, node: ast.Assign) -> None: self._collecting_presentations and self._collect_assignment_projection(node, node.value) ) - self._traverse_projection_children(node, suppress=projected) + with self._suppress_projection_descendants(projected): + super().visit_Assign(node) def visit_AnnAssign(self, node: ast.AnnAssign) -> None: projected = ( @@ -5041,7 +5044,8 @@ def visit_AnnAssign(self, node: ast.AnnAssign) -> None: axis_type_names=ProjectionTypeScope.annotation_type_names(node.annotation), ) ) - self._traverse_projection_children(node, suppress=projected) + with self._suppress_projection_descendants(projected): + super().visit_AnnAssign(node) def visit_Return(self, node: ast.Return) -> None: projected = ( @@ -5049,15 +5053,17 @@ def visit_Return(self, node: ast.Return) -> None: and node.value is not None and self._collect_return_projection(node, node.value) ) - self._traverse_projection_children(node, suppress=projected) + with self._suppress_projection_descendants(projected): + super().visit_Return(node) - def _traverse_projection_children(self, node: ast.AST, *, suppress: bool) -> None: + @contextmanager + def _suppress_projection_descendants(self, suppress: bool) -> Iterator[None]: # An emitted presentation has already consumed this expression's # descendant facts. Suppress only this capability, never another # cooperative capability's required syntax events. self._projection_suppression_depth += int(suppress) try: - super().generic_visit(node) + yield finally: self._projection_suppression_depth -= int(suppress) diff --git a/tests/test_cooperative_semantic_preparation.py b/tests/test_cooperative_semantic_preparation.py index 6d2b9c3..aeb5620 100644 --- a/tests/test_cooperative_semantic_preparation.py +++ b/tests/test_cooperative_semantic_preparation.py @@ -126,6 +126,124 @@ class Extended(CallCensus, _CompactSemanticProjectionVisitor): assert mro.count(ParsedModuleClassFunctionStackNodeVisitor) == 1 +class StatementCensus(ParsedModuleClassFunctionStackNodeVisitor): + """Independent same-node capability, not a second visitor or dispatch map.""" + + def __init__(self, parsed_module, **kwargs): + super().__init__(parsed_module, **kwargs) + self.statements = Counter() + self.calls = Counter() + + def visit_Assign(self, node): + self.statements[(self.qualname, id(node))] += 1 + super().visit_Assign(node) + + def visit_AnnAssign(self, node): + self.statements[(self.qualname, id(node))] += 1 + super().visit_AnnAssign(node) + + def visit_Return(self, node): + self.statements[(self.qualname, id(node))] += 1 + super().visit_Return(node) + + def visit_Call(self, node): + self.calls[id(node)] += 1 + super().visit_Call(node) + + +class CensusBeforeProjection(StatementCensus, _CompactSemanticProjectionVisitor): + pass + + +class CensusAfterProjection(_CompactSemanticProjectionVisitor, StatementCensus): + pass + + +@pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) +@pytest.mark.parametrize("include_presentations", (True, False)) +def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations +): + source = """\ +class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} +""" + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) + visitor = visitor_type(module, include_presentations=include_presentations) + visitor.visit(module.module) + target = module.module.body[0].body[0] + nested = target.body[4] + assert visitor.statements == Counter( + { + ("Example.target", id(node)): 1 + for node in (*target.body[:4], target.body[-1]) + } + ) + Counter({("Example.target.nested", id(node)): 1 for node in nested.body}) + assert visitor.calls == Counter( + {id(node): 1 for node in ast.walk(module.module) if isinstance(node, ast.Call)} + ) + assert visitor.projections == independent.projections + assert visitor.class_supplements == independent.class_supplements + assert DeclaredTypeCheckModule.from_collector( + visitor + ) == DeclaredTypeCheckModule.collect(module) + assert len(visitor.checks) == 3 + mro = visitor_type.__mro__ + assert mro.count(ParsedModuleClassFunctionStackNodeVisitor) == 1 + assert mro.index(StatementCensus) < mro.index( + ParsedModuleClassFunctionStackNodeVisitor + ) + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor._projection_suppression_depth == 0 + + +@pytest.mark.parametrize( + "statement", + ( + "result = {'left': consume(value), 'right': 'name'}", + "result: dict = {'left': consume(value), 'right': 'name'}", + "return {'left': consume(value), 'right': 'name'}", + ), +) +def test_same_node_exception_unwinds_projection_policy_and_scope(tmp_path, statement): + class FailAtStatement(ParsedModuleClassFunctionStackNodeVisitor): + def visit_Assign(self, node): + assert self._projection_suppression_depth == 1 + raise RuntimeError("controlled same-node failure") + + visit_AnnAssign = visit_Assign + visit_Return = visit_Assign + + class Failing(_CompactSemanticProjectionVisitor, FailAtStatement): + pass + + source = ( + "class Example:\n def target(self, value: Value):\n " + statement + ) + module = SourceModule(tmp_path / "case.py", "case", source).parse() + visitor = Failing(module) + with pytest.raises(RuntimeError, match="controlled same-node failure"): + visitor.visit(module.module) + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.owner_construction_stack == visitor.type_scopes == [] + assert visitor.class_supplement_stack == visitor.active_class_method_frames == [] + assert visitor._projection_suppression_depth == 0 + + def test_exception_unwinds_both_capabilities_and_shared_owner(tmp_path): class FailOnCall(ParsedModuleClassFunctionStackNodeVisitor): def visit_Call(self, node): From 18910a5aea638e0c2dcd7a574c40a498bcbf3aea Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 10:56:12 -0400 Subject: [PATCH 09/12] Retain same-node MRO experiments and follow-through freeze --- .../r1_preparation_owner_357_20261001.md | 13 ++ .../INDEX.md | 5 + .../same-node-followthrough/README.md | 99 +++++++++ .../same-node-followthrough/SHA256SUMS | 5 + .../freeze-manifest.json | 25 +++ .../same-node-after.log | 67 ++++++ .../same-node-before-02.log | 140 ++++++++++++ .../same-node-before.log | 206 ++++++++++++++++++ .../same-node-consumers.log | 42 ++++ .../same-node-parity.log | 27 +++ 10 files changed, 629 insertions(+) create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/README.md create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/SHA256SUMS create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/freeze-manifest.json create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-after.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before-02.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-consumers.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-parity.log diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md index 44cd0a5..678d589 100644 --- a/docs/plans/r1_preparation_owner_357_20261001.md +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -133,3 +133,16 @@ acceptance. Global85detector/FULL remains separately unqualified. No native/UI, science replay, install, lock, provider, download or other-owner source change. Owned19MiB scratch removed after handle/process proof and evidence preservation; the parent's original terminal cache address was neither reused nor removed. + +## Authorized same-node follow-through + +At predecessor c6ec13f the new independent same-node experiment demonstrated +that projection handlers bypassed downstream Assign/AnnAssign/Return hooks, +although earlier Call-only extension evidence passed. Source19f21b6 repairs +this in the existing shared traversal owner, preserves local suppression and +single traversal, and removes the bypassing helper. No confirmed installed +regression is asserted. The [follow-through receipt](../validation/r1_preparation_owner_357_20261001/same-node-followthrough/README.md) +and its separate freeze manifest retain both failing experiments, 47 distinct +passing current source cases (7 new), unchanged original component signatures, +resource bounds and cleanup. Original failure evidence remains unchanged; +parent's installed run and full qualification remain untouched. diff --git a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md index aaad751..f596271 100644 --- a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md +++ b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md @@ -1,5 +1,10 @@ # Source checkpoint and retained evidence +Current authorized follow-through: +[same-node cooperative receipt](same-node-followthrough/README.md), source19f21b6. +The original checkpoint/results below remain historical evidence, not overwritten +or retrospectively qualified by the follow-through. + Source owner Schrodinger/Codex; integration and original R0/R1/installed qualification parent. Draft https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16. Production source checkpoint `2ae2309967904e0195f0d8e75b9b9988c736a52a`; diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/README.md b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/README.md new file mode 100644 index 0000000..6bdc79d --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/README.md @@ -0,0 +1,99 @@ +# Same-node cooperative follow-through + +Source owner Schrodinger/Codex; parent retains integration and installed/full +qualification. Same [draft PR16](https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16), +not a competing implementation. Source checkpoint +`19f21b6cb660826fa7c593af1d59101009b46019`, predecessor evidence HEAD +`c6ec13f8bf2b6c07b8fae8db8533fcd6fb5d6d2b`. The preceding source freeze, +profiles, timeout and native-proof failure remain retained unchanged. + +## What the experiment establishes + +At c6ec13f, `_ProjectionVisitor.visit_Assign`, `visit_AnnAssign` and +`visit_Return` called `_traverse_projection_children`, which delegated directly +to `super().generic_visit`. Child events could reach another capability, but +same-node hooks downstream of this capability in C3 could not. + +The independent `StatementCensus` declares a cooperative constructor and small +Assign/AnnAssign/Return/Call hooks. Two composition declarations put it before +and after the existing compact visitor. The new-case test compares exact node +identity, source scope and event multiplicity, projected/unprojected and +valueless statements, nested scopes, descendant calls, both presentation modes, +unchanged presentation/check/supplement facts, and one shared ancestor in MRO. +No shared consumer or taxonomy registration is edited to admit the experiment. + +The first experiment retained an additional test-constructor mistake: the +before-order constructor did not forward projection kwargs. After correcting +that independent test hook, the before-order cases passed and both after-order +cases failed with **zero of seven required same-node observations**. Thus the +bypass is demonstrated, while no production regression or installed failure is +claimed. The current test with `-k same_node_capability` supplies the same +experiment against the predecessor production owners. + +## Ownership and replacement + +`ClassFunctionStackNodeVisitor` remains the single shared traversal owner. It +now supplies native AST traversal endpoints for the three additional events, +using the original `ast.NodeVisitor.generic_visit`, not a copied algorithm. +The projection capability delegates through each matching `super().visit_*`. +Its one context manager owns only its suppression state and exception restoration; +it does not perform traversal or dispatch. Suppression spans the downstream +cooperative chain and its children; independent observations remain enabled. +The bypassing helper is removed, not retained as a facade or fallback. + +Three additional tests raise at a downstream same-node hook after presentation +emission and verify suppression, both capability stacks and the shared scope +unwind. The full new-case extension needs only its declaration/hooks and a +composition declaration. The generic consumer is unchanged. This is a contract +for the admitted events, not a claim that every unrelated AST override is now +cooperative. + +Catalog review: IMPL-4 incomplete cooperative participation repaired; IMPL-12/13 +the original shared traversal reused rather than duplicated; IMPL-1/2/3/5 no +new consumer dispatch; MEMB-1/2 no roster or hook table; IDEN-5 no mirrored +source/suppression store; TIME-1/3 no legacy helper or compatibility facade. +Existing cache identity, strict AST-free admission and fail-closed proof code +are unchanged. This remains manually authored, not a native-equivalence or +global architecture certificate. + +## Bounded source receipts + +| Receipt | Outcome | Wall seconds | Peak KiB | +| --- | --- | ---: | ---: | +| same-node-before.log | 4 failed; includes constructor error | 2.72 | 86036 | +| same-node-before-02.log | 2 passed / 2 failed; downstream bypass isolated | 2.77 | 86036 | +| same-node-after.log | 36 passed, including 7 new cases | 6.33 | 90072 | +| same-node-consumers.log | 11 existing consumer/cache cases passed | 6.57 | 105996 | +| same-node-parity.log | complete four-file component signatures unchanged | 3.51 | 85300 | + +47 distinct current-checkpoint cases pass, not a rerun of the earlier entire +83-case coverage. Maximum observed RSS is 103.51MiB. The component comparison +retains identical original paths, raw source SHA256s, content signatures and +458 presentations / 36 checks / 292 supplements from the predecessor receipts. +No end-to-end speed, completed original R1 or global audit claim follows. + +Each command is retained in its log: exact read-only frozen Python3.12.3, +`-I -B`, one CPU/thread pools, systemd scope512MiB/no swap/100% CPU, outer60s, +explicit source import, isolated pytest without xdist/cacheprovider. All source +checks are serial and provider-free. No native/UI/MCP/science, installation, +shared lock, original consumer, parent run or baseline change. Baseline remains +clean at673c062f and the immutable consumer retains its recorded SHA256. + +Resource admission reported RAM18.5GiB/home9.6GiB and swap12.9GiB; advisory +warning, not a hard-limit failure. Owned disposable root: +`/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001` (816KiB). +Logs are copied here and checksummed before removal. The first copy command was +rejected before execution because its new destination cwd did not yet exist; +the successful copy used the existing owned worktree cwd. + +Parent retains complete original R0/R1 160/165 qualification and installed +acceptance. The original native-proof failure and broader timeout are not +waived or requalified by these tests; global85detector/FULL remains unqualified. +The parent's terminal scratch address is neither reused nor removed. + +Cleanup complete: all five retained log checksums passed; `lsof +D` exact root +returned1/no handles and scoped process search found no worker. `realpath` +matched the explicit owned address. Removed only that816KiB root with `rm -r --` +and verified absence. Synthetic cache/test artifacts are permanently removed; +all logs and command recipes are retained here. All tool PTY sessions terminal. +No parent scratch, installed package, frozen input or other-owner source removed. diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/SHA256SUMS b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/SHA256SUMS new file mode 100644 index 0000000..743428e --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/SHA256SUMS @@ -0,0 +1,5 @@ +96e7f11fc135783ecc3c7b854d310cccdc546bf7993b5d10babdf43f22dbfafa same-node-before.log +4fbcbdad40e3daed3f085c797fb7139b75a017ae57a3261b3cf9442e9aa229b9 same-node-before-02.log +fc6b2a3c90e025bc322fa74121392f3c92078ed5cde62661ec8ac9373bfaf8be same-node-after.log +a2be53b4723356077d5f754a3b85970df1f9f3c21e5eb04650234b86babe0698 same-node-consumers.log +5d0f2a4d551b807ea0d6a0efb12de76282cd0c2cc9bab839b964fd04f436bf8e same-node-parity.log diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/freeze-manifest.json b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/freeze-manifest.json new file mode 100644 index 0000000..245cc95 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/freeze-manifest.json @@ -0,0 +1,25 @@ +{ + "source_owner": "Schrodinger/Codex", + "integration_and_original_qualification_owner": "parent", + "draft_pr": "https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16", + "source_checkpoint": "19f21b6cb660826fa7c593af1d59101009b46019", + "predecessor_evidence_head": "c6ec13f8bf2b6c07b8fae8db8533fcd6fb5d6d2b", + "baseline": "673c062fc656e9c74f1eddcab30f036c9befbc1f", + "source_sha256": { + "nominal_refactor_advisor/ast_tools.py": "6eb222cdb5a262178c10166b50fe63a21382b5871a50234618b40cef0861f143", + "nominal_refactor_advisor/semantic_descent.py": "028189663e120322be8ccb730815b95acc0b731e4ea70db3ccde9c0ce5aa141f", + "tests/test_cooperative_semantic_preparation.py": "0516c686c26b058d8f394e1ba8ed591805237db3d4ecbe1ab4377cb28832adff" + }, + "immutable_consumer_sha256": "4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca", + "current_distinct_passing_cases": 47, + "new_cases": 7, + "same_node_bypass": "demonstrated downstream in C3, repaired; no observed installed regression claimed", + "source_limits": {"cpu": 1, "memory_mib": 512, "swap_mib": 0, "outer_seconds": 60}, + "peak_observed_kib": 105996, + "original_r0_r1_and_installed_acceptance": "pending parent qualification, untouched", + "global_85_detector_full": "unqualified", + "earlier_native_proof_failure_and_timeout": "retained unchanged, not requalified", + "science_native_installs_locks_providers_downloads": "none", + "owned_scratch": "/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001", + "cleanup": "only owned816KiB root removed after retained checksums, realpath, process and no-handle proof; all receipts retained" +} diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-after.log b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-after.log new file mode 100644 index 0000000..ea13875 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-after.log @@ -0,0 +1,67 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 36 items + +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[] PASSED [ 2%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\nisinstance = lambda *args: True\n] PASSED [ 5%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\ntype = lambda value: int\n] PASSED [ 8%] +tests/test_cooperative_semantic_preparation.py::test_compact_family_does_not_reenter_independent_check_collection PASSED [ 11%] +tests/test_cooperative_semantic_preparation.py::test_new_capability_is_only_a_declaration_and_cooperative_hook PASSED [ 13%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] PASSED [ 16%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] PASSED [ 19%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] PASSED [ 22%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] PASSED [ 25%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result = {'left': consume(value), 'right': 'name'}] PASSED [ 27%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result: dict = {'left': consume(value), 'right': 'name'}] PASSED [ 30%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[return {'left': consume(value), 'right': 'name'}] PASSED [ 33%] +tests/test_cooperative_semantic_preparation.py::test_exception_unwinds_both_capabilities_and_shared_owner PASSED [ 36%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 38%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result: dict = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 41%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[return {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 44%] +tests/test_cooperative_semantic_preparation.py::test_context_only_family_keeps_its_existing_no_checks_contract PASSED [ 47%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-False] PASSED [ 50%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-True] PASSED [ 52%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-False] PASSED [ 55%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-True] PASSED [ 58%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-False] PASSED [ 61%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-True] PASSED [ 63%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-False] PASSED [ 66%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-True] PASSED [ 69%] +tests/test_projection_shard_publication.py::test_list_collection_and_batch_share_the_same_publication PASSED [ 72%] +tests/test_projection_shard_publication.py::test_incomplete_publication_keeps_all_facts_in_memory PASSED [ 75%] +tests/test_raw_record_detectors.py::test_mapping_reads_match_schema_but_only_actual_decode_descends PASSED [ 77%] +tests/test_raw_record_detectors.py::test_unmodeled_shapes_aggregate_same_keys_and_ignore_small_dynamic_reads PASSED [ 80%] +tests/test_raw_record_detectors.py::test_redundant_checks_resolve_declared_self_parameters_and_keep_unknowns PASSED [ 83%] +tests/test_raw_record_detectors.py::test_detector_ids_are_derived_and_registered PASSED [ 86%] +tests/test_raw_record_detectors.py::test_cross_module_schema_and_annotated_owner_use_complete_context PASSED [ 88%] +tests/test_source_projection_owner.py::test_source_projection_retains_actual_parsed_owner_without_compact_ast_debt PASSED [ 91%] +tests/test_source_projection_owner.py::test_another_revision_reusing_ast_cannot_relabel_existing_source_observations PASSED [ 94%] +tests/test_source_projection_owner.py::test_reparsed_source_owns_distinct_canonical_read_nodes PASSED [ 97%] +tests/test_source_projection_owner.py::test_pickle_preserves_shared_module_node_identity_inside_source_projection PASSED [100%] + +============================== 36 passed in 3.62s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-after","tests/test_cooperative_semantic_preparation.py","tests/test_projection_shard_publication.py","tests/test_raw_record_detectors.py","tests/test_source_projection_owner.py"]))" + User time (seconds): 5.38 + System time (seconds): 0.61 + Percent of CPU this job got: 94% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:06.33 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 90072 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 102685 + Voluntary context switches: 60 + Involuntary context switches: 1078 + Swaps: 0 + File system inputs: 696 + File system outputs: 400 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before-02.log b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before-02.log new file mode 100644 index 0000000..be70460 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before-02.log @@ -0,0 +1,140 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 14 items / 10 deselected / 4 selected + +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] PASSED [ 25%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] FAILED [ 50%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] PASSED [ 75%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] FAILED [100%] + +=================================== FAILURES =================================== +_ test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before-02/test_same_node_capability_comp1') +visitor_type = +include_presentations = True + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) + visitor = visitor_type(module, include_presentations=include_presentations) + visitor.visit(module.module) + target = module.module.body[0].body[0] + nested = target.body[4] +> assert visitor.statements == Counter( + { + ("Example.target", id(node)): 1 + for node in (*target.body[:4], target.body[-1]) + } + ) + Counter({("Example.target.nested", id(node)): 1 for node in nested.body}) +E AssertionError: assert Counter() == Counter({('Ex...27238416): 1}) +E +E Right contains 7 more items: +E {('Example.target', 140050927238288): 1, +E ('Example.target', 140050927389264): 1, +E ('Example.target', 140050927391632): 1, +E ('Example.target', 140050927400080): 1, +E ('Example.target', 140050927401296): 1,... +E +E ...Full output truncated (16 lines hidden), use '-vv' to show + +tests/test_cooperative_semantic_preparation.py:188: AssertionError +_ test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before-02/test_same_node_capability_comp3') +visitor_type = +include_presentations = False + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) + visitor = visitor_type(module, include_presentations=include_presentations) + visitor.visit(module.module) + target = module.module.body[0].body[0] + nested = target.body[4] +> assert visitor.statements == Counter( + { + ("Example.target", id(node)): 1 + for node in (*target.body[:4], target.body[-1]) + } + ) + Counter({("Example.target.nested", id(node)): 1 for node in nested.body}) +E AssertionError: assert Counter() == Counter({('Ex...27153936): 1}) +E +E Right contains 7 more items: +E {('Example.target', 140050927146128): 1, +E ('Example.target', 140050927150416): 1, +E ('Example.target', 140050927153296): 1, +E ('Example.target', 140050927155408): 1, +E ('Example.target', 140050927155792): 1,... +E +E ...Full output truncated (16 lines hidden), use '-vv' to show + +tests/test_cooperative_semantic_preparation.py:188: AssertionError +=========================== short test summary info ============================ +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] +================== 2 failed, 2 passed, 10 deselected in 0.19s ================== +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before-02","tests/test_cooperative_semantic_preparation.py","-k","same_node"]))" + User time (seconds): 2.61 + System time (seconds): 0.13 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.77 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 86036 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 24771 + Voluntary context switches: 26 + Involuntary context switches: 442 + Swaps: 0 + File system inputs: 0 + File system outputs: 24 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before.log b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before.log new file mode 100644 index 0000000..f059cb8 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-before.log @@ -0,0 +1,206 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 14 items / 10 deselected / 4 selected + +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] FAILED [ 25%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] FAILED [ 50%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] FAILED [ 75%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] FAILED [100%] + +=================================== FAILURES =================================== +_ test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before/test_same_node_capability_comp0') +visitor_type = +include_presentations = True + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) +> visitor = visitor_type(module, include_presentations=include_presentations) +E TypeError: StatementCensus.__init__() got an unexpected keyword argument 'include_presentations' + +tests/test_cooperative_semantic_preparation.py:184: TypeError +_ test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before/test_same_node_capability_comp1') +visitor_type = +include_presentations = True + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) + visitor = visitor_type(module, include_presentations=include_presentations) + visitor.visit(module.module) + target = module.module.body[0].body[0] + nested = target.body[4] +> assert visitor.statements == Counter( + { + ("Example.target", id(node)): 1 + for node in (*target.body[:4], target.body[-1]) + } + ) + Counter({("Example.target.nested", id(node)): 1 for node in nested.body}) +E AssertionError: assert Counter() == Counter({('Ex...02591696): 1}) +E +E Right contains 7 more items: +E {('Example.target', 139861302593936): 1, +E ('Example.target', 139861302595344): 1, +E ('Example.target', 139861302597264): 1, +E ('Example.target', 139861302602256): 1, +E ('Example.target', 139861302602960): 1,... +E +E ...Full output truncated (16 lines hidden), use '-vv' to show + +tests/test_cooperative_semantic_preparation.py:188: AssertionError +_ test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before/test_same_node_capability_comp2') +visitor_type = +include_presentations = False + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) +> visitor = visitor_type(module, include_presentations=include_presentations) +E TypeError: StatementCensus.__init__() got an unexpected keyword argument 'include_presentations' + +tests/test_cooperative_semantic_preparation.py:184: TypeError +_ test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before/test_same_node_capability_comp3') +visitor_type = +include_presentations = False + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + @pytest.mark.parametrize("include_presentations", (True, False)) + def test_same_node_capability_composes_in_both_mro_orders( + tmp_path, visitor_type, include_presentations + ): + source = """\ + class Example: + def target(self, value: Value): + projected = {'left': isinstance(value.count, int), 'right': 'name'} + annotated: dict = {'left': isinstance(value.count, int), 'right': 'name'} + plain = consume(value) + uninitialized: int + def nested(): + local = consume(value) + return + return {'left': isinstance(value.count, int), 'right': 'name'} + """ + module = SourceModule(tmp_path / "case.py", "case", source).parse() + independent = _ProjectionVisitor( + module, include_presentations=include_presentations + ) + independent.visit(module.module) + visitor = visitor_type(module, include_presentations=include_presentations) + visitor.visit(module.module) + target = module.module.body[0].body[0] + nested = target.body[4] +> assert visitor.statements == Counter( + { + ("Example.target", id(node)): 1 + for node in (*target.body[:4], target.body[-1]) + } + ) + Counter({("Example.target.nested", id(node)): 1 for node in nested.body}) +E AssertionError: assert Counter() == Counter({('Ex...02508176): 1}) +E +E Right contains 7 more items: +E {('Example.target', 139861302496656): 1, +E ('Example.target', 139861302497296): 1, +E ('Example.target', 139861302503376): 1, +E ('Example.target', 139861302506896): 1, +E ('Example.target', 139861302506960): 1,... +E +E ...Full output truncated (16 lines hidden), use '-vv' to show + +tests/test_cooperative_semantic_preparation.py:188: AssertionError +=========================== short test summary info ============================ +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] +FAILED tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] +======================= 4 failed, 10 deselected in 0.19s ======================= +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-before","tests/test_cooperative_semantic_preparation.py","-k","same_node"]))" + User time (seconds): 2.59 + System time (seconds): 0.11 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.72 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 86036 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 2 + Minor (reclaiming a frame) page faults: 25575 + Voluntary context switches: 30 + Involuntary context switches: 434 + Swaps: 0 + File system inputs: 280 + File system outputs: 32 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-consumers.log b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-consumers.log new file mode 100644 index 0000000..f1790e3 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-consumers.log @@ -0,0 +1,42 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 11 items + +tests/test_deferred_projection_family.py::test_complete_content_signature_does_not_require_loading_all_graphs PASSED [ 9%] +tests/test_deferred_projection_family.py::test_missing_signature_requires_complete_original_content_evidence PASSED [ 18%] +tests/test_deferred_projection_family.py::test_materialized_public_api_retains_its_tuple_contract PASSED [ 27%] +tests/test_deferred_projection_family.py::test_count_derives_unique_source_materializations_without_rescanning_batches PASSED [ 36%] +tests/test_deferred_projection_family.py::test_corrupt_cache_repairs_only_the_requested_original_source PASSED [ 45%] +tests/test_deferred_projection_family.py::test_repair_rejects_a_changed_source_and_can_retry_the_original PASSED [ 54%] +tests/test_deferred_projection_family.py::test_global_lookup_still_reads_later_ambiguous_modules PASSED [ 63%] +tests/test_deferred_projection_family.py::test_eligibility_short_circuit_does_not_truncate_later_queries PASSED [ 72%] +tests/test_semantic_descent.py::test_construction_authority_materialization_indexes_each_method_once PASSED [ 81%] +tests/test_semantic_descent.py::test_semantic_descent_graph_flags_returned_declaration_table PASSED [ 90%] +tests/test_semantic_descent.py::test_semantic_descent_ignores_function_local_variable_tuple_projection PASSED [100%] + +============================== 11 passed in 4.00s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-same-node-357-20261001/pytest-consumers","tests/test_deferred_projection_family.py","tests/test_semantic_descent.py::test_construction_authority_materialization_indexes_each_method_once","tests/test_semantic_descent.py::test_semantic_descent_graph_flags_returned_declaration_table","tests/test_semantic_descent.py::test_semantic_descent_ignores_function_local_variable_tuple_projection"]))" + User time (seconds): 5.92 + System time (seconds): 0.54 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:06.57 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 105996 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 91982 + Voluntary context switches: 32 + Involuntary context switches: 1085 + Swaps: 0 + File system inputs: 0 + File system outputs: 648 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-parity.log b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-parity.log new file mode 100644 index 0000000..31e56d0 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/same-node-followthrough/same-node-parity.log @@ -0,0 +1,27 @@ +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "raw_sha256": "7a30d8cb97412abfbd6a113368712e4f56a71897cc1858d1b4c640ebeca019a1", "content_signature": "79730eaec7c75ee228c3c8b816d8fa82", "collection_seconds": 0.20762656698934734, "presentations": 116, "checks": 10, "supplements": 138} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py", "raw_sha256": "245f8e47ebc4456c67db8d180efa223362af292d73e7facb62264b7ae5f53a9f", "content_signature": "828ab748be59018c6d14f0bd7916d311", "collection_seconds": 0.2527896009851247, "presentations": 215, "checks": 19, "supplements": 88} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "raw_sha256": "ca795d41eac570fab9eb81d94f71cce01f21529a2ab3c143519328654104b1e1", "content_signature": "cd23388afcd0c8035e3dc3e9b23eadcf", "collection_seconds": 0.13979970797663555, "presentations": 119, "checks": 6, "supplements": 62} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "raw_sha256": "2a31a0a132ac3ca611a1c53daa575b8fa471cf6a53f0d88738a926d14a194eaf", "content_signature": "8d5920e4ec4c134932598f5a54ae1d72", "collection_seconds": 0.01071797899203375, "presentations": 8, "checks": 1, "supplements": 4} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/check_semantic_preparation_parity.py --advisor-root /home/ts/wt/nra-r1-preparation-owner-357-20261001 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py" + User time (seconds): 3.39 + System time (seconds): 0.08 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.51 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85300 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 24728 + Voluntary context switches: 27 + Involuntary context switches: 586 + Swaps: 0 + File system inputs: 0 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 From ff192cf70d6cd15f3a3e0e60f7ce5e3d8c0ac3e0 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 11:52:41 -0400 Subject: [PATCH 10/12] Retain failed full-context R1 and bounded publication owner profile --- .../r1_preparation_owner_357_20261001.md | 12 ++ .../INDEX.md | 5 + .../publication-profile/README.md | 116 +++++++++++++ .../publication-profile/SHA256SUMS | 6 + .../publication-profile/freeze-manifest.json | 30 ++++ .../parent-full-context.command.json | 13 ++ .../parent-full-context.log | 53 ++++++ .../predecessor-callers.log | 46 ++++++ .../predecessor-publication.log | 156 ++++++++++++++++++ .../predecessor-publication.pstats | Bin 0 -> 243938 bytes .../preparation-callers.log | 73 ++++++++ 11 files changed, 510 insertions(+) create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/README.md create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/SHA256SUMS create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/freeze-manifest.json create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.command.json create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-callers.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.pstats create mode 100644 docs/validation/r1_preparation_owner_357_20261001/publication-profile/preparation-callers.log diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md index 678d589..6e4dc14 100644 --- a/docs/plans/r1_preparation_owner_357_20261001.md +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -146,3 +146,15 @@ and its separate freeze manifest retain both failing experiments, 47 distinct passing current source cases (7 new), unchanged original component signatures, resource bounds and cleanup. Original failure evidence remains unchanged; parent's installed run and full qualification remain untouched. + +## Original full-context failure and bounded publication profile + +Parent's exact original18910a5 qualification is terminal ScanDeadlineExceeded160s, +exit1/164.42s/187.41MiB, not a pass. The latest [publication/preparation receipt](../validation/r1_preparation_owner_357_20261001/publication-profile/README.md) +retains that witness and one bounded45CPU profile inside the unchanged60s source +envelope. AST retention consumed2.752/45.582s sampled work, not demonstrated +overall dominance. Source remains19f21b6. A concrete unresolved IMPL-12/13 +duplication is recorded: the two composed function capabilities independently +rescan the same lexical body bindings (4393 calls each). It requires source-scope +owner reuse with lifecycle/proof behavior, not another cache authority or guard +waiver. This profile/review checkpoint adds no production fix or new test pass. diff --git a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md index f596271..0033524 100644 --- a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md +++ b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md @@ -1,5 +1,10 @@ # Source checkpoint and retained evidence +Latest terminal qualification/profile: +[publication/preparation cost and unresolved ownership](publication-profile/README.md). +Original full-context18910a5 R1 FAILED at160s; no production changes in this +diagnostic checkpoint. Historical pending statuses below are not current success. + Current authorized follow-through: [same-node cooperative receipt](same-node-followthrough/README.md), source19f21b6. The original checkpoint/results below remain historical evidence, not overwritten diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/README.md b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/README.md new file mode 100644 index 0000000..533bab1 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/README.md @@ -0,0 +1,116 @@ +# Publication/preparation profile after the original R1 failure + +Source owner Schrodinger/Codex; parent retains integration and complete +qualification. Same [PR16](https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16), +reviewed evidence head18910a5, production checkpoint19f21b6. Production source, +test declarations and the original consumer are **unchanged by this checkpoint**. + +## Original full qualification is terminal, not a pass + +Parent's exact791650087 ->3d58912 case, immutable4c6282f5 consumer, +all3roots/eightexactdeps, inner160/outer165, CPU0/512MiB reached native +`ScanDeadlineExceeded` at160s. Receipt: exit1,164.42s,187.41MiB. The stack was +`CompactFamilyProjectionBatch.__post_init__` -> accumulator `_retains_ast` -> +the original `retains_python_ast`. This is a failure before the base scan +returned, not installed NRA/globalFULL qualification. + +The log and command JSON copied here retain exact bytes and SHA256 of the +parent's immutable originals under +`/home/ts/wt/openhcs-issue-batch-20260929/producer-installed-20261001/`: +`r1-357-newcase-parent-original-context-20261001.{log,command.json}`. +No original run, script, archive or parent scratch address was reused/changed. + +## One bounded useful profile, not another complete attempt + +Used the existing `tools/profile_r1_preparation.py` and original consumer with +the unchanged revisions/context/inner160 budget. A new owned root and SIGPROF45 +CPU diagnostic stop remain inside the fixed outer60s/oneCPU/512MiB source bounds. +This is not an increased original deadline. Interpreter remains the read-only +frozen installed Python3.12.3, `-I -B`; systemd scope MemoryMax512M/no swap, +CPUQuota100%, tasksetCPU0, thread pools1, original Git packed-window/limit8m/128m. +All exact command arguments appear in the retained log. No narrower scan, cached +continuation, context pruning, detector copy or provider/native/UI/science run. + +Profile: intentional INCOMPLETE exit75,48.37s wall,122540KiB RSS (119.67MiB), +96,830,231 calls /45.582s instrumented work. It stops in AST line-number +canonicalization before the first base scan result. 33 parse calls,64 family +collection calls and54 runtime-batch construction calls are **invocation counts**, +not a certificate of distinct/complete modules or full-context coverage. + +| Original owner/function | Calls | Inclusive profile seconds | +| --- | ---: | ---: | +| build_compact_projection_shard | 28 | 31.900 | +| collect_family_batch | 64 | 27.193 | +| compact class family collection | 32 | 12.589 | +| compact semantic family collection | 32 | 9.947 | +| _parse_source_module | 33 | 7.361 | +| _compact_class_syntax_facets | 32 | 7.239 | +| ModuleSyntaxIndex.build | 32 | 5.654 | +| cache store_items | 64 | 4.147 | +| retains_python_ast | 118 roots /731740 total | 2.752 | +| runtime batch __post_init__ | 54 | 1.240 | + +These times include children and overlap; they must not be added. AST retention +is6.04% of this partial sample, not demonstrated to dominate the complete run. +Caller attribution is64 cache-admission roots/1.515s and54 batch-admission +roots/1.237s. A deadline landing inside one guard does not establish its overall +cost. No guard is weakened, bypassed or memoized on that observation. + +## Concrete ownership review and unresolved duplication + +Reviewed the actual combined production diff against authoritative current +refactor-audit catalogue (IMPL-4/12/13, IMPL-1/2/3/5, MEMB-1/2, IDEN-5, +TIME-1/3). Shared traversal still belongs to ClassFunctionStackNodeVisitor; +source context belongs to ParsedModuleClassFunctionStackNodeVisitor. Independent +presentation/check algorithms remain on their existing capabilities, composing +through real C3 and matching `super().visit_*` hooks. Projection suppression is +owned by that capability and does not perform traversal. The replaced bypassing +helper and second full check walk remain deleted. No new consumer switch, +registry, duplicate procedure, cache authority or compatibility path appears. + +Retained same-node evidence remains applicable because production hashes are +unchanged: StatementCensus supplies only declarations/hooks, before/after +composition observes each assignment/annotated assignment/return and call once, +both presentation modes pass, and downstream controlled exceptions unwind scope +and suppression. Seven new cases are included in the earlier47 distinct current +source passes. This receipt does not pretend to have rerun that suite. + +The profile and source reveal a **specific unresolved IMPL-12/13 preparation +duplication**: within the composed function event, declared-check prelude and +presentation postlude independently call the existing lexical binding authority +on the same `node.body`. The caller trace reports4393 calls/1.026s from +DeclaredAttributeCheckCollector.visit_FunctionDef and4393 calls/1.040s from +_ProjectionVisitor.visit_FunctionDef. Class syntax facets also request function +bindings (4425 body/module calls/1.069s). The algorithm itself already belongs +to LexicalScopeBindingAuthority; its determining function scope is not yet shared +by the preparation consumers. This is separate from successful same-node hook +delivery and is not hidden by it. + +Next owner-level source work is to share that exact lexical determining answer +through the existing function/source-scope owners, with prelude/postlude lifetime, +shadowing, nested scope and exception behavior demonstrated. It must not add a +parallel binding store/roster, cross-boundary AST-free verdict cache, new type +taxonomy or copied collector. This diagnostic checkpoint does not implement or +certify that migration. ModuleSyntaxIndex's one traversal is measured too; it is +not claimed to be duplicated merely because its cost is large. + +## Bounds, remaining limits and cleanup + +Admission helper reported RAM20.9GiB/home8.2GiB/swap11.0GiB; advisory warning, +not a passed helper or hard-limit breach. Only serial bounded source processes +were started. Caller/callee reports read the original cProfile artifact with +stdlib pstats under the same resource envelope; no algorithm/detector was copied. +No production edit or new behavioral/throughput pass is claimed. Original +R1 remains FAILED; original R0/installed acceptance/global85detector/FULL are not +qualified by this work. Parent's serial lock/native slot are untouched. + +Owned disposable root: +`/home/ts/.cache/agent-scratch/nra-r1-publication-357-20261001` (288KiB). +All logs/profile/parent witness copies are retained here with SHA256SUMS. +Cleanup complete: all six retained checksums passed; exact-root `lsof +D` +returned1/no handles; scoped process search found no remaining worker. `realpath` +matched the explicit owned address. Removed only that288KiB root with `rm -r --` +and verified absence. Disposable staging/cache artifacts are removed permanently; +all diagnostic logs/profile/recipes and parent witness copies are retained here. +All tool PTY sessions terminal. No parent scratch, original archive, frozen input, +baseline, installed package or other owner's source was removed. diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/SHA256SUMS b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/SHA256SUMS new file mode 100644 index 0000000..0316e62 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/SHA256SUMS @@ -0,0 +1,6 @@ +3d04d8640ba4cf3bbe48de75eed7d9cb36a588e804f53912d14cba824a009ae6 predecessor-publication.log +8ea33448ea8b63755f82491a58725afcda3acf61d874187e3065668f4675b5a9 predecessor-publication.pstats +2306c1c2f8f393d2cf9be92d4c463a5a6a63c4eb365d1b278df6b60ad8735517 predecessor-callers.log +96040bdb97346870310f8aa5d70293edbc235100a837f6c62186ddc1a0769def preparation-callers.log +4c8674bb8dee62b1677f467e199da50a0fed9391563dadae11bbce9e9298487e parent-full-context.log +f93ac35cf540c2c7651dfe8f98ef371ea858f3ff41f66ba32adaeb6a911dfdd3 parent-full-context.command.json diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/freeze-manifest.json b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/freeze-manifest.json new file mode 100644 index 0000000..f15a476 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/freeze-manifest.json @@ -0,0 +1,30 @@ +{ + "source_owner": "Schrodinger/Codex", + "integration_and_complete_qualification_owner": "parent", + "draft_pr": "https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16", + "reviewed_evidence_head": "18910a5aea638e0c2dcd7a574c40a498bcbf3aea", + "production_checkpoint_unchanged": "19f21b6cb660826fa7c593af1d59101009b46019", + "source_sha256": { + "nominal_refactor_advisor/ast_tools.py": "6eb222cdb5a262178c10166b50fe63a21382b5871a50234618b40cef0861f143", + "nominal_refactor_advisor/record_checks.py": "4b77a6fc7af2eaff8d81e5a7e764b8f3db0fd6b4a7af687c4bb8c7831512fd53", + "nominal_refactor_advisor/semantic_descent.py": "028189663e120322be8ccb730815b95acc0b731e4ea70db3ccde9c0ce5aa141f", + "nominal_refactor_advisor/analysis.py": "9df4ad1ea64bae4b88a4d911e6355630c82826ff2a54c96d720fa6171d92cfbd" + }, + "immutable_consumer_sha256": "4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca", + "base_revision": "791650087e01c9d25766f12802a37296851f37cf", + "head_revision": "3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4", + "original_context_roots": 3, + "original_recursive_dependencies": 8, + "source_limits": {"cpu": 1, "memory_mib": 512, "swap_mib": 0, "outer_seconds": 60}, + "diagnostic_cpu_stop_seconds": 45, + "diagnostic_status": "INCOMPLETE exit75; not complete R1 or throughput evidence", + "diagnostic_wall_seconds": 48.37, + "diagnostic_peak_kib": 122540, + "original_parent_r1_status": "FAILED ScanDeadlineExceeded160s; exit1,164.42s,187.41MiB", + "original_r0_installed_global_full": "not qualified by this checkpoint", + "behavioral_evidence": "earlier47 source cases retained and applicable; not rerun here", + "unresolved_ownership": "two composed function capabilities rescan same lexical body bindings", + "science_native_installs_locks_providers_downloads": "none", + "owned_scratch": "/home/ts/.cache/agent-scratch/nra-r1-publication-357-20261001", + "cleanup": "only owned288KiB root removed after checksum/no-handle/process/realpath proof; retained evidence intact" +} diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.command.json b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.command.json new file mode 100644 index 0000000..fdf578c --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.command.json @@ -0,0 +1,13 @@ +{ + "command": [ + "/usr/bin/taskset", + "-c", + "0", + "/bin/bash", + "/home/ts/wt/openhcs-issue-batch-20260929/r1-357-newcase-parent-20261001/run-full-case.sh" + ], + "exit": 1, + "limit": null, + "peak_rss_mib": 187.41, + "seconds": 164.42 +} diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.log b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.log new file mode 100644 index 0000000..29f46d6 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/parent-full-context.log @@ -0,0 +1,53 @@ +Traceback (most recent call last): + File "", line 1, in + File "", line 286, in run_path + File "", line 98, in _run_module_code + File "", line 88, in _run_code + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 338, in + raise SystemExit(main()) + ^^^^^^ + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 326, in main + result = compare( + ^^^^^^^^ + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 310, in compare + scan_counts(snapshot, roots, changed, cache_root=work / "nra") + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 183, in scan_counts + result = analyze_compact_roots_with_cache( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + ^^^^^^^^^^^^^^^^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 2292, in analyze_compact_roots_with_cache + build_results = worker_plan.map( + ^^^^^^^^^^^^^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 288, in map + return [function(item) for item in items] + ^^^^^^^^^^^^^^ + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + ^^^^^^^^^^^^^^^^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1283, in build_compact_projection_shard + add_runtime_projection(family, projections, projection_signature) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1116, in add_runtime_projection + CompactFamilyProjectionBatch( + File "", line 6, in __init__ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1078, in __post_init__ + if any( + ^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1079, in + CompactGlobalProjectionAccumulator._retains_ast(item) for item in self.items + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 798, in _retains_ast + return retains_python_ast(value, seen_ids) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1122, in retains_python_ast + return any( + ^^^^ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1123, in + retains_python_ast(getattr(value, item.name), seen) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 1106, in retains_python_ast + def retains_python_ast( + + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/deadline.py", line 91, in deadline_handler + raise error +nominal_refactor_advisor.deadline.ScanDeadlineExceeded: scan deadline exceeded during parse_python_module: 160.000s/160.000s diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-callers.log b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-callers.log new file mode 100644 index 0000000..e875c94 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-callers.log @@ -0,0 +1,46 @@ +Thu Oct 1 11:34:54 2026 /home/ts/.cache/agent-scratch/nra-r1-publication-357-20261001/predecessor-publication.pstats + + 96830231 function calls (89480929 primitive calls) in 45.582 seconds + + Ordered by: cumulative time + List reduced from 1606 to 10 due to restriction <'__post_init__|add_runtime_projection|retains_python_ast|collect_family_batch|store_items'> + + ncalls tottime percall cumtime percall filename:lineno(function) + 64 0.002 0.000 27.193 0.425 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2285(collect_family_batch) + 64 0.004 0.000 4.147 0.065 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2171(store_items) +731740/118 0.778 0.000 2.752 0.023 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) + 54 0.000 0.000 1.240 0.023 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1110(add_runtime_projection) + 54 0.000 0.000 1.240 0.023 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1077(__post_init__) + 7506 0.005 0.000 0.010 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:454(__post_init__) + 2791 0.003 0.000 0.007 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/models.py:217(__post_init__) + 1313 0.002 0.000 0.003 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:2815(__post_init__) + 1 0.000 0.000 0.001 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:134(__post_init__) + 5 0.000 0.000 0.000 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:2670(__post_init__) + + + Ordered by: cumulative time + List reduced from 1606 to 1 due to restriction <'retains_python_ast'> + +Function was called by... + ncalls tottime cumtime +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) <- 54 0.000 1.237 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:791(_retains_ast) + 378664/1357 0.373 2.747 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1122() + 17122 0.026 0.208 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1127() + 335836/24862 0.379 2.668 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1131() + 64 0.000 1.515 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2171(store_items) + + + Ordered by: cumulative time + List reduced from 1606 to 1 due to restriction <'retains_python_ast'> + +Function called... + ncalls tottime cumtime +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) -> 71838 0.140 0.219 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/dataclasses.py:1271(fields) + 166754 0.075 0.127 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/dataclasses.py:1294(is_dataclass) + 166754/118 0.163 2.750 {built-in method builtins.any} + 255818 0.040 0.040 {built-in method builtins.id} + 1725091 0.533 0.948 {built-in method builtins.isinstance} + 166754 0.048 0.048 {method 'add' of 'set' objects} + 59 0.000 0.000 {method 'items' of 'dict' objects} + + diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.log b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.log new file mode 100644 index 0000000..76d8f49 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.log @@ -0,0 +1,156 @@ + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py", line 65, in + raise SystemExit(main()) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py", line 49, in main + runpy.run_path(str(args.consumer), run_name="__main__") + File "", line 286, in run_path + File "", line 98, in _run_module_code + File "", line 88, in _run_code + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 338, in + raise SystemExit(main()) + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 326, in main + result = compare( + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 310, in compare + scan_counts(snapshot, roots, changed, cache_root=work / "nra") + File "/home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py", line 183, in scan_counts + result = analyze_compact_roots_with_cache( + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 2292, in analyze_compact_roots_with_cache + build_results = worker_plan.map( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 288, in map + return [function(item) for item in items] + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py", line 81, in inner + return func(*args, **kwds) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1237, in build_compact_projection_shard + modules = (source.parsed_module(),) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py", line 1013, in parsed_module + module = parser.parsed_source_path( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 2704, in parsed_source_path + return _parse_source_module( + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 692, in _parse_source_module + _canonicalize_ast_line_numbers(module, context._line_numbers_by_value) + File "/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py", line 714, in _canonicalize_ast_line_numbers + for node in ast.walk(module): + File "/home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py", line 379, in walk + todo.extend(iter_child_nodes(node)) +INCOMPLETE: diagnostic CPU profiling bound reached + 96830231 function calls (89480929 primitive calls) in 45.582 seconds + + Ordered by: cumulative time + List reduced from 1606 to 50 due to restriction <50> + + ncalls tottime percall cumtime percall filename:lineno(function) + 1 0.000 0.000 45.940 45.940 :262(run_path) + 1 0.000 0.000 45.938 45.938 :91(_run_module_code) + 1 0.000 0.000 45.938 45.938 :65(_run_code) + 44/1 0.003 0.000 45.938 45.938 {built-in method builtins.exec} + 1 0.000 0.000 45.938 45.938 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:1() + 1 0.000 0.000 45.930 45.930 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:319(main) + 1 0.001 0.001 45.930 45.930 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:277(compare) + 1 0.000 0.000 44.055 44.055 /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py:169(scan_counts) + 29/1 0.097 0.003 44.053 44.053 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/contextlib.py:78(inner) + 1 0.041 0.041 44.051 44.051 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1836(analyze_compact_roots_with_cache) + 1 0.000 0.000 31.998 31.998 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:281(map) + 28 0.006 0.000 31.900 1.139 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1100(build_compact_projection_shard) + 64 0.002 0.000 27.193 0.425 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2285(collect_family_batch) + 32 0.000 0.000 12.589 0.393 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3903(collect) + 32 0.010 0.000 12.589 0.393 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3981(_collect) +1965599/55258 1.361 0.000 11.897 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) +1554965/39510 2.143 0.000 11.262 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) + 32 0.000 0.000 9.947 0.311 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4327(collect) + 32 0.000 0.000 9.947 0.311 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4347(_collect) +4393/4261 0.075 0.000 8.982 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4853(visit_FunctionDef) +5693/2000 0.002 0.000 8.127 0.004 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1544(traverse_node_body) + 33 0.002 0.000 7.361 0.223 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:657(_parse_source_module) + 32 0.154 0.005 7.239 0.226 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5321(_compact_class_syntax_facets) +1300/1291 0.011 0.000 6.763 0.005 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4822(visit_ClassDef) +1300/1291 0.002 0.000 6.626 0.005 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1557(visit_ClassDef) + 28 0.000 0.000 6.537 0.233 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:1003(parsed_module) + 28 0.000 0.000 6.528 0.233 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2694(parsed_source_path) +4393/4261 0.035 0.000 5.688 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/record_checks.py:67(visit_FunctionDef) + 32 0.001 0.000 5.655 0.177 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:3038(module_syntax_index) + 32 2.700 0.084 5.654 0.177 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2961(build) + 1503675 1.061 0.000 5.262 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) +307315/140624 0.305 0.000 5.232 0.000 {built-in method builtins.any} +4393/4261 0.007 0.000 4.589 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1565(visit_FunctionDef) + 3886948 2.069 0.000 4.495 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:269(iter_child_nodes) + 23205894 3.792 0.000 4.206 0.000 {built-in method builtins.isinstance} + 64 0.004 0.000 4.147 0.065 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2171(store_items) + 1451617 0.648 0.000 3.882 0.000 {method 'extend' of 'collections.deque' objects} + 10 0.000 0.000 3.748 0.375 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2310(collect_family_items) + 16254 0.044 0.000 3.625 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:608(bound_names) + 33 1.645 0.050 3.602 0.109 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:476(semantic_python_source_hash) +67524/33958 0.081 0.000 3.574 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/scan_cache.py:41(invoke) + 9354091 2.161 0.000 3.056 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:257(iter_fields) + 2 0.001 0.000 3.013 1.507 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis.py:2923(cache_identity) + 2 0.001 0.000 3.012 1.506 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/analysis_cache.py:824(from_source_paths) +731740/118 0.778 0.000 2.752 0.023 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) +450502/1475 0.208 0.000 2.749 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1122() +430693/25323 0.145 0.000 2.678 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1131() + 33 0.451 0.014 2.543 0.077 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:708(_canonicalize_ast_line_numbers) + 32 0.001 0.000 2.494 0.078 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3629(_compact_indexed_classes) + 19186 0.033 0.000 2.415 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:1228(resolve) + + + 96830231 function calls (89480929 primitive calls) in 45.582 seconds + + Ordered by: internal time + List reduced from 1606 to 30 due to restriction <30> + + ncalls tottime percall cumtime percall filename:lineno(function) + 23205894 3.792 0.000 4.206 0.000 {built-in method builtins.isinstance} + 32 2.700 0.084 5.654 0.177 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2961(build) + 9354091 2.161 0.000 3.056 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:257(iter_fields) +1554965/39510 2.143 0.000 11.262 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:409(generic_visit) + 3886948 2.069 0.000 4.495 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:269(iter_child_nodes) +9649702/9647522 2.050 0.000 2.055 0.000 {built-in method builtins.getattr} + 33 1.645 0.050 3.602 0.109 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:476(semantic_python_source_hash) +1965599/55258 1.361 0.000 11.897 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) + 1503675 1.061 0.000 5.262 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:369(walk) +445202/64 0.947 0.000 2.300 0.036 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1950(_stable_collected_family_cache_value) +731740/118 0.778 0.000 2.752 0.023 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:1106(retains_python_ast) + 638868 0.703 0.000 1.145 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/tokenize.py:569(_generate_tokens_from_c_tokenizer) + 261111 0.668 0.000 0.668 0.000 {built-in method posix.lstat} + 3131 0.657 0.000 0.657 0.000 {built-in method builtins.compile} + 1451617 0.648 0.000 3.882 0.000 {method 'extend' of 'collections.deque' objects} +23508/21233 0.640 0.000 0.666 0.000 {method 'read' of '_io.BufferedReader' objects} +3948390/3663530 0.541 0.000 0.590 0.000 {built-in method builtins.len} + 34 0.465 0.014 0.465 0.014 {built-in method _pickle.dump} + 288445 0.463 0.000 0.812 0.000 :71(join) + 33 0.451 0.014 2.543 0.077 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:708(_canonicalize_ast_line_numbers) +764177/745279 0.430 0.000 0.782 0.000 {method 'extend' of 'list' objects} + 22256 0.399 0.000 1.919 0.000 :440(_joinrealpath) + 64667 0.393 0.000 0.697 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/pathlib.py:387(_parse_path) +373015/19272 0.384 0.000 1.870 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4628(visit) + 1723634 0.374 0.000 0.374 0.000 {method 'append' of 'list' objects} + 1476792 0.358 0.000 0.358 0.000 {method 'append' of 'array.array' objects} +253077/98 0.320 0.000 1.252 0.013 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/implementation_identity.py:98(_visit) +307315/140624 0.305 0.000 5.232 0.000 {built-in method builtins.any} + 1360313 0.299 0.000 0.301 0.000 {method 'get' of 'dict' objects} + 1156672 0.299 0.000 0.299 0.000 {method 'update' of '_blake2.blake2s' objects} + + +Command exited with non-zero status 75 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B /home/ts/wt/nra-r1-preparation-owner-357-20261001/tools/profile_r1_preparation.py --consumer /home/ts/wt/openhcs-r1-revision-staging-357-20261001/scripts/check_refactor_r1.py --profile /home/ts/.cache/agent-scratch/nra-r1-publication-357-20261001/predecessor-publication.pstats --cpu-seconds 45 -- --base 791650087e01c9d25766f12802a37296851f37cf --head 3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4 --scratch-root /home/ts/.cache/agent-scratch/nra-r1-publication-357-20261001/original-context --budget-seconds 160" + User time (seconds): 47.06 + System time (seconds): 1.02 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:48.37 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 122540 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 3 + Minor (reclaiming a frame) page faults: 65566 + Voluntary context switches: 25122 + Involuntary context switches: 24879 + Swaps: 0 + File system inputs: 520 + File system outputs: 98480 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 75 diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.pstats b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/predecessor-publication.pstats new file mode 100644 index 0000000000000000000000000000000000000000..1b392035ab9b4faf1d33cf83f1ac5dfbd08e01e4 GIT binary patch literal 243938 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
  • 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%0D*kzyTyRS1E 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 OW~L;Vm)8i!-TnU@vAyE} literal 0 HcmV?d00001 diff --git a/docs/validation/r1_preparation_owner_357_20261001/publication-profile/preparation-callers.log b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/preparation-callers.log new file mode 100644 index 0000000..7be1ef9 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/publication-profile/preparation-callers.log @@ -0,0 +1,73 @@ + Ordered by: cumulative time + List reduced from 1606 to 5 due to restriction <'_compact_class_syntax_facets|semantic_descent.py.*visit_FunctionDef|module_syntax_index|lexical_bindings.py.*bound_names'> + +Function called... + ncalls tottime cumtime +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4853(visit_FunctionDef) -> 2182 0.016 0.036 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/dataclasses.py:1533(replace) + 2457 0.001 0.008 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/collection_algebra.py:211(sorted_tuple) + 4393 0.011 1.040 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:608(bound_names) + 4393 0.015 0.019 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:615(argument_names) + 4393/4261 0.035 5.688 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/record_checks.py:67(visit_FunctionDef) + 4393 0.001 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4624(__init__) + 19272 0.022 1.870 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4628(visit) + 4393 0.026 0.270 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4700(from_function) + 7897 0.003 0.004 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4857() + 716 0.000 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4893() + 163 0.000 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4908() + 643 0.000 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4942() + 136 0.002 0.005 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:5271(_append_projection) + 37 0.000 0.000 {built-in method builtins.any} + 3779 0.001 0.001 {built-in method builtins.len} + 136 0.000 0.000 {built-in method builtins.sorted} + 8922 0.003 0.003 {method 'append' of 'list' objects} + 4393 0.001 0.001 {method 'extend' of 'list' objects} + 136 0.000 0.000 {method 'intersection' of 'set' objects} + 4393 0.002 0.002 {method 'items' of 'dict' objects} + 8922 0.002 0.002 {method 'pop' of 'list' objects} +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5321(_compact_class_syntax_facets) -> 4 0.000 0.000 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:1789(unparse) + 5418 0.001 0.002 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/heapq.py:316(merge) + 2 0.000 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_projection.py:40(attribute_chain) + 32 0.000 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2576(is_test_path) + 32 0.001 5.655 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:3038(module_syntax_index) + 5365 0.006 0.011 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:4902(_exact_type_predicate) + 3 0.000 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:4950(_fail_loud_block) + 4995 0.035 0.235 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:4977(_enum_member_refs_by_key_type) + 32 0.009 0.027 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5276(_compact_autoregister_reference_projection) + 5757 0.007 0.011 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5352() + 5757 0.006 0.008 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5359() + 5757 0.003 0.007 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5370() + 5757 0.002 0.003 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5378() + 4393 0.002 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5380() + 1282 0.001 0.001 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5383() + 4284 0.001 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5479() + 6661 0.005 0.009 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5490() + 2 0.000 0.000 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:6333(reference_node) + 4425 0.012 1.069 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:608(bound_names) + 4393 0.014 0.018 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:615(argument_names) + 13039 0.002 0.002 {built-in method builtins.id} + 34008 0.004 0.004 {built-in method builtins.isinstance} + 4393 0.002 0.002 {built-in method builtins.sorted} + 27408 0.007 0.007 {method 'add' of 'set' objects} + 1284 0.000 0.000 {method 'append' of 'list' objects} + 159 0.000 0.000 {method 'get' of 'dict' objects} + 9390 0.002 0.002 {method 'items' of 'dict' objects} + 3002 0.001 0.001 {method 'update' of 'set' objects} +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:3038(module_syntax_index) -> 32 2.700 5.654 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/ast_tools.py:2961(build) +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:608(bound_names) -> 78871 0.057 3.568 /home/ts/.pyenv/versions/3.12.3/lib/python3.12/ast.py:403(visit) +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4635(visit_FunctionDef) -> + + + Ordered by: cumulative time + List reduced from 1606 to 1 due to restriction <'lexical_bindings.py.*bound_names'> + +Function was called by... + ncalls tottime cumtime +/home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/lexical_bindings.py:608(bound_names) <- 32 0.001 0.096 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:2750(module_public_export_contract) + 1724 0.003 0.030 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:3302(_direct_statement_bound_names) + 1281 0.006 0.362 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:4687(_compact_class_methods) + 4425 0.012 1.069 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/class_index.py:5321(_compact_class_syntax_facets) + 4393 0.012 1.026 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/record_checks.py:67(visit_FunctionDef) + 4393 0.011 1.040 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4853(visit_FunctionDef) + 6 0.000 0.002 /home/ts/wt/nra-r1-preparation-owner-357-20261001/nominal_refactor_advisor/semantic_descent.py:4908() + + From fbee3963d1120b19dd37e7dfa1d7a1b9c751a488 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 12:39:45 -0400 Subject: [PATCH 11/12] Own shared function binding determination in cooperative scope ancestor --- nominal_refactor_advisor/ast_tools.py | 37 ++- nominal_refactor_advisor/record_checks.py | 28 ++- nominal_refactor_advisor/semantic_descent.py | 71 +++--- tests/test_cooperative_function_bindings.py | 243 +++++++++++++++++++ 4 files changed, 327 insertions(+), 52 deletions(-) create mode 100644 tests/test_cooperative_function_bindings.py diff --git a/nominal_refactor_advisor/ast_tools.py b/nominal_refactor_advisor/ast_tools.py index 69ec095..7a82389 100644 --- a/nominal_refactor_advisor/ast_tools.py +++ b/nominal_refactor_advisor/ast_tools.py @@ -1562,14 +1562,22 @@ def visit_ClassDef(self, node: ast.ClassDef) -> None: finally: self.class_stack.pop() - def visit_FunctionDef(self, node: ast.FunctionDef) -> None: - self.before_visit_function(node) + @contextmanager + def function_name_scope( + self, node: ast.FunctionDef | ast.AsyncFunctionDef + ) -> Iterator[None]: + """Own name-stack restoration for traversal and scoped postludes.""" self.function_stack.append(node.name) try: - self.traverse_function_body(node) + yield finally: self.function_stack.pop() + def visit_FunctionDef(self, node: ast.FunctionDef) -> None: + self.before_visit_function(node) + with self.function_name_scope(node): + self.traverse_function_body(node) + visit_AsyncFunctionDef = visit_FunctionDef # Cooperative capabilities observe an event before delegating here. The @@ -1589,6 +1597,29 @@ def __init__(self, parsed_module: ParsedModule) -> None: super().__init__() self.parsed_module = parsed_module + @contextmanager + def function_scope( + self, + node: ast.FunctionDef | ast.AsyncFunctionDef, + assigned_names: frozenset[str], + argument_names: frozenset[str], + ) -> Iterator[None]: + """Cooperative capability hook spanning one function's traversal.""" + del node, assigned_names, argument_names + yield + + def visit_FunctionDef( + self, node: ast.FunctionDef | ast.AsyncFunctionDef + ) -> None: + # The original lexical authority determines these facts once per event. + # Pass them through C3 capability hooks, not a node-id cache or a store. + assigned_names = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names(node.body) + argument_names = LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names(node) + with self.function_scope(node, assigned_names, argument_names): + super().visit_FunctionDef(node) + + visit_AsyncFunctionDef = visit_FunctionDef + _TRegistered = TypeVar("_TRegistered") _TRegisteredType = TypeVar("_TRegisteredType") diff --git a/nominal_refactor_advisor/record_checks.py b/nominal_refactor_advisor/record_checks.py index f888a43..916a608 100644 --- a/nominal_refactor_advisor/record_checks.py +++ b/nominal_refactor_advisor/record_checks.py @@ -3,6 +3,8 @@ from __future__ import annotations import ast +from collections.abc import Iterator +from contextlib import contextmanager from dataclasses import dataclass from .annotation_semantics import NOMINAL_ANNOTATION_SOURCE_AUTHORITY @@ -16,7 +18,6 @@ ModuleNominalBindingAuthority, ModuleNominalBindingSnapshot, ) -from .lexical_bindings import LEXICAL_SCOPE_BINDING_AUTHORITY from .models import SourceLocation @@ -64,12 +65,20 @@ def __init__(self, parsed_module: ParsedModule) -> None: self.locals: list[frozenset[str]] = [] self.checks: list[DeclaredAttributeCheck] = [] - def visit_FunctionDef(self, node: ast.FunctionDef | ast.AsyncFunctionDef) -> None: - assigned = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names(node.body) + @contextmanager + def function_scope( + self, + node: ast.FunctionDef | ast.AsyncFunctionDef, + assigned_names: frozenset[str], + argument_names: frozenset[str], + ) -> Iterator[None]: parameters = (*node.args.posonlyargs, *node.args.args, *node.args.kwonlyargs) subjects = {} for parameter in parameters: - if parameter.arg not in assigned and parameter.annotation is not None: + if ( + parameter.arg not in assigned_names + and parameter.annotation is not None + ): parts = NOMINAL_ANNOTATION_SOURCE_AUTHORITY.reference_parts_or_none( parameter.annotation ) @@ -80,7 +89,7 @@ def visit_FunctionDef(self, node: ast.FunctionDef | ast.AsyncFunctionDef) -> Non and not self.function_stack and parameters and parameters[0].arg == "self" - and "self" not in assigned + and "self" not in assigned_names and not any( isinstance(d, ast.Name) and d.id in {"staticmethod", "classmethod"} for d in node.decorator_list @@ -88,17 +97,14 @@ def visit_FunctionDef(self, node: ast.FunctionDef | ast.AsyncFunctionDef) -> Non ): subjects["self"] = (*self.class_stack,) self.subjects.append(subjects) - self.locals.append( - assigned | LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names(node) - ) + self.locals.append(assigned_names | argument_names) try: - super().visit_FunctionDef(node) + with super().function_scope(node, assigned_names, argument_names): + yield finally: self.subjects.pop() self.locals.pop() - visit_AsyncFunctionDef = visit_FunctionDef - def visit_Lambda(self, node: ast.Lambda) -> None: # This capability has never admitted checks in lambda bodies. Other # composed capabilities may still require those syntax events. diff --git a/nominal_refactor_advisor/semantic_descent.py b/nominal_refactor_advisor/semantic_descent.py index d9d9424..d27cd84 100644 --- a/nominal_refactor_advisor/semantic_descent.py +++ b/nominal_refactor_advisor/semantic_descent.py @@ -81,7 +81,6 @@ from .enum_semantics import PYTHON_ENUM_BASE_AUTHORITY from .export_tools import PYTHON_PUBLIC_EXPORT_ASSIGNMENT from .implementation_identity import ImplementationSource, implementation_module_names -from .lexical_bindings import LEXICAL_SCOPE_BINDING_AUTHORITY from .json_reports import ( DataclassJsonReport, SemanticRecord, @@ -4850,10 +4849,13 @@ def visit_ClassDef(self, node: ast.ClassDef) -> None: ) ) - def visit_FunctionDef( + @contextmanager + def function_scope( self, node: ast.FunctionDef | ast.AsyncFunctionDef, - ) -> None: + assigned_names: frozenset[str], + argument_names: frozenset[str], + ) -> Iterator[None]: direct_class_frames = tuple( frame for frame in self.class_supplement_stack @@ -4877,12 +4879,11 @@ def visit_FunctionDef( ) ) try: - super().visit_FunctionDef(node) + with super().function_scope(node, assigned_names, argument_names): + yield if self.include_presentations: collector = MappingReadProjectionCollector() - bound_names = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names( - node.body - ) | LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names(node) + bound_names = assigned_names | argument_names for statement in node.body: collector.visit(statement) for subject, reads in collector.reads.items(): @@ -4928,39 +4929,35 @@ def visit_FunctionDef( if parts[0] not in bound_names or ( parts == (classmethod_receiver,) - and classmethod_receiver - not in LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names( - node.body - ) + and classmethod_receiver not in assigned_names ) ) - self.function_stack.append(node.name) - self._append_projection( - node, - PresentationProjectionKind.MAPPING_READ, - f"{node.name}:{subject}", - tuple( - PresentationToken( - key, - PresentationTokenKind.STRING_LITERAL, - PresentationTokenRole.DICT_KEY, - ) - for key in keys - ), - mapping_read_constructors=constructors, - ) - if self.class_reference_resolver is not None: - projection = self.projections[-1] - self.projections[-1] = replace( - projection, - class_symbols=projection.resolved_read_constructor_symbols( - lambda parts: self.class_reference_resolver.symbol_for_reference( - ast.parse(".".join(parts), mode="eval").body - ), - self.class_reference_resolver.class_index, + with self.function_name_scope(node): + self._append_projection( + node, + PresentationProjectionKind.MAPPING_READ, + f"{node.name}:{subject}", + tuple( + PresentationToken( + key, + PresentationTokenKind.STRING_LITERAL, + PresentationTokenRole.DICT_KEY, + ) + for key in keys ), + mapping_read_constructors=constructors, ) - self.function_stack.pop() + if self.class_reference_resolver is not None: + projection = self.projections[-1] + self.projections[-1] = replace( + projection, + class_symbols=projection.resolved_read_constructor_symbols( + lambda parts: self.class_reference_resolver.symbol_for_reference( + ast.parse(".".join(parts), mode="eval").body + ), + self.class_reference_resolver.class_index, + ), + ) finally: self.type_scopes.pop() if frame is not None: @@ -4980,8 +4977,6 @@ def visit_FunctionDef( if direct_class_frames: del self.active_class_method_frames[-len(direct_class_frames) :] - visit_AsyncFunctionDef = visit_FunctionDef - def _axis_type_names_for_node(self, node: ast.AST) -> tuple[str, ...]: return ( self.type_scopes[-1].projection_type_names(node) if self.type_scopes else () diff --git a/tests/test_cooperative_function_bindings.py b/tests/test_cooperative_function_bindings.py new file mode 100644 index 0000000..4ae4bf8 --- /dev/null +++ b/tests/test_cooperative_function_bindings.py @@ -0,0 +1,243 @@ +"""Function binding determination belongs to the shared source/scope owner.""" + +import ast +from collections import Counter +from contextlib import contextmanager + +import pytest + +from nominal_refactor_advisor.ast_tools import ( + ParsedModuleClassFunctionStackNodeVisitor, + SourceModule, +) +from nominal_refactor_advisor.lexical_bindings import LEXICAL_SCOPE_BINDING_AUTHORITY +from nominal_refactor_advisor.record_checks import DeclaredTypeCheckModule +from nominal_refactor_advisor.semantic_descent import ( + PresentationProjectionKind, + _CompactSemanticProjectionVisitor, + _ProjectionVisitor, +) + + +SOURCE = """\ +def outer(value: Value, payload): + local = payload['left'] + def nested(value: Value): + other = 1 + return isinstance(value.count, int) + async def nested_async(value: Value): + return isinstance(value.count, int) + return payload.get('right') + +def shadowed(value: Value, isinstance): + return isinstance(value.count, int) +""" + + +class BindingCensus(ParsedModuleClassFunctionStackNodeVisitor): + def __init__(self, parsed_module, **kwargs): + super().__init__(parsed_module, **kwargs) + self.binding_events = [] + + @contextmanager + def function_scope(self, node, assigned_names, argument_names): + self.binding_events.append( + ("enter", node.name, self.qualname, assigned_names, argument_names) + ) + try: + with super().function_scope(node, assigned_names, argument_names): + yield + finally: + self.binding_events.append(("exit", node.name, self.qualname)) + + +class CensusBeforeProjection(BindingCensus, _CompactSemanticProjectionVisitor): + pass + + +class CensusAfterProjection(_CompactSemanticProjectionVisitor, BindingCensus): + pass + + +@pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) +def test_shared_function_bindings_need_one_determination_per_event( + tmp_path, monkeypatch, visitor_type +): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + functions = tuple( + node + for node in ast.walk(module.module) + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) + ) + body_ids = {id(node.body) for node in functions} + body_calls = Counter() + argument_calls = Counter() + original_bound = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names + original_arguments = LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names + + def observed_bound(nodes): + if id(nodes) in body_ids: + body_calls[id(nodes)] += 1 + return original_bound(nodes) + + def observed_arguments(node): + argument_calls[id(node)] += 1 + return original_arguments(node) + + # Parse/source identity and existing lexical algorithm are unchanged. Only + # observe calls during this one original generic visitor invocation. + monkeypatch.setattr(LEXICAL_SCOPE_BINDING_AUTHORITY, "bound_names", observed_bound) + monkeypatch.setattr( + LEXICAL_SCOPE_BINDING_AUTHORITY, "argument_names", observed_arguments + ) + visitor = visitor_type(module) + visitor.visit(module.module) + assert body_calls == Counter({id(node.body): 1 for node in functions}) + assert argument_calls == Counter({id(node): 1 for node in functions}) + assert visitor.binding_events == [ + ( + "enter", "outer", "", + frozenset(("local", "nested", "nested_async")), + frozenset(("value", "payload")), + ), + ("enter", "nested", "outer", frozenset(("other",)), frozenset(("value",))), + ("exit", "nested", "outer"), + ("enter", "nested_async", "outer", frozenset(), frozenset(("value",))), + ("exit", "nested_async", "outer"), + ("exit", "outer", ""), + ( + "enter", "shadowed", "", frozenset(), + frozenset(("value", "isinstance")), + ), + ("exit", "shadowed", ""), + ] + independent = _ProjectionVisitor(module) + independent.visit(module.module) + assert visitor.projections == independent.projections + assert visitor.class_supplements == independent.class_supplements + assert DeclaredTypeCheckModule.from_collector( + visitor + ) == DeclaredTypeCheckModule.collect(module) + assert len(visitor.checks) == 2 + assert visitor_type.__mro__.count(ParsedModuleClassFunctionStackNodeVisitor) == 1 + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.type_scopes == visitor.owner_construction_stack == [] + + +@pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) +def test_function_scope_recomputes_each_invocation_without_a_parallel_cache( + tmp_path, visitor_type +): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + visitor = visitor_type(module) + visitor.visit(module.module) + # The determining AST is intentionally changed to distinguish scoped reuse + # from a stale node-id cache. Nothing is persisted or relabeled as new source. + outer = module.module.body[0] + outer.body.insert(0, ast.parse("fresh = 1").body[0]) + before = len(visitor.binding_events) + visitor.visit(module.module) + event = visitor.binding_events[before] + assert event[:3] == ("enter", "outer", "") + assert event[3] == frozenset(("fresh", "local", "nested", "nested_async")) + + +@pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) +def test_function_scope_body_failure_unwinds_cooperative_contexts(tmp_path, visitor_type): + class FailOnCall(ParsedModuleClassFunctionStackNodeVisitor): + def visit_Call(self, node): + raise RuntimeError("controlled binding-scope body failure") + + class Failing(visitor_type, FailOnCall): + pass + + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + visitor = Failing(module) + with pytest.raises(RuntimeError, match="controlled binding-scope body failure"): + visitor.visit(module.module) + assert visitor.binding_events[-2:] == [ + ("exit", "nested", "outer"), ("exit", "outer", "") + ] + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.type_scopes == visitor.owner_construction_stack == [] + assert visitor.class_supplement_stack == visitor.active_class_method_frames == [] + assert visitor._projection_suppression_depth == 0 + + +class FailScopeEntry(ParsedModuleClassFunctionStackNodeVisitor): + @contextmanager + def function_scope(self, node, assigned_names, argument_names): + raise RuntimeError("controlled binding-scope entry failure") + yield + + +class FailScopeExit(ParsedModuleClassFunctionStackNodeVisitor): + @contextmanager + def function_scope(self, node, assigned_names, argument_names): + with super().function_scope(node, assigned_names, argument_names): + yield + raise RuntimeError("controlled binding-scope exit failure") + + +class EntryFailureBeforeProjection(FailScopeEntry, _CompactSemanticProjectionVisitor): + pass + + +class EntryFailureAfterProjection(_CompactSemanticProjectionVisitor, FailScopeEntry): + pass + + +class ExitFailureBeforeProjection(FailScopeExit, _CompactSemanticProjectionVisitor): + pass + + +class ExitFailureAfterProjection(_CompactSemanticProjectionVisitor, FailScopeExit): + pass + + +@pytest.mark.parametrize( + "visitor_type", + ( + EntryFailureBeforeProjection, + EntryFailureAfterProjection, + ExitFailureBeforeProjection, + ExitFailureAfterProjection, + ), +) +def test_function_scope_entry_and_exit_failures_unwind_in_both_mro_orders( + tmp_path, visitor_type +): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + visitor = visitor_type(module) + with pytest.raises(RuntimeError, match="controlled binding-scope .* failure"): + visitor.visit(module.module) + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.type_scopes == visitor.owner_construction_stack == [] + assert visitor.class_supplement_stack == visitor.active_class_method_frames == [] + assert visitor._projection_suppression_depth == 0 + + +@pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) +def test_mapping_postlude_failure_uses_the_shared_name_scope_owner( + tmp_path, monkeypatch, visitor_type +): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + original = _ProjectionVisitor._append_projection + + def controlled_failure(self, node, kind, *args, **kwargs): + if kind is PresentationProjectionKind.MAPPING_READ: + assert self.qualname == "outer" + raise RuntimeError("controlled mapping postlude failure") + return original(self, node, kind, *args, **kwargs) + + monkeypatch.setattr(_ProjectionVisitor, "_append_projection", controlled_failure) + visitor = visitor_type(module) + with pytest.raises(RuntimeError, match="controlled mapping postlude failure"): + visitor.visit(module.module) + assert visitor.class_stack == visitor.function_stack == [] + assert visitor.subjects == visitor.locals == [] + assert visitor.type_scopes == visitor.owner_construction_stack == [] + assert visitor.binding_events[-1] == ("exit", "outer", "") From 14335aba436a49513f86e6d1a87cd92172bf5cd4 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 1 Oct 2026 12:44:56 -0400 Subject: [PATCH 12/12] Retain shared function-scope red-green evidence and cleanup receipt --- .../r1_preparation_owner_357_20261001.md | 22 +++ .../INDEX.md | 6 + .../function-scope-reuse/README.md | 111 ++++++++++++++ .../function-scope-reuse/SHA256SUMS | 7 + .../function-scope-reuse/freeze-manifest.json | 36 +++++ .../function-scope-after.log | 73 +++++++++ .../function-scope-before.log | 142 ++++++++++++++++++ .../function-scope-consumers.log | 42 ++++++ .../function-scope-final.log | 79 ++++++++++ .../function-scope-lexical.log | 51 +++++++ .../function-scope-parity-after.log | 27 ++++ .../function-scope-parity-before.log | 27 ++++ 12 files changed, 623 insertions(+) create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/README.md create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/SHA256SUMS create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/freeze-manifest.json create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-after.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-before.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-consumers.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-final.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-lexical.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-after.log create mode 100644 docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-before.log diff --git a/docs/plans/r1_preparation_owner_357_20261001.md b/docs/plans/r1_preparation_owner_357_20261001.md index 6e4dc14..658bac9 100644 --- a/docs/plans/r1_preparation_owner_357_20261001.md +++ b/docs/plans/r1_preparation_owner_357_20261001.md @@ -158,3 +158,25 @@ duplication is recorded: the two composed function capabilities independently rescan the same lexical body bindings (4393 calls each). It requires source-scope owner reuse with lifecycle/proof behavior, not another cache authority or guard waiver. This profile/review checkpoint adds no production fix or new test pass. + +## Shared determining function scope + +Sourcefbee396 extends the existing source-bound ancestor to own one original +lexical binding determination per function event, supplied through cooperative +context hooks to the independent presentation/check capabilities. Repeated leaf +calls/event overrides and copied unsafe postlude name-stack lifecycle are deleted; +the existing owning stack ancestor now protects both traversal and postlude. +No cache, store, roster, copied algorithm or proof/AST-admission waiver is added. +BindingCensus supplies only a new declaration/hook, participates before/after C3 +and demonstrates real nested/async ordering, freshness and exception restoration. + +The [source receipt](../validation/r1_preparation_owner_357_20261001/function-scope-reuse/README.md) +and [freeze](../validation/r1_preparation_owner_357_20261001/function-scope-reuse/freeze-manifest.json) +retain the red two-determination experiment,79 distinct current source passes +(12 new), identical complete component signatures and exact bounds/cleanup. +Single-sample component timing is essentially flat; no complete R1 speedup is +claimed. Original parent failure and baseline-equal native proof failure remain +retained. Class syntax facet binding requests remain independently owned. +Parent retains original160/165/512MiB complete qualification and installed gate; +global85-detector/FULL remains separately unqualified. Source development remains +active, not terminated by a fixed submission count or renamed a global pass. diff --git a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md index 0033524..aa56a69 100644 --- a/docs/validation/r1_preparation_owner_357_20261001/INDEX.md +++ b/docs/validation/r1_preparation_owner_357_20261001/INDEX.md @@ -1,5 +1,11 @@ # Source checkpoint and retained evidence +Latest source migration: +[shared function-scope preparation](function-scope-reuse/README.md), sourcefbee396. +79 distinct current source cases pass, including12 new cooperative capability +cases. Full R1 and installed/global acceptance remain unqualified; prior original +failure is retained below. No identical full attempt was repeated. + Latest terminal qualification/profile: [publication/preparation cost and unresolved ownership](publication-profile/README.md). Original full-context18910a5 R1 FAILED at160s; no production changes in this diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/README.md b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/README.md new file mode 100644 index 0000000..f900411 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/README.md @@ -0,0 +1,111 @@ +# Shared function-scope preparation checkpoint + +Source owner Schrodinger/Codex; parent retains integration and complete original +qualification. Source checkpoint `fbee3963d1120b19dd37e7dfa1d7a1b9c751a488`, +same [draft PR16](https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16). +Predecessor production19f21b6 / evidenceff192cf and pinned baseline673c062f +remain reproducible. No parent source, installed package or original input changed. + +## Measured concern and owning mechanism + +The [preceding bounded profile](../publication-profile/README.md) attributed4393 +`bound_names(node.body)` calls to each composed function capability. This does +not establish the dominant complete R1 hotspot. A new same-event experiment on +the actual existing visitor demonstrated two determinations per function body +instead of one in both C3 composition orders; both failures are retained in +`function-scope-before.log`. The original lexical algorithm was only observed, +not replaced or copied. + +`LexicalScopeBindingAuthority` remains the determining algorithm owner. +`ParsedModuleClassFunctionStackNodeVisitor` now owns the shared function event: +one original body-binding determination and one argument-binding determination, +passed as immutable arguments through cooperative `function_scope` context hooks. +There is no node-id cache, persistent binding field, parallel store or roster. +`_ProjectionVisitor` and `DeclaredAttributeCheckCollector` retain only their +independent presentation/type-check scope preparation, postlude and unwind hooks. +They delegate with `super().function_scope(...)`; C3 enters both once and unwinds +in reverse order. Their old event overrides, repeated lexical calls, async event +aliases and unused authority imports are deleted. + +`ClassFunctionStackNodeVisitor` owns `function_name_scope`: its original push/pop +algorithm now protects both traversal and the mapping-projection postlude. This +deletes the latter's unprotected copied push/pop and restores names on failure. +Existing matching `super().visit_Assign/visit_AnnAssign/visit_Return`, cooperative +native traversal endpoints, projection-local suppression and the one AST walk +remain intact. No hook dispatch table or mirrored visitor was added. + +Review against current authoritative NRA/refactor-audit archive: IMPL-12/13 +repeated preparation/lifecycle mechanism repaired here; IMPL-4 requires actual +capability delivery, not decorative bases. IMPL-1/2/3/5, MEMB-1/2, IDEN-5, +TIME-1/3 checks found no added consumer type/string/enum switch, parallel registry, +duplicate identity store, wrapper-only relocation or compatibility path. Original +AST-free batch/cache guards, exact-source/dependency identities and fail-closed +proof admission are unchanged. This is an authored owner refactor, not a native +equivalence proof or a completed global audit. + +## Independent new-case behavior + +`BindingCensus` declares one cooperative scope hook and its own observations. +Empty declaration compositions put it before and after the existing compact +visitor. No generic consumer is edited for that new capability. Tests exercise +real synchronous, nested and asynchronous function entry/exit ordering and +qualnames, exact-once authority calls, existing complete facts and shadowed +builtins. Reusing the visitor after diagnostic AST mutation proves the answer is +recomputed, not a stale cache. Body, hook-entry, hook-exit and mapping-postlude +controlled failures prove restoration in both MRO positions. + +Twelve new cases cover that contract. The seventeen existing same-node capability +cases still pass, including downstream assignment/return hooks and suppression. +The distinct current-checkpoint count below excludes repeated initial passes and +does not retrospectively qualify earlier failed/terminal attempts. + +| Retained receipt | Outcome | Wall seconds | Peak KiB | +| --- | --- | ---: | ---: | +| function-scope-before.log | expected red:2failed/4deselected | 2.65 | 85136 | +| function-scope-after.log | initial6new +36existing:42passed | 6.43 | 90344 | +| function-scope-final.log | complete12new +36existing:48passed | 7.10 | 90524 | +| function-scope-consumers.log | original deferred/cache/graph consumers:11passed | 7.24 | 106056 | +| function-scope-lexical.log | native symbol-table/live-scope +target identity:20passed/7deselected | 2.90 | 85072 | +| function-scope-parity-before.log | complete four-source facts, predecessor | 3.57 | 85264 | +| function-scope-parity-after.log | identical complete four-source facts, candidate | 3.70 | 85424 | + +**79 distinct current source cases passed**, peak103.57MiB. Original family API +comparison uses the same four pinned673c062f files, canonical path/module owner, +unchanged raw SHA256 and complete content signatures:458 presentations,36 checks, +292 supplements. Collection0.612698 ->0.606487s in one sample is essentially flat; +process wall3.57 ->3.70s, so no overall startup/full-context improvement claim. +The fixed four-file component comparison is not a narrowed substitute for R1. + +## Bounds and remaining acceptance + +Each serial source worker used frozen installed Python3.12.3 read-only, +`-I -B`, tasksetCPU0, systemd MemoryMax512M/MemorySwapMax0/CPUQuota100%, +outer60s and thread pools1. Full exact commands/test selections are retained in +each log; tests disable plugin autoload/cacheprovider and use distinct owned +basetemps. Startup helper warned (exit2): RAM20.6GiB/home8.5GiB/swap10.7GiB. +Later read-only headroom check still warned: RAM18.9GiB/home11.7GiB/swap10.2GiB. +No extra fleet, native/UI/MCP/science, installs, provider calls, downloads or +shared lock was used. Improved disk headroom does not authorize a live run. + +Parent's original18910a5 full R1 remains **FAILED ScanDeadlineExceeded160s**, +exit1/164.42s/187.41MiB, with immutable witness retained under publication-profile. +Earlier timeout and baseline-equal `unproved_execution_effects` proof failure +remain retained, not waived or silently reclassified. No identical full scan was +repeated here. Original160/165 qualification, installed acceptance and global +85-detector/FULL remain separately unqualified. Parent retains those gates. +Class syntax facets still determine bindings independently; this checkpoint +does not claim elimination of all preparation cost or resolution of the R1 deadline. + +## Owned scratch disposition + +Only newly owned +`/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001` (1316KiB) +was used. All seven source logs are preserved byte-for-byte here with SHA256SUMS. +Cleanup complete: all seven retained checksums passed; exact-root `lsof +D` +returned no handles, scoped process inspection found no remaining worker, and +realpath matched the explicit owned address. Removed only that1316KiB root with +`rm -r --`, verified absence and rechecked all retained checksums. Disposable +test/cache data is permanently deleted; source, every log and original failure +are retained. Prior owned19MiB/816KiB/288KiB roots are already absent and were +not deleted again. No predecessor or parent scratch address, scientific output, +other owner's worktree or installed package was removed. diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/SHA256SUMS b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/SHA256SUMS new file mode 100644 index 0000000..8dd9e25 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/SHA256SUMS @@ -0,0 +1,7 @@ +e6dae6a675df53f3fa61bc1cee4017ef6fcd385af0e56da0af1a219e78e14125 function-scope-after.log +87b90670ac0944de164753bcd1c1dbf3495a0570ac4b71b9a902b62419767056 function-scope-before.log +5c2ffbbc2caba5cd31e6f7861fd5240d9110a9495a1aea46455aebeadc5913c8 function-scope-consumers.log +ee9cd1df302aff953bfa5bde29122019d5b9c6d98c423d669cb60781022cf0c3 function-scope-final.log +389c1c39f512f0a00ae384fd82bc11a1a64d0dd505e1a98d6e683d7ac6eedcca function-scope-lexical.log +682444f1f4775212fb8cbb43a333ee9bdcb1ac885b37b2b1cb59d798edc0abfd function-scope-parity-after.log +c99c3d97ce19518083ea0fab17b077f77d98022f06d340a9d5bbba1030ad5793 function-scope-parity-before.log diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/freeze-manifest.json b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/freeze-manifest.json new file mode 100644 index 0000000..e407384 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/freeze-manifest.json @@ -0,0 +1,36 @@ +{ + "source_owner": "Schrodinger/Codex", + "integration_and_complete_qualification_owner": "parent", + "draft_pr": "https://github.com/OpenHCSDev/NominalRefactorAdvisor/pull/16", + "source_checkpoint": "fbee3963d1120b19dd37e7dfa1d7a1b9c751a488", + "predecessor_evidence_head": "ff192cf70d6cd15f3a3e0e60f7ce5e3d8c0ac3e0", + "baseline": "673c062fc656e9c74f1eddcab30f036c9befbc1f", + "source_sha256": { + "nominal_refactor_advisor/ast_tools.py": "8b66bbf26b918852a3b866136ea3858052bef86b5f347eaaffcdd950fb9c2e2b", + "nominal_refactor_advisor/record_checks.py": "fb152d5d056c1bfa20395562ef8efbf0449152e8a7a731214d7801cf27112f92", + "nominal_refactor_advisor/semantic_descent.py": "c3cf3996c45fdef2816c723dee0384c3093d73b5f0f30a777d4d822934876d6e", + "nominal_refactor_advisor/analysis.py": "9df4ad1ea64bae4b88a4d911e6355630c82826ff2a54c96d720fa6171d92cfbd", + "tests/test_cooperative_function_bindings.py": "7a32cc2ad7289785640e468d7598cd1830fadce428faef7a86745e24f32ad631", + "tests/test_cooperative_semantic_preparation.py": "0516c686c26b058d8f394e1ba8ed591805237db3d4ecbe1ab4377cb28832adff" + }, + "immutable_consumer_sha256": "4c6282f52e7c188068dd9d63399f5522a7cb1d222504d0c0b809be10303884ca", + "base_revision": "791650087e01c9d25766f12802a37296851f37cf", + "head_revision": "3d58912d6e74e4b3dd4fa9e07a6b4a9d7dd9c7e4", + "original_context_roots": 3, + "original_recursive_dependencies": 8, + "source_limits": {"cpu": 1, "memory_mib": 512, "swap_mib": 0, "outer_seconds": 60}, + "peak_observed_kib": 106056, + "current_distinct_passing_cases": 79, + "new_cases": 12, + "binding_determinations_per_function_event": {"predecessor": 2, "candidate": 1}, + "new_case": "independent BindingCensus scope hook before/after actual compact visitor; no generic consumer edits; nested/async order, fresh invocation and controlled failures", + "complete_component_facts": {"presentations": 458, "checks": 36, "supplements": 292, "all_signatures_equal": true}, + "complete_original_r1_repeated": false, + "original_parent_r1_status": "FAILED at18910a5 ScanDeadlineExceeded160s; unchanged failure witness retained", + "candidate_original_r1_installed_global_full": "unqualified; parent owns complete original and installed gates", + "earlier_native_proof_failure_and_timeout": "retained unchanged, not requalified", + "remaining_preparation": "class syntax facet binding requests remain independent; no whole-R1 speedup or dominant hotspot claim", + "science_native_installs_locks_providers_downloads": "none", + "owned_scratch": "/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001", + "cleanup": "only owned1316KiB root removed after seven checksums/no-handle/process/realpath proof; absence and retained checksums reverified" +} diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-after.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-after.log new file mode 100644 index 0000000..c568f69 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-after.log @@ -0,0 +1,73 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 42 items + +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusBeforeProjection] PASSED [ 2%] +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusAfterProjection] PASSED [ 4%] +tests/test_cooperative_function_bindings.py::test_function_scope_recomputes_each_invocation_without_a_parallel_cache[CensusBeforeProjection] PASSED [ 7%] +tests/test_cooperative_function_bindings.py::test_function_scope_recomputes_each_invocation_without_a_parallel_cache[CensusAfterProjection] PASSED [ 9%] +tests/test_cooperative_function_bindings.py::test_function_scope_body_failure_unwinds_cooperative_contexts[CensusBeforeProjection] PASSED [ 11%] +tests/test_cooperative_function_bindings.py::test_function_scope_body_failure_unwinds_cooperative_contexts[CensusAfterProjection] PASSED [ 14%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[] PASSED [ 16%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\nisinstance = lambda *args: True\n] PASSED [ 19%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\ntype = lambda value: int\n] PASSED [ 21%] +tests/test_cooperative_semantic_preparation.py::test_compact_family_does_not_reenter_independent_check_collection PASSED [ 23%] +tests/test_cooperative_semantic_preparation.py::test_new_capability_is_only_a_declaration_and_cooperative_hook PASSED [ 26%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] PASSED [ 28%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] PASSED [ 30%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] PASSED [ 33%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] PASSED [ 35%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result = {'left': consume(value), 'right': 'name'}] PASSED [ 38%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result: dict = {'left': consume(value), 'right': 'name'}] PASSED [ 40%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[return {'left': consume(value), 'right': 'name'}] PASSED [ 42%] +tests/test_cooperative_semantic_preparation.py::test_exception_unwinds_both_capabilities_and_shared_owner PASSED [ 45%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 47%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result: dict = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 50%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[return {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 52%] +tests/test_cooperative_semantic_preparation.py::test_context_only_family_keeps_its_existing_no_checks_contract PASSED [ 54%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-False] PASSED [ 57%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-True] PASSED [ 59%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-False] PASSED [ 61%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-True] PASSED [ 64%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-False] PASSED [ 66%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-True] PASSED [ 69%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-False] PASSED [ 71%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-True] PASSED [ 73%] +tests/test_projection_shard_publication.py::test_list_collection_and_batch_share_the_same_publication PASSED [ 76%] +tests/test_projection_shard_publication.py::test_incomplete_publication_keeps_all_facts_in_memory PASSED [ 78%] +tests/test_raw_record_detectors.py::test_mapping_reads_match_schema_but_only_actual_decode_descends PASSED [ 80%] +tests/test_raw_record_detectors.py::test_unmodeled_shapes_aggregate_same_keys_and_ignore_small_dynamic_reads PASSED [ 83%] +tests/test_raw_record_detectors.py::test_redundant_checks_resolve_declared_self_parameters_and_keep_unknowns PASSED [ 85%] +tests/test_raw_record_detectors.py::test_detector_ids_are_derived_and_registered PASSED [ 88%] +tests/test_raw_record_detectors.py::test_cross_module_schema_and_annotated_owner_use_complete_context PASSED [ 90%] +tests/test_source_projection_owner.py::test_source_projection_retains_actual_parsed_owner_without_compact_ast_debt PASSED [ 92%] +tests/test_source_projection_owner.py::test_another_revision_reusing_ast_cannot_relabel_existing_source_observations PASSED [ 95%] +tests/test_source_projection_owner.py::test_reparsed_source_owns_distinct_canonical_read_nodes PASSED [ 97%] +tests/test_source_projection_owner.py::test_pickle_preserves_shared_module_node_identity_inside_source_projection PASSED [100%] + +============================== 42 passed in 3.90s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-after","tests/test_cooperative_function_bindings.py","tests/test_cooperative_semantic_preparation.py","tests/test_projection_shard_publication.py","tests/test_raw_record_detectors.py","tests/test_source_projection_owner.py"]))" + User time (seconds): 5.69 + System time (seconds): 0.66 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:06.43 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 90344 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 2 + Minor (reclaiming a frame) page faults: 102306 + Voluntary context switches: 38 + Involuntary context switches: 134 + Swaps: 0 + File system inputs: 288 + File system outputs: 400 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-before.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-before.log new file mode 100644 index 0000000..4dfa071 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-before.log @@ -0,0 +1,142 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 6 items / 4 deselected / 2 selected + +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusBeforeProjection] FAILED [ 50%] +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusAfterProjection] FAILED [100%] + +=================================== FAILURES =================================== +_ test_shared_function_bindings_need_one_determination_per_event[CensusBeforeProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-before/test_shared_function_bindings_0') +monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fa118aff1d0> +visitor_type = + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + def test_shared_function_bindings_need_one_determination_per_event( + tmp_path, monkeypatch, visitor_type + ): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + functions = tuple( + node + for node in ast.walk(module.module) + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) + ) + body_ids = {id(node.body) for node in functions} + body_calls = Counter() + argument_calls = Counter() + original_bound = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names + original_arguments = LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names + + def observed_bound(nodes): + if id(nodes) in body_ids: + body_calls[id(nodes)] += 1 + return original_bound(nodes) + + def observed_arguments(node): + argument_calls[id(node)] += 1 + return original_arguments(node) + + # Parse/source identity and existing lexical algorithm are unchanged. Only + # observe calls during this one original generic visitor invocation. + monkeypatch.setattr(LEXICAL_SCOPE_BINDING_AUTHORITY, "bound_names", observed_bound) + monkeypatch.setattr( + LEXICAL_SCOPE_BINDING_AUTHORITY, "argument_names", observed_arguments + ) + visitor = visitor_type(module) + visitor.visit(module.module) +> assert body_calls == Counter({id(node.body): 1 for node in functions}) +E AssertionError: assert Counter({1403...879410816: 2}) == Counter({1403...882213952: 1}) +E +E Differing items: +E {140329882162944: 2} != {140329882162944: 1} +E {140329882166080: 2} != {140329882166080: 1} +E {140329879410816: 2} != {140329879410816: 1} +E {140329882213952: 2} != {140329882213952: 1} +E ... +E +E ...Full output truncated (17 lines hidden), use '-vv' to show + +tests/test_cooperative_function_bindings.py:94: AssertionError +_ test_shared_function_bindings_need_one_determination_per_event[CensusAfterProjection] _ + +tmp_path = PosixPath('/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-before/test_shared_function_bindings_1') +monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fa118b16ab0> +visitor_type = + + @pytest.mark.parametrize("visitor_type", (CensusBeforeProjection, CensusAfterProjection)) + def test_shared_function_bindings_need_one_determination_per_event( + tmp_path, monkeypatch, visitor_type + ): + module = SourceModule(tmp_path / "case.py", "case", SOURCE).parse() + functions = tuple( + node + for node in ast.walk(module.module) + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) + ) + body_ids = {id(node.body) for node in functions} + body_calls = Counter() + argument_calls = Counter() + original_bound = LEXICAL_SCOPE_BINDING_AUTHORITY.bound_names + original_arguments = LEXICAL_SCOPE_BINDING_AUTHORITY.argument_names + + def observed_bound(nodes): + if id(nodes) in body_ids: + body_calls[id(nodes)] += 1 + return original_bound(nodes) + + def observed_arguments(node): + argument_calls[id(node)] += 1 + return original_arguments(node) + + # Parse/source identity and existing lexical algorithm are unchanged. Only + # observe calls during this one original generic visitor invocation. + monkeypatch.setattr(LEXICAL_SCOPE_BINDING_AUTHORITY, "bound_names", observed_bound) + monkeypatch.setattr( + LEXICAL_SCOPE_BINDING_AUTHORITY, "argument_names", observed_arguments + ) + visitor = visitor_type(module) + visitor.visit(module.module) +> assert body_calls == Counter({id(node.body): 1 for node in functions}) +E AssertionError: assert Counter({1403...881254912: 2}) == Counter({1403...881369984: 1}) +E +E Differing items: +E {140329881369152: 2} != {140329881369152: 1} +E {140329881254912: 2} != {140329881254912: 1} +E {140329881367552: 2} != {140329881367552: 1} +E {140329881369984: 2} != {140329881369984: 1} +E ... +E +E ...Full output truncated (17 lines hidden), use '-vv' to show + +tests/test_cooperative_function_bindings.py:94: AssertionError +=========================== short test summary info ============================ +FAILED tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusBeforeProjection] +FAILED tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusAfterProjection] +======================= 2 failed, 4 deselected in 0.16s ======================== +Command exited with non-zero status 1 + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-before","tests/test_cooperative_function_bindings.py","-k","shared_function_bindings"]))" + User time (seconds): 2.54 + System time (seconds): 0.11 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.65 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85136 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 25069 + Voluntary context switches: 27 + Involuntary context switches: 23 + Swaps: 0 + File system inputs: 0 + File system outputs: 24 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 1 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-consumers.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-consumers.log new file mode 100644 index 0000000..79fbf42 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-consumers.log @@ -0,0 +1,42 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 11 items + +tests/test_deferred_projection_family.py::test_complete_content_signature_does_not_require_loading_all_graphs PASSED [ 9%] +tests/test_deferred_projection_family.py::test_missing_signature_requires_complete_original_content_evidence PASSED [ 18%] +tests/test_deferred_projection_family.py::test_materialized_public_api_retains_its_tuple_contract PASSED [ 27%] +tests/test_deferred_projection_family.py::test_count_derives_unique_source_materializations_without_rescanning_batches PASSED [ 36%] +tests/test_deferred_projection_family.py::test_corrupt_cache_repairs_only_the_requested_original_source PASSED [ 45%] +tests/test_deferred_projection_family.py::test_repair_rejects_a_changed_source_and_can_retry_the_original PASSED [ 54%] +tests/test_deferred_projection_family.py::test_global_lookup_still_reads_later_ambiguous_modules PASSED [ 63%] +tests/test_deferred_projection_family.py::test_eligibility_short_circuit_does_not_truncate_later_queries PASSED [ 72%] +tests/test_semantic_descent.py::test_construction_authority_materialization_indexes_each_method_once PASSED [ 81%] +tests/test_semantic_descent.py::test_semantic_descent_graph_flags_returned_declaration_table PASSED [ 90%] +tests/test_semantic_descent.py::test_semantic_descent_ignores_function_local_variable_tuple_projection PASSED [100%] + +============================== 11 passed in 4.39s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-consumers","tests/test_deferred_projection_family.py","tests/test_semantic_descent.py::test_construction_authority_materialization_indexes_each_method_once","tests/test_semantic_descent.py::test_semantic_descent_graph_flags_returned_declaration_table","tests/test_semantic_descent.py::test_semantic_descent_ignores_function_local_variable_tuple_projection"]))" + User time (seconds): 6.64 + System time (seconds): 0.56 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:07.24 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 106056 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 91675 + Voluntary context switches: 47 + Involuntary context switches: 45 + Swaps: 0 + File system inputs: 0 + File system outputs: 648 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-final.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-final.log new file mode 100644 index 0000000..777b326 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-final.log @@ -0,0 +1,79 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 48 items + +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusBeforeProjection] PASSED [ 2%] +tests/test_cooperative_function_bindings.py::test_shared_function_bindings_need_one_determination_per_event[CensusAfterProjection] PASSED [ 4%] +tests/test_cooperative_function_bindings.py::test_function_scope_recomputes_each_invocation_without_a_parallel_cache[CensusBeforeProjection] PASSED [ 6%] +tests/test_cooperative_function_bindings.py::test_function_scope_recomputes_each_invocation_without_a_parallel_cache[CensusAfterProjection] PASSED [ 8%] +tests/test_cooperative_function_bindings.py::test_function_scope_body_failure_unwinds_cooperative_contexts[CensusBeforeProjection] PASSED [ 10%] +tests/test_cooperative_function_bindings.py::test_function_scope_body_failure_unwinds_cooperative_contexts[CensusAfterProjection] PASSED [ 12%] +tests/test_cooperative_function_bindings.py::test_function_scope_entry_and_exit_failures_unwind_in_both_mro_orders[EntryFailureBeforeProjection] PASSED [ 14%] +tests/test_cooperative_function_bindings.py::test_function_scope_entry_and_exit_failures_unwind_in_both_mro_orders[EntryFailureAfterProjection] PASSED [ 16%] +tests/test_cooperative_function_bindings.py::test_function_scope_entry_and_exit_failures_unwind_in_both_mro_orders[ExitFailureBeforeProjection] PASSED [ 18%] +tests/test_cooperative_function_bindings.py::test_function_scope_entry_and_exit_failures_unwind_in_both_mro_orders[ExitFailureAfterProjection] PASSED [ 20%] +tests/test_cooperative_function_bindings.py::test_mapping_postlude_failure_uses_the_shared_name_scope_owner[CensusBeforeProjection] PASSED [ 22%] +tests/test_cooperative_function_bindings.py::test_mapping_postlude_failure_uses_the_shared_name_scope_owner[CensusAfterProjection] PASSED [ 25%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[] PASSED [ 27%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\nisinstance = lambda *args: True\n] PASSED [ 29%] +tests/test_cooperative_semantic_preparation.py::test_composed_facts_equal_independent_capabilities[\ntype = lambda value: int\n] PASSED [ 31%] +tests/test_cooperative_semantic_preparation.py::test_compact_family_does_not_reenter_independent_check_collection PASSED [ 33%] +tests/test_cooperative_semantic_preparation.py::test_new_capability_is_only_a_declaration_and_cooperative_hook PASSED [ 35%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusBeforeProjection] PASSED [ 37%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[True-CensusAfterProjection] PASSED [ 39%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusBeforeProjection] PASSED [ 41%] +tests/test_cooperative_semantic_preparation.py::test_same_node_capability_composes_in_both_mro_orders[False-CensusAfterProjection] PASSED [ 43%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result = {'left': consume(value), 'right': 'name'}] PASSED [ 45%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[result: dict = {'left': consume(value), 'right': 'name'}] PASSED [ 47%] +tests/test_cooperative_semantic_preparation.py::test_same_node_exception_unwinds_projection_policy_and_scope[return {'left': consume(value), 'right': 'name'}] PASSED [ 50%] +tests/test_cooperative_semantic_preparation.py::test_exception_unwinds_both_capabilities_and_shared_owner PASSED [ 52%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 54%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[result: dict = {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 56%] +tests/test_cooperative_semantic_preparation.py::test_presentation_short_circuit_does_not_hide_another_capability[return {'left': isinstance(value.count, int), 'right': 'name'}] PASSED [ 58%] +tests/test_cooperative_semantic_preparation.py::test_context_only_family_keeps_its_existing_no_checks_contract PASSED [ 60%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-False] PASSED [ 62%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-False-True] PASSED [ 64%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-False] PASSED [ 66%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[False-True-True] PASSED [ 68%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-False] PASSED [ 70%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-False-True] PASSED [ 72%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-False] PASSED [ 75%] +tests/test_projection_shard_publication.py::test_full_family_is_published_once_per_shard[True-True-True] PASSED [ 77%] +tests/test_projection_shard_publication.py::test_list_collection_and_batch_share_the_same_publication PASSED [ 79%] +tests/test_projection_shard_publication.py::test_incomplete_publication_keeps_all_facts_in_memory PASSED [ 81%] +tests/test_raw_record_detectors.py::test_mapping_reads_match_schema_but_only_actual_decode_descends PASSED [ 83%] +tests/test_raw_record_detectors.py::test_unmodeled_shapes_aggregate_same_keys_and_ignore_small_dynamic_reads PASSED [ 85%] +tests/test_raw_record_detectors.py::test_redundant_checks_resolve_declared_self_parameters_and_keep_unknowns PASSED [ 87%] +tests/test_raw_record_detectors.py::test_detector_ids_are_derived_and_registered PASSED [ 89%] +tests/test_raw_record_detectors.py::test_cross_module_schema_and_annotated_owner_use_complete_context PASSED [ 91%] +tests/test_source_projection_owner.py::test_source_projection_retains_actual_parsed_owner_without_compact_ast_debt PASSED [ 93%] +tests/test_source_projection_owner.py::test_another_revision_reusing_ast_cannot_relabel_existing_source_observations PASSED [ 95%] +tests/test_source_projection_owner.py::test_reparsed_source_owns_distinct_canonical_read_nodes PASSED [ 97%] +tests/test_source_projection_owner.py::test_pickle_preserves_shared_module_node_identity_inside_source_projection PASSED [100%] + +============================== 48 passed in 4.23s ============================== + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-final","tests/test_cooperative_function_bindings.py","tests/test_cooperative_semantic_preparation.py","tests/test_projection_shard_publication.py","tests/test_raw_record_detectors.py","tests/test_source_projection_owner.py"]))" + User time (seconds): 6.31 + System time (seconds): 0.68 + Percent of CPU this job got: 98% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:07.10 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 90524 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 40 + Minor (reclaiming a frame) page faults: 102260 + Voluntary context switches: 114 + Involuntary context switches: 57 + Swaps: 0 + File system inputs: 10136 + File system outputs: 400 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-lexical.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-lexical.log new file mode 100644 index 0000000..bf093c7 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-lexical.log @@ -0,0 +1,51 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 -- /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python +rootdir: /home/ts/wt/nra-r1-preparation-owner-357-20261001 +configfile: pyproject.toml +collecting ... collected 27 items / 7 deselected / 20 selected + +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[def method(value=(hidden := 3)): pass] PASSED [ 5%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[async def method(value=(hidden := 3)): pass] PASSED [ 10%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[@(hidden := staticmethod)\ndef method(): pass] PASSED [ 15%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[class Inner((base := object)): pass] PASSED [ 20%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[value = lambda item=(hidden := 3): item] PASSED [ 25%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[values = (item for item in (1, 2))] PASSED [ 30%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[def method():\n internal = 3\n return internal] PASSED [ 35%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[class Inner:\n internal = 3] PASSED [ 40%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[try:\n pass\nexcept Exception as error:\n pass] PASSED [ 45%] +tests/test_lexical_binding_authority.py::test_enclosing_bindings_match_native_python[match value:\n case {'first': captured, **rest}: pass] PASSED [ 50%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = [item for item in (1, 2)]] PASSED [ 55%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[item = 0\nvalues = [item for item in (1, 2)]] PASSED [ 60%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = {item for item in (1, 2)}] PASSED [ 65%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = {item: item for item in (1, 2)}] PASSED [ 70%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = [(last := item) for item in (1, 2)]] PASSED [ 75%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = [lambda default=(last := item): default for item in (1, 2)]] PASSED [ 80%] +tests/test_lexical_binding_authority.py::test_comprehension_ownership_matches_live_function_scope[values = [lambda: (internal := item) for item in (1, 2)]] PASSED [ 85%] +tests/test_lexical_binding_authority.py::test_function_local_projection_uses_shared_header_bindings PASSED [ 90%] +tests/test_unique_identity_index.py::test_source_index_rejects_forced_target_handle_collision PASSED [ 95%] +tests/test_unique_identity_index.py::test_source_index_rejects_forced_file_handle_collision PASSED [100%] + +======================= 20 passed, 7 deselected in 0.18s ======================= + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -c import sys; sys.path.insert(0,"/home/ts/wt/nra-r1-preparation-owner-357-20261001"); import pytest; raise SystemExit(pytest.main(["-v","-o","addopts=","-p","no:cacheprovider","--basetemp=/home/ts/.cache/agent-scratch/nra-r1-function-scope-357-20261001/pytest-lexical","tests/test_lexical_binding_authority.py","tests/test_unique_identity_index.py::test_source_index_rejects_forced_target_handle_collision","tests/test_unique_identity_index.py::test_source_index_rejects_forced_file_handle_collision","-k","enclosing_bindings or comprehension_ownership or function_local_projection or source_index_rejects_forced"]))" + User time (seconds): 2.78 + System time (seconds): 0.11 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.90 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85072 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 24891 + Voluntary context switches: 30 + Involuntary context switches: 16 + Swaps: 0 + File system inputs: 56 + File system outputs: 64 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-after.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-after.log new file mode 100644 index 0000000..5b42909 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-after.log @@ -0,0 +1,27 @@ +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "raw_sha256": "7a30d8cb97412abfbd6a113368712e4f56a71897cc1858d1b4c640ebeca019a1", "content_signature": "79730eaec7c75ee228c3c8b816d8fa82", "collection_seconds": 0.20858151197899133, "presentations": 116, "checks": 10, "supplements": 138} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py", "raw_sha256": "245f8e47ebc4456c67db8d180efa223362af292d73e7facb62264b7ae5f53a9f", "content_signature": "828ab748be59018c6d14f0bd7916d311", "collection_seconds": 0.2512098620063625, "presentations": 215, "checks": 19, "supplements": 88} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "raw_sha256": "ca795d41eac570fab9eb81d94f71cce01f21529a2ab3c143519328654104b1e1", "content_signature": "cd23388afcd0c8035e3dc3e9b23eadcf", "collection_seconds": 0.13600456505082548, "presentations": 119, "checks": 6, "supplements": 62} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "raw_sha256": "2a31a0a132ac3ca611a1c53daa575b8fa471cf6a53f0d88738a926d14a194eaf", "content_signature": "8d5920e4ec4c134932598f5a54ae1d72", "collection_seconds": 0.010690875991713256, "presentations": 8, "checks": 1, "supplements": 4} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/check_semantic_preparation_parity.py --advisor-root /home/ts/wt/nra-r1-preparation-owner-357-20261001 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py" + User time (seconds): 3.59 + System time (seconds): 0.10 + Percent of CPU this job got: 99% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.70 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85424 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 25175 + Voluntary context switches: 25 + Involuntary context switches: 26 + Swaps: 0 + File system inputs: 0 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-before.log b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-before.log new file mode 100644 index 0000000..05f69c4 --- /dev/null +++ b/docs/validation/r1_preparation_owner_357_20261001/function-scope-reuse/function-scope-parity-before.log @@ -0,0 +1,27 @@ +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py", "raw_sha256": "7a30d8cb97412abfbd6a113368712e4f56a71897cc1858d1b4c640ebeca019a1", "content_signature": "79730eaec7c75ee228c3c8b816d8fa82", "collection_seconds": 0.20862350799143314, "presentations": 116, "checks": 10, "supplements": 138} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py", "raw_sha256": "245f8e47ebc4456c67db8d180efa223362af292d73e7facb62264b7ae5f53a9f", "content_signature": "828ab748be59018c6d14f0bd7916d311", "collection_seconds": 0.25155621202429757, "presentations": 215, "checks": 19, "supplements": 88} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py", "raw_sha256": "ca795d41eac570fab9eb81d94f71cce01f21529a2ab3c143519328654104b1e1", "content_signature": "cd23388afcd0c8035e3dc3e9b23eadcf", "collection_seconds": 0.14136431296356022, "presentations": 119, "checks": 6, "supplements": 62} +{"path": "/home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py", "raw_sha256": "2a31a0a132ac3ca611a1c53daa575b8fa471cf6a53f0d88738a926d14a194eaf", "content_signature": "8d5920e4ec4c134932598f5a54ae1d72", "collection_seconds": 0.011153803032357246, "presentations": 8, "checks": 1, "supplements": 4} + Command being timed: "timeout --signal=TERM --kill-after=3s 60s taskset -c 0 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B -u tools/check_semantic_preparation_parity.py --advisor-root /home/ts/wt/nra-r1-preparation-owner-357-20261001 /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/semantic_descent.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/class_index.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/ast_tools.py /home/ts/wt/nra-bounded-full-audit-20260929/nominal_refactor_advisor/record_checks.py" + User time (seconds): 3.50 + System time (seconds): 0.06 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.57 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 85264 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 2 + Minor (reclaiming a frame) page faults: 24744 + Voluntary context switches: 29 + Involuntary context switches: 27 + Swaps: 0 + File system inputs: 280 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0