From 34b9a348963c7009ffde4e26824592d036b6f127 Mon Sep 17 00:00:00 2001 From: host Date: Mon, 2 Nov 2026 19:26:01 +0000 Subject: [PATCH] code-to10 reconcile: re-pin handler accounting and longfunc inventory for the unified line Target keeps the 6-mixin split, so the source line's 239/223/16 and its mixin-homed 17-method list do not apply here. Recomputed by AST on this line: handler accounting 244 total / 150 in server.py / 94 moved, no duplicates (243/149 + _update_goal_task); longfunc still 17 methods with the same names, 16 homed in server.py and _full_auto_execute in handler_fullauto.py, plus module-level migrate_tasks_table in server.py (114 lines). No method split or dropped; both tests' docstrings state the re-pin explicitly. --- cloud/tests/test_handler_split_conformance.py | 14 ++++--- cloud/tests/test_longfunc_inventory.py | 40 ++++++++++++------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/cloud/tests/test_handler_split_conformance.py b/cloud/tests/test_handler_split_conformance.py index e8546b5..8d71c73 100644 --- a/cloud/tests/test_handler_split_conformance.py +++ b/cloud/tests/test_handler_split_conformance.py @@ -9,10 +9,14 @@ Pins the split contract so a future violation fails CI: as #238 arch_conformance.scan_imports); - server.py re-exports the moved shared helpers as identical objects, so `from cloud.server import _task_to_dict` keeps working; -- handler method accounting: 243 total, 149 left in server.py itself, +- handler method accounting: 244 total, 150 left in server.py itself, 94 in mixins, no name defined twice. (v5 rebase: main #275 added 5 resident methods that legitimately stay in server.py, so the - stack's 238/144 becomes 243/149; moved count stays 94.) + stack's 238/144 becomes 243/149; moved count stays 94. + Reconcile: goal live-update adds _update_goal_task in server.py, + so 243/149 becomes 244/150; moved count still 94. The source + line's 239/223/16 counts its 12-mixin split and do not apply on + this line, which keeps the target's 6-mixin split.) Only the standard library; no real model, no network, no secrets. """ @@ -140,7 +144,7 @@ class TestReexports(unittest.TestCase): class TestMethodAccounting(unittest.TestCase): - def test_total_243_no_duplicates(self): + def test_total_244_no_duplicates(self): seen = {} dups = [] classes = [CloudControlPlaneHandler] @@ -155,9 +159,9 @@ class TestMethodAccounting(unittest.TestCase): dups.append((seen[name], cls.__name__, name)) seen[name] = cls.__name__ self.assertEqual(dups, []) - self.assertEqual(total, 243) + self.assertEqual(total, 244) self.assertEqual(len(_own_methods(CloudControlPlaneHandler)), - 243 - 94) + 244 - 94) if __name__ == "__main__": diff --git a/cloud/tests/test_longfunc_inventory.py b/cloud/tests/test_longfunc_inventory.py index 45cc008..0d0cc9a 100644 --- a/cloud/tests/test_longfunc_inventory.py +++ b/cloud/tests/test_longfunc_inventory.py @@ -7,9 +7,19 @@ pins the full 17-method list by AST over ``cloud/handler_*.py`` plus ``cloud/server.py`` -- no external summary document is the source of truth, the code itself is. +Reconcile re-pin (code-to10-reconcile): the unified line keeps +the target's 6-mixin split, so 16 of the 17 methods live in +``cloud/server.py`` (``CloudControlPlaneHandler``) rather than in +the source line's lifecycle/core/admin/browser/webhook mixins; +the method NAMES are the same 17, only their homes differ, and +no method was split or dropped to reach this list. The +module-level >100-line definition likewise lives in +``cloud/server.py`` (``migrate_tasks_table``, 114 lines) on this +line, not in ``handler_support.py``. + Counting rule, stated because a naive AST count gives 18: the 17 are class methods. The 18th >100-line definition, -``handler_support.migrate_tasks_table`` (module-level function, +``server.migrate_tasks_table`` (module-level function, not a mixin method), is asserted separately as the ONLY module-level >100-line definition, so the 17/18 difference is explained, not hidden. No method is split by this batch: @@ -21,20 +31,20 @@ import unittest from pathlib import Path EXPECTED_METHODS = { - ("handler_admin.py", "AdminMixin._task_pr"), - ("handler_admin.py", "AdminMixin._metrics"), - ("handler_browser.py", "BrowserMixin._browser_stream"), - ("handler_core.py", "TaskCoreMixin._create_task"), - ("handler_core.py", "TaskCoreMixin._create_followup"), + ("server.py", "CloudControlPlaneHandler._task_pr"), + ("server.py", "CloudControlPlaneHandler._metrics"), + ("server.py", "CloudControlPlaneHandler._browser_stream"), + ("server.py", "CloudControlPlaneHandler._create_task"), + ("server.py", "CloudControlPlaneHandler._create_followup"), ("handler_fullauto.py", "FullAutoMixin._full_auto_execute"), - ("handler_lifecycle.py", "TaskLifecycleMixin._task_thread_read"), - ("handler_lifecycle.py", "TaskLifecycleMixin._deliver_to_thread"), - ("handler_lifecycle.py", "TaskLifecycleMixin._task_wait"), - ("handler_lifecycle.py", "TaskLifecycleMixin._merge_task"), - ("handler_lifecycle.py", "TaskLifecycleMixin._loop_run"), - ("handler_lifecycle.py", "TaskLifecycleMixin._release_task"), - ("handler_lifecycle.py", "TaskLifecycleMixin._continue_task"), - ("handler_webhook.py", "WebhookMixin._handle_github_webhook"), + ("server.py", "CloudControlPlaneHandler._task_thread_read"), + ("server.py", "CloudControlPlaneHandler._deliver_to_thread"), + ("server.py", "CloudControlPlaneHandler._task_wait"), + ("server.py", "CloudControlPlaneHandler._merge_task"), + ("server.py", "CloudControlPlaneHandler._loop_run"), + ("server.py", "CloudControlPlaneHandler._release_task"), + ("server.py", "CloudControlPlaneHandler._continue_task"), + ("server.py", "CloudControlPlaneHandler._handle_github_webhook"), ("server.py", "CloudControlPlaneHandler._dispatch_task_route"), ("server.py", "CloudControlPlaneHandler._dispatch"), ("server.py", "CloudControlPlaneHandler._dispatch_project"), @@ -74,7 +84,7 @@ class LongFuncInventoryTestCase(unittest.TestCase): # rather than silently dropped from the count. self.assertEqual( module_funcs, - {("handler_support.py", "migrate_tasks_table")}) + {("server.py", "migrate_tasks_table")}) if __name__ == "__main__":