AI Clarifying Questions: A Template From Seven Real Ones

 Part 8 of a series — a Dynamo tunnel geometry that was already finished, a 39-sheet Excel workbook it had never been wired to, the web viewer built to referee the two, and the Revit add-in at the end of it.

On 14 July the AI stopped guessing and wrote a list of things it could not decide. Seven questions, thirteen evidence crops, one document. The answers came back the same night, and one of them — a single sentence about a block of concrete nobody had bothered to name — collapsed three other questions and cleared a month of round trips before dawn.

Part 4 summarised those seven questions in a table. That table is the most compressed thing in the whole series, and compression hid the interesting part. The answer to Q2 did not arrive because the engineer suddenly became more forthcoming. It arrived because the question had a shape that made it cheap to answer. This part goes through all seven — the wording, the interim handling, why the machine could not settle it alone, what the attached image was pointing at, whether an answer came, and what the answer changed.

1. What an estimate costs, and what a question costs

The endpoint that cost three estimates. R2 and R3 measured at both ends and printed together — the measurement was cheap; deciding which rule terminated which arc was not.

Both are responses to the same condition: the data does not determine the answer. They have wildly different price tags, and the reason the price difference is invisible is that the cost of a wrong estimate is never paid at the moment of estimating.

The estimate: R2's endpoint, three times

The single most expensive stretch of the project was one endpoint. Where does the side-wall arc R2 stop?

RoundInstructionWhat the AI read it asResult
v6marked-up image: "r2 and r3's arc ends have to connect like this"Move both R2 and R3 to the drawn toe pointLining band self-intersected — discarded
v7"the current endpoint is probably right for r3's termination. change r2's termination, refer to the image"Terminate R2 at the upper boundary lineClose, but in the wrong place
v8"I said the R2 endpoint has to come beside the top of the body"R2 = topmost intersection of the R2 circle with the body's upper outlineSettled

Two mistakes stacked. The AI could not tell whether a marked-up image was pointing at a feature of the source drawing or at a marker the viewer itself had drawn; and it applied one termination rule to both R2 and R3 when the two rules are genuinely different. R3 ends at a fixed drawing feature. R2 ends at a rule with no dimension attached.

Each of those rounds is not one edit. A geometry contract change in this pipeline has a fixed six-target update list: the main panel, two insets, the full-compare overlay, the partial assembly view, the 3D group, and the cache buster. Miss one and the views disagree with each other, which is exactly what happened — the main view drew the new contract while the insets still drew concentric offset bands, and the engineer was reduced to asking which view is true. On top of that, every contract change requires re-pairing the validators that pin it; the v9 pass touched eight validator files.

And the viewer is not the end of the line. Its geometry becomes a payload, the payload becomes input to a Revit add-in, and a self-intersecting polyline renders as a perfectly ordinary shape in a browser while Revit's loft rejects it outright. That class of defect took five days to attribute and was only closed by writing the Revit exception verbatim into a run log. The v6 round produced exactly that shape.

There is a second multiplier: once a wrong decision is in, finding it is not a targeted operation, it is a sweep. A fix applied to the add-in but not the viewer left a wrong triangle sitting in 6 of 15 part views, found only by sweeping all fifteen. One sceptical "are you sure?" triggered a full grep for deletion calls and turned up a third deletion path nobody had accounted for.

The question: seven of them, one document

Against that, price the alternative. Seven questions, written in an afternoon, each with the measured numbers, two or three options, an impact line and a cropped image. Total: one HTML document and thirteen crops.

The worst case for a question is that nobody answers it. That is not hypothetical — the same document carried a fourteen-row member dictionary with a request to confirm which of the assumed Korean site terms were real, and that request has never been answered. Its total cost is one line in a table that says "assumed". Compare that with a discarded band, a wrong endpoint, a six-view resync and a five-day exception hunt.

The AI estimated the R2 endpoint three times and asked about it once. The three estimates cost three re-contracts. The one question cost a paragraph.

2. The seven questions

Q1, left: the opening symbol boxed on the source, with the measured size printed beneath it. The cell says 300 x 300; the drawn symbol measures 217.7 x 333.9.

Q1, right: a symbol that looks the same size beside a cell that says something different (200 x 300 versus 212.9 x 333.9). The pairing is the argument — the discrepancy is not symmetric.

Q2, the question that mattered: the stepped block boxed so that the 50 / 50 pair and the barrier-prefixed labels are visibly inside the box. That is the whole evidentiary claim — these labels attach to this block.

The other half of the Q2 pair: the tool's own geometry-only extraction of both sides. Source crop plus own output, labelled as such, is the single most useful convention in the document.

Q3: a boxed region holding two dimension lines and no member outline at all. There is no way to tell from the picture which member, if any, those dimensions belong to.

Q4 as the tool sees it: the slab tail meeting the drain pocket, with the current flat-cut end marked.

Q4 against the source: the P18-P19 slab tail boxed, with a note that it reaches the end face. Question, own evidence and source evidence arrive in one screen.

Q7: the band where the red and purple offsets converge, boxed on the drawing. The source geometry interferes with itself here, so the tool asks instead of silently trimming.

The document opened by declaring its own evidentiary basis: the current contract, plus measurements taken across the payload — 33 sections, 66 frames, 132 sides — plus source-drawing references and viewer captures from the same afternoon. Each question carried an [impact] line stating what would change downstream depending on the answer, and a closing note: you can answer verbally or in chat and I will write it into this document.

Q1 — the opening: cell or symbol?

Tagged: blocking.

Left opening — Excel 300 × 300 versus the drawn symbol. Which is production truth?

Interim handling. The opening inside the utility body is drawn from Excel cells. The validator passes on the cell values; the raster comparison flags an authority difference on the left side, and that flag is carried as non-blocking.

The measurements as posted:

SideExcel cell (W × H)Symbol, measured (W × H)Difference
Left300 × 300217.7 × 333.9width −82.3 / height +33.9
Right200 × 300212.9 × 333.9width +12.9 / height +33.9

Why the machine could not settle it. The project had a general principle — Excel numbers are production truth, the trace is reference. But the authority table built in the same document showed that the principle has per-region exceptions, and whether a given region is an exception is not derivable from the region's data. Worse, both readings are internally consistent here. The two symbols are drawn at almost the same size (218 versus 213) while the cells say 300 versus 200. Either the cells encode a real left/right difference that the symbol never bothered to draw to scale, or one cell was mis-entered. Nothing in the workbook distinguishes those. 82.3 mm on the left is large enough that "trust the general principle" is a decision, not a default.

How the options were built. Three, each a complete position: A the cell is truth, the symbol is a not-to-scale concept marker, fix left 300 × 300 and right 200 × 300. B the symbol is truth, the cell is a data-entry error, re-contract off the symbol proportions. C adjudication requires the original CAD, so hold and keep the warning up.

What the images point at. Two crops of the source drawing, left and right, each with a red box around the opening symbol and the measured size printed beneath it. They are deliberately paired: the left crop shows the symbol with its height label attached and a stacked 150 / 60 dimension pair immediately to its left; the right crop shows a symbol that looks the same size next to a cell that says something different. The pairing is the argument. A single crop would have shown a discrepancy; two crops side by side show that the discrepancy is not symmetric, which is what makes it a question rather than a rounding note.

Answer: yes. Option A. Excel dimensions are truth; refer to the image for shape topology. It is a variable region, so the user edits the cell.

What it changed. The contract was documented and the raster gate's authority warning was closed as adjudicated rather than suppressed. The residue is real and was recorded as a follow-up: the body's recess is still 217.7 wide while the cell says 300, and reconciling them needs an anchor rule — which corner stays fixed while the other moves — because an 82 mm shift on the left side alone is a large visual change. That follow-up was still open when the section closed, and it resurfaced weeks later in the add-in stretch as a body-notch versus opening-void mismatch.

Q2 — the stepped block: what is it called?

Tagged: naming / role. This is the one that mattered.

The stepped block on top of the body — its proper name and its parametric dependencies?

Interim handling. Handled with no name at all, as an internal anchor key only. Every time an instruction arrived saying "the curb block" or "the step part", the referent had to be guessed.

Why the machine could not settle it. The dimension labels landing on that block all carry a barrier-related prefix, which suggests it is a barrier anchorage. But a label prefix is a naming convention, not a definition of function, and no cell in the workbook states what a member is for. The consequence is not cosmetic. If the block is part of the body outline, it stays where the body is. If it is barrier furniture, then it has to move when the barrier moves, which means a new branch and a new driver linking it to the barrier. That is a design-intent question. Geometry cannot answer it.

How the options were built — and why they weren't. This is the first question in the set with no A/B options. Instead, three lettered sub-questions with blanks: 2-a what is this block called on site (barrier foundation / kerb / cover bearing / other: ____); 2-b if the barrier moves or resizes, must this block follow; 2-c what do the two 50 dimensions actually span — barrier anchor spacing, or the block's own width? The AI could not enumerate candidates because naming a member is not a choice between two states the machine can see.

