Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions architecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Current architecture

The deployed web frontend calls the flow bridge and query engine APIs. The flow bridge receives GitHub App webhooks, calls the query engine after refresh, and both backend services use Temporal and PostgreSQL.
The browser-delivered frontend invokes the flow bridge and query engine APIs. The flow bridge coordinates ingestion through Temporal, persists application data in PostgreSQL, and triggers query-engine processing. The query engine also uses Temporal and PostgreSQL, and its agent and feedback capabilities call configured AI model providers and GitHub. GitHub can also invoke the flow bridge webhook.

```mermaid
architecture-beta
Expand All @@ -11,22 +11,25 @@ architecture-beta

service browser(internet)[Browser] in consumers
service frontend(server)[Web frontend] in consumers
service flow_bridge(server)[Flow bridge API] in backend
service query_engine(server)[Query engine API] in backend
service flow_bridge(server)[Flow bridge] in backend
service query_engine(server)[Query engine] in backend
service temporal(server)[Temporal workflow service] in platform
service postgresql(database)[PostgreSQL] in platform
service github(internet)[GitHub] in external
service model_provider(cloud)[Configured AI model provider] in external

browser:R --> L:frontend
frontend:R --> L:flow_bridge
frontend:R --> L:query_engine
github:R --> L:flow_bridge
flow_bridge:R --> L:query_engine
flow_bridge:R --> L:temporal
flow_bridge:R --> L:postgresql
query_engine:R --> L:temporal
query_engine:R --> L:postgresql
temporal:R --> L:postgresql
flow_bridge:R <--> L:github

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the generated GitHub interface direction across both artifacts.

  • architecture.md#L30-L30: keep the bidirectional edge only if the flow-bridge inventory explicitly documents outbound GitHub communication.
  • unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md#L126-L128: otherwise replace the “no bidirectional constructs” result or change the architecture edge to the verified one-way webhook direction.
📍 Affects 2 files
  • architecture.md#L30-L30 (this comment)
  • unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md#L126-L128
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@architecture.md` at line 30, Align the GitHub interface direction across both
artifacts: in architecture.md at line 30, retain the bidirectional
flow_bridge–GitHub edge only if the flow-bridge inventory explicitly documents
outbound GitHub communication; otherwise change it to the verified one-way
webhook direction. In
unoplat-code-confluence-ingestion/code-confluence-flow-bridge/app_interfaces.md
at lines 126-128, update the “no bidirectional constructs” result to match the
verified direction, or leave it unchanged only when the inventory confirms
outbound communication.

query_engine:R --> L:github
query_engine:R --> L:model_provider

