Skip to content
Hlebourg

Harbour Watch

Design partner

Every open obligation, its owner and its deadline, with escalation that works offline and a count of obligations nobody owns

Watch is the ledger of what is owed, by whom, by when, and who currently owns it — renewal windows, regulatory filings, inspection intervals, contractual cure periods — loaded by you or fed by what Flow signs off. Reminders become notices that escalate by rules running on the device, so a site with no connectivity still escalates on time. Snooze is capped and attributed, recurrence follows the schedule, and notice lead time is measured against policy. The headline figure counts obligations whose owner has left your directory or changed role.

Line
Harbour
For
Operations and compliance · Quality, HSE and certification · Fleet, site and facility management · Contract administration and legal operations
MCP server
hlebourg-watch
Priced by
One register under management — the whole obligation estate of one organisation, at whatever size and whatever date it is loaded
The problem

What breaks without Harbour Watch

A missed obligation is almost never a failure of knowledge. Somebody knew about the filing, the certificate, the thirty-day cure period. Then they changed jobs, and the knowledge left with them while the register kept their name on it. The register is an org chart frozen on the day it was written, the notice goes to a mailbox nobody reads, and the first person to notice the gap is an inspector, a counterparty's solicitor, or an auditor asking for evidence of something that was never done.

Inputs

What goes in

Everything Harbour Watch reads, and nothing beyond it. Inputs that widen quietly after an evaluation make the evaluation worthless, so this list is part of what you are buying.

Data sources used by Harbour Watch
SourceCadenceWhat it contributes
Obligation registeron load, then on changeWhat is owed, to whom, by when, and what happens if it is not. Loaded by you from contracts, permits, certificates and standing procedures, against a documented schema. Nothing here is inferred from a document.
Discharges from Harbour FlowcontinuousWhen a commitment is signed off in the field, it arrives as a discharge carrying its offline capture time and a client-generated identity, so a replayed write does not become a second discharge.
Identity and leaver eventson changeJoiners, movers and leavers from your directory. A leaver event is what turns an owner into an orphan the same afternoon, rather than at the next audit.
Certificate and inspection recordson renewalIssue date, expiry, interval and issuing body, which is where most calendar-anchored recurrence comes from and where drift shows up first.
Discharge evidenceper dischargePhotographs, signatures, form references and document identifiers, stored by reference against the discharge. Watch keeps the link and the hash; it does not read the contents.
Device clock and connectivity statecontinuousTime since last sync, clock skew measured against the server at that sync, and remaining local retention. This is what makes an offline escalation auditable rather than merely plausible.
Outputs

What comes out

Every signal below is computed from the inputs above by a documented formula. Nothing here is a black box: an output nobody can explain is an output that gets overruled the first time it is inconvenient.

Signals produced by Harbour Watch
SignalScaleHow to read it
Orphan countcount, standingObligations with no reachable owner. Shown on the front page beside the due count, not produced by a report somebody has to think to run.
Notice lead time achieveddays, against policy daysHow much warning the owner actually got, against how much the policy asked for. This falls for weeks before anything is missed, which makes it the only leading indicator in the product.
Escalation delivery gaphoursBetween the local firing time and the delivery time. A large gap is not a fault; an unrecorded one is.
Recurrence driftsigned days, per occurrenceDistance between the scheduled date and the date actually discharged. Kept as a series statistic and never folded back into the schedule.
Snooze burdendays consumed / capDeferred days against the cap, per obligation and per owner. Read by class rather than by person, it is the cheapest register-quality signal we have found.
Retention headroomdaysHow long this device may stay offline before the oldest unsynced record is at risk. Warns early and loudly, and reaching zero is a visible failure rather than a silent one.
Capabilities

What it does

Orphans are the front page

An obligation whose owner has left, changed role, or whose owning team has been dissolved is the most common cause of a missed deadline we can find evidence for. Watch treats the count as a standing figure, because a report only gets run by somebody who is already worried.

Escalation evaluates on the device

Rules run locally against the local clock. A vessel at sea, a tunnel, a capped data plan or a ten-day walk to signal does not delay the escalation — only its delivery, which is recorded as a separate fact.

Recurrence computed from the schedule

A quarterly inspection discharged eleven days late is still due on the first working day of the next quarter. The lateness is recorded as drift. The series does not move unless somebody moves it on purpose.

Snooze is capped, logged and attributed

Every deferral has an actor, a duration and a reason, and draws on a budget. When the budget is spent the request is refused and the ladder proceeds. An uncapped snooze is how an obligation disappears.

Ownership transfers as an act

A transfer has somebody who made it, somebody who accepted it, a time and a reason. Until it is accepted the obligation counts as an orphan. Inheritance from an org chart that changed at the weekend is not transfer.

A stated maximum-data-loss window

Watch declares how long a device may stay offline before local retention is at risk, warns from well before the boundary rather than at it, and treats quota exhaustion as a failure you can see.

In depth

How it actually works

The obligation nobody owns

Ask an operations director how a filing was missed and the answer is rarely that nobody knew. Somebody knew. They knew in March, they had it in a calendar, and in June they moved to a different company. The obligation stayed where it was, still carrying their name, still counting down, and the next person to look at it was on the other side of a conversation nobody wanted to have.

A register is an org chart frozen on the day somebody wrote it down. It says “Head of Quality” and the role has been vacant for six weeks. It says a name and the mailbox now auto-forwards to a team address that three people ignore because none of them believes it is theirs. The obligation is not lost — it is visible, dated, and sitting in a system that is technically working.

Watch treats this as the primary output rather than a side effect. An obligation is an orphan when its owner has left the directory, when their role has changed such that the obligation now sits outside it, when the owning team no longer exists, or when a transfer was initiated and never accepted. Each of those is a different sentence in the record, because the remedies are different.

The count is standing, on the front page, next to the count of what is due. This is a deliberate choice against the usual design, in which orphan detection is a report. Reports get run by people who are already worried. The number that matters is the one in front of somebody who is not.

Ownership transfers as an explicit act. Somebody makes the transfer, somebody accepts it, and both halves are recorded with a time and a reason. Until the recipient accepts, the obligation remains an orphan and keeps counting in the headline figure. This is more friction than inheriting ownership from a team in an identity provider, and the friction is the point: an org chart that changed at the weekend has not agreed to anything.

The second number worth watching is notice lead time achieved against policy. Your policy says ninety days’ notice before a certificate lapses. The register says the renewal was filed in time and the deadline was met. The lead time says notice went out on day eleven, and has been going out later every cycle for the past year. Nothing has been missed yet. Everything about that trend says something will be, and it says it weeks in advance, which is the only useful property a compliance number can have.

Escalating with no network

An escalation ladder that lives on a server is a ladder that works wherever the server is reachable. For most offices, most of the time, that is everywhere. The exceptions are not evenly distributed: they cluster precisely where the obligations are heaviest, which is to say underground, in flight, inside a secure facility, on a pooled data plan somebody is rationing, or at a site where a member of staff walks to signal roughly every ten days.

That surface is shrinking, and we would rather say so than let you discover it. Starlink Maritime and the mining Performance Kits now run past 400 Mbps, and they are quietly removing the offline requirement from surface mining and vessel operations. A product whose entire pitch is “works without signal” is selling into a market that satellite is eroding from the top. What remains is genuinely hard and is not eroding: satellite does not reach into tunnels, aircraft cabins and secure facilities are not getting easier, and a capped plan is a budget decision rather than a coverage one.

So escalation rules evaluate on the device, against the local clock. When a rule fires, the escalation record is written locally with the local firing time. The notification queues. When the device reconnects, the record syncs and delivery is attempted, and the delivery time is written as a separate field. Two timestamps, never collapsed into one.