What the images point at. Two. First, a source crop with a blue box drawn around the stepped profile, positioned so that the 50 / 50 dimension pair and the three barrier-prefixed labels are visibly landing inside the box — that is the whole evidentiary claim, that these labels attach to this block. Second, the viewer's own geometry-only extraction of both sides, showing the same stepped profile reproduced as a clean step run with the drain circle and the lining double-line for context. The pair says: here is what the drawing shows, and here is what I built from it, so you can confirm we are discussing the same object. That two-image convention — source and own output, labelled as such — is the single most useful thing in the document's format.

Answer: partly. The name never came. What came back instead was a functional decomposition of the whole stack:

60 = the grouting steel riser section. The utility height cell = the pipe clearance space. The 150 block is embedded in the R2/R3 lining shape. The start of the 150 sits above the R2 end — the grouting level.

What it changed. That last sentence re-contracted the arc that had already been rebuilt three times. Under the settled v8 rule, R2 ended where the R2 circle met the body's upper outline. The answer says the 150 block is embedded in the lining — so it is not a boundary the lining stops at, it sits inside the lining — and the R2 end lies below where the 150 begins. Therefore R2 must terminate at the grouting level, not at an outline intersection.

In code that is a new solver replacing the old one: terminate at the intersection of the R2 circle with the grouting level, taken as the Excel opening top. The chain metadata gained a grouting-level field, a new termination role and a new terminal contract string, and the control band became the level line itself. On the first frame the ends land at (−10375.2, 333.2) on the left and (1616.2, 470.9) on the right. The 60 step and the 150 block now sit above that level, buried in the lining band — which is what "embedded" means, and which is deliberately left as visible overlap so that it survives into the solid handoff.

The name is still missing. 2-a, 2-b and 2-c were never answered, which is why the project's own summary still lists Q2 as blocked even though its answer reshaped the geometry. The most productive answer in the project was to a sub-question that was not asked.

Q3 — the 100 × 500 marking

Tagged: not reflected.

At the far left of the detail there is a 100 (horizontal) × 500 (vertical) dimension pair, outside the lining curve. Which member's section is that?

Interim handling. Not in the viewer at all. Not suppressed, not approximated — absent, and declared absent.

Why the machine could not settle it. A dimension pair with no member attached to it. The AI's own candidate list, printed in the question, was: a vertical back-face drain or channel, or a shotcrete side finish. A dimension without a member cannot be turned into geometry, and drawing something plausible would have manufactured a member that may not exist — which is worse than a gap, because a gap is visible and a fabricated member is not.

How the options were built — again, they weren't. Three sub-questions with blanks: 3-a what member is this (back drain / waterproofing protection / side channel / just a reference dimension / other); 3-b does it belong in the production geometry or can it be ignored as annotation; 3-c if it is drawn, what is its positional datum — tangent to the R3 outer line, fixed to a level?

What the image points at. One crop, a green box around the 100 / 500 dimension stack. The important thing is what the crop includes: the lining curve's double line is kept in frame on the right-hand side, so that the reader can see at a glance that the marking sits outside the lining. Crop it tighter and you have two numbers floating in white space; crop it this way and the question locates itself.

Answer: partly. Once more, not a name — a construction rule:

With the 150 settled, R3 keeps its trim on the bottom line. From the 150 level, offset uniformly by 100, drop 500, and the remaining space is a separate closed polycurve.

With an addendum that answered a question nobody had asked: the double arcs at the left and right ends of the detail are R3 on the inside and a constant offset of R3 on the outside, and that outer arc is the excavation / blinding face.

What it changed. A new branch pair was created for the side strips: inner edge = the R3 arc, outer edge = R3 offset radially by a cell whose value is 100, closed top and bottom, with the vertical extent driven by a cell whose value is 500. Registration touched five places — branch ordering, colour, frame emission on both sides, both production lists, and the driver map. Measured afterwards: 17 points per side, roughly 247 wide (the 100 offset plus the slope) and 534 tall (the 500 drop plus the slope).

The detail that makes this the most instructive answer in the set: those two cells already existed in the workbook, named for exactly this — a lining offset and a lining vertical. The answer did not supply a number. It supplied the knowledge that two cells the AI had been walking past for a month were the drivers for a marking it had classified as un-buildable. The self-review afterwards recorded this explicitly: the cell names mapped 1:1 to the answer, which let two of the three overnight assumptions be replaced by cell evidence rather than left as guesses.

Still unnamed, and one assumption still open. 3-a was never answered. The branch name in the code was invented by the AI, not given by the engineer. And the strip's top level was assumed to be the 150 start level; the alternative reading is the 150 block's top. That single visual judgement was requested and is still outstanding.