align column flow_bridge query_engine
```
2 changes: 1 addition & 1 deletion unoplat-code-confluence-cli/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- UNOPLAT_CODE_CONFLUENCE_CONTEXT:BEGIN -->
<CRITICAL_INSTRUCTION>

> Generated from branch `dev` at commit `5ecdba39d57f50c5188a8e32b9dd4f52d01611fe` (2026-07-18). Content may become stale as new commits land.
> Generated from branch `dev` at commit `57d1d23304bfc4e45c00dae712eec11747f33c0d` (2026-07-24). Content may become stale as new commits land.
</CRITICAL_INSTRUCTION>

Expand Down
22 changes: 20 additions & 2 deletions unoplat-code-confluence-cli/app_interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,29 @@ Format: `path: L<line>: <match_text>` where path is codebase-relative.

## Inbound Constructs

No inbound constructs detected.
### cli_command (click)

- `src/unoplat_code_confluence_cli/cli_app/repo_commands.py`: L15: @repo_group.command(name="add")
- `src/unoplat_code_confluence_cli/cli_app/repo_commands.py`: L27: @click.command(name="add-repository")
- `src/unoplat_code_confluence_cli/cli_app/repo_commands.py`: L42: @click.command(name="agent-md")
- `src/unoplat_code_confluence_cli/cli_app/service_commands.py`: L20: @service_group.command(name="run")
- `src/unoplat_code_confluence_cli/cli_app/service_commands.py`: L28: @service_group.command(name="status")
- `src/unoplat_code_confluence_cli/cli_app/service_commands.py`: L47: @service_group.command(name="update")
- `src/unoplat_code_confluence_cli/cli_app/service_commands.py`: L55: @service_group.command(name="stop")
- `src/unoplat_code_confluence_cli/cli_app/service_commands.py`: L63: @service_group.command(name="destroy")
- `src/unoplat_code_confluence_cli/cli_app/setup_commands.py`: L16: @setup_group.command(name="token-repo-provider")
- `src/unoplat_code_confluence_cli/cli_app/setup_commands.py`: L28: @setup_group.command(name="model-provider")

## Outbound Constructs

No outbound constructs detected.
### http_client (httpx2)

- `src/unoplat_code_confluence_cli/adapters/httpx2_client.py`: L37: httpx2.get( f"{candidate_base_url}{path}", params=params, headers=headers, follow_redirects=follow_redirects, timeout=timeout, )
- `src/unoplat_code_confluence_cli/adapters/httpx2_client.py`: L73: httpx2.post( f"{candidate_base_url}{path}", json=json, timeout=timeout, )

## Bidirectional Constructs

No bidirectional constructs detected.

## Internal Constructs

Expand Down
2 changes: 1 addition & 1 deletion unoplat-code-confluence-commons/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ This project uses Backlog.md MCP for all task and project management. Before cre
<!-- UNOPLAT_CODE_CONFLUENCE_CONTEXT:BEGIN -->
<CRITICAL_INSTRUCTION>

> Generated from branch `dev` at commit `5ecdba39d57f50c5188a8e32b9dd4f52d01611fe` (2026-07-18). Content may become stale as new commits land.
> Generated from branch `dev` at commit `57d1d23304bfc4e45c00dae712eec11747f33c0d` (2026-07-24). Content may become stale as new commits land.

</CRITICAL_INSTRUCTION>

Expand Down
4 changes: 4 additions & 0 deletions unoplat-code-confluence-commons/app_interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ No inbound constructs detected.

No outbound constructs detected.

## Bidirectional Constructs

No bidirectional constructs detected.

## Internal Constructs

No internal constructs detected.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Business Domain References

## Domain Summary
This package supports Code Confluence, a repository-ingestion and code-intelligence platform for analyzing source repositories and their codebases. It models repositories, files, language and package metadata, framework feature catalogs, detected source-code spans, and confidence/evidence for feature usage. It also manages workflow execution, progress and event histories, agent output snapshots and AGENTS.md publication metadata, with credentials and feature flags supporting operations.
This package supports Code Confluence, a repository-ingestion and code-intelligence platform. Its models catalog Git repositories, codebases, source files, programming and package metadata, framework features, and detected source-code spans while tracking repository and codebase workflow execution. It also persists agent progress and events, AGENTS.md output and pull-request publication metadata, credentials, and operational feature flags.

## Data Model References
### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-commons/src/unoplat_code_confluence_commons/base_models/data_model_position.py`
Expand Down
2 changes: 1 addition & 1 deletion unoplat-code-confluence-docs/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Reference details: see `business_logic_references.md`.
<!-- UNOPLAT_CODE_CONFLUENCE_CONTEXT:BEGIN -->
<CRITICAL_INSTRUCTION>

> Generated from branch `dev` at commit `5ecdba39d57f50c5188a8e32b9dd4f52d01611fe` (2026-07-18). Content may become stale as new commits land.
> Generated from branch `dev` at commit `57d1d23304bfc4e45c00dae712eec11747f33c0d` (2026-07-24). Content may become stale as new commits land.
</CRITICAL_INSTRUCTION>

Expand Down
4 changes: 4 additions & 0 deletions unoplat-code-confluence-docs/app_interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ No inbound constructs detected.

No outbound constructs detected.

## Bidirectional Constructs

No bidirectional constructs detected.

## Internal Constructs

No internal constructs detected.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Business Domain References