The two-timestamp rule is the part that survives contact with an auditor. When did you know is answered by the firing time. When was the responsible person told is answered by the delivery time. A system that stores one date implicitly claims a person was notified on a day when they demonstrably could not have been, and that is a worse position to be in than a documented gap.

Clocks on devices are wrong sometimes, and we cannot stop a device with a bad clock firing at the wrong moment. What we can do is refuse to hide it. Watch records the clock reading at firing, the skew measured against the server at the last successful sync, and flags any escalation that fired outside a tolerance you set. An escalation carrying six hours of measured skew is marked as such in the record rather than quietly trusted.

Underneath all of this is the failure mode that ruins offline products: counting a local save as a server success. Local firing, sync success, sync failure, conflict, and time spent offline are five separate events in Watch, and they are reported separately. A dashboard showing green while records are stranded on a tablet in somebody’s van is worse than no dashboard, because it converts an operational problem into a surprise.

The other thing we say out loud is the retention window. A device holds a bounded amount, so there is a length of time it can stay disconnected before the oldest unsynced record is at risk. That number belongs in user-facing documentation rather than in a support ticket written after somebody lost a day of capture. Watch warns from well before the boundary, escalates the warning as headroom falls, and treats quota exhaustion as a visible failure. Failing loudly and early beats failing at the end of a long capture session, which is exactly when it costs the most.

Recurrence that does not drift

Consider a quarterly inspection discharged eleven days late. The next one is scheduled twelve weeks from the day it was completed, which is the obvious implementation and feels generous to the person who was late. Do that for three years and you have drifted a hundred and thirty-two days: twelve inspections performed where the interval required thirteen, with nobody having made a decision to skip one.

Watch computes from the schedule. An obligation due on the first working day of each quarter is due then, whether the last one was discharged on time, late, or at all. Lateness is recorded as drift — signed days between the scheduled date and the discharge date, kept per occurrence and as a series statistic — and it never flows back into the schedule.

If the series genuinely needs to move, that is an amendment. The regulator granted an extension, the vessel was in dry dock, the site was closed. An amendment has an actor, a time, a reason, and both the old and the new schedule remain in the record. The distinction being drawn is not between rigid and flexible; it is between a change somebody made and a change that happened.

Some intervals are genuinely anchored to the event rather than the calendar: the certificate says twelve months from the date of the last inspection, and that is what it means. Watch supports both anchors. What it insists on is that you declare which one applies when the obligation is loaded, and the anchor stays visible on the obligation from then on. Event-anchored recurrence is not a bug. Event-anchored recurrence that somebody assumed was calendar-anchored is the bug, and it is invisible until the year it matters.

Discharges captured offline arrive late and sometimes arrive twice, because a lost acknowledgement means the same write may be replayed. Every discharge carries a client-generated identity, so the second arrival is recognised as the same event rather than written as a second inspection. Discharges are also validated on replay against the schedule as it stood when they were captured: a discharge arriving after an amendment is checked against the world it was made in, and flagged where the two disagree rather than silently applied to whatever the register looks like now.

This is also where we decline a piece of fashionable infrastructure. Conflict-free replicated data types guarantee convergence, not correctness — the standard illustration is a card moved to two different columns concurrently and ending up in both. The obligation equivalent is being discharged on one device and reassigned on another, and a merge that keeps both is consistent and wrong. Watch does not merge state-machine transitions. The server is authoritative for an obligation’s state and is allowed to reject a transition rather than reconcile it into something nobody intended.

What a snooze costs

Snooze is the most used control in any reminder system and the least examined. It feels like a courtesy: the notice arrived at a bad moment, the work is in hand, the person will deal with it on Thursday. Almost always that is exactly what happens. The failure is not one snooze, and it never looks like a decision to ignore anything. It is a deferral repeated forty-seven times until the obligation has effectively been deleted by a series of reasonable people.

