What Tripwire does
Your team depends on issues owned by other teams. When one of those blockers slips, Jira writes it to the changelog and tells no one — you find out at sprint review. Tripwire fixes that, without a Slack bot and without any data leaving Atlassian.
Tripwire watches the built-in "blocks" issue links you already use. When a blocker slips — its due date moves later, it gets punted out of a sprint, or it goes quiet for too long — Tripwire posts a blame-free comment on the dependent issue and @-mentions the people who need to know. When the blocker resolves, it tells them they're unblocked. It's a focused Forge app for Jira Cloud — one job, done well.
Getting started
After a site admin installs Tripwire from the Atlassian Marketplace, it starts working immediately — there is nothing to configure. You'll interact with it in three places:
On the issue
Alerts arrive as comments on the dependent issue, @-mentioning the assignee and project lead. Jira delivers them through its normal notifications.
The dashboard
Apps → Tripwire — a global page with tabs for At risk, All edges, Digest, and Settings.
The digest issue
A per-project "Dependency Digest" issue (labelled tripwire-digest) that Tripwire creates lazily to hold the weekly digest and bulk-change summaries.
How dependencies are detected
Tripwire builds a registry of dependency edges from your issue links. An edge is a directed pair: a blocker (the issue that must be done first) and a dependent (the issue waiting on it). It reads the direction from the link so it always alerts the side that is waiting, never the side doing the work.
- Which links. By default the standard Blocks / is blocked by link type. You can change the watched link types in Settings.
- Cross-project by default. The whole point is cross-team dependencies, so out of the box Tripwire focuses on edges where the blocker and dependent live in different projects. You can widen it to same-project dependencies too.
- Registered silently. Creating a new "blocks" link just starts tracking — there is no "you created a link" notification (event
E7). Removing the link stops tracking, also silently (E8). - Self-healing. A daily reconciliation sweep re-reads your links so a missed real-time event is corrected within a day, deactivated edges are purged after 90 days, and the registry is capped so it never grows without bound.
Alerts — every notification Tripwire can post
Every alert is a comment on the dependent issue, written to be blame-free — it states what changed, never who is at fault. Here is the complete catalogue.
Due-date slip
The blocker's due date moved later by at least your slip threshold.
SLIPPED ⚠️ Dependency slipped: PLAT-87 "Payments service migration" — due date moved Jul 12 → Jul 26 (14 days later). This issue depends on it. @maya @tomas
Posted on the dependent issue · assignee + project lead notifiedDue-date removed
The blocker's due date was cleared entirely — often a quiet signal that a commitment has evaporated.
SLIPPED ⚠️ Dependency lost its due date: PLAT-87 "Payments service migration" no longer has a due date (was Jul 12). This issue depends on it. @maya
Treated as a slip — there's now no date to plan aroundPunt to the backlog
The blocker was pulled out of its sprint back into the backlog — no sprint now owns it.
PUNTED ↩️ Dependency punted to the backlog: PLAT-87 "Payments service migration" was removed from its sprint. This issue depends on it. @maya
Detected from the sprint field changing to emptyPunt to a later sprint
The blocker moved from its current sprint to one that starts later. Tripwire reads sprint start dates so it can tell a genuine push-out from routine board hygiene.
PUNTED ↩️ Dependency moved to a later sprint: PLAT-87 "Payments service migration" moved from Sprint 24 to Sprint 26. This issue depends on it. @maya
Only fires when the new sprint starts later than the old oneGone quiet (staleness)
An unresolved blocker hasn't been touched — no status, date, or field change — for longer than the stale window (about a week by default). No one moved it; it just went silent.
STALE 🕰️ Dependency has gone quiet: PLAT-87 "Payments service migration" hasn't been updated in 9 days and is still open. This issue depends on it. @maya
Surfaced by the daily sweep; clears automatically when the blocker is touched againUnblocked
When a blocker resolves, Tripwire is remaining-blocker aware — it checks whether the dependent still has other open blockers before it declares good news, so it never says "you're clear" while you're still stuck. There are three variants:
CLEARED ☑️ One blocker resolved — PLAT-87 is done, but this issue is still waiting on 2 more (PLAT-91, DATA-12). @maya
Partial unblock — progress, but not clear yetCLEARED 🟢 Ready to pick up: the last blocker (PLAT-87) is resolved and nothing else is blocking this issue. It hasn't been started yet. @maya @tomas
Last blocker cleared, dependent not yet in progressCLEARED ✅ You're unblocked: the last blocker (PLAT-87) is resolved. This issue is free to move. @maya
Last blocker cleared while the dependent is already in progressBulk-change summary
When one person triggers a burst of slips at once — a sprint reshuffle that moves a dozen issues — Tripwire folds them into a single summary instead of a flood of comments. The summary is posted to the project's Dependency Digest issue (see Anti-spam).
SUMMARY 📦 12 dependencies shifted by Sam Smith in a bulk sprint change. Affected dependents: SHOP-142, SHOP-148, WEB-31 … (see the list below)
One comment on the digest issue instead of 12 on separate issuesE7) and removing one (E8) are tracked silently,
and a slip on a resolved blocker, an ambiguous change, or a move to an
earlier sprint produces no alert — Tripwire is deliberately
false-alert-averse. When it isn't sure, it stays quiet and records why.
Who gets notified
Each alert @-mentions the people best placed to react on the dependent side, so Jira's own notifications reach them. By default:
| Recipient | When |
|---|---|
| The dependent issue's assignee | Always, when there is one — they own the waiting work. |
| The dependent project lead | So someone is accountable even if the issue is unassigned. |
| Additional recipients | Optional extra people you pick per project (e.g. a delivery lead), configured in Settings. |
Recipients are configurable per project — you can turn the assignee or lead mention off, or add named people with the user picker. Tripwire resolves everyone by display name; if a lookup ever fails it degrades gracefully rather than exposing raw account IDs.
Built not to spam
The fastest way to get an alerting app uninstalled is to make it noisy. Tripwire has four layers of restraint:
- Once per day, per dependency, per kind. A 24-hour cooldown means the same edge won't alert twice for the same class of change in a day, no matter how many times the field wobbles.
- Burst folding. When one actor triggers more than a handful of slips within a few minutes (a bulk board reshuffle), the individual comments are folded into one summary on the digest issue.
- Write-before-post de-duplication. Tripwire records that it's about to alert before it posts, so a retried or duplicated platform event can never produce a duplicate comment.
- One-click mute. Every alert footer links to mute that project. Muted projects post nothing — but the dashboard keeps tracking state, so you still see the truth when you look.
The weekly digest
Once a week (on a weekday you choose), Tripwire posts a per-project digest — the Monday catch-up that replaces a cross-team status meeting. Each digest gathers what happened across that project's dependencies:
- New slips and punts since the last digest;
- Dependencies currently at risk (slipped, punted, or stale and still open);
- Wins — dependencies that got unblocked; and
- Any bulk-change summaries folded during the week.
The digest is posted as a comment on that project's lazily-created "Dependency
Digest" issue (labelled tripwire-digest), rendered as rich Jira
content, and is also available on the dashboard's Digest tab. If someone
deletes the digest issue, Tripwire detects it and recreates it — the digest never
silently dies. You can disable the digest or change its recipients and weekday in Settings.
The dashboard
Open Apps → Tripwire for a global page with four tabs — the 10-minute triage view for everything cross-team.
At risk
Every dependency currently slipped, punted, or stale and still open — the "what should we worry about" list, with days slipped or days idle.
All edges
The full dependency registry with blocker, dependent, project, state, and last change — filterable, so you can see everything Tripwire is watching.
Digest
The latest per-project digest, rendered in place, so you don't have to hunt for the digest issue.
Settings
Everything below — watched link types, thresholds, recipients, digest, and per-project mute.
Settings
From the Settings tab you control all of Tripwire's behaviour:
| Setting | What it does |
|---|---|
| Watched link types | Which issue-link types count as a dependency (default: Blocks). |
| Slip threshold | How many days a due date must move later before it counts as a slip. |
| Due-date-removed alerts | Whether clearing a blocker's due date is treated as a slip. |
| Stale window | How long an untouched, open blocker waits before it's "gone quiet". |
| Lookahead / re-alert windows | Tune how far ahead Tripwire looks and how it re-surfaces ongoing risk. |
| Cross-project only | Track only cross-team dependencies, or include same-project ones too. |
| Unblock notifications | Turn the "ready to pick up" / "you're unblocked" alerts on or off. |
| Recipients (per project) | Toggle the assignee and project-lead mentions and add extra people with a user picker. |
| Digest | Enable/disable it, choose the weekday, and set who it notifies. |
| Mute (per project) | Stop comments for a project while tracking continues in the background. |
Why an alert did — or didn't — fire
The most common support question is "I changed something and got no alert" (or the reverse). Tripwire is deliberately conservative; this table explains the logic.
| Situation | Alert? |
|---|---|
| Blocker's due date moved later by ≥ the threshold | ✅ Due-date slip |
| Blocker's due date moved earlier, or by less than the threshold | ❌ Good news / below threshold — no alert |
| Blocker's due date cleared | ✅ Due-date removed (if enabled) |
| Blocker punted to the backlog or a later sprint | ✅ Punt |
| Blocker moved to an earlier / current sprint | ❌ Not a slip — no alert |
| Open blocker untouched past the stale window | ✅ Gone quiet |
| The change happened on a resolved blocker | ❌ Already done — no alert |
| The changed issue is not a blocker of anything | ❌ Nothing depends on it — no alert |
| The dependency isn't a watched link type | ❌ Not tracked — no alert |
| The project is muted | ❌ Tracked silently — no comment, still on the dashboard |
| Same edge + kind already alerted in the last 24 h | ❌ Cooldown — no duplicate |
| One actor slipped many dependencies at once | ✅ Folded into one bulk summary on the digest issue |
| Last blocker resolved | ✅ Unblocked (ready / in-progress / partial) |
Privacy & permissions
Tripwire is built on Atlassian Forge and runs entirely inside Atlassian Cloud. It makes no requests to any external server and stores only a small dependency layer over your issues (which issue blocks which, the state and slip count, the timestamps and date/sprint snapshots it needs to spot the next change, the anti-spam ledger, and your settings). It does not store your issue descriptions, comments, or attachments.
| Scope | Why |
|---|---|
| read:jira-work | Read issues, links, dates, and statuses to detect dependency slips. |
| write:jira-work | Post the alert comment and maintain the per-project digest issue. |
| read:jira-user | Resolve display names of assignees, leads, and recipients to @-mention them. |
| read:sprint:jira-software | Read sprint start dates to distinguish a real punt from routine sprint moves. |
| storage:app | Persist the dependency layer, digest bookkeeping, and settings in Forge storage. |
See the full Privacy Policy, Terms of Service, and Support SLA.
FAQ
Do I have to write any rules or Automation?
No. Tripwire works the moment it's installed, using sensible defaults. It watches the "blocks" links you already have — there are no per-project rules to build and it uses none of your Jira Automation quota, because it runs on Forge, not Automation.
Does Tripwire send anything to Slack or an external service?
No. Tripwire is "Runs on Atlassian" — it makes no external network calls. Alerts are comments on the dependent issue, delivered by Jira's own notifications. Your data never leaves Atlassian.
Which link types does it watch?
By default the standard Blocks / is blocked by link type. You can add or change the watched link types in Settings if your team models dependencies differently.
Does it work on Jira Standard / Free, without Advanced Roadmaps?
Yes — that's the point. Tripwire works on every Jira Cloud plan and needs no Premium features. The teams that Advanced Roadmaps leaves behind are exactly who it's for.
Will it spam my team during a big sprint reshuffle?
No. A 24-hour cooldown caps repeats per dependency, and when one person shifts many dependencies at once the alerts fold into a single summary on the digest issue. You can also mute any project with one click.
What's the "Dependency Digest" issue that appeared?
It's an issue Tripwire creates lazily per project (labelled tripwire-digest)
to hold the weekly digest and any bulk-change summaries — so those never clutter your
real work items. If you delete it, Tripwire recreates it when it next needs it.
Why didn't I get an alert for a change I made?
Tripwire is false-alert-averse. It stays quiet for good-news changes (a date moved earlier), changes below your threshold, changes on already-resolved blockers, issues nothing depends on, un-watched link types, muted projects, and anything ambiguous. The table under "Why an alert fired" lists every case.
What does it cost?
Tripwire is free for teams of up to 10 users, with simple per-user pricing above that. Billing is handled entirely by the Atlassian Marketplace.
Support
Questions, bugs, or feedback? Email support@outpostlabs.dev. We provide best-effort, asynchronous support — see the Support SLA for response targets.