Observations
Log what you saw on a walk, then tell the team as a separate and separately tracked act, with a Date Notified column that reads Not sent rather than blank
Observations is the log of things somebody saw on site and wants corrected, recorded, or acknowledged. The register lives at Observations in the project navigation.
Logging it and telling people are two different facts
Creating an observation notifies nobody. It exists in Struxen; the team has not been told. Sending it is a separate action, and the record tracks both facts independently:
- Date Notified is a real column. Until an observation has been distributed it reads Not sent, not a blank cell. A blank would look like missing data. "Not sent" is a statement.
- The register carries a banner at the top whenever anything is awaiting distribution, with the count computed across the whole project before your filters, so filtering the table can never make the banner lie.
- Each undistributed row carries a marker in the leading column.
This is the point of the module, not an oversight. You can walk a floor logging eight observations on a phone and review them once from a desk, instead of firing eight half-written notices from the middle of the walk.
Log an observation
- Click New observation.
- Describe what you saw. Set the category and type, the assignee, the location, the trade, the due date, and the priority.
- Optionally mark it Private observation.
- Click Log observation.
The dialog says it plainly: nobody is notified until you send it.
You can also start from a photo. Describe from photo hands the image to a model that drafts the title, description, and a suggested type. Nothing is saved until you review it and log the observation yourself, and you can override the suggested type. This is the one metered action in the module; it needs credits and the image must be 4 MB or smaller.
Numbering
Observation numbers are soft, unlike RFI numbers. The register auto-suggests one
(OBS-007 by default), you may override it at creation or afterwards, and duplicates
are legal. The numeric sequence underneath is what sorts the register.
Categories and types
Two levels. The category is a fixed platform vocabulary of five values; the type sits inside it.
| Category | Seeded types |
|---|---|
| Commissioning | Commissioning |
| Quality | Corrective Action, Deficiency, Non-Conformant, Pre-Punch |
| Safety | Near Miss, Safety Hazard, Safety Notice, Safety Violation |
| Warranty | Warranty |
| Work to Complete | Work to Complete |
Both are filterable columns on the register.
Send it
Use the banner's Send button to flush everything awaiting distribution, or select rows and send just those. A flush covers:
- items that have never been sent, and
- items changed since their last send.
The second case is worth knowing about. Editing an observation that has already gone out, including through a bulk edit, marks it as changed and puts it back in the queue, so the next flush tells the audience about the change. A bulk edit that quietly notified nobody would be the failure this behaviour exists to prevent.
There is also an explicit re-announce, which re-sends the current state of items that are already sent and unchanged.
A send that reached nobody is a failure
Date Notified is stamped only after a distribution that actually reached at least one person. If the fan-out reaches nobody, the item is left exactly as it was: still unsent, still counted by the banner, still marked in the register, and the failure is reported rather than shown as a green toast over silence.
The commonest cause is an observation with no assignee and an empty distribution list. The message says so: add somebody, then send it.
A flush is per item, so one item that fails does not abort the batch. The response reports what was sent, what was skipped, and what failed, per record.
The lifecycle
Four states:
| Status | Meaning |
|---|---|
| Initiated | Logged, work outstanding |
| Ready for Review | The assignee says it is done |
| Not Accepted | A reviewer looked and it is insufficient |
| Closed | Accepted |
Three things about this machine are deliberately stricter than RFIs:
- You cannot close from Initiated. Ready for Review is a hard prerequisite. An observation is closed because somebody responded and somebody else accepted the response, not because a manager decided to tidy the log.
- Rejection lands in Not Accepted, not back in Initiated. It is a distinct state meaning a reviewer looked and the work is insufficient, and the ball stays with the assignee while it sits there.
- Closure is final. There is no reopen. If the issue recurs, log it again.
Who can move what
| Action | Who |
|---|---|
| Respond (move to Ready for Review) | Anyone with STANDARD on Observations, or a Read-Only user holding the same-company responder grant |
| Close | ADMIN on Observations closes any observation; a STANDARD user closes only observations they created |
| Reject (move to Not Accepted) | ADMIN on Observations |
| Comment | STANDARD on Observations |
| Edit or reassign | ADMIN, or the creator |
| Send | STANDARD on Observations |
| Add or remove related items | ADMIN |
| Recycle and restore | ADMIN |
| Bulk actions | ADMIN |
Responding does not require being a participant. On a real job a superintendent regularly moves an item on behalf of a sub who is not in the system.
Ball-in-court
- Initiated and Not Accepted: the assignee, or the creator when there is no assignee.
- Ready for Review: the creator, as reviewer.
- Closed: nobody.
The activity stream
An observation's responses are timeline events rather than reply records. One event carries an optional status change, an optional comment, and optional attachments, because that is how a single response actually arrives. A comment with no status change is a first-class action.
The stream also records creation, assignment changes, sends, edits, and related-item changes, so the record reads from the beginning rather than from the first response.
Comments are capped at 10,000 characters.
Related items
An observation can be linked to records across the product: RFIs, submittals, punch items, drawings, documents, spec sections, meetings, daily logs, inspections, photos, schedule activities, other observations, change events, cost codes, findings, and safety incidents.
There is deliberately no special "convert this observation to a punch item" action. Linking is the mechanism, and it works the same way in every direction. An observation carries at most 50 related items.
When an observation was spawned from another record, an inspection item for example, it carries a read-only origin link back to its source. See Inspections for that path, and Findings for the escalation from a VANTAGE finding.
Private observations
A private observation is visible to Observations admins, the creator, the assignee, and the distribution list. To everyone else the record answers 404 Not found rather than 403, so its existence is not disclosed.
Three separate facts produce the same 404: the record does not exist, it is in the recycle bin and you are not an admin, or it is private and you are not on it.
Recycle bin
Recycling is a soft delete and an ADMIN action. A recycled observation holds nobody's ball, is skipped by every send, and appears only in the bin, where an admin can restore it.
Bulk actions
Select rows and apply one action to all of them: assign, edit, close, reject, respond, recycle, or restore. Bulk is ADMIN-only and covers at most 200 observations per call.
Legality is re-checked per item by the same state machine the single-item path uses. A selection mixing Initiated and Ready for Review items, bulk-closed, closes the reviewable ones and reports a conflict for the rest. It neither fails the whole batch nor forces an illegal close through.
Every already-sent item a bulk edit touches is marked as changed, so the next flush tells the audience.
Autodesk-linked projects
On a project linked to Autodesk Construction Cloud, creating an observation creates the issue in ACC using your own Autodesk connection and mirrors it into Struxen. The native lifecycle, taxonomy, and send mechanic described on this page belong to Struxen-native records. The register merges both streams.
See Integrations.
Limits
| Limit | Value |
|---|---|
| Related items per observation | 50 |
| Comment length | 10,000 characters |
| Items per bulk action | 200 |
| Items per send flush | 200 |
| Photo for Describe from photo | 4 MB |
Troubleshooting
"Nobody is on this observation yet." The send found no audience. Add an assignee or a distribution member, then send it. The observation is untouched and still shows as not sent, which is correct.
"The notification could not be delivered to anyone. This observation is still unsent." The distribution ran and reached nobody. Date Notified was deliberately not stamped, so the item stays in the queue and the banner keeps counting it. Nothing is lost; try again once the audience is fixed.
Date Notified still reads "Not sent" after you pressed Send. That is the same case as above. The stamp is written only when at least one person actually holds the notification, so a silent failure cannot make an undistributed observation look distributed.
"Observation not found" on a link somebody sent you. It is private and you are not on it, or it has been recycled and you are not an admin. Both answer 404 on purpose.
Close is not offered. Either the observation is still Initiated, and Ready for Review is a hard prerequisite, or you hold STANDARD and did not create it. Admins can close anything.
A bulk close only closed some of the selection. Per-item legality is respected. The items that were not in Ready for Review were reported individually rather than forced through.
There is no way to reopen a closed observation. Closure is final by design. Log a new observation if the condition recurs.
Sorting a column did not re-order the whole project. Five columns re-query from the endpoint: Number, Title, Assignee, Due Date, and Status. Any other column sorts the rows already loaded, and the register says so when pages remain unloaded.
There is no export button on this register. Correct. Observations have no CSV or PDF export. Filter the register to what you need and read it there, and link the observation from the record that has an export, an inspection or a punch item, when it has to leave the product.