Watch applies three rules. Every snooze is an event with an actor, a duration and a reason. Every snooze draws against a budget, expressed in days and set per obligation class. When the budget is spent, the next request is refused: the notice returns and the escalation ladder proceeds from where it was.

The refusal is the feature. You set the cap and you can set it small. What you cannot do is set it to infinity, or to a number so large it amounts to the same thing. We have had this argument in early conversations and expect to have it again, and the answer does not change, because a cap that yields to the person with the most pressing reason is not a cap.

Snooze and lead time are the same story told twice. Deferral converts warning into nothing: the deadline is still met, the register still shows green, and the ninety days of notice your policy asked for have quietly become nine. Lead time achieved against policy is where a snooze habit becomes visible while it is still a habit rather than an incident.

Snoozes attach to a person, and the useful reading is almost never the disciplinary one. An owner who snoozes the same class of obligation every cycle is reporting something: it is wrongly owned, or scheduled against a period when that team is always busy, or written so vaguely that nobody can tell what discharging it would involve. Aggregate snooze by class, not by name, and you have the cheapest register-quality signal in the product.

Three things a snooze is not. It is not a discharge, and it does not create evidence of one. It does not alter the schedule or the next occurrence. And it cannot be applied to an orphan, because an obligation with no owner has nobody with standing to defer it — the correct action there is to give it an owner.

The honest state of this product

Watch is the least mature of the nine products on this site. Design partner is not a pricing tier here, it is a description: we have no customers, no reference deployments and no case studies, and nothing on this page should be read as implying otherwise.

What works today is the core of the argument above. Register load against a documented schema. Ownership, transfer and acceptance. Orphan detection against a directory feed. Calendar-anchored and event-anchored recurrence with explicit drift. Capped, attributed snooze. Local escalation evaluation with separate firing and delivery times and recorded clock skew. Discharge capture with client-generated identities and validation on replay. The MCP server, with every tool listed above.

What is not finished, in the order we would want to be told. The retention window is measured per deployment rather than published as a single figure: we can tell you what it is for your device class and your record volume after a fortnight of measurement on your own fleet, but we cannot print a number here that would be true both for a rugged tablet capturing photographs and for a phone carrying text, and we would rather leave the space empty than fill it with the wrong one.

Notification delivery outside Watch — your paging tool, your SMS gateway, your internal mail relay — is built for a small set of targets and configured with each partner rather than self-served. Air-gapped delivery through internal mail works. Anything exotic is a conversation rather than a setting.

Recurrence handles calendar and event anchors, working-day calendars and per-site holidays, and windows that open before an anniversary and close after it. Conditional obligations, where the trigger is another obligation’s discharge, are not built. They are on the list, and they are the most requested thing we do not have.

Schema migration across a device fleet is unsolved, by us and by everyone else in this category. We write migrations, we test them against the device classes a partner actually has rather than the ones we own, and we give notice. We do not yet have the deterministic replay harness that would let us reproduce a partner’s sync bug from their event log, which means some debugging will be done by anecdote until we do.

There is no third-party audit, no SOC 2 report and no penetration test result to hand you. Self-hosted deployment narrows the question considerably, because the data does not leave your estate. It does not remove it, and we are not going to describe an absence as an architectural decision.

Finally, the things we are not going to build to make the demonstration better: a model that reads contracts and produces obligations, a statutory deadline feed, and ownership inferred from an org chart. Each of the three would make the first fifteen minutes considerably more impressive and cost you the property you were buying.

What a design partner is signing up for

What a partner gets. The rate you sign at, held for two years past the point this product reaches general availability. Direct access to the people writing it, which is a phone number rather than a support tier. The register schema and the escalation ladder designed against your obligations rather than a generic template, with the general product shaped by what your case turns out to need. Migrations written and tested against your device fleet before they ship to you. And export of everything, documented in both directions, available from the first day rather than negotiated on the way out.

