镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

fix(server): use the Discord thread URL on Jira replies - #590

Open
omegent-app[bot] wants to merge 30 commits into
fork/devfrom
fix/jira-discord-thread-link
Open

omegent-app[bot] wants to merge 30 commits into
fork/devfrom
fix/jira-discord-thread-link

Conversation

@omegent-app

@omegent-app omegent-app Bot commented Oct 21, 2026

Copy link
Copy Markdown

Jira replies linked https://app.t3.codes/threads/{environment}/{thread}. Discord and Teams already post {T3_WEB_UI_BASE_URL}/?thread={id}.

Jira now posts that same URL as [Open](url). Discord, Teams, and Jira share one builder. When the server has no T3_WEB_UI_BASE_URL, the reply has no thread link.

The running server does not have T3_WEB_UI_BASE_URL yet. Set it to the same value as the bot (https://omega.omegent.com) before this build answers Jira.

opened by Patrick Roza in chat thread Discord · Discord

github-actions Bot and others added 30 commits October 20, 2026 13:13
Reconstruct the ci-release-tooling-docs portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Andrea Simone Costa <24520167+jfet97@users.noreply.github.com>
Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the vendored-dependencies portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the shared-contracts-runtime portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Andrea Simone Costa <24520167+jfet97@users.noreply.github.com>
Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the identity-attribution portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the providers-runtime portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the orchestration-taskqueue portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the git-pull-requests portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the environments-preview-devices portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the desktop-editor portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the web portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the mobile portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
Reconstruct the bots-integrations portion of the preserved fork snapshot 38d3b97. Mixed-purpose files stay with their dominant area; the completed series preserves the exact snapshot tree.

Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <contact@patrickroza.com>
Model: gpt-6.1-sol; harness: Codex in T3 Code.
A follow-up Teams message left a second Stop card under the same Working
line, and an agent attachment caption was posted back into that thread
as the person who owns it.

The live bridge updates Working through the transport that started the
turn, while each new Teams message posts from a fresh transport. That
update dropped the Stop id saved by the other transport and posted
another card. Updates now keep the Stop recorded in the shared ledger,
and a missing card is removed before a replacement is posted. Agent MCP
sends, including attachment captions, stay internal. A person typing in
another client still echoes, and pull-request watches without a
notification still echo.

Release smoke regenerates the lockfile. expo-modules-core stays at
58.0.22 so the Android layout patch still applies.

Focused tests: Teams transport (14) and ResponseBridge echo filter
(202). Draft push ran the changed-file check and workspace typecheck.

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1562053102058610808/1562053102058610808)
·
[T3](https://omega.omegent.com/?thread=a09fd834-7b3a-4361-bb37-878d5e476ebb)

---------

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
New Discord and Teams threads always opened a worktree from `main` and
fetched it, ignoring the workspace, base branch, and start-from-remote
settings the composer already uses. On this fork that lands on
`origin/main`, which has no Discord bot.

A new thread now uses the same chain as the composer: the project
override, then the environment, then `t3.json`, then the built-in
checkout. A worktree branches from the repository default branch, and
**Start from remote** follows the project setting. `--local` and
`--base` still override one turn. A Teams workspace can still pin a
base. The bot no longer reads `T3_DEFAULT_BASE_BRANCH`.

Focused tests: workspace resolution (17), linked-turn launch (1), config
(13), and the channel pin (7). Discord bot typecheck passed. Draft until
the full ship gate.

Model: grok-4.7; harness: Grok in T3 Code.

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1562338788687224883/1562338788687224883)
·
[T3](https://omega.omegent.com/?thread=bcef1bee-0c81-48f8-826d-0713dc0b1cfa)

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Merge 79 upstream commits since d36b7da, including the mobile
update-checker fix for the iOS NativeEventEmitter startup crash.
Preserve fork product behavior and regression coverage while adapting
retained tests to upstream's disposable fixtures and test cleanup.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include the project workspace selection fix landed during this sync.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Dispose the retained PR panel fixture without returning Vitest utilities.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Use disposable browser rendering and persisted-event milestones in retained web and Discord tests. Keep the compiler project ceiling for the full ChatView compilation proof.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Await fork worktree cleanup before returning the upstream archive result, so rejected or active-run requests remain false and successful archives remain true.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include the two new upstream fixes for delegate Stop cleanup and project icons on thread-link chips.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Retain the Claude SDK probe fixture, update explicit upstream-ledger assertions for migration 67, and seed canonical unattributed thread metadata in the transfer fixture.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include approval-aware composer editing and redirect sends on web and mobile while preserving fresh fork draft snapshots, queues, and context attachments.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include delegate settlement and Grok command completion fixes, per-provider replay fixtures, and cached Electron installation. Preserve fork background-task behavior and host runtime targeting.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include leaner cross-platform installs, cached package typechecks, provider test environment isolation, storage cleanup accounting, and iOS simulator AVC decoding. The sync now includes 92 upstream commits since d36b7da; preserve fork test isolation and development state safeguards.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Include desktop script tests in its isolated project so root Vite test routing keeps the launcher regressions. Apply the upgraded formatter to upstream documentation snippets.

Model: gpt-6.1-sol; harness: Codex in T3 Code.
Mid-turn Discord follow-ups queued by default, and `/omegent steernow`
was how you injected them. A mention during a running turn now steers
into that turn.

Park one follow-up with `@Omegent --queue` or `/omegent queue`. Put
`omegent-queue` in the channel topic to park every follow-up there.
`--steer` still injects on a queue-tagged channel. A parked prompt
starts when the turn ends, and deleting the message cancels it.
`/omegent steernow` is removed.

Model: grok-4.7; harness: Grok in T3 Code.

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1561996181201227817/1561996181201227817)
·
[T3](https://omega.omegent.com/?thread=c2aa8e90-965f-42c2-a1e3-24e0a57f58d6)

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Sentry posts in a channel were ignored, because the bot skips other bots
and webhooks.

Add the channel topic tag `omegent-monitor`. The first Sentry post for
an issue opens a thread and starts an investigation. The reply starts
with `severity: bug` or `severity: transient`. A bug is investigated and
a fix is prepared as a pull request. A transient alert does not change
code, and the finished reply mentions @everyone.

A later post for that same Sentry issue does not open another
investigation. The channel reply is only a link to the existing thread,
plus the button "start a new thread here anyway".

The channel still needs its project tag (`omegent-link-<shortName>`).
The bot role needs Mention Everyone for the transient ping to notify the
channel.

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1562338297664114729/1562338297664114729)
·
[T3](https://omega.omegent.com/?thread=ca035eb9-4005-4342-b6d4-f71a46af5e26)

Grok 4.7, Grok harness

---------

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
A new Bug in a configured Jira space was invisible unless someone wrote
`@omegent` in a comment. Public bug text also has to stay data, because
the reporter is outside the team.

When a Bug is created in a space named by `T3CODE_JIRA_PROJECT_MAP` (for
example SA or CFG), T3 starts a review. The summary and description are
fenced as an untrusted report. Nothing in that report is run. The
analysis and the proposed fix are commented on the Jira issue, and those
comments mention the mapped team (people with a Jira account id). A
review that stops before an analysis leaves a short note and does not
mention the team. Nothing from this flow is posted to Discord.

Sentry monitoring stays a separate Discord feature.

## Jira change, start to finish

Comment mentions already arrive from Jira Automation as
`comment_created` and `comment_updated`. A new bug does not. Add one
rule. Leave the comment rules in place, and leave their `webhookEvent`
set to `comment_created` or `comment_updated`.

Do this after the server build that contains this PR is deployed. A
delivery sent before that build is ignored and is not replayed.

1. Open **Jira settings → System → Global automation** on
`macs-holding.atlassian.net`. One global rule covers every configured
space. Project automation would need the same rule once per space.
2. Create a rule named **Omegent: bug created**.
3. Scope it to the configured spaces only. Today that is **SA** and
**CFG**. A space counts only when it is in `T3CODE_JIRA_PROJECT_MAP`
and, if `T3CODE_JIRA_ALLOWED_PROJECTS` is set, in that list too. Add a
space to the rule only when you add it there.
4. Trigger: **Work item created** (Issue created). Do not use Work item
updated, Comment created, or Assign. Those stay on their own rules.
5. Condition: **Issue type equals Bug**. The type name must be Bug. A
Story, Task, or another type is ignored. The server checks the same
thing.
6. Action: **Send web request**.
- Web request URL: the same URL as the comment rules,
`https://omega.omegent.com/api/jira/webhook`
   - HTTP method: **POST**
- Web request body: **Custom data**. Do not use Issue data (Automation
format). That shape is not an issue-created webhook.
- Headers: copy them from a comment rule. The server accepts either
`Authorization: Bearer <secret>` or `X-T3-Webhook-Secret: <secret>`. The
value is `T3CODE_JIRA_WEBHOOK_SECRET`. Also send `Content-Type:
application/json`. Do not put the secret in git or in a screenshot of
the audit log.
- Custom data: paste the template below. Every text field uses
`.asJsonString`, which includes the JSON quotes and escapes newlines and
quotes. A raw `{{issue.description}}` inside quotes breaks the body, and
the server then drops the delivery as invalid JSON.
7. Turn the rule **on**.

```json
{
  "webhookEvent": "jira:issue_created",
  "issue_event_type_name": "issue_created",
  "user": {
    "accountId": {{initiator.accountId.asJsonString}},
    "displayName": {{initiator.displayName.asJsonString}}
  },
  "issue": {
    "id": "{{issue.id}}",
    "key": {{issue.key.asJsonString}},
    "self": "https://macs-holding.atlassian.net/rest/api/3/issue/{{issue.id}}",
    "fields": {
      "summary": {{issue.summary.asJsonString}},
      "description": {{#if(issue.description)}}{{issue.description.asJsonString}}{{else}}""{{/}},
      "issuetype": { "name": {{issue.issueType.name.asJsonString}} },
      "project": { "key": {{issue.project.key.asJsonString}} },
      "reporter": {
        "accountId": {{issue.reporter.accountId.asJsonString}},
        "displayName": {{issue.reporter.displayName.asJsonString}}
      }
    }
  }
}
```

`self` has to be that REST issue address. The server turns it into the
browse link. `webhookEvent` has to be `jira:issue_created` (or
`issue_created`). A comment rule that also carries
`issue_event_type_name: issue_created` stays a comment, as long as its
own `webhookEvent` is still `comment_created` or `comment_updated`.

Bugs filed by `T3CODE_JIRA_BOT_ACCOUNT_ID` are skipped, so the bot
cannot review a bug it filed itself. A review comment does not create an
issue, so it does not start this rule again. The same issue id is
delivered once. Editing the bug later does not start another review.

Check, in order:

1. In the rule audit log, the web request returns **202**. **401** means
the secret header does not match. **400** with invalid JSON means a
smart value was not escaped. **404** means the Jira integration is
disabled on the server.
2. File a Bug in SA as a person, with a summary and a description that
contain a quote and a line break. The debug log records `accepted_202`
for `jira:issue_created`. The issue later gets the analysis comment,
then the fix comment. Both mention the mapped team.
3. File a Story in SA. The log records `ignored_202` with reason
`not_bug:story`. No review starts.
4. File a Bug in a project that is not in the map. The log records
`project_denied_202`. No review starts.
5. Mention the bot on an existing issue. That comment rule still runs,
and the reply is still threaded under the mention.

The same steps are in `docs/user/jira-issue-conversations.md` under
**Turn it on in Jira**.

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1562338297664114729/1562338297664114729)
·
[T3](https://omega.omegent.com/?thread=ca035eb9-4005-4342-b6d4-f71a46af5e26)

Grok 4.7, Grok harness

---------

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Jira comments linked the hosted app path
/threads/{environment}/{thread}. Discord and Teams already post
{T3_WEB_UI_BASE_URL}/?thread={id}. Jira now posts that same URL as
[Open](url). When the server has no T3_WEB_UI_BASE_URL, the reply has
no thread link.

Discord, Teams, and Jira share one URL builder.

Grok 4.7, Grok harness

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-app Bot marked this pull request as ready for review October 21, 2026 12:05

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant