Skip to content

History / Linking Equipment to Tickets

Revisions

  • Update for the Links-strip move (#1068) Equipment and CMDB objects are pills in the Links bar now, not sections below the thread. Both pages updated to match. The dev guide gains section 9 on why: the strip already carried a comment, written for the Jira work, saying a link belongs in the strip rather than a panel of its own. Equipment qualifies by that definition and the original card was the deviation. Also records what the space problem actually was - a section cost a bordered card whether or not it had contents, so an empty ticket paid six times to say "nothing here yet" six times - and why the two are still shown distinctly rather than merged, since a broken mouse will never be a configuration item. Plus the trap: the picker host must be a CHILD of .problem-strip, because mobile.js relocates the strip into a phone sheet by selector and a sibling would be left behind where the user cannot see it. Notes the two loose ends left behind (dead .cmdb-* CSS, and a dead SECTIONS entry in mobile.js) so neither looks intentional later.

    @edmozley edmozley committed Aug 14, 2026
  • Add "Linking equipment — Developer Guide" (discussion #57) Completes the pair. The user page said what it does; this says why the code looks the way it does. Sections that exist because someone will otherwise undo them: - Why ticket_assets has TWO creator columns where ticket_cmdb_objects has one - analyst 7 and user 7 are different people. - The three gates on the write path, and specifically that gate 3 (same-company) is the one that matters for the exact role which can satisfy gates 1 and 2 together. It is also the one easiest to talk yourself out of. - Why the portal re-checks ownership when the dropdown is already scoped, cross-referenced to the get_users.php leak in #54: a scoped list is not a check. - Why the location clause in the picker's WHERE is load-bearing rather than a nicety, and that an empty result may be missing location data rather than a broken query. - The MERGE_MOVE_DEDUPE trap that produced #1064, written up as the general rule: a wrong column name in a table-driven loop is a silent no-op, not a mismatch. Plus the forged-session recipe (no trailing newline, or PHP reports what looks like an auth failure) and the control set, including that the CASCADE has to be proven functionally because db_verify creates FKs inside an empty catch. Records that the neighbouring .cmdb-* CSS has no dark-mode handling at all - left alone rather than changed as a side effect, but real. Every file named in the table verified to exist; every wiki link resolves.

    @edmozley edmozley committed Aug 14, 2026
  • Add "Linking equipment to tickets" (discussion #57) Covers both halves: attaching an asset to a ticket, and the Tickets tab this creates on the asset. Spells out three things a reader would otherwise have to discover: - The picker searches LOCATION as well as hostname/model/serial/tag, and why that matters. Nobody knows a meeting-room TV's hostname; they know where it is. Includes the warning that this depends on assets actually having locations set, which is missing data rather than a broken search if it comes back empty. - Requesters can only ever pick their OWN equipment, and shared kit is therefore deliberately absent from the portal. Documented as a decision with the two rejected alternatives and why each was worse, rather than left looking like a gap. - What happens to links on merge, delete and re-link, and that a ticket and an asset must share a company. Also flags that CMDB objects and assets are linked to tickets separately and are not the same thing - the two sections sit next to each other in the reading pane and will be confused otherwise. Cross-linked from Assets, Tickets and the sidebar.

    @edmozley edmozley committed Aug 14, 2026