## Domain Summary
This repository powers the documentation site for Unoplat Code Confluence, a code-context engine that helps AI agents understand Python and TypeScript codebases and generate AGENTS.md guidance. Its models support documentation delivery: framework and library catalog entries, searchable/filterable tables, release changelogs, site announcements, and page SEO metadata. The dominant domain is developer-product documentation and release communication for AI-assisted code understanding.
This repository supports the documentation site for Unoplat Code Confluence, a developer tool for AI-assisted code understanding and AGENTS.md generation. Its models cover documentation-site operations: framework catalogs and filterable tables, release changelogs, announcement banners, page SEO, and routing. The dominant domain is product documentation and release communication for a code-context engine serving Python and TypeScript codebases.

## Data Model References
### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-docs/src/components/data-table-filter/core/filters.ts`
Expand Down
2 changes: 1 addition & 1 deletion unoplat-code-confluence-frontend/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Before substantial work:
<!-- UNOPLAT_CODE_CONFLUENCE_CONTEXT:BEGIN -->
<CRITICAL_INSTRUCTION>

> Generated from branch `dev` at commit `5ecdba39d57f50c5188a8e32b9dd4f52d01611fe` (2026-07-18). Content may become stale as new commits land.
> Generated from branch `dev` at commit `57d1d23304bfc4e45c00dae712eec11747f33c0d` (2026-07-24). Content may become stale as new commits land.
</CRITICAL_INSTRUCTION>

Expand Down
49 changes: 48 additions & 1 deletion unoplat-code-confluence-frontend/app_interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,54 @@ No inbound constructs detected.

## Outbound Constructs

No outbound constructs detected.
### http_client (axios)

- `src/features/agent-feedback/api.ts`: L75: apiClient.post( "/code-confluence/feedback", payload, )
- `src/features/app-feedback/api.ts`: L42: queryEngineClient.post("/v1/app-feedback", payload)
- `src/lib/api.ts`: L142: apiClient.post( "/ingest-token", null, { params: queryParams, headers: { Authorization: `Bearer ${token}`, "Content-Type": undefined, }, }, )
- `src/lib/api.ts`: L219: apiClient.get("/repos", { params })
- `src/lib/api.ts`: L236: apiClient.post( "/repositories", repository, )
- `src/lib/api.ts`: L267: apiClient.put( "/update-token", null, { params: queryParams, headers: { Authorization: `Bearer ${token}`, "Content-Type": undefined, }, }, )
- `src/lib/api.ts`: L319: apiClient.delete( "/delete-token", { params: queryParams }, )
- `src/lib/api.ts`: L333: apiClient.get( `/flags/${flagName}`, )
- `src/lib/api.ts`: L362: apiClient.post( "/repository-data", config, )
- `src/lib/api.ts`: L400: apiClient.get("/repository-data", { params: { repository_name: repositoryName, repository_owner_name: ownerName, }, })
- `src/lib/api.ts`: L437: apiClient.get( "/user-details", { params: { provider_key: providerKey }, }, )
- `src/lib/api.ts`: L456: apiClient.get("/parent-workflow-jobs")
- `src/lib/api.ts`: L489: apiClient.get( "/repository-status", { params }, )
- `src/lib/api.ts`: L537: apiClient.post( "/code-confluence/issues", requestData, )
- `src/lib/api.ts`: L557: apiClient.get( "/codebase-metadata", { params }, )
- `src/lib/api.ts`: L576: apiClient.get("/get/ingestedRepositories")
- `src/lib/api.ts`: L597: apiClient.post("/refresh-repository", repository)
- `src/lib/api.ts`: L614: apiClient.delete( "/delete-repository", { data: repository }, )
- `src/lib/api.ts`: L667: queryEngineClient.get("/v1/codebase-agent-rules", { params, })
- `src/lib/api.ts`: L690: queryEngineClient.post("/v1/repository-agent-run/cancel", null, { params, })
- `src/lib/api.ts`: L705: queryEngineClient.post("/v1/repository-agent-md-pr", payload)
- `src/lib/api.ts`: L724: queryEngineClient.get("/v1/repository-agent-md-pr", { params })
- `src/lib/api.ts`: L765: queryEngineClient.get("/v1/repository-agent-snapshot", { params, })
- `src/lib/api.ts`: L862: queryEngineClient.get("/v1/providers")
- `src/lib/api.ts`: L889: queryEngineClient.get("/v1/model-config")
- `src/lib/api.ts`: L925: queryEngineClient.put( "/v1/model-config", bodyConfig, { headers }, )
- `src/lib/api.ts`: L945: queryEngineClient.delete("/v1/model-config")
- `src/lib/api.ts`: L957: queryEngineClient.post( "/v1/model-config/codex-openai/oauth/authorize", payload, )
- `src/lib/api.ts`: L972: queryEngineClient.get( `/v1/model-config/codex-openai/oauth/flows/${flowId}`, )
- `src/lib/api.ts`: L985: queryEngineClient.get( "/v1/model-config/codex-openai/oauth/status", )
- `src/lib/api.ts`: L998: queryEngineClient.delete("/v1/model-config/codex-openai/oauth")
- `src/lib/api/repositories-api.ts`: L29: apiClient.get<PaginatedResponse<GitHubRepoSummary>>( "/repos", { params: { provider_key: providerKey, per_page: perPage, cursor: cursor ?? undefined, filterValues, }, }, )
- `src/lib/api/repository-provider-api.ts`: L17: apiClient.get<RepositoryProvidersResponse>( "/repository-providers", )
- `src/lib/api/repository-provider-api.ts`: L67: apiClient.post<IngestTokenResponse>( "/ingest-token", null, { params: queryParams, headers: { Authorization: `Bearer ${patToken}`, }, }, )
- `src/lib/api/tool-config-api.ts`: L19: queryEngineClient.get("/v1/tool-config")
- `src/lib/api/tool-config-api.ts`: L32: queryEngineClient.get(`/v1/tool-config/${provider}`)
- `src/lib/api/tool-config-api.ts`: L55: queryEngineClient.put( `/v1/tool-config/${provider}`, null, { headers: { Authorization: `Bearer ${sanitizedApiKey}` }, }, )
- `src/lib/api/tool-config-api.ts`: L73: queryEngineClient.delete( `/v1/tool-config/${provider}`, )