Q4 — the slab tail: is a flat cut right?

Tagged: confirm a decision already taken.

The slab tail end face — is the flat cut currently in place correct, or is there really a slope or chamfer there?

Interim handling. Flat cut adopted, with the basis stated: on the traced tail point run, one point's z is −548.4, which matches the slab underside depth exactly. Exact coincidence was read as evidence that the slab reaches the end face.

Why the machine could not settle it. The evidence was a single exact match. That is strong, and it is not conclusive, and the question said so: whether the drawn end has a chamfer is below the resolution of the raster. The AI's own measuring instrument could not resolve the thing being measured. That is a specific and honest reason to ask — not "I am unsure" but "my instrument's resolution is coarser than the feature".

How the options were built. A flat is correct, the built end face really is vertical. B there is a slope or chamfer — angle and dimension: ____. C the three layers (pavement, filter, slab) terminate differently from each other — per layer: ____. Note that B and C carry blanks: the option set is not "pick one word" but "pick one word, and if it is B or C, one number comes with it".

What the images point at. Two, and they demonstrate the convention. The first is the source: a purple box around the tail point run with the caption saying it reaches the end face. The second is the viewer's own current output at the same junction, boxed in the same purple, captioned "current: flat cut", with the drain pipe and the connection member visible. Same colour, two labels, one saying drawing and one saying mine. The reader is never left to work out which frame is which.

Answer: yes — and it was none of A, B or C.

That dimension is an annotation line. Ignore it and run the finish out to the slab. No dimension means it follows the slab.

What it changed. The premise was wrong. The cut had been aligned to a line at x = −9211.3, and that line was not a member edge at all — it was annotation. The body tail was re-contracted to extend parametrically to the slab end face, computed from cells rather than from the trace, landing at −8950.8. The original cut line was kept as an annotation-cut audit record rather than deleted, and the closure mode string gained a suffix recording the extension. The first attempt overshot: it targeted the kerb web instead of the slab face, 155 mm too far, corrected by binding to the right cell. Measured after: left tail at −8950.0 against a slab end face of −8950.8 — 0.8 mm from the calibration datum — and the right tail at +250.0.

This is the most important structural lesson in the set. The answer rejected the question's premise. That was only possible because the question printed its premise — "flat cut adopted, on the basis that this point's z matches the slab underside" — in the background field. Had the question been "flat or chamfered?", the engineer would have had to pick one of two wrong answers. The options are a scaffold for the reply, not a cage around it, and the background paragraph is what lets the reply climb out.

Q5 — the R2 end height varies by station

Tagged: tolerance.

The R2 endpoint height varies from 396 to 612 mm depending on station. Is there a practical upper or lower limit that should be checked?

Interim handling. Completely unbounded. No range check of any kind.

Why the machine could not settle it. The variation was expected — under the v8 rule the endpoint is an intersection with a body whose placement changes per station, so z moves. The engineer had already explained why there is no dimension for it: the position adjusts to circumstances. But "it varies as designed" and "it varies within acceptable bounds" are different statements, and only the person who signs the drawing knows the second one. There is no cell for a tolerance and no way to infer one from 66 frames of data that are all, presumably, fine.

The distribution, measured across all 132 sides:

Section rangeLeft R2 end zRight R2 end zFrames
Sheets 1–8 (early main line)396.1538.6–538.917
Sheets 9–10593.0–611.7538.93
Sheet 11550.8 / 489.9496.3 / 435.42
Sheets 12–33 (most of the rest)489.9435.444

Two sub-questions: 5-a is this range normal, and is there a practical limit — below the road surface plus 160, above the body top, anything? 5-b is the left/right asymmetry normal — 396 on the left against 539 on the right in the same section? On 5-b the AI stated its own reading and asked for confirmation rather than asking blank: the body placement differs left and right, so I am treating it as normal.

What the image points at. The full R123-plus-slab overview with two red boxes on the left and right R2 end zones, and the two values printed under the arch: left z = 396, right z = 539. Unlike the other crops this one is zoomed out deliberately, because the question is about a global distribution, not a local feature. The reader needs to see both ends in one frame to judge whether the asymmetry looks wrong.

Answer: yes.

The R2 endpoint floating is normal. Slight curvature changes per station are the designer's domain. Build it as the workbook says, and the user edits cells while checking shape and quantities.

What it changed. Nothing was built — and that is the outcome. The limit check was deliberately not implemented, and the reason was written into the contract rule string so that a later session would not re-open it as an oversight. "Not done" and "decided not to do, recorded" look identical in a build and are completely different in a project. This is also the second time the same policy surfaced: the workbook drives, the human adjusts. The same sentence answered Q1.

