-
-
MoveProof homepage featuring an interactive 3D robot calibration model and a preview of its verification-first data migration workflow.
-
MoveProof settings show six available capabilities: PostgreSQL, Nebius Token Factory, Tavily, Rust verifier, PDF and Verified CSV exports.
-
Research from IBM, Forrester, and Syniti highlights the costs of poor data quality and the challenges of data migration.
-
MoveProof detects a leading-zero mismatch during migration and blocks the commit until the data meets the approved contract.
-
MoveProof's eight-stage workflow combines AI-assisted planning, human approval, independent verification, and controlled commits.
-
MoveProof architecture separates Nemotron reasoning, Tavily advisory evidence, human approval, verification, and controlled commits.
-
MoveProof detects lost leading zeros, blocks the commit, and verifies an approved repair using the original source data.
-
MoveProof starts with Nemotron 3 Super; 2+ validation concerns trigger Ultra. Humans approve; independent checks verify.
-
MoveProof runtime: Next.js on Vercel, FastAPI on Google Cloud, Nemotron via Nebius, Rust reconciliation, and advisory Tavily.
-
MoveProof trust boundary: AI plans need validation and human approval; checks gate commits; external evidence stays advisory.
-
MoveProof's commit gate requires an approved plan, passing mandatory checks, and no unresolved reviews before commit.
-
MoveProof repairs failed migrations with a new approved plan, rereading the original source before independent verification.
-
MoveProof database architecture links source files, versioned plans, approvals, independent verification, and controlled commits.
-
MoveProof on Medium: The story behind an AI-assisted migration workflow with human approval and independent verification.
Inspiration
A spreadsheet contains a customer ID: 00127. Someone imports it into a database. Every row arrives, the logs stay clean, and the job reports success.
The value in the database is now 127.
An integer cast stripped the leading zero. The destination accepted the value. The row count matched. Nothing crashed. Yet an identifier that was supposed to remain unchanged no longer matches its source. Nobody may notice until another system tries to reconcile a customer record, invoice, or transaction.
Successful execution is not semantic preservation. That distinction is why I built MoveProof.
The problem is bigger than one missing zero
Organizations move data between spreadsheets, legacy applications, and structured databases every day. A migration can finish successfully while changing what the data means. These failures are difficult to catch precisely because they often look like valid transformations.
Consider what can happen without an explicit contract:
- Identifier loss:
00127becomes127. The row still exists, but it no longer has the same identifier. - Ambiguous dates:
03/04/2026can mean March 4 or April 3. Both are valid dates; only one matches the source system's intended convention. - Mixed decimal conventions:
1,250.00and1250,00can represent the same amount under different locale rules. The wrong parser can change the value without raising an error. - Unapproved precision changes:
1200.4999becomes1200.50. The result fits a decimal column but may violate the required precision. - Firmware treated as a number:
3.08is version text, not a quantity that should be numerically normalized. Parsed as a number,3.10silently becomes3.1. - Robot identity loss:
0017becomes17, silently changing a calibration record's identifier. - False duplicate detection: several calibration rows share one
robot_idbecause each represents a different joint. Treatingrobot_idalone as the row key can discard valid records.
MoveProof includes reproducible fixtures for these categories of failure, including leading-zero damage, ambiguous formats, and the composite identity of robotics calibration records. The invoice scenario is an example of a possible downstream consequence, not a claim about a real customer incident.
Why it matters
The wider cost of poor data quality is well documented, although these studies do not measure MoveProof's specific failure cases or promise a particular financial return:
- A 2025 IBM Institute for Business Value finding cited in IBM's analysis of poor data quality reports that 43% of chief operations officers identified data-quality issues as their most significant data priority.
- Forrester's 2024 data snapshot reports that more than one-quarter of global data and analytics employees who identified poor data quality as an obstacle to data literacy estimated annual losses exceeding US$5 million from poor data quality.
- The 2025 Syniti/UKISUG research findings report that 79% of surveyed organizations considered data management a challenge when moving from SAP ECC 6.0 to S/4HANA.
These findings establish the importance of reliable data, not an estimated ROI for this project. MoveProof addresses a specific gap: row counts, valid destination types, and clean logs do not prove that an approved data contract was preserved.
AI can help interpret unfamiliar schemas and explain risks that are difficult to capture in rigid rules. But a model that interprets data should not automatically be allowed to change production records. I wanted the benefit of AI reasoning without making the model the final authority.
That led to one question:
How can AI help plan a difficult migration while independent checks and human decisions determine what may actually be written?
MoveProof is my answer.
AI proposes. Validated code executes. Independent evidence decides. Humans approve ambiguity.
What MoveProof does
MoveProof is a verification-first workspace for structured-data migrations. It takes spreadsheet data through an explicit, reviewable contract before it reaches a destination table. It records what the operator approved, what deterministic code executed, what independent checks found, and which properties remain unverified.
It is not a general-purpose ETL replacement or an autonomous agent that writes directly to production. Its implemented scope is spreadsheet-to-PostgreSQL migration through two destination profiles, with human approval and a database-enforced commit gate.
Explore the product: Live MoveProof app | GitHub repository and README | Backend health and capabilities
The workflow, from upload to proof
- Upload. An operator selects a destination profile and uploads CSV, TSV, XLSX, or XLSM data. MoveProof preserves the original source bytes and checksum so later runs can return to the source rather than damaged output.
- Propose. NVIDIA Nemotron, or a credential-free deterministic profile, produces a typed mapping proposal. AI proposes operations; it does not execute them.
- Validate. Deterministic rules inspect allowed operations, destination compatibility, and any required acknowledgments. Invalid plans cannot proceed to approval.
- Approve. The operator reviews potentially lossy changes and unresolved semantics, then approves a specific versioned plan. Ambiguous dates and decimal conventions require explicit choices.
- Stage. A deterministic executor applies only the approved plan to isolated PostgreSQL staging tables, not directly to the final destination.
- Verify. An independent verifier reads the staged rows back and evaluates the approved contract against what was actually stored.
- Repair. If a mandatory invariant fails, the operator can approve a revised plan. The rerun reparses the original upload, never the previous run's transformed output.
- Commit. A human requests the final write. The database checks the stored approval, contract, and mandatory verification results again before allowing the destination commit.
The important distinction is that a transformation can execute successfully and still fail verification. A failed or missing mandatory check blocks commit, even if the interface mistakenly enables an action.
Two destination profiles with the same safeguards
Customer migration (customers_v1). This profile handles customer identifiers, contact fields, signup dates, and balances. It demonstrates why preserving an ID as text, interpreting dates correctly, and maintaining decimal accuracy are contract requirements rather than cosmetic preferences.
Robotics calibration (robot_calibration_v1). This profile handles robot and joint identity, zero offset, gear ratio, firmware version, sensor frame, and calibration date. Here, the destination row key is (robot_id, joint_name): a robot can have several valid joint records. The robot_id field must also preserve its original textual identity, so 0017 cannot silently become 17.
The robotics workflow verifies record integrity during migration, not whether a robot is correctly calibrated or physically safe. MoveProof does not command robots or certify hardware behavior.
Three concrete scenarios judges can follow
Scenario 1: a successful import that must be rejected. The legacy customer profile converts zero-padded identifiers to integers. Execution succeeds, but identifier-preservation verification fails and the commit is refused. The repair view shows what must change, and an approved revision reruns against the original file. This is the central MoveProof demonstration: an apparently successful import does not earn a pass simply because it finished.
In a deployed end-to-end run documented in the MoveProof README, the legacy import damaged four out of four zero-padded identifiers. After an approved repair, the corrected run reported nine passed checks, zero failed checks, zero outstanding reviews, and two advisory checks marked Not verified. Four rows were committed, none were skipped, and the test migration was subsequently rolled back and removed. These are observed results from a documented run, not a claim about arbitrary datasets.
Scenario 2: dates and decimals that need interpretation. The ambiguous robotics fixture combines date strings such as 03/04/2026 with conflicting decimal conventions, including 1,250.00 and 1250,00. Validation identifies interacting concerns, which can trigger Nemotron 3 Ultra after the initial Super pass. The operator must still choose the date order and decimal policy. AI reasoning helps identify the problem; it does not settle the contract without human approval.
Scenario 3: one robot, several legitimate records. The multi-joint fixture contains repeated robot_id values paired with different joint_name values. The composite key preserves those distinct rows instead of treating them as duplicates. The clean, ambiguous, and multi-joint robotics workflows have been exercised on the deployed stack, including verified exports, destination-conflict behavior, commit, and rollback.
What operators receive
MoveProof does not collapse all outcomes into one reassuring success badge. Verification reports four separate states:
- Passed: the specified check ran and its tested condition held.
- Failed: the check ran and found a violation.
- Review required: the workflow needs a human decision.
- Not verified: the property was not established by that check.
Mandatory checks control commit eligibility; advisory findings are disclosed separately and do not automatically block commit. Not verified never means passed.
There are also two different kinds of output. Verified CSV contains the transformed data read from the stored result. JSON, HTML, and PDF evidence reports describe the migration, including the original checksum, destination contract, approved plan and acknowledgments, operations, row reconciliation, check results, discrepancies, approvals, and limitations. All three report formats come from one canonical evidence object.
A passed verification means that the checked invariants of the approved contract held. MoveProof does not claim to rule out every possible semantic error, and the report explicitly names properties it did not check.
Why MoveProof is different
The audience is data engineers, software developers, migration operators, and reviewers dealing with structured data whose identifiers and meanings must survive transformation. They need more than a successful job status. They need to inspect the approved decisions, reproduce what happened, and understand the evidence and its limits.
MoveProof combines AI-assisted interpretation, bounded model access, deterministic validation, human-controlled ambiguity, independent post-execution checks, original-source repair, and a fail-closed commit gate. Each protects a different boundary. The product's value is not simply a plausible AI-generated mapping. Its value lies in safeguards that prevent a proposed transformation from silently becoming an unchecked production write.
The workspace is designed to make those decisions usable: a guided migration wizard, review screens, readable verification statuses, report downloads, responsive layouts, dark mode, and a keyboard-accessible command palette. The command palette helps users navigate but cannot approve a plan or commit a migration on their behalf.
Why this fits Best Apps & Agents
MoveProof is an application built around a coordinated, AI-assisted workflow: upload, inspect, propose, validate, route, approve, execute, stage, verify, repair, commit, and produce evidence. Models contribute to interpretation and planning, while deterministic code and humans retain the authority to act. The point is not to make the agent autonomous at any cost; it is to make the overall application dependable when data semantics matter.
The robotics destination is a demanding example of structured-data integrity, not a claim that MoveProof is a Physical AI controller. The robot is not the product. The evidence that its calibration records satisfied the approved migration contract is.
How I built it
I developed MoveProof as a working full-stack application for the Nebius x NVIDIA Global AI Hackathon 2026, in the Best Apps & Agents track. The key design choice was to assign each technology a limited, explicit responsibility rather than giving one AI component control over the entire workflow.
The technology stack and why each part exists
| Technology | Role in MoveProof |
|---|---|
| NVIDIA Nemotron 3 Super | Default AI model for interpreting the source schema and sampled rows, then drafting a typed transformation plan. |
| NVIDIA Nemotron 3 Ultra | Optional second reasoning pass when deterministic validation finds at least two interpretation concerns. It does not receive more data or greater authority. |
| Nebius Token Factory | Hosts the live inference API used to call both NVIDIA models at runtime. |
| Tavily | Retrieves published external references to inform a human reviewer about ambiguous source-system conventions; its results are advisory only. |
| Python 3.12 and FastAPI | Implement the workflow API, parsing, validation, routing orchestration, approvals, execution, and evidence generation. |
| Rust verifier | Independently performs canonical whole-row reconciliation against staged results, with Python parity tests. Its reconciliation result is advisory under the current contract. |
| PostgreSQL 16 / Cloud SQL | Stores the migration control plane, original source records, immutable plan versions, staging and destination rows, checks, audit events, and the database-backed commit gate. |
| Google Cloud Storage | Provides private object storage for the deployed backend. |
| Google Cloud Run | Runs the FastAPI backend and packaged Rust verifier. It is hosting infrastructure, not the AI inference provider. |
| Next.js 14, React, TypeScript / Vercel | Provide and host the browser workspace, upload wizard, human review, verification displays, and report interfaces. |
| GitHub Actions and deterministic test fixtures | Make frontend, Python, Rust, database, and workflow behavior reproducible and testable. |
How Nemotron 3 Super and Ultra work together
MoveProof uses NVIDIA models for the reasoning task that deterministic code cannot conveniently solve: understanding unfamiliar columns, proposing mappings, recognizing potentially ambiguous representations, and presenting interpretable risks to an operator.
Every model-assisted proposal starts with nvidia/nemotron-3-super-120b-a12b through Nebius Token Factory. Super handles the initial reasoning pass. Its output is parsed as data and checked by deterministic validators.
Then routing.py, not the model, decides whether additional reasoning is warranted. A concern means either a mapping requiring a named acknowledgment for a potentially lossy transformation or a non-fatal validation issue indicating a questionable interpretation. If a single plan has two or more concerns, MoveProof requests another proposal from nvidia/Nemotron-3-Ultra-550b-a55b. With fewer concerns, it retains the Super proposal.
For example, a date that needs human interpretation plus a mixed-decimal advisory can justify Ultra. In contrast, a routine field mapping or a single acknowledged leading-zero hazard does not automatically spend a larger-model call. The threshold is based on deterministic validation results, not a self-reported AI confidence score and not the number of rows.
Both models see the same schema summary and a bounded sample of at most five rows. Ultra receives no hidden additional records. Neither model can run SQL, approve its own plan, change verification status, access the commit gate, or write destination data. If Ultra is unavailable or its request fails, the validated Super proposal remains subject to the same review and safety gates, and the fallback is recorded.
That is why the two-model architecture matters: deeper reasoning is selectively available without expanding either data exposure or execution authority. Production testing confirmed automatic Super → deterministic validation → Ultra escalation, and the model_routing_decided event recorded the models, decision, and reasons.
What I observed using Super. It handled routine schema-to-schema proposals and produced output that could be parsed against MoveProof's typed reply structure. When it surfaced questionable mappings, the validator translated them into explicit review concerns. I do not treat that experience as a benchmark proving Super is generally better or worse than another model.
What I observed using Ultra. In the ambiguous robotics scenario, Ultra produced a proposal that passed validation while leaving the relevant date and decimal questions visible for human review. Its value here was another reasoning pass on the same limited evidence, not automatic resolution of the ambiguity. Because I have not published comparative latency or cost measurements, I describe selective escalation as a design choice rather than a quantified performance improvement.
Why Nebius Token Factory matters
Nebius Token Factory is the inference runtime, not a decorative badge in the stack. The backend makes real runtime requests to NVIDIA Nemotron models through its API, receives typed proposals, and passes those proposals into MoveProof's validation and review workflow. Both Super and Ultra inference access were tested live, and the automatic escalation path was exercised on the deployed application.
This separation matters: Google Cloud Run hosts MoveProof's backend, while Nebius Token Factory serves the NVIDIA models. No GPU model-serving infrastructure is required in the Google Cloud deployment, and neither Vertex AI nor Gemini is part of the inference path.
What worked well in the integration. Getting to the first live inference call required a credential, a base URL, and an OpenAI-compatible request shape. The model catalog and smoke test helped me confirm which model IDs my account could access before integrating them into the application. Both Nemotron tiers use one endpoint and credential, so switching models does not require a second integration.
What I would improve. From the application's perspective, an inaccessible model ID and a temporarily unavailable model can require different responses. I would welcome a clearer, documented distinction between those failure cases. MoveProof records the failure and falls back to the validated Super proposal rather than presenting a failed Ultra call as successful escalation.
Why Tavily is used, and why it cannot approve anything
AI and validators can identify ambiguity, but sometimes the dataset alone cannot establish the correct business meaning. For example, 00127 looks like a zero-padded identifier, yet only documentation or a knowledgeable operator may establish whether leading zeros are essential to the source system. The same issue arises with date and decimal conventions.
MoveProof's External Evidence Check uses Tavily to find published external references relevant to a flagged mapping. The results appear in the existing review step, beside the decision they may inform. This helps an operator inspect supporting context instead of relying on an unsupported guess.
Tavily receives only a server-generated query built from validated schema and review metadata, such as column names, type information, the proposed operation, and a question selected from a fixed allowlist. It never receives the uploaded file, sampled rows, raw cell values, or personal values. Model-assisted planning has a different, narrowly bounded input: the schema summary and up to five sampled rows.
Crucially, a Tavily search result is not a verification result. It is labeled Advisory. It cannot change the plan, select a parsing policy, satisfy a mandatory check, update a verification status, execute a transformation, or authorize a commit. The human reviewer decides how to interpret the references. If Tavily is unavailable, the core migration workflow continues, and the review state remains unchanged.
The feature also records an external_evidence_checked audit event containing sanitized query and source metadata, without logging raw records or credentials. A real Tavily runtime request was successfully exercised against the deployed backend. Its contribution is external context for a better human decision, not automatic fact-checking of the migrated dataset.
What worked well with Tavily. Returning each source's title, domain, excerpt, and URL gave the review panel visible provenance and let the operator evaluate source quality. A bounded client and server-composed query kept the integration small and its data boundary auditable.
What I would improve. For contract interpretation, primary documentation from the source-system vendor can be more valuable than general articles or aggregators. An explicit way to prioritize primary or vendor documentation could help reviewers find the most relevant evidence faster. MoveProof does not assume that every retrieved page is authoritative.
Deterministic validation and human approval
Nemotron produces a typed proposal, never executable code. FastAPI passes it through operation allowlists and contract checks. Approval is tied to a server-generated, stored proposal version and contract hash; the browser does not send arbitrary replacement mappings for execution. Potentially lossy operations require field-specific acknowledgment.
For ambiguous dates and decimals, the operator must choose the approved policy. On the robotics profile, the review step supports day-first or month-first dates, and dot-decimal, comma-decimal, or either-when-unambiguous interpretation. A value that cannot be read under the approved rule is refused rather than silently coerced.
The backend can also inspect the full persisted source deterministically without sending it to either model. For a date field, it infers a canonical ISO policy automatically only when every non-empty source value for that field matches a valid YYYY-MM-DD date; otherwise the policy remains subject to human review. A five-row model sample never becomes a substitute for full-source deterministic safeguards.
The model may suggest a plan, but only deterministic validation and human decisions can turn that proposal into an executable contract. Recorded approvals are audit entries, not cryptographic signatures or verified enterprise identities. Stronger approval provenance remains future work.
Why Rust is part of independent verification
A migration should not verify itself by repeating the assumptions of the transformation that ran. MoveProof therefore reads the actual staged rows back from PostgreSQL and checks them against the approved contract using a verifier independent of the planner.
The Rust component performs canonical whole-row reconciliation, making comparisons consistent across representations. Under its documented rules, 00127 and 127 are different identifiers, while 1200.50 and 1200.5 can represent the same decimal value. Null and empty string are distinct, Unicode is normalized under explicit rules, and field order does not alter a row's canonical identity. A Python reference implementation is used to test Rust parity, not to claim Rust ran when it did not.
Technical distinction: canonical reconciliation through Rust is advisory under the current contract. It can expose discrepancies and report failures, but mandatory commit checks are a separate decision. If the Rust binary is absent, reconciliation reports Not verified with a reason; it never silently becomes Passed. This separation matters because a verifier should never claim more than it actually established.
Why PostgreSQL enforces the final boundary
After deterministic execution stages rows, verification results are stored. A human can request commit, but the backend checks eligibility again against persisted records. It confirms the run and migration belong together, the correct approved plan version was executed, the contract hashes match, all mandatory checks are present, no mandatory failure or unresolved review remains, and verification is current for that execution.
The database layer also uses row locking and a fail-closed conflict policy. A screen that enables a button at the wrong time cannot bypass these conditions. Idempotent request handling helps prevent duplicate effects from retries, and rollback can remove the rows written by the relevant migration.
Repairs use a new immutable plan version and reparse the original uploaded bytes. They never feed an already damaged integer such as 127 back into the system and pretend the missing zero can be recovered.
Design, reproducibility, and deployment evidence
The frontend is designed as a usable workspace, not only a technical proof of concept. Operators can browse migrations, follow a four-step creation wizard, review mappings and advisory references, run verification, inspect status explanations, compare repairs, and download reports. Responsive layouts, visible error states, keyboard navigation, and the command palette make the workflow easier to use without bypassing approval controls.
The repository includes deterministic synthetic data with 12 planted hazard categories, including leading-zero loss, duplicate and conflicting keys, missing fields, ambiguous dates, decimal errors, Unicode differences, formula-like cells, and prompt-injection text in untrusted input. A separate test manifest provides expected cases; the application does not read it to produce its answers.
The automated checks cover Python domain logic and API workflows, PostgreSQL transactions and commit behavior, Rust verification and parity, and frontend type checking, linting, and build. The routing suite includes 31 tests, while production runs separately establish that the deployed inference and workflow paths were exercised. Mocked unit tests are not presented as proof of live model calls.
For source code, configuration, tests, and setup instructions, see the MoveProof GitHub README. The architecture and observed results are explained here so judges can understand the submission without reading backend code.
Challenges I ran into
Giving the model useful work without giving it power over the database. The shortcut would have been to generate SQL and execute it. I instead built typed proposals, validation gates, versioned approval, and an executor that independently refuses unapproved operations. That made the implementation more demanding but kept AI reasoning separate from data authority.
Keeping verification independent and honest. A checker that simply agrees with the transformation is not enough. I separated the verifier from planning, tested Rust against a Python reference, and made sure an unavailable advisory check is reported as Not verified rather than quietly passed.
Making escalation explainable. A model-generated confidence score would have been easier to display but harder to defend. I used deterministic interpretation concerns. In the first deployed routing exercise, a fixture mismatch with the destination schema produced fatal validation errors instead of the expected ambiguity signals. Fixing the test scenario and rerunning the production path exposed the difference between testing a rule and testing a real workflow.
Recognizing that one robot can have several valid rows. My initial robotics fixture did not sufficiently exercise repeated robot identifiers. A multi-joint case showed why (robot_id, joint_name) must be the row key, while robot_id itself still needs exact preservation.
Treating interpretation as a decision, not a convenience. Mixed dates, locale-specific decimals, version strings, and zero-padded identifiers invite automatic normalization. I had to build explicit review choices and refuse interpretations that did not match the approved policy.
Distinguishing uncertain responses from failed writes. A server may commit a transaction even if the browser never receives its response. MoveProof therefore avoids asserting that nothing was written when the outcome is unconfirmed, and directs the operator to refresh the recorded state before taking another action.
Accomplishments I'm proud of
A complete deployed workflow. MoveProof runs as a real browser application with source upload, plan proposal, validation, human review, staging, independent verification, repair, commit, evidence export, and rollback. The public landing preview is identified as synthetic; the operational workspace uses real backend data.
Real NVIDIA and Nebius integration. Nemotron 3 Super and Ultra were accessed through live Token Factory inference requests. The deployed app also exercised automatic Super-to-Ultra escalation, recording why the larger model was selected rather than merely demonstrating two unrelated API calls.
Tavily working in production with a restricted role. External Evidence Check successfully returned advisory references from a deployed runtime call, while tests established that search results cannot mutate the plan, verification state, or commit eligibility.
Two destination profiles tested end to end. The customer and robotics workflows were exercised on the deployed stack. Robotics testing covered clean and ambiguous input, composite multi-joint identity, explicit parsing decisions, exact verified exports, destination-conflict refusal, commit, and rollback. It did not claim to test robot calibration accuracy or physical safety.
An observed failure, repair, and verified commit. A legacy customer import corrupted four zero-padded identifiers. Verification caught the issue and refused commit. An approved repair read the original bytes and produced nine passed checks, zero failed checks, zero pending reviews, and two advisory Not verified checks. Four rows were committed, with none skipped; the migration was later rolled back and removed.
Evidence that states its limits. The product offers a separately exported verified CSV plus JSON, HTML, and PDF evidence derived from the same canonical object. It distinguishes mandatory and advisory checks, reports unverified properties explicitly, and retains the approved contract and repair history.
Reproducible engineering. The open-source repository includes an MIT license, deterministic fixtures, a test manifest, frontend and backend tests, Rust/Python parity tests, database/API coverage, CI, and deployment instructions.
Explore: Live application | Source code and README | Backend status
What I learned
A stronger model does not need greater authority. Super and Ultra can produce different proposals, but neither should bypass deterministic validation, human approval, or independent verification. Better reasoning can operate inside the same constrained trust boundary.
Successful execution and verified meaning are different claims. Clean logs, matching row counts, and acceptable types are useful operational signals, but they do not establish that identifiers and semantics survived the move.
Human review is most valuable when the data admits multiple interpretations. Making an operator approve every trivial mapping would encourage careless clicks. Asking for a decision about ambiguous dates or decimal conventions gives the approval a real purpose.
A test fixture is part of the product's argument. Multi-joint records and deployed routing cases revealed gaps that simpler examples did not expose. Demonstrating a failure and an honest repair is more persuasive than showing only a success screen.
External context and verification evidence must remain separate. Tavily can help someone understand what a field might mean. It cannot establish that staged data satisfied an approved contract. Only the relevant independent checks can support that conclusion.
A trustworthy report must say what it did not verify. Passed, Failed, Review required, and Not verified have different meanings. Keeping them separate makes evidence useful to someone reviewing a migration long after it ran.
Provider integration should expose uncertainty rather than hide it. Nebius model selection and Tavily reference retrieval work best when the application makes request boundaries and failure behavior visible. An unavailable second model should not turn into a fabricated escalation result, and an empty search result should not be mistaken for proof that a mapping is correct.
Build notes: Read my MoveProof development article on Medium.
What's next for MoveProof
The following are planned improvements, not shipped capabilities:
- More configurable destinations and contracts: let teams define their own source-to-destination mappings and invariants beyond the current customer and robotics profiles.
- Broader verification: add aggregate reconciliation against authoritative ledgers and cross-table referential-integrity checks, which are outside the current verified contract.
- Stronger approval provenance: support verifiable operator identities, roles, and signatures rather than treating existing audit entries as cryptographic proof.
- Better routing measurements: evaluate when Super-to-Ultra escalation improves interpretation, with measured latency, cost, and results across a larger sample of migrations.
- Operational scale: expand toward larger, scheduled, and batched migrations with more detailed monitoring and enterprise review workflows.
The goal remains deliberately narrow and testable: move data according to an approved contract, show the checks that actually ran, disclose the exceptions and limitations, and never allow a model's suggestion to silently become an unchecked production write.
Built With
- fastapi
- google-cloud
- google-cloud-run
- google-cloud-sql
- nebius
- nebius-token-factory
- next.js
- nvidia
- nvidia-nemotron
- nvidia-nemotron-3-super
- nvidia-nemotron-3-ultra
- postgresql
- python
- react
- react-three-fiber
- rust
- tavily
- three.js
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.