You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Complete the interface-family replacement by moving every remaining caller to the new family package, removing the legacy private family implementation, and proving behavioral and performance equivalence. The engine must finish as a compatibility facade with one authoritative family path behind it.
Acceptance criteria
Automatic installation, prediction, interactive preview and apply, bulk operations, virtual-chassis reapplication, conversion, and deferred reconciliation all use the new family package.
The engine contains only compatibility orchestration and unrelated rule behavior; it does not retain family discovery, planning, mutation, conversion, or reconciliation logic.
Legacy private family helpers, legacy family dictionaries and tuples, and alternate mutation paths are deleted.
The family package does not import the engine facade, and shared dependencies point only toward lower-level rule-selection and naming seams.
Existing public engine entry points remain compatible for downstream callers.
No compatibility layer remains for private helpers.
The project domain glossary, architectural decisions, and user-facing documentation describe the final interface-family behavior consistently.
The complete supported NetBox and Python test matrix is green, including real PostgreSQL transaction, signal, prediction, preview, bulk, conversion, and virtual-chassis coverage.
No test simulates an out-of-band rename with a queryset update on an interface name column. Each helper writes the row the way another actor would, through a model save with this plugin's own receivers muted, so the suite exercises the real write path and does not depend on an environment that permits raw bulk writes to interface rows.
Query-count and query-scaling checks are no worse than the existing-implementation baseline.
The after artifact contains PostgreSQL work, raw wall-time and process-CPU samples, median, p95, and environment revisions in the same normalized format as the before artifact.
The comparison report shows no database-work or machine-time regression beyond the baseline's observed variance. Any detected regression is resolved before completion.
The before artifact, after artifact, and readable comparison summary are retained as review evidence.
No new plugin database schema or recurring machine-time CI gate is introduced.
Implementation note
engine.py is down from 1619 lines to 785 and holds no family discovery, planning or mutation.
Device-level renaming gained the revalidation and row locking it never had.
Three criteria are still open, all about the performance evidence rather than the code:
The after run was taken while the host was at load 17 to 44 from unrelated projects, so its wall
and CPU samples are not evidence. The scenarios need rerunning on an idle host.
The database-work half is settled and needs no rerun. This plugin's own committed callback issues
fewer or the same statements in every scenario, from unchanged where no rule matches to -36% on
virtual-chassis reapplication of eight modules.
Two complete_model_save scenarios issue more statements than the baseline. The comparison
attributes every added statement to core_objecttype, extras_customfield and extras_cachedvalue, which is NetBox's own per-save bookkeeping for the object types and custom
fields the test database holds, and that population grew between the two runs. The control is the
no-rule scenario, where this plugin returns before doing anything and its callback issues the same
7 statements in both runs while the surrounding save costs 17 more. Neither increase is work this
refactor added.
Evidence is in performance/baselines/ and performance/comparisons/.
Parent
#73
What to build
Complete the interface-family replacement by moving every remaining caller to the new family package, removing the legacy private family implementation, and proving behavioral and performance equivalence. The engine must finish as a compatibility facade with one authoritative family path behind it.
Acceptance criteria
Implementation note
engine.pyis down from 1619 lines to 785 and holds no family discovery, planning or mutation.Device-level renaming gained the revalidation and row locking it never had.
Three criteria are still open, all about the performance evidence rather than the code:
and CPU samples are not evidence. The scenarios need rerunning on an idle host.
fewer or the same statements in every scenario, from unchanged where no rule matches to -36% on
virtual-chassis reapplication of eight modules.
complete_model_savescenarios issue more statements than the baseline. The comparisonattributes every added statement to
core_objecttype,extras_customfieldandextras_cachedvalue, which is NetBox's own per-save bookkeeping for the object types and customfields the test database holds, and that population grew between the two runs. The control is the
no-rule scenario, where this plugin returns before doing anything and its callback issues the same
7 statements in both runs while the surrounding save costs 17 more. Neither increase is work this
refactor added.
Evidence is in
performance/baselines/andperformance/comparisons/.Blocked by