Q6 — the case where R2 cannot reach the body

Tagged: failure policy.

Mutating the centre-spacing cell on its own shifts the body until the R2 circle no longer meets the body's upper outline. Is that a design change that can actually occur?

Interim handling. A hard error, by name, stopping the build. The question was careful to say that the 33 real sections never hit it — the cells are mutually consistent — and that it only appears when one cell is artificially varied alone.

Why the machine could not settle it. This is a question about whether a state the machine can produce is a state reality can produce. The mutation harness can generate it; the workbook never does. Whether a designer would ever change that one cell in isolation is not in the data, and the answer determines a build decision of very different sizes.

How the options were built. A it does not happen — keep the hard failure, build nothing. B it can happen — develop a live wall-refit that re-aims the body wall at R2, which is a substantial piece of work. C it can happen but a human must review it when it does — hard failure plus a clear message is sufficient. The impact line priced them: B goes on the development queue at the same scale as a version bump; A and C are a message improvement.

What the evidence is — and it is not a photo. This is the only question in the set whose figure was drawn rather than cropped: a small schematic with the body in its normal position labelled "intersection OK", and the body displaced by the single-cell change with the R2 circle missing the top, labelled as the hard error. There is no crop to take, because the failing state does not exist in the drawing. When the subject of a question is a state the source cannot show, the evidence has to be constructed — and it should be visibly schematic so no one mistakes it for a measurement.

Answer: yes — and again outside the option set.

It is resolved if R2 ends at the level parallel to the grouting. Close it with part of the R2 and R3 arcs plus a body polycurve.

What it changed. The closure chain was redefined end to end: from the R2 end, run horizontally along the grouting level, enter the body's outer face at its outermost point, follow the outer face and the excavation slope as a polycurve, and land on the R3 toe. The whole path got a new mode string naming each leg.

Then the harness was re-run. The hard failure disappeared: the parametric mutation validator passed with the named error gone, and the boundary-mutation validator passed across 1,452 mutation cases.

The structural point is worth stating plainly. The question asked which failure policy to adopt, and the answer removed the failure. An intersection-dependent termination is fragile by construction — two curves can always be moved apart. A level-dependent termination is not, because a horizontal line and a circle whose centre is on the correct side always meet. The failure was never a property of the design space; it was a property of the contract the AI had chosen. Nobody could have known that from inside the mutation harness.

Q7 — the ~10 mm pinch in the lining band

Tagged: source interference.

Over roughly a 1.4 m stretch the lining band narrows by up to about 10 mm. Should the drawing be reproduced as-is, or corrected on handoff?

Interim handling. Reproduce the drawing as-is. The composite lining polygon closes safely through self-intersection recovery, so the pipeline runs.

Why the machine could not settle it. Because this is the question "is the source wrong?", and an AI that has been told the workbook is production truth cannot answer that on its own initiative. Silently correcting it breaks the contract. Not correcting it hands a self-intersection risk to a downstream kernel that will not tolerate one. Either choice is a policy decision about whose numbers govern.

How the options were built. A reproduce as drawn — the drawing is truth, do not correct. B guarantee a minimum thickness only at the Dynamo/Revit handoff — minimum allowable thickness: ____ mm, with the correction amount reported in diagnostics. C this looks like a numeric error in the source, refer it upstream, hold as-is until it comes back. Three positions, and every one of them names who decides.

What the image points at. The left lower crop, with an orange box over the stretch where the red R2 curve and the purple R3 curve converge, and both radius labels placed inside the box so the reader can see which two radii are producing the interference. The convergence itself is subtle at that zoom; the box is what makes it findable.

Answer: yes — a prediction, made without reading any code.

Expect this to be resolved by the earlier questions.

What it changed. After the v9 re-contract the band was re-measured. On the left it starts at 300.0 — exactly the nominal lining thickness of 300 — and increases monotonically to 488.9. On the right, 300.0 to 548.5. The narrowing stretch is gone. The prediction held exactly.

And here is the part that should be uncomfortable. No radius and no centre changed between v8 and v9. The Excel radii were preserved verbatim; only the termination moved. The pinch existed in the stretch where R2 ran past the level at which it should have stopped. Once R2 stops at the grouting level, the band never enters that region at all.

Which means the question's own background paragraph — this is not my drafting error, it is interference produced by the Excel radius combination itselfwas wrong. The AI had attributed the defect to the source with some confidence, and the defect was its own. The question was still worth asking, and the format still worked: the engineer read a question whose framing blamed the drawing, ignored the framing, and predicted the correct outcome from knowing what the geometry was supposed to be. A good question survives being asked from a wrong premise. It is the option set that would have trapped the answer, and the engineer simply stepped past it.

