Repository navigation
Replies: 1 comment
|
This is my proposed build scope |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Supersedes #951,
which was written before @arummler's architectural review on
PR #936
and which got four things wrong. Those corrections are §8.
Status: proposed, nothing built. Code checked against master
ef1fbd79b.1. The fact that should decide this
On 2020-09-24, Simon De Backer committed
3b9ba6a26— "WIP: Add Kabel toqet" — and, the same day,
36dbe6545, "Add TODO compile var". The cable datalayer landed complete: the field, its XML persistence, its settings defaults,
its copy semantics. The user interface was disabled behind a compile switch that
was never turned on.
Six years later, on master:
TODO_LISTis commented out incmake/developer_options.cmake:32, so the#elsearm is live in every build ever shipped.34 language files contain "Ajouter au câble". Translators in thirty-four
languages have translated a sentence whose visible value is the English string
wouldn't this be nice?, attached to a radio button nobody can click.And the consequence, measured across the 25 shipped example projects: 3,190
conductors, zero cable values. Not because users do not want cables — because
for six years there has been nowhere to type one.
2. What @arummler actually said, and what it costs
His review of #936 is the best architectural criticism this feature has had.
Summarised, with what each point does to the earlier scope:
hasShieldflag cannot describe CAT7 S/FTP, triax, or foil-inside-braid — use a nested tree<core index colour section>listHe is right on all five. The disagreement in this document is not with the
model — it is with when to build it, and that disagreement is settled by §1.
3. The vocabulary, settled first
@arummler asked for this explicitly: "One just has to be careful with the
vocabulary … better to get it right before the confusion starts."
PhysicalWireis the wrong name, and the reason is checkable rather thanaesthetic. QET already uses wire / fil as a synonym for conductor /
conducteur:
ConductorProperties::m_wire_colorpersists as the XML attributeconductor_colorand is labelled "Couleur du fil" / "Wire color"--export-wiresemits conductor numbersSo
Conductor/PhysicalWirereads in French as conducteur / fil physique —the same word twice. The distinction that works is not logical-versus-physical
but line versus core:
ConductorCableCoreCableCableTypeCableScreenendMarkingBrin already ships with exactly this meaning:
cable_3wires.elmtis French"Cable 3 brins".
core,CableandCableTypeare unused as identifierstoday. Reserved and deliberately unspent: faisceau / harness, connecteur /
connector — that reservation is the hook his point 8 asks for.
A loose wire is a cable whose type has one core, exactly as #936's
WireSpecalready does with
isCable() { return numCores > 1; }.4. The plan: a ceiling first, a model only on evidence
Each release ships on its own and is independently abandonable. Nothing before
release 3 changes the file format.
Release 1 — switch on what has been finished since 2020
No new state, no format change, and it is filmable in ninety seconds — which is
what @scorpio810 actually asked for on #936.
setDisabledpair atconductorpropertieswidget.cpp:248-249andthe pair at
potentialselectordialog.cpp:367-368; replace"wouldn't this be nice?"with the real value.RealTerminal::cable()andcableWire()(
TerminalStrip/realterminal.cpp:162-172) from the conductor's existingm_cableand wire number. Two terminal-strip columns, blank since they werewritten, become populated.
m_cable/m_busto Search & Replace(
searchandreplaceworker.cpp:420-440) so the field is mass-editable.Release 2 — the report, still no format change
cableandbuscolumns on the project database'sconductortable(
projectdatabase.cpp:667-679), populated from the document. Free: thedatabase is derived and rebuilt on every load.
with from/to element, terminal, folio, colour and section — surfaced through
--export-cable-scheduleand the existing on-diagram table machinery.This closes issue #405 and the seven forum requests for a cable list, and it is
a query rather than a forty-third scene-walker. Three people have written
external Python tools to get this report. It needs none of the architecture
below.
Then stop, and measure
The honest number today is 0 cable values across 3,190 conductors, and it is
uninformative because the field was unusable. Re-measure real projects six
months after release 1.
If people are not tagging cables when tagging is finally possible, the instance
model has no user. If they are, the next question arrives on its own — which
core? — and releases 3 and 4 answer it with evidence behind them instead of
ahead of them.
Release 3 — the smallest instance that is still correct
Only on that evidence.
A project-level
<cables>block, modelled on the existing<terminal_strips>block (
qetproject.cpp:1144-1152), holding cable instances with adesignation, an optional catalogue reference, a core list and a
DiagramContextbag for @arummler's point 7.The allocation link as its own
Conductormember, outsideConductorProperties, serialised as a child element:The pattern already ships:
m_autoNum_seqis exactly this — a separateQ_PROPERTY, a separate XML child, copied only where an author deliberatelywrote the copy (
conductor.h:50,conductor.cpp:1099,:1178-1179).The core is addressed by a stable id, never an index. An index breaks the
moment a core is inserted or reordered, and cannot address a nested structure
at all. This corrects both Cable core allocation: the layer #934 deferred, and the one decision it needs #951 and Wire/cable catalogue (#529 restored): French UI, search and green/yellow fixes #936, which bakes
W31:3into a displaystring.
Only the core id is stored. The cable is the core's parent and is therefore
derivable; storing both invites them to disagree.
Release 4 — the nested tree
@arummler's point 6, as a pure addition. One recursive node type — a node's
children are exactly what it physically encloses — expressed as
<bundle>,<shield>,<core>,<fibre>. A shield is a node that both contains and isterminable, its terminable body being its drain wire, which is why coax braid
and the shipped
ecran_3p.elmtfall out of the model instead of needing anexception.
Release 3 emits only depth-1 trees, which are a special case of the same
grammar, so CAT7 and triax arrive later with no format break.
5. Why this order, and not the model first
Because the model-first order is the one that has already failed three times.
cable_assist)There is a fourth failure mode available, and it is the mirror image: build a
large object model and never ship a drawing. Releases 1 and 2 are chosen
specifically because they cannot fail that way — they are visible on the day
they merge.
One concrete risk makes shipping format before consumers worse than merely
wasteful.
QETProject::toXml()rebuilds the project file from a fixed list, soif a format feature is merged and later reverted — and this repository has
several same-day reverts on record — the next save silently discards the
data users entered under it. Release 3 is the first release that carries that
risk, which is another reason it comes after evidence rather than before.
6. What #936 needs before it lands
It should land. It is the type catalogue, and every comparable tool has one as a
distinct layer. But it should land as something that cannot be built on,
which is precisely @arummler's condition:
lang/qet_en.ts. @scorpio810 has now asked twice; translation workbelongs on its own track.
and section to this conductor". Remove the core selector and the write of a
W31:3core reference into the label field — that is the exact mechanismrelease 3 replaces, and leaving it in is what invites a workflow to grow on
it.
sources/custom/wirecatalogue/→sources/wirecatalogue/, andthe twenty "Copyright 2026 Trovo Tech Solutions" headers normalised to QET's
standard GPL header.
application-data directory during the editor's constructor.
7. Decisions needed
the only decision needed to start.
@arummler.
model wanted regardless?
busfollowcablethroughout?8. Corrections to discussion #951
Four, and they are load-bearing.
Conductor::setPropertyToPotential()smearsm_cableacross a potential andthat the feature hinges on changing it. That function has zero callers —
only a declaration (
conductor.h:118) and a definition(
conductor.cpp:1630). Implementing the fix as written would have been ano-op. The real copies of a whole
ConductorPropertiesonto other conductorsare elsewhere:
elementsmover.cpp:236,239,diagramcommands.cpp:187,conductorautonumerotation.cpp:189,214,249,elementspanelwidget.cpp:796,conductorcreator.cpp:61,deleteqgraphicsitemcommand.cpp:230. Keeping theallocation out of
ConductorPropertiesentirely — §4, release 3 — avoids allof them at once, which is what @arummler's point 5 buys.
release 4.
the link carries the reference; the values are read through it.
cable_uuid+cable_coreindex is wrong — one stable core id, thecable derived from it.
#951 §1–§3 and §6 stand, and its phases 0–1 are releases 1 and 2 here, which
remain the highest-value work in the whole programme.
9. Non-goals
--run script.jsscripting API is the write path if one is wanted.cablevalues. They stay and keep working.All reactions