NEW ROOTS DEVELOPMENT
HomeTool GuideVDC QCDrawing QC

Who Did It (Edit Track)

Off by default since 1.108.0: VDCWHO → Track turns tracking on for a seat. Once on, a background watcher stamps every created or edited entity with the creator, last editor, timestamps, and command on an Xrecord (mirrored into the Properties palette); VDCWHO queries those stamps by Pick, User, Since, Track, Backfill, or pUrge. A seat-level kill switch, env var VDC_EDITTRACK=0, keeps a seat from ever hooking anything (queries still work), and the Track toggle fully detaches the hooks when off.

Command VDCWHO · VDC QC tab › Drawing QC panel
Off by default since 1.108.0: VDCWHO → Track turns tracking on for a seat. Once on, a background watcher stamps every created or edited entity with the creator, last editor, timestamps, and command on an Xrecord (mirrored into the Properties palette); VDCWHO queries those stamps by Pick, User, Since, Track, Backfill, or pUrge. A seat-level kill switch, env var VDC_EDITTRACK=0, keeps a seat from ever hooking anything (queries still work), and the Track toggle fully detaches the hooks when off.
Watcher collects touched entities per command → writes VDC_EDITTRACK Xrecord + VDC_TRACK property set. Object appended (a COPY = creation) created by jsmith 2026-05-02 14:30 Same object, later STRETCH last tracked edit by cbarrett 2026-06-11 09:15 (STRETCH) Properties → Extended Data (VDC_TRACK) CreatedBy jsmith Created 2026-05-02 14:30 LastEditedBy cbarrett LastEdited 2026-06-11 09:15 EditCommand STRETCH Honesty rules • No retroactive history, objects created before the bundle was installed read "created before tracking." • Only bundle-loaded sessions are tracked; an untracked edit leaves the PREVIOUS editor named. • Every printout says "last TRACKED edit", trustworthy office-wide only when every seat runs the bundle. • Cancelled / failed commands are never stamped; stamp writes run with undo recording disabled (one U undoes your edit).
Tracked entity   Creator (CreatedBy)   Last tracked editor   EditCommand   Honesty rules

What it does

  • Watcher: attaches to every open document, listens to object-appended / object-modified events and collects touched entities, nothing is written inside a reactor.
  • Stamp on command end: each entity gets a VDC_EDITTRACK Xrecord, CreatedBy/CreatedAt once, LastEditedBy/LastEditedAt/EditCommand overwritten each edit.
  • Works on every entity, plain lines and text as much as Civil 3D objects; a COPY counts as creation by the copier.
  • Writes run with undo recording disabled; cancelled / failed commands discard their collection so rolled-back edits never stamp. A save flushes pending stamps too, catching Properties-palette edits made outside a command.
  • ~120 bytes/object; MaxObjectsPerCommand (5000) caps huge batch commands and reports when it caps.
  • Exempt commands (ExemptCommands) are ignored wholesale, never collected, stamped, or capped. Ships exempt: AUDIT, RECOVER, RECOVERALL, PURGE, -PURGE, VDCSTYLEAUDIT, VDCSTDQC. Keeps a drawing-repair AUDIT from burying real authorship under "AUDIT".
  • Stamps travel with the DWG and clone with copied objects; xref'd objects show their stamps when queried in the source drawing.

Modes & settings

  • Pick (default): click objects for a per-object who/when/command line; User: grip-select everything a named user last touched; Since: grip-select everything with a tracked edit on/after a yyyy-mm-dd date.
  • Track: toggles tracking on/off, persisted as Enabled. Backfill: mirrors existing stamps into the property set (run once on pre-v1.1.0 drawings). pUrge: strips every stamp + VDC_TRACK set (confirmation required).
  • Properties mirror: stamps mirror into ACA property set VDC_TRACK, shown in the Extended Data tab, authorship with no command at all.
  • The compact Xrecord is the source of truth; the property set is the display layer, which roughly doubles per-object overhead, set MirrorToPropertySets: false to skip it.
  • Settings: VDC_EDITTRACK_SETTINGS, default %APPDATA%\VDC\EditTrack\settings.json.

Dialog

Who Did It (Edit Track) dialog
Who Did It (Edit Track), VDCWHO

When to use it

  • Finding out who created or last changed an object, for coordination or accountability.

How to run it

  1. Run VDCWHO > Track once on each seat that should track (it stays on across sessions; the startup line says tracking ON / OFF).
  2. Run VDCWHO - the dialog carries the mode (Pick / User / Since / Track / Backfill / Purge) plus the user-name and date fields.
  3. Read the who/when/command result (also visible in Properties -> Extended Data).

Options

  • Backfill: stamp objects that pre-date tracking.
  • Seat kill switch: set the environment variable VDC_EDITTRACK=0 and this seat never hooks anything (zero overhead; queries still work). It outranks the Track toggle.

Watch out for

  • No retroactive history - only edits made while the bundle was loaded are tracked.
  • A seat with VDC_EDITTRACK=0 (or Track off) leaves no trace - the stamps keep naming the previous editor.

Related: Style QC