3. Five structural properties of a question that gets answered

A supporting crop, left lower corner, radii labelled in place. Every question shipped with the view a reviewer needs to answer it in seconds — that is one of the five structural properties.

The matching left drain-pocket crop, with R2 3,959 / R3 4,609 and the slab and filter thicknesses called out on the image rather than in prose.

Line the seven up and the shape is consistent. None of this was designed in advance; it fell out of writing seven of them at once and noticing what the awkward ones had in common.

1. Not one of them says "I don't know"

Every question opens with how far the work got and on what basis. Q4: flat cut adopted, because one tail point's z matches the slab underside exactly. Q7: currently reproducing the drawing as-is, and the composite polygon closes through self-intersection recovery. Q6: the 33 real sections never hit this; only a synthetic single-cell mutation reaches it.

The reader is never asked to reconstruct the state of the work before thinking about the question, and the question becomes a request for confirmation rather than a request for help — a much smaller thing to hand someone at midnight. And, as Q4 proved, stating the basis is what lets the reply attack the basis.

2. There are exactly two or three options, and the answer is one word

Q1: cell or symbol. Q4: flat, sloped, or per-layer. Q6: impossible, possible, or possible-but-human-reviewed. Q7: as-drawn, corrected on handoff, or referred upstream. Every one of them is answerable with a single letter, with a blank attached where a number would be needed.

This is what made an overnight turnaround possible at all. Seven letters is a two-minute reply. Seven paragraphs is a task, and tasks get postponed. The blanks matter too: option B on Q7 is not "correct it" but "correct it, minimum thickness: ____ mm", so choosing B does not create a second round trip.

3. Only where options could not be built is the question left open

Q2 and Q3 have no options. They have lettered sub-questions with blanks, because naming a member is not a selection from a set the machine can enumerate. The AI could list candidate functions for the 100 × 500 — back drain, waterproofing protection, side channel — but it could not know whether the real answer was on its list, so presenting them as options would have been a false choice.

And the evidence that open questions are expensive is right there in the outcome: Q2 and Q3 are the two that are still recorded as blocked. Both received rich, useful, geometry-changing replies. Neither received the thing it actually asked for. An open question invites an answer to an adjacent question, and adjacent answers do not close records.

4. Every question carries an evidence image, labelled for whose frame it is

Thirteen images: nine attached to the questions as issued, four more added the same night when the document was revised with the results. The nine originals are the ones reproduced in this post. The convention that does the work is not the box — it is the caption saying whether the frame is the source drawing or the viewer's own output.

That convention exists because its absence caused the most expensive failure in the project. The R2 endpoint burned three rounds partly because a marked-up image could not be resolved into "a feature of the drawing" versus "a marker you drew". Q2 and Q4 each attach both frames on purpose, so the reader can confirm the two parties are discussing the same object before discussing whether it is right.

Two smaller things: crop wide enough to locate the subject, and when the subject is a state the source cannot show, draw the figure and let it look drawn, as Q6 did.

5. A question does not stop the work

Every one of the seven has an interim handling and a classification tag: Q1 non-blocking, Q3 not-reflected, Q5 unbounded, Q6 honest failure, Q7 as-drawn. The pipeline kept running the entire time the questions were open, and the payload kept regenerating.

The classification tells the reader what it costs to leave this unanswered. "Not reflected" means a member does not exist yet. "Non-blocking" means the gate is up but the build passes. "Honest failure" means the state is unreachable from real data. Three completely different urgencies — and a reader at midnight can triage seven questions in the order that matters.

A sixth property is worth naming even though it is not about the question's shape: every question states its own impact. Q1: option A closes a gate warning, option B re-contracts the opening and fixes three validators. Q6: option B is a version-scale development, A and C are a message change. That is the reason nobody had to ask "how much work is this?" before replying.

4. The cascade — how one answer cleared three questions

The right-hand counterpart. Posting both sides is what made the asymmetry answerable in one line — and one line was what collapsed three of the seven questions.

The answers arrived late on 14 July, verbally, in chat, while the day's session was already winding down. The engineer went to sleep on a standing instruction — just keep going — and the re-contract ran overnight.

The whole chain hangs off one clause in the Q2 answer: the 150 block is embedded in the lining, and its start sits above the R2 end.