## Bidirectional Constructs

### realtime_sync (@tanstack/react-db)

- `src/features/repository-agent-snapshots/hooks.ts`: L133: useLiveInfiniteQuery( (q) => q .from({ events: collection }) .orderBy(({ events }) => events.event_id, "desc"), { pageSize, }, [scope.owner, scope.repository, scope.runId, normalizedCodebaseName, pageSize], )
- `src/features/repository-agent-snapshots/hooks.ts`: L64: useLiveQuery( (q) => { if (!collection) { return undefined; } return q.from({ snapshots: collection }); }, [collection], )
- `src/features/repository-agent-snapshots/hooks.ts`: L96: useLiveQuery( (q) => { if (!collection) { return undefined; } return q .from({ progress: collection }) .orderBy(({ progress }) => progress.codebase_name, "asc"); }, [collection], )
Comment on lines +52 to +58

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate app_interfaces.md =="
fd -a 'app_interfaces\.md$' . || true

echo "== relevant file excerpt =="
if [ -f unoplat-code-confluence-frontend/app_interfaces.md ]; then
  nl -ba unoplat-code-confluence-frontend/app_interfaces.md | sed -n '45,70p'
fi

echo "== locate hooks.ts =="
if [ -f unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/hooks.ts ]; then
  wc -l unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/hooks.ts
  nl -ba unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/hooks.ts | sed -n '1,180p'
fi

echo "== search for realtime_sync/bidir terms and write methods =="
rg -n "realtime_sync|Bidirectional|bidirectional|write|upsert|insert|update|merge|LiveInfiniteQuery|LiveQuery|from\\(\\{|collection" unoplat-code-confluence-frontend/src/features/repository-agent-snapshots unoplat-code-confluence-frontend/app_interfaces.md || true

echo "== broader search for write-like operations in the repo =="
rg -n "\.(insert\\(|update\\(|upsert\\(|merge\\(|set\\(|delete\\(|tx\\(|create\\(|patch\\(|push\\()" unoplat-code-confluence-frontend/src/features/repository-agent-snapshots || true

Repository: unoplat/unoplat-code-confluence