What a partner gives. A real register to load, including the parts that are embarrassing — the obligations with no owner, the ones whose text nobody can interpret, the spreadsheet with the merged cells. Access to somebody who can say what an obligation actually means when the wording is ambiguous, because we cannot answer that and guessing would poison the data. A device fleet we can test against, including the oldest and slowest thing you still have in service. And tolerance for a data model that will change underneath you, with migrations and notice, but change.

We also ask for the feedback we cannot generate ourselves: tell us when a notice fired at the wrong time, and tell us how you found out. If you learned it from a regulator, an inspector or a counterparty rather than from us, that is the single most valuable thing you can send, and it is the thing nobody volunteers.

This is the wrong product for some buyers, and it is cheaper for both of us to establish that now. If you need a supported product with a service level this quarter, if your obligations must arrive as a maintained statutory feed, or if your buying process cannot start without a SOC 2 report, Watch is not ready for you. Ask again when the status on this page changes. We would rather lose a design partner than acquire one who needed a finished product.

A realistic first quarter looks like this. Weeks one and two: load the register, connect the directory, escalate nothing. Weeks three and four: read the orphan count, which is usually the first genuinely uncomfortable number, and decide who owns what before any notice goes anywhere. Weeks five to eight: escalation on at one site, chosen for being the worst-connected one you have, because a ladder tested only in the office has not been tested. Month three: the first recurrence cycle completes, drift becomes measurable, and the lead-time figure starts to mean something. Nothing before that point is evidence, and we will not present it as such.

What the largest deployments oblige us to

The top tier is not a bigger licence. The register, the orphan count, the escalation ladder and the two-timestamp record are identical in every deployment, and not one of them improves because a contract is larger. What changes is the list of things we are obliged to in writing — and one verdict about this product that we will state before a reviewer does, because a reviewer will find it: on the composition of obligations alone, Watch lands about a tenth short of the floor of the band the other eight products in this portfolio are held to. We are saying so on the product’s own page rather than padding the list with obligations that belong to other products, because the gap is not ours to manufacture and the reviewer who caught the padding would be right.

What closes the gap is not another promise from us. It is the buyer’s own penalty denominator, and it is real money with a statutory basis rather than vendor rhetoric. NERC CIP assesses up to $1,000,000 per violation per day, so two violations outstanding for two days cost more than a full year of this tier — one penalty episode, at the low end of the regime’s own scale, prices the tier at a fraction of itself. NIS2 regimes, Germany’s §38 BSIG among them, attach personal liability to the officers who signed, and the record this product keeps — who knew, when the notice fired, when delivery happened, how much measured skew the clock carried — is what that officer’s answer is made of; several of its components cannot be insured away at all. The Cyber Resilience Act fines the seller, not you — EUR 15,000,000 or 2.5% of turnover, from December 2027 — so read it as our denominator, not yours. Counterparties write cure periods with daily rates of their own choosing. Read honestly, the obligation tier is priced against a small fraction of one penalty episode under any of these regimes — and a buyer who has no denominator at all should buy the ordinary deployment, which is the same product and does not pretend otherwise.

One correction to our own earlier arithmetic, volunteered because a procurement reviewer would catch it: every proportionality figure in an earlier draft of this analysis was computed against the top of the band rather than against the composition this tier actually carries, which roughly doubles each of them. Corrected, the figures halve — and the argument survives the halving, which is the only reason to keep it.

What the tier does obligate in writing is Watch’s own before it is anyone else’s. Escalation fidelity becomes a contractual duty rather than a demonstration: firing time and delivery time recorded as separate facts, clock skew carried in the record, and an escalation whose delivery gap goes unrecorded treated as a credit event rather than an apology. Recurrence correctness is warranted: the schedule moves only by amendment, never by lateness, and a cycle that silently skips an occurrence is a credit event. And orphan surfacing gets a stated window — a leaver event in your directory must turn the affected obligations into orphans inside it, not at the next audit, because an owner who left on Friday and an orphan that appears at the next audit are separated by exactly the gap this product is bought to close. What triggers a credit is published here; what counts as an unrecorded delivery gap and what counts as a skipped occurrence are defined in the contract — a credit whose trigger only we could read would be the old trick in new clothes.