StepConsequenceEvidence
Q2 answeredR2 terminates at the grouting level, not at an outline intersectionNew solver; first frame ends at (−10375.2, 333.2) left and (1616.2, 470.9) right
Q6 dissolvesThere is no intersection left to lose, so the hard failure cannot occurNamed hard error confirmed gone; 1,452 mutation cases PASS
Q7 dissolvesThe band never enters the stretch where it used to pinchLeft 300.0 → 488.9, right 300.0 → 548.5, monotonic; narrowing gone
Q3 becomes buildable"Offset 100 from the 150 level and drop 500" is only meaningful once that level is fixedNew strip branches, 17 points per side, driven by two existing cells
Q5's policy becomes safe"No limit check" is defensible when the endpoint is driven by a workbook level rather than by an incidental intersectionLimit check deliberately not implemented; rationale written into the contract string

Q6 and Q7 are documented dissolutions with numbers attached. Q3 and Q5 are couplings — the answers were separate, but they only became actionable once the level was fixed. Four of seven questions were downstream of one sentence. Q4 was genuinely independent, and Q1 was answered on its own terms.

The engineer's own note on Q7 deserves repeating: the reply was expect this to be resolved by the earlier questions. That was written before anything was rebuilt, without reading a line of the solver. It was a prediction from knowing what the geometry was for — the exact knowledge the AI did not have and could not derive. That is the entire value proposition of asking.

The night's ledger

The overnight run regenerated the payload three times, roughly 147 seconds each. Eight validator files were re-paired in the same pass as the contract change, so the count of newly-stale contracts was zero. The core battery came back clean: arc topology, trim chain, centre guides, endpoint closure and side-slab connection (the last two with a level exception added), boundary mutations at 1,452 cases, cell bindings at 1,716 checks, drain topology and finish, the independent raster comparison with its guard and all six mutations, plus branch purity, driver coverage, the two Dynamo consumer validators and the payload freshness contract.

What stayed red was a pre-existing backlog unrelated to the night's work: 528 dimension-trace items feeding a source-authority failure and one knock-on consistency issue, plus 132 schema items on the opening contract. Those were on a separate queue before the questions were written and remained on it afterwards.

Three assumptions were logged before starting, since the answers were verbal and the engineer was asleep. Two were replaced with cell evidence during the work — the cell names mapped one-to-one onto the answer, which is how the AI discovered it had been ignoring drivers that already existed. The third, the strip's top level, was left as a marked assumption requiring one visual judgement. The self-review filed at dawn listed it as outstanding rather than reporting the work complete.

5. And yet the table is still empty

Here is the part that turns a success story into something more useful.

The detailed question document was revised the same night. Every one of the seven gained an answer line and a handling line: what was said, and what was built in response. That document is accurate, and it is the only place the answers were written down in full.

The summary table was never filled in. The briefing's summary section still shows every answer cell as "(to be entered)". And a project history document written seventeen days later, sitting in the same folder as the detailed version, states that the seven questions were posted on 14 July and that no reply has been received.

That is not true, and the contradicting evidence is one directory away. What happened is ordinary: the later document was assembled from the briefing's template rather than from the detailed revision, and the template's empty column was copied forward as fact. A summary that drifts from its own source is worse than no summary, because it carries the authority of a document without the content of one.

But the summary is not simply wrong either, and this is the sharper point. It also records that Q1, Q2 and Q3 remain blocked. The tracker lists only Q2 and Q3 that way — but on the substance the summary is right about Q1 as well, for a precise reason that the "answered / unanswered" framing cannot express: for a precise reason that the "answered / unanswered" framing cannot express:

#What was askedWhat came backStill open
Q1Which authority governs the openingThe cell governsThe recess width reconciliation — needs an anchor rule
Q2The block's name, its barrier dependency, what the 50/50 spansA functional description of the stack and where R2 must endAll three sub-questions
Q3Which member the 100 × 500 isA construction rule and two driving cellsThe identity of the member; the strip's top level
Q4Flat, sloped, or per-layerThe reference was annotation — follow the slab
Q5Is there a limit to checkNo; the variation is the designer's domain
Q6Which failure policyTerminate at the level; the failure goes away
Q7Ignore the pinch or correct itExpect the earlier answers to resolve it

Q2 and Q3 got construction directives instead of nomenclature. That was the more valuable answer — it moved the geometry — but it did not close the record, and the record is what the next session reads. The block still has no name. The strip's branch name was invented by the AI. Six weeks later, an instruction saying "the step part" would still require a guess.

The member dictionary's confirmation request — are these assumed site terms the real ones? — has never been answered either.

