MXH · Sample assessment
A complete MXH upgrade evidence set: 7.6.1.3 to 9.2.
The findings are the evidence layer, not the end of the job. MXH preserves all 22 observations and turns them into customer decisions, owned remediation work and explicit closure tests. Kestrel Energy is a made-up customer; the IBM dictionaries, upgrade scripts and API evidence are real.
Start with readiness, then drill into the findings
A raw comparison can produce many observations from one underlying customer change. MXH keeps those observations for traceability, but the delivery view groups them into the piece of work that closes them. Each work item answers: found, why it matters, do this, done when, and owner / when.
After remediation, verify-closure compares the upgraded system with the original baseline. An item is not called resolved merely because a ticket was closed; the evidence has to support closure.
The underlying observations
1 BLOCKING · 13 REVIEW · 8 ENVIRONMENT · 22 findings, from 4 assessed objects and 3 scanned source files.
| Grade | Findings | What it means |
|---|---|---|
| BLOCKING | 1 | Will not compile, will not load, or throws on first use. |
| REVIEW | 13 | A real difference whose consequence depends on what the code does with it. |
| ENVIRONMENT | 8 | Differs between the two systems; not a property of the release. |
| Total | 22 | Every finding in the report, one row each. |
14 more references in the code couldn't be tied to an object, so they weren't checked. They aren't in the 22. The report lists each one and what to send so the next run checks them.
Run ID 5a249250012e4f6bb012088dac6d3e394b1332cdd787bfcc2357e571c9582efe. These are what one run raised against a synthetic customer, not failures counted in a real system.
One finding, taken apart
PermitGate.java:8
psdi.iface.jms.ErrorQueueNotfCronTask no longer exists in 9.1 and your code references it
- Severity (how much it hurts)
- BLOCKING
- Evidence class (how sure we are)
- A2 · IBM's API at 9.1
- Owner (who fixes it)
- Customisation developer
- Required action (what to do)
- Replace the reference. The type does not exist at the target, so the customisation will not compile; find the supported equivalent or remove the dependency.
- Closure test (how you prove it's closed)
- The customisation compiles against the target's `businessobjects.jar` with no unresolved import.
Three findings that stay REVIEW
These rows name a member IBM removed, in a class your code references. That's a real difference, graded for what's proven.
Why this is REVIEW, not BLOCKING.
Your code references the psdi.app.person.Person class. REVIEW · evidence class A2. If your code called the removed member, it would be BLOCKING. The call is not established.
IBM's API at 8.7 no longer has getAvailableHours(Date, PersonCalRemote, AvailCalc), getAvailableMbo(Date, PersonCalRemote, AvailCalc) or getAvailableMboList(Date, PersonCalRemote, AvailCalc). Your code references the class. The report doesn't claim you call the method.
The API changed. Check the call.
At 8.7, IBM's Person class no longer has double getAvailableHours(Date, PersonCalRemote, AvailCalc). Kestrel's code references the Person class at PermitGate.java:9. That's what this sample shows. It doesn't show the code calling this method, so the finding is REVIEW, not BLOCKING.
A2 is about IBM's API: the method is gone at the target. It doesn't prove this code calls it. Checking the call settles it.
REVIEW · evidence class A2 · IBM's API at 8.7
Owner: Customisation developer
Required action: Check each cited site. The class survives but this member does not, so a call compiles today and fails at the target.
Closed when: The customisation compiles against the target's `businessobjects.jar`, and the cited lines either no longer call the member or call its replacement.
The same check applies to getAvailableMbo and getAvailableMboList, which the report lists separately.
Two more findings, as they appear
ASSET.ASSETHEALTH type INTEGER → DECIMAL. Check stored values and consumers for case, rounding and conversion effects. A type difference alone does not establish a failure. No line of the supplied code reads or writes it, so nothing you own is known to break; anything outside the supplied code that carries it — an integration, a report — is what to check. The same column carries this change on 2 tables: ASSET, LOCATIONS.
One of 3 type changes in the sample. Review stored values and consumers against the target definition.
REVIEW · evidence class B2 · dictionary 7.6.1.3 vs 9.2
Owner: Customisation developer
Required action: Validate existing values and every cited consumer against the new type, including case, rounding, range and truth semantics. A metadata difference alone does not establish a failing operation.
Closed when: Each cited site has been read against the new type and either changed or recorded as unaffected, with the reason.
Evidence graph
- Route
- 7.6.1.3 → 9.2
- Field
- ASSETHEALTH changed in the retained metadata comparison.
- Object owner
- Maximo Manage
- Extension context
- Oil & Gas
- Broader snapshot
- Snapshot differs, but installed-product scope is not comparable. Source is Maximo Manage. The target snapshot also carries HSE, Oil & Gas, Service Provider, Spatial and Utilities.
Metadata lineage. Not a runtime test.
WORKORDER.KEWELLID is not part of IBM's own 7.6.1.3 dictionary either — it is your own field, not something the release removes. Decide whether to carry it forward to 9.2. Your code reads or writes it.
One of 8 fields that are Kestrel's own, not IBM's.
ENVIRONMENT · evidence class B2 · not present in IBM's shipped 7.6.1.3 dictionary
Owner: Database / migration
Required action: Decide whether to carry it forward. It is your own field, not part of IBM's dictionary at either release, so its absence at the target is not release evidence — re-applying it is a database change, not a code change.
Closed when: Either the attribute exists on the target with the type, length and required flag your code expects, or every cited site has been changed to stop using it. One or the other, recorded.
Evidence graph
- Route
- 7.6.1.3 → 9.2
- Field
- Object lineage exists for WORKORDER, but KEWELLID is not independently resolved.
- Object owner
- Maximo Manage
- Extension context
- Oil & Gas
Metadata lineage. Not a runtime test.
Executive brief preview
Kestrel Energy: 7.6.1.3 → 9.2. 22 findings: 1 blocking, 13 review and 8 environment-dependent.
Findings workbook preview
First five rows, projected from the same sample assessment.
| Grade | Finding | Owner | Required action |
|---|---|---|---|
| BLOCKING | psdi.iface.jms.ErrorQueueNotfCronTask no longer exists in 9.1 and your code references it | Customisation developer | Replace the reference. The type does not exist at the target, so the customisation will not compile; find the supported equivalent or remove the dependency. |
| REVIEW | ASSET.KEINSPECTIONCLASS is bound on a screen through WORKORDER.ASSET → ASSET, and it is your own column: in your export, not in IBM's shipped dictionary at either release. The stock 9.2 dictionary not carrying it is expected — an in-place upgrade carries your own columns forward — so this is not a release removal and the screen is not known to be broken. Confirm the column is present on the upgraded system before cutover; if it is, the binding is unaffected. At least one hop was read from the 9.2 relationship graph mxh ships rather than from your own MAXRELATIONSHIP rows, so which object the field lands on is our assumption about your install — confirm the relationship too. | Application Designer / configuration | Confirm the column on the upgraded system, then leave the screen alone. The field is your own column, which an in-place upgrade carries forward; the stock target dictionary not listing it is expected, not a broken binding. If the column is not there after the upgrade, re-apply it — a database change — before the screen is opened. |
| REVIEW | ASSET.PLUSSGEOJSON is removed on the path to 9.2 (no reference found in the code supplied) | Customisation developer | Change every cited site before cutover. The column is gone at the target: a read throws and a write fails. |
| REVIEW | WORKORDER.PLUSSGEOJSON is removed on the path to 9.2 (no reference found in the code supplied) | Customisation developer | Change every cited site before cutover. The column is gone at the target: a read throws and a write fails. |
| REVIEW | psdi.app.person.Person.getAvailableHours(Ljava/util/Date;Lpsdi/app/person/PersonCalRemote;Lpsdi/app/common/AvailCalc;)D is gone in 8.7; you reference the class — check the call | Customisation developer | Check each cited site. The class survives but this member does not, so a call compiles today and fails at the target. |
The 13 packaged sample files
The full sample contains 13 files: seven core assessment outputs plus additional reports and checks.
- Executive brief — the decision-ready summary.
- Technical report — every finding, owner, required action and closure condition.
- Evidence appendix — the evidence behind each finding.
- Tracking spreadsheet — findings in a format a delivery team can own.
- Machine-readable findings — the assessment as structured data.
- Plain-text rendering — a stable form for diffing between runs.
- Fingerprinted run record — the fingerprinted record of exactly what was checked.
- architecture.html — a package-owned file produced by the assessment.
- assurance.html — a package-owned file produced by the assessment.
- engineering.html — a package-owned file produced by the assessment.
- explorer.html — a package-owned file produced by the assessment.
- preflight-db2.sql — a package-owned file produced by the assessment.
- programme.html — a package-owned file produced by the assessment.