The rest of the tier is shared, and it is labelled as shared. The air-gapped release train is a property of the Harbour platform: Registry, Flow and Watch ship from the same train, and what the posture is worth in the market is published in one place — Google’s air-gapped Distributed Cloud at USD 300,000 a month — while the tier convention around us holds self-managed deployment behind Enterprise tiers. Field co-determination is a portfolio property, with one caveat that belongs to this product more than to any other: Watch tracks accountability by named person, which makes it the cleanest German §87(1)(6) case in this portfolio, and in Austria §96(1)(3) is a consent no arbitration body can substitute — a council that says no ends the deployment in that country. One set of works councils, one duty rota, one escrow deposit, one regulatory feed; none of them charged whole against this product, and a quotation that does otherwise is a billing error you should treat as one.

How it is priced, and why

The unit is one register under management — the whole obligation estate of one organisation, at whatever size and whatever date it is loaded. Not owners, not obligations, not notices. Watch used to be quoted per owner, at a rate per named person accountable for at least one live obligation, and the model was retired for a reason we would rather hand to you than have a reviewer hand to us: under a per-owner rate, the register’s own headline number becomes a revenue line. Every orphan the product finds, every owner who leaves without a transfer, every transfer refused is a seat that stops paying — so the honest incentive flips, and a register becomes something to tidy for the invoice rather than to tell the truth about. The product whose entire value is finding what nobody owns cannot bill by what somebody owns.

The per-obligation alternative fails the same way from the other end. The register is loaded by you, from your own contracts and certificates, and a meter on what you load pays the buyer to under-load — and an under-loaded register is the exact failure this product exists to make visible. A meter on escalations and notices would price the outputs, so the month your escalation ladder saves a filing is the month the invoice is largest, which is the same perverse arithmetic as billing the long resync on the day a fortnight of offline work comes home.

What the unit gives up is visible. A three-hundred-obligation estate and a forty-thousand-obligation estate pay one unit each, and the failure this product prevents is not proportional to headcount or to register size — it is proportional to the cost of the deadline that gets missed, which is a property of your regime and not of your volume. That is also why the qualification gate above is written about your penalties rather than our pricing: it is the one test a buyer can run without us, and it is the one that decides whether the tier’s composition is weight worth carrying or a premium on a corrective action.

We do not publish a number, for the same reason as the rest of this portfolio and with none of the usual embarrassment: an organisation with a live penalty denominator and one without it pay amounts an order of magnitude apart for the same software, and a single figure on a page cannot be honest about both. What is published instead is the unit, the list of what is never metered, the gate, and the verdict stated above — including the part that is awkward for us. That is the whole of the position, and it is the part you can check before speaking to anyone here.

Integration

Harbour Watch through MCP

An agent asked to plan a month of work should know what is already owed during it, and an agent about to reassign somebody's queue should know which obligations are about to become nobody's. Watch exposes the register, the ownership state and the escalation reasoning — scoped to what its operator may already see.

Server

hlebourg-watch

Tools exposed by hlebourg-watch
ToolEffectWhat it does
watch.list_duereadObligations due within a window, for the population the caller may see. Returns the date notice was owed as well as the deadline, so late and due are distinguishable without arithmetic.
watch.get_obligationreadOne obligation in full: source, schedule and anchor, owner and transfer history, discharges, snooze record and current escalation state.
watch.list_orphansreadObligations with no reachable owner, and why each one is unowned. Read this before telling anyone a register is in good order.
watch.explain_escalationreadWhy an escalation fired or did not: the rule, the clock reading and measured skew, the local firing time and the delivery time as separate facts. Use it to answer when we knew, rather than repeating a date.
watch.assign_ownerwriteTransfer accountability to a named person. Records the actor, the recipient, the time and the reason, and leaves the obligation unowned until the recipient accepts it.
watch.snoozewriteDefer a notice by a bounded amount against the obligation's snooze budget, with a reason. Refused when the cap is reached, rather than granted quietly.
watch.record_dischargewriteRecord that an obligation was met, with evidence references and the actual date. Idempotent on a client-generated identity, and validated against the schedule as it stood when the discharge was captured.
watch.escalateactRaise an obligation to the next tier now, sending notifications outside Watch. Logged as an event with the requesting operator attached.