Length of output: 785


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== relevant file excerpt =="
python3 - <<'PY'
from pathlib import Path
p = Path("unoplat-code-confluence-frontend/app_interfaces.md")
if p.exists():
    lines = p.read_text(encoding="utf-8", errors="replace").splitlines()
    for i in range(45, min(len(lines), 70)):
        print(f"{i+1:4}: {lines[i]}")
PY

echo "== hooks excerpt =="
python3 - <<'PY'
from pathlib import Path
p = Path("unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/hooks.ts")
if p.exists():
    lines = p.read_text(encoding="utf-8", errors="replace").splitlines()
    print(len(lines))
    for i in range(1, min(len(lines), 190)):
        print(f"{i+1:4}: {lines[i]}")
PY

echo "== search matching terms =="
rg -n "realtime_sync|Bidirectional|bidirectional|write|upsert|insert|update|merge|LiveInfiniteQuery|LiveQuery|from\\(\\{|collection" unoplat-code-confluence-frontend/src/features/repository-agent-snapshots unoplat-code-confluence-frontend/app_interfaces.md || true

echo "== write-like method calls =="
rg -n "\.(insert\\(|update\\(|upsert\\(|merge\\(|set\\(|delete\\(|tx\\(|create\\(|patch\\(|push\\()" unoplat-code-confluence-frontend/src/features/repository-agent-snapshots || true

echo "== package tanstack version snippets =="
for f in package.json pnpm-lock.yaml yarn.lock package-lock.json bun.lockb; do
  [ -f unoplat-code-confluence-frontend/$f ] && echo "-- $f --" && sed -n '/@tanstack\/react-db\|`@tanstack/react-db`\|tanstack-react-db\|react-query\|`@tanstack/` p' unoplat-code-confluence-frontend/$f | head -80 || true
done

Repository: unoplat/unoplat-code-confluence

Length of output: 14662


Classify these live queries using read-only subscriptions, not bidirectional constructs.

useLiveQuery and useLiveInfiniteQuery here only read from snapshots, progress, and events; there is no corresponding write/sync path in this scope. Move them under realtime subscriptions or add the documented write path if they are intended to be bidirectional.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@unoplat-code-confluence-frontend/app_interfaces.md` around lines 52 - 58,
Reclassify the useLiveQuery and useLiveInfiniteQuery entries in
repository-agent-snapshots/hooks.ts as read-only realtime subscriptions rather
than bidirectional constructs. Keep the snapshots, progress, and events query
references unchanged, since no write or sync path exists in this scope.


## Internal Constructs

Expand Down
10 changes: 5 additions & 5 deletions unoplat-code-confluence-frontend/business_domain_references.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Business Domain References

## Domain Summary
This frontend supports an AI-assisted code analysis and repository operations platform: users onboard GitHub/GitLab repositories, ingest them into workflows, and monitor codebase status, workflow runs, agent events, and generated Agent MD documentation. It also manages repository credentials, model and tool providers including OAuth, and feedback flows that rate agent output or application experience and can create GitHub issues.
This frontend supports a code-analysis and repository-operations platform: it onboards GitHub/GitLab repositories, captures codebase metadata, runs ingestion and agent-generation workflows, and tracks their status, events, snapshots, and generated Agent MD documentation. It also manages AI model/tool providers and credentials, OAuth connections, and user feedback that can be submitted as GitHub issues.

## Data Model References
### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/agent-feedback/api.ts`
Expand Down Expand Up @@ -59,11 +59,11 @@ This frontend supports an AI-assisted code analysis and repository operations pl
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/schema.ts#L94-L96`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/schema.ts#L104-L106`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/schema.ts#L124-L126`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/schema.ts#L202-L204`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/schema.ts#L208-L210`

### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/transformers.ts`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/transformers.ts#L11-L14`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/transformers.ts#L18-L27`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/repository-agent-snapshots/transformers.ts#L18-L28`

### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/tool-config/types.ts`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/features/tool-config/types.ts#L35-L37`
Expand All @@ -86,7 +86,7 @@ This frontend supports an AI-assisted code analysis and repository operations pl
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/hooks/useSaveToolConfig.ts#L14-L16`

### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-events-utils.ts`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-events-utils.ts#L313-L318`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-events-utils.ts#L315-L320`

### `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-md-to-markdown.ts`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/lib/agent-md-to-markdown.ts#L8-L10`
Expand Down Expand Up @@ -178,7 +178,6 @@ This frontend supports an AI-assisted code analysis and repository operations pl
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L119-L128`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L130-L135`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L137-L139`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L141-L144`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L146-L149`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L152-L156`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L162-L170`
Expand All @@ -190,6 +189,7 @@ This frontend supports an AI-assisted code analysis and repository operations pl
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L227-L243`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L246-L253`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L256-L264`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L267-L270`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L273-L276`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L279-L281`
- `/opt/unoplat/repositories/unoplat-code-confluence/unoplat-code-confluence-frontend/src/types.ts#L284-L295`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,23 +103,23 @@ task code-quality # Run all checks (lint + typecheck + schema va
<!-- UNOPLAT_CODE_CONFLUENCE_CONTEXT:BEGIN -->
<CRITICAL_INSTRUCTION>

> Generated from branch `dev` at commit `5ecdba39d57f50c5188a8e32b9dd4f52d01611fe` (2026-07-18). Content may become stale as new commits land.
> Generated from branch `dev` at commit `57d1d23304bfc4e45c00dae712eec11747f33c0d` (2026-07-24). Content may become stale as new commits land.

</CRITICAL_INSTRUCTION>

## Engineering Workflow

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the duplicate Engineering Workflow heading.

The generated block introduces another heading with the same content, triggering the reported markdownlint MD024 warning. Rename the generated heading or consolidate it with the existing workflow section.

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 110-110: Multiple headings with the same content

(MD024, no-duplicate-heading)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@unoplat-code-confluence-ingestion/code-confluence-flow-bridge/AGENTS.md` at
line 110, Remove the duplicate “Engineering Workflow” heading in AGENTS.md by
either renaming the generated heading or consolidating it into the existing
workflow section, ensuring each heading text remains unique to satisfy
markdownlint MD024.

Source: Linters/SAST tools

### Install
- `uv sync` (Taskfile.yml, `.`)
- `uv sync` (config: `Taskfile.yml`; working directory: `.`)
### Build
- Not detected
### Dev
- `DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=postgres DB_NAME=code_confluence NEO4J_HOST=localhost NEO4J_PORT=7687 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=password TEMPORAL_SERVER_ADDRESS=localhost:7233 OTEL_EXPORTER_OTLP_ENDPOINT=localhost:4317 OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_SERVICE_NAME=code-confluence-flow-bridge OTEL_PROPAGATORS='tracecontext,baggage' FRAMEWORK_DEFINITIONS_PATH='../../framework-definitions' TEMPORAL_MAX_CONCURRENT_ACTIVITIES=3 REPOSITORIES_BASE_PATH=/opt/unoplat/repositories TOKEN_ENCRYPTION_KEY='0PiVvlu6HExNWkYjukuG0CAV930B4OsqXNPItAvsxhQ=' GITHUB_APP_OWNER_TYPE=organisation GITHUB_APP_OWNER=unoplat uv run fastapi dev` (Taskfile.yml, `src/code_confluence_flow_bridge`)
- `task dev` (config: `Taskfile.yml`; working directory: `.`)
### Test
- `uv sync --group test && uv run --python 3.13 --group test pytest --cov=src/code_confluence_flow_bridge --cov-report=html:coverage_reports tests/ -v` (Taskfile.yml, `.`)
- `task test` (config: `Taskfile.yml`; working directory: `.`)
### Lint
- `uv run ruff check src/` (Taskfile.yml, `.`)
- `task lint` (config: `Taskfile.yml`; working directory: `.`)
### Type Check
- `uv run --group dev pyrefly check src/` (Taskfile.yml, `.`)
- `task typecheck` (config: `Taskfile.yml`; working directory: `.`)

## Dependency Guide
See [`dependencies_overview.md`](./dependencies_overview.md) for the full dependency catalog and usage notes.
Expand Down
Loading
Loading