Getting an answer and pinning the answer into the document are two different jobs, and only the second one survives the session. An answer that lives in a chat log and in code has a half-life measured in weeks. Seventeen days after the fastest turnaround in the project, the project's own summary reported that nobody had replied.

6. Porting the format

None of this is specific to tunnels, or to geometry, or to this AI. It is a way of writing down what you cannot decide so that someone who can decide it spends two minutes instead of an hour.

The template

Seven fields. Every one of them earns its place.

  • A state tag on the title. Blocking / naming / not-reflected / confirmation / tolerance / failure-policy / source-conflict. The reader triages before reading.
  • Background: how far you got, and on what basis. Print the premise. This is the field that lets the reply reject your premise — which is what happened on the single most useful answer in this set.
  • Measurements, with a difference column. Not "they disagree" but "−82.3 on the left, +12.9 on the right". The asymmetry is the question.
  • The specific question, split into lettered sub-questions where it genuinely has parts. Partial answers are normal; make them addressable.
  • Two or three complete options, with blanks where a number is needed. One option is always "current handling continues", so that "leave it" is a legitimate reply rather than silence.
  • An impact line. What changes downstream per option, in units of work. This is how the answerer prices their reply.
  • An evidence crop. See below.

When to ask, and when to proceed

The dividing line held up across all seven and it is simple: ask when the missing thing is authority, name, tolerance or intent. Measure when the missing thing is a measurement.

Authority (Q1, Q7), a name (Q2, Q3), a tolerance (Q5) and intent (Q6) are not in the data by construction. No amount of additional processing produces them. Everything else — where a point actually is, how wide a band actually gets, how many frames show the pattern — is measurable, and asking about it is offloading work that should not be offloaded. Q4 sits exactly on the line and shows how to handle that case: the AI measured what it could, hit its instrument's resolution limit, said so explicitly, and asked.

And regardless of which side the question falls on: proceed anyway, with a labelled interim handling. Every one of the seven kept the pipeline running. A question that halts the work will not be asked, because the cost of asking becomes the cost of stopping, and then you will estimate instead.

What to mark on the evidence image

  • One word saying whose frame it is — the source, or your own output. This is the highest-value convention in the whole format, and it exists because its absence cost three rebuild rounds.
  • A box, not an arrow. An arrow points at a location; a box states an extent. The stepped-block crop is boxed so that the dimension labels are visibly inside the box — that containment is the claim being made.
  • The measured value printed under the box, in the image. The image and the number should not be separable, because they get pasted into other documents separately.
  • Enough surrounding context to locate the crop. The 100 × 500 crop keeps the lining curve in frame precisely so the reader can see the marking is outside it. A tighter crop would show two numbers in white space.
  • Fixed colour meanings, project-wide. Red wrong, blue target, green reference. In this project the colours changed meaning between rounds and every marked-up image had to be re-interpreted from scratch.
  • When the subject cannot be photographed, draw it, and let it look drawn. Q6's figure is a schematic because the failing state does not exist in the drawing.

Three habits that cost nothing

Number the questions and never renumber them. The cascade in section 4 is only describable because an answer could say "Q2 resolves Q6". Stable identifiers are what let a set of questions behave like a dependency graph instead of a list.

Write the answer back into the document the same day, with the handling — not the answer alone, but the answer and what you built from it, so the next reader can check one against the other. Then re-read your summary against your detail before anyone else does.

Record deliberate non-implementations as decisions. Q5 produced no code, and that is a result. It went into the contract rule string with its reasoning, so a later session reading "no range check here" finds a decision rather than a gap.

What this part does not settle

  • Whether the format reduced the correction rate is not measured. The instruction-level analysis that produced the 106/27 counts was run once, on 14 July, and never repeated. There is no comparison point, and the session-level log is in different units and self-narrated.
  • The block still has no name, the 100 × 500 still has no member, and the member dictionary's terminology has never been confirmed.
  • The strip's top level remains an assumption awaiting a single visual judgement, and the opening recess reconciliation awaits an anchor rule.
  • The v9 geometry was never approved visually by the engineer at the time it was built, and the Dynamo runtime check was deferred. The overnight report said so rather than declaring completion — which is the one habit in this whole account that was already right.

Tunnel automation series — nine parts.
← Previous: Prompt Engineering for BIM: 101 Instructions, One Drawing (not published yet)
Next: Parsing 149 GB of JSON Without Loading It Into Memory (not published yet)
Start of the series: Dynamo Built the Whole Tunnel and Never Read the Excel File

댓글

이 블로그의 인기 게시물

Structural Analysis Workflow with Dynamo and Robot

Dynamo with the Gemini Vision API test(Nano Banana)