Resources

Documents the agent reads rather than calls — pulled into context without spending a tool call.

  • watch://schema/obligation
  • watch://methodology/recurrence-and-drift
  • watch://methodology/orphan-detection
  • watch://policy/escalation-ladder
  • watch://policy/retention-window

Tools are scoped by the same permissions as the human account they run under. An agent cannot read what its operator cannot read, and every call lands in the audit trail with the operator, the agent and the prompt that caused it. How integration works.

Deployment

Where it runs

Supported environments

  • Self-hosted on your own servers — the default, and the only mode in which no obligation of yours is described on a machine we control
  • Private cloud tenancy in a region you choose, with notification egress named
  • Air-gapped, with escalation delivered through your own internal mail or paging and no outbound call of any kind

Connects to

  • Microsoft Dynamics 365 Field Service
  • IFS Cloud
  • IBM Maximo
  • Hexagon EAM
  • PTC ServiceMax
  • DNV ShipManager
  • Procore
  • Microsoft Entra ID
  • SCIM provisioning
  • Entra ID and SCIM are live. The field-service and EAM connectors are built against each partner during onboarding, not self-served
Evidence

What you can check yourself

Claims a buyer cannot test are worth nothing. Each of these is verifiable during an evaluation, without our involvement.

  • Load the register you already keep — the spreadsheet, not the tidied version — and read the orphan count before you buy anything. Compare it with the number of unowned obligations you believed you had.
  • Put a device in flight mode for the whole declared retention window, let escalations fire on it, then reconnect. Check that the record shows a local firing time and a delivery time as two different facts, and that the warning about retention arrived days before the boundary rather than at it.
  • Remove an owner from your directory on a Friday evening and time how long the affected obligations take to appear as orphans. Then move somebody sideways rather than out, which is the case most systems miss entirely.
  • Submit the same discharge twice with the same client-generated identity, and submit one dated before a schedule amendment. You should get one discharge and one flagged conflict, not two discharges and a silently corrected date.
Limits

What Harbour Watch does not do

This section is written before the rest of the page, not after. If one of these limits is a dealbreaker, better to find out now.

  • Watch does not read your contracts and invent obligations. You load them, or Harbour Flow feeds them, and an obligation nobody entered is an obligation nobody tracks. Extracting a cure period from a PDF with a model would improve the first fifteen minutes of a demonstration and put a guess into a register whose whole value is that it contains no guesses.

  • Watch is not a regulatory calendar service and carries no feed of statutory deadlines with any guarantee of currency. A live example of why: CMMC Phase 2 was scheduled for 10 November 2026, one 2026 source reports a suspension pending review announced in July 2026, and other sources still list the original date. A feed that is confidently wrong about one of those is worse than no feed, and we would be maintaining it in every jurisdiction you operate in.

  • Snooze is capped, and the cap is not configurable to infinity. You set it per obligation class and you may set it small; you may not set it so large that deferral becomes deletion. An unbounded snooze is how an obligation register quietly becomes a list nobody has read in two years.

  • Escalation cannot reach a person whose device has been offline longer than the notification queue's retention. The escalation still fires and is still recorded against the local clock, but delivery has a horizon, and past it the honest statement is that the record exists and the person was not told.

  • This is a design-partner product and the data model will change under you. Migrations are supplied and notice is given, but on-device migration across a fleet with no maintenance window and no ability to force an upgrade is the hardest structural problem in this category, and we have not solved it any better than the rest of the field.