mirror of
https://github.com/J3vb/OwnCord.git
synced 2026-09-02 19:43:10 +03:00
chore: track the graphify knowledge graph and the bug-hunt ledger (#1381)
* chore: track the graphify knowledge graph and the bug-hunt ledger Both were local-only, so a clone — including a cloud session, which sees only tracked files — started with no graph and no findings history. graphify-out/: the top-level built graph is now tracked so a fresh clone can query it without a rebuild. Subdirectories stay ignored: cache/ is a per-machine AST cache, and graphify parks the previous graph in a dated YYYY-MM-DD/ backup on every rebuild (18 MB of stale duplicate, a local rollback aid rather than shared state). .gitattributes marks the tree -text: the repo-wide `* text=auto eol=lf` rule would otherwise rewrite line endings inside .graphify_labels.json.sig, which signs the labels byte-for-byte, and invalidate the signature on checkout. graph.json/graph.html also get -diff, and the tree is linguist-generated so it stays out of language stats and collapses in review. .superpowers/: findings-ledger.json, its FINDINGS.md render and render-ledger.mjs are tracked so contributors can add findings by PR. Hunt transcripts, .bak snapshots and debris patches remain per-session scratch. Tradeoff accepted deliberately: the post-commit rebuild hook rewrites graph.json, so each refresh writes a fresh ~18 MB blob into history. Refresh it in its own commit rather than folding it into an unrelated diff. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore(graphify): refresh the graph over the newly-tracked files The first commit added findings-ledger.json, FINDINGS.md and render-ledger.mjs to the tracked tree, so the post-commit rebuild picked them up and rewrote the graph. Also ignores .pending_changes, the transient rebuild-state file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore(graphify): share the PreToolUse graph-first nudge hooks The two hook-guard hooks lived in the gitignored settings.local.json with an absolute C:/Users path, so no other clone got them. Portable form: bare `graphify` off PATH, and `|| exit 0` so a contributor without graphify installed is never blocked. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Update graph output files and manifest - Updated binary files: graph.html and graph.json with new content. - Added new entry for findings-ledger.json in manifest.json with updated metadata. --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"hooks": {
|
||||
"PreToolUse": [
|
||||
{ "matcher": "Bash|Grep", "hooks": [{ "type": "command", "command": "graphify hook-guard search || exit 0" }] },
|
||||
{ "matcher": "Read|Glob", "hooks": [{ "type": "command", "command": "graphify hook-guard read || exit 0" }] }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -7,3 +7,15 @@
|
||||
*.ico binary
|
||||
*.wasm binary
|
||||
*.exe binary
|
||||
|
||||
# Knowledge graph (graphify) — generated, committed so a fresh clone can query
|
||||
# it without rebuilding. `* text=auto eol=lf` above would rewrite line endings
|
||||
# inside these on checkout, and .graphify_labels.json.sig signs the labels
|
||||
# byte-for-byte, so normalization would invalidate the signature. -text opts the
|
||||
# whole tree out; -diff keeps a 17 MB graph out of textual diffs.
|
||||
graphify-out/** -text linguist-generated=true
|
||||
graphify-out/graph.json -diff
|
||||
graphify-out/graph.html -diff
|
||||
|
||||
# Rendered from findings-ledger.json by render-ledger.mjs — never hand-edit.
|
||||
.superpowers/FINDINGS.md linguist-generated=true
|
||||
|
||||
+20
-2
@@ -9,6 +9,7 @@ Server/.env
|
||||
.claude/*
|
||||
!.claude/skills/
|
||||
!.claude/workflows/
|
||||
!.claude/settings.json
|
||||
CLAUDE.local.md
|
||||
.mcp.json
|
||||
|
||||
@@ -67,8 +68,16 @@ node_modules/
|
||||
# AI tooling
|
||||
.gstack/
|
||||
.claude-flow/
|
||||
.superpowers/
|
||||
.rust-review-results/
|
||||
|
||||
# Bug-hunt ledger: shared so contributors can add findings. Only the ledger,
|
||||
# its render and its validator are tracked; hunt transcripts, .bak snapshots
|
||||
# and debris patches are per-session scratch and stay local.
|
||||
.superpowers/*
|
||||
!.superpowers/findings-ledger.json
|
||||
!.superpowers/FINDINGS.md
|
||||
!.superpowers/render-ledger.mjs
|
||||
|
||||
.claude/worktrees/
|
||||
|
||||
# Internal dev tools (e.g. tools/livekit-server.exe) are ignored, but the
|
||||
@@ -98,4 +107,13 @@ Client/tauri-client/.env
|
||||
|
||||
# local server run logs
|
||||
server.log
|
||||
graphify-out/
|
||||
|
||||
# Knowledge graph (graphify). The top-level built graph is tracked so a fresh
|
||||
# clone can query it without a rebuild. Every subdirectory stays local: cache/
|
||||
# is a per-machine AST build cache, and graphify parks the PREVIOUS graph in a
|
||||
# dated YYYY-MM-DD/ backup on each rebuild — 18 MB of stale duplicate that is a
|
||||
# local rollback aid, not shared state.
|
||||
graphify-out/*/
|
||||
|
||||
# Transient graphify rebuild-state file.
|
||||
graphify-out/.pending_changes
|
||||
|
||||
Generated
+3560
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,103 @@
|
||||
// Renders .superpowers/findings-ledger.json to FINDINGS.md, and validates it.
|
||||
// Run: node .superpowers/render-ledger.mjs # write FINDINGS.md
|
||||
// node .superpowers/render-ledger.mjs --check # validate only
|
||||
// node .superpowers/render-ledger.mjs --selftest # run built-in tests
|
||||
import assert from 'node:assert/strict'
|
||||
|
||||
const VALID_STATUS = ['open', 'fixed', 'declined', 'refuted', 'duplicate', 'blocked']
|
||||
|
||||
export function validate(ledger) {
|
||||
const problems = []
|
||||
const ids = new Set()
|
||||
for (const r of ledger.findings) {
|
||||
if (ids.has(r.id)) problems.push(`duplicate id ${r.id}`)
|
||||
ids.add(r.id)
|
||||
if (!/^OC-\d{4}$/.test(r.id)) problems.push(`${r.id}: malformed id`)
|
||||
if (!VALID_STATUS.includes(r.status)) problems.push(`${r.id}: bad status ${r.status}`)
|
||||
if (r.status === 'fixed' && (!r.fix || !r.fix.commit)) problems.push(`${r.id}: fixed without a commit`)
|
||||
if (r.status === 'declined' && !r.rationale) problems.push(`${r.id}: declined without a rationale`)
|
||||
if (r.status === 'duplicate' && !r.duplicateOf) problems.push(`${r.id}: duplicate without duplicateOf`)
|
||||
}
|
||||
return problems
|
||||
}
|
||||
|
||||
function selftest() {
|
||||
assert.deepEqual(validate({ findings: [] }), [])
|
||||
assert.deepEqual(
|
||||
validate({ findings: [{ id: 'OC-0001', status: 'fixed', fix: null }] }),
|
||||
['OC-0001: fixed without a commit'],
|
||||
)
|
||||
assert.deepEqual(validate({ findings: [{ id: 'bad', status: 'open' }] }), ['bad: malformed id'])
|
||||
assert.deepEqual(
|
||||
validate({ findings: [{ id: 'OC-0001', status: 'open' }, { id: 'OC-0001', status: 'open' }] }),
|
||||
['duplicate id OC-0001'],
|
||||
)
|
||||
assert.deepEqual(validate({ findings: [{ id: 'OC-0002', status: 'declined' }] }), ['OC-0002: declined without a rationale'])
|
||||
console.log('selftest: all assertions pass')
|
||||
}
|
||||
|
||||
const SEV_RANK = { critical: 0, high: 1, medium: 2, low: 3 }
|
||||
|
||||
export function render(ledger) {
|
||||
const by = (s) => ledger.findings.filter((f) => f.status === s)
|
||||
const open = by('open').sort((a, b) => SEV_RANK[a.severity] - SEV_RANK[b.severity])
|
||||
const blocked = by('blocked')
|
||||
const fixed = by('fixed')
|
||||
const declined = by('declined')
|
||||
const refuted = by('refuted')
|
||||
const dup = by('duplicate')
|
||||
|
||||
const lines = []
|
||||
lines.push('# OwnCord Findings Ledger', '')
|
||||
lines.push('Generated by `render-ledger.mjs`. Do not hand-edit — edit `findings-ledger.json`.', '')
|
||||
lines.push(
|
||||
`**${open.length} open** · ${blocked.length} blocked · ${fixed.length} fixed · ` +
|
||||
`${declined.length} declined · ${refuted.length} refuted · ${dup.length} duplicate`,
|
||||
'',
|
||||
)
|
||||
|
||||
const section = (title, rows, extra) => {
|
||||
if (!rows.length) return
|
||||
lines.push(`## ${title}`, '')
|
||||
for (const r of rows) {
|
||||
lines.push(`### ${r.id} — ${r.severity} — ${r.title}`, '')
|
||||
lines.push(`\`${r.file}:${r.line}\` · found ${r.found} · hunt \`${r.hunt}\` · lens \`${r.lens}\``, '')
|
||||
if (r.why) lines.push(r.why, '')
|
||||
if (r.repro) lines.push(`**Repro:** ${r.repro}`, '')
|
||||
if (r.evidence) lines.push(`**Evidence:** ${r.evidence}`, '')
|
||||
if (r.suggestedFix) lines.push(`**Suggested fix:** ${r.suggestedFix}`, '')
|
||||
const e = extra && extra(r)
|
||||
if (e) lines.push(e, '')
|
||||
}
|
||||
}
|
||||
|
||||
section('Open', open)
|
||||
section('Blocked — fix attempted, revert-proof failed', blocked)
|
||||
section('Fixed', fixed, (r) => `**Fixed:** \`${r.fix.commit}\` · test \`${r.fix.test}\` · revert-proof ${r.fix.revertProof}`)
|
||||
section('Declined', declined, (r) => `**Declined:** ${r.rationale}`)
|
||||
section('Refuted', refuted)
|
||||
section('Duplicate', dup, (r) => `**Duplicate of** ${r.duplicateOf}`)
|
||||
return lines.join('\n')
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const { readFileSync, writeFileSync } = await import('node:fs')
|
||||
const { dirname, join } = await import('node:path')
|
||||
const { fileURLToPath } = await import('node:url')
|
||||
const here = dirname(fileURLToPath(import.meta.url))
|
||||
const ledger = JSON.parse(readFileSync(join(here, 'findings-ledger.json'), 'utf8'))
|
||||
const problems = validate(ledger)
|
||||
if (problems.length) {
|
||||
for (const p of problems) console.error(`INVALID ${p}`)
|
||||
process.exit(1)
|
||||
}
|
||||
if (process.argv.includes('--check')) {
|
||||
console.log(`ledger valid: ${ledger.findings.length} finding(s)`)
|
||||
return
|
||||
}
|
||||
writeFileSync(join(here, 'FINDINGS.md'), render(ledger) + '\n')
|
||||
console.log(`wrote FINDINGS.md (${ledger.findings.length} finding(s))`)
|
||||
}
|
||||
|
||||
if (process.argv.includes('--selftest')) selftest()
|
||||
else await main()
|
||||
@@ -17,6 +17,39 @@ CI fails on drift, and the next generator run silently discards your edit.
|
||||
| `Server/ws/message_types.go` **and** `Client/tauri-client/src/lib/protocolTypes.ts` | `docs/protocol-schema.json` | `protocol-change` skill |
|
||||
| `Client/tauri-client/src/generated/` | `tauri-typegen` | CI patches known typegen bugs — see `.github/workflows/ci.yml` |
|
||||
|
||||
## Knowledge graph (graphify)
|
||||
|
||||
`graphify-out/` holds a committed knowledge graph of this repo — god nodes,
|
||||
communities, cross-file edges. It is checked in so a fresh clone can query it
|
||||
without a rebuild.
|
||||
|
||||
- For codebase questions, run `graphify query "<question>"` before grepping.
|
||||
`graphify path "<A>" "<B>"` for relationships, `graphify explain "<concept>"`
|
||||
for one concept. These return a scoped subgraph — far smaller than
|
||||
`GRAPH_REPORT.md` or raw grep output.
|
||||
- Read `graphify-out/GRAPH_REPORT.md` only for broad architecture review.
|
||||
- After changing code, `graphify update .` refreshes it (AST-only, no API cost).
|
||||
`graphify hook install` wires that to a post-commit hook — `.git/hooks/` is not
|
||||
tracked, so each clone installs it once.
|
||||
- `graphify-out/cache/` is a per-machine AST cache and stays ignored.
|
||||
|
||||
The graph is generated: never hand-edit it, and refresh it in its own commit
|
||||
rather than folding an 18 MB blob into an unrelated diff.
|
||||
|
||||
## Bug-hunt ledger
|
||||
|
||||
`.superpowers/findings-ledger.json` is the shared ledger of hunt findings —
|
||||
open a PR against it to add one. `FINDINGS.md` is rendered from it:
|
||||
|
||||
```
|
||||
node .superpowers/render-ledger.mjs # rewrite FINDINGS.md
|
||||
node .superpowers/render-ledger.mjs --check # validate the ledger only
|
||||
```
|
||||
|
||||
Statuses: `open`, `fixed`, `declined`, `refuted`, `duplicate`, `blocked`.
|
||||
Never edit `FINDINGS.md` by hand — edit the ledger and re-render. Everything
|
||||
else under `.superpowers/` is per-session scratch and stays local.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Verify with the `ci-check` skill**, not with an ad-hoc `go build && go test`.
|
||||
|
||||
Generated
+531
@@ -0,0 +1,531 @@
|
||||
{
|
||||
"0": "members.store.ts",
|
||||
"1": "createElement",
|
||||
"2": "testing.T",
|
||||
"3": "livekitSession.ts",
|
||||
"4": "dispatcher.ts",
|
||||
"5": "openMigratedMemory",
|
||||
"6": "context.Context",
|
||||
"7": "buildChannelRouter",
|
||||
"8": "MessageInput.ts",
|
||||
"9": "attachments.ts",
|
||||
"10": "telemetry.go",
|
||||
"11": "waitRegistered",
|
||||
"12": "types.ts",
|
||||
"13": "NewAdminAPI",
|
||||
"14": "Fixed",
|
||||
"15": "messages_test.go",
|
||||
"16": "main.ts",
|
||||
"17": "net/http.HandlerFunc",
|
||||
"18": "NewTestClient",
|
||||
"19": "newHandlerHub",
|
||||
"20": "livekitE2EE.ts",
|
||||
"21": "drainChanTimeout",
|
||||
"22": "buildDMRouter",
|
||||
"23": "tofu.rs",
|
||||
"24": "newAuthTestDB",
|
||||
"25": "newMigratedTestDB",
|
||||
"26": "time.Time",
|
||||
"27": "Config",
|
||||
"28": "secret_store.rs",
|
||||
"29": "User",
|
||||
"30": "database/sql.Result",
|
||||
"31": "newUploadTestDB",
|
||||
"32": "MainPage.ts",
|
||||
"33": "writeJSON",
|
||||
"34": "newAdminTestDB",
|
||||
"35": "HashToken",
|
||||
"36": "content-parser.ts",
|
||||
"37": "ChannelSidebar.ts",
|
||||
"38": "plugin/registry_test.go",
|
||||
"39": "DB",
|
||||
"40": "Instance",
|
||||
"41": "livekit_test.go",
|
||||
"42": "NewChecker",
|
||||
"43": "middleware_test.go",
|
||||
"44": "authStore",
|
||||
"45": "DB",
|
||||
"46": "testing.F",
|
||||
"47": "Result",
|
||||
"48": "livekit_proxy.rs",
|
||||
"49": "native/helpers.ts",
|
||||
"50": "NewRouter",
|
||||
"51": "net/http.Handler",
|
||||
"52": "totp_test.go",
|
||||
"53": "newTestDB",
|
||||
"54": "createLogger",
|
||||
"55": "newServeHub",
|
||||
"56": "OwnCord — Comprehensive Project Audit",
|
||||
"57": "permissions_test.go",
|
||||
"58": "seedMemberUser",
|
||||
"59": "postJSONWithToken",
|
||||
"60": "http_proxy.rs",
|
||||
"61": "newVoiceTestDB",
|
||||
"62": "messages.go",
|
||||
"63": "dbgen/models.go",
|
||||
"64": "ProfileManager",
|
||||
"65": "README.md",
|
||||
"66": "devDependencies",
|
||||
"67": "itoa",
|
||||
"68": "helpers_test.go",
|
||||
"69": "ChannelService",
|
||||
"70": "Security Policy",
|
||||
"71": "Role",
|
||||
"72": "channels.sql.go",
|
||||
"73": "Deployment Guide",
|
||||
"74": "livekit_proxy_test.go",
|
||||
"75": "newEmojiService",
|
||||
"76": "ws_proxy.rs",
|
||||
"77": "bughunt.js",
|
||||
"78": "openAdminTestDB",
|
||||
"79": "db/db.go",
|
||||
"80": "Tables",
|
||||
"81": "newMentionFixture",
|
||||
"82": "Channel",
|
||||
"83": "NewWAFMiddlewareCRS",
|
||||
"84": "E2EEManager",
|
||||
"85": "storage_test.go",
|
||||
"86": "Migrate",
|
||||
"87": "Hub",
|
||||
"88": "chdirTemp",
|
||||
"89": "AppearanceTab.ts",
|
||||
"90": "updater_test.go",
|
||||
"91": "newTestMessageService",
|
||||
"92": "textAssetServer",
|
||||
"93": "Hub",
|
||||
"94": "compilerOptions",
|
||||
"95": "NewEventRingBuffer",
|
||||
"96": "HandlerRegistry",
|
||||
"97": "emoji_handler_test.go",
|
||||
"98": "handleCreateEmoji",
|
||||
"99": "doRequest",
|
||||
"100": "audioPipeline.ts",
|
||||
"101": "LoadOrGenerate",
|
||||
"102": "Auth Endpoints",
|
||||
"103": "MigrateFS",
|
||||
"104": "newOverrideFixture",
|
||||
"105": "Save",
|
||||
"106": "REST API Reference",
|
||||
"107": "NewRegistry",
|
||||
"108": "voice_moderation_test.go",
|
||||
"109": "ptt.rs",
|
||||
"110": "OwnCord Audit — Documentation Accuracy & UI/UX Test Coverage (2026-08-04)",
|
||||
"111": "scripts",
|
||||
"112": "ResolveTokenHash",
|
||||
"113": "Load",
|
||||
"114": "handleVoiceE2EEOfferV2",
|
||||
"115": "commands.rs",
|
||||
"116": "newEmitTestHub",
|
||||
"117": "Plan: Remediate security-hardening review regressions",
|
||||
"118": "verify.go",
|
||||
"119": "newRoleCRUDService",
|
||||
"120": "Checker",
|
||||
"121": "EnsureLiveKitBinary",
|
||||
"122": "clientip_test.go",
|
||||
"123": "AudioElements",
|
||||
"124": "buildErrorMsg",
|
||||
"125": "gif_handler_test.go",
|
||||
"126": "navigateToMainPage",
|
||||
"127": "messages.sql.go",
|
||||
"128": "Channel Endpoints",
|
||||
"129": "newSignedTestUpdater",
|
||||
"130": "host_http_test.go",
|
||||
"131": "Topic",
|
||||
"132": "DB",
|
||||
"133": "users",
|
||||
"134": "Client",
|
||||
"135": "identity.ts",
|
||||
"136": "Queries",
|
||||
"137": "Queries",
|
||||
"138": "Queries",
|
||||
"139": "middleware_and_spawn_test.go",
|
||||
"140": "password_test.go",
|
||||
"141": "newPurgeService",
|
||||
"142": "handleVoiceTokenRefreshV2",
|
||||
"143": "pubsub_test.go",
|
||||
"144": "newChannelTestAPI",
|
||||
"145": "handleLogStream",
|
||||
"146": "handleSetup",
|
||||
"147": "log/slog.Value",
|
||||
"148": "Updater",
|
||||
"149": "Credential storage",
|
||||
"150": "dependencies",
|
||||
"151": "newHarvestVoiceDB",
|
||||
"152": "Config Key Reference",
|
||||
"153": "newTestPermService",
|
||||
"154": "markdown.ts",
|
||||
"155": "VideoGrid.ts",
|
||||
"156": "Manifest",
|
||||
"157": "rate-limiter.ts",
|
||||
"158": "e2e/helpers.ts",
|
||||
"159": "main.test.ts",
|
||||
"160": "testing.M",
|
||||
"161": "newMockDB",
|
||||
"162": "OwnCord",
|
||||
"163": "bughunt-fix.js",
|
||||
"164": "buildTauriMockScript",
|
||||
"165": "OwnCord Introspection MCP Server",
|
||||
"166": "Bug-detection improvements — design",
|
||||
"167": "ptt.ts",
|
||||
"168": "eslint-rules.js",
|
||||
"169": "DB",
|
||||
"170": "OwnCord — Security Review",
|
||||
"171": "Plan: Slash command dispatcher in WS",
|
||||
"172": "net/http.Request",
|
||||
"173": "ChannelTopic",
|
||||
"174": "UserService",
|
||||
"175": "Blocked — fix attempted, revert-proof failed",
|
||||
"176": "handlers_backup.go",
|
||||
"177": "logger.ts",
|
||||
"178": "fallback_crypto.rs",
|
||||
"179": "Direct Messages",
|
||||
"180": "WebSocket Protocol Reference",
|
||||
"181": "command.go",
|
||||
"182": "NewRingBuffer",
|
||||
"183": "ws-load.js",
|
||||
"184": "NewMessageService",
|
||||
"185": "handler",
|
||||
"186": "tauri-client/package.json",
|
||||
"187": "screen-share-tracks.test.ts",
|
||||
"188": "LoginFormApi",
|
||||
"189": "social.parity.spec.ts",
|
||||
"190": "fakeDirInfo",
|
||||
"191": "Role Management",
|
||||
"192": "User Profile & Sessions",
|
||||
"193": "F3 — Voice E2EE identity keys + TOFU (the remaining work)",
|
||||
"194": "run",
|
||||
"195": "newWazeroTestRegistry",
|
||||
"196": "newUserSvc",
|
||||
"197": "plugins_handler_test.go",
|
||||
"198": "badDirFile",
|
||||
"199": "Contributing",
|
||||
"200": ".handleFreshConnect",
|
||||
"201": "mcp-introspect/package.json",
|
||||
"202": "v1.2.0-alpha.1 — Discord feature parity",
|
||||
"203": "Task Observer — Continuous Skill Discovery & Improvement",
|
||||
"204": "scanPluginDirectory",
|
||||
"205": "loadPref",
|
||||
"206": "1. Channel sidebar",
|
||||
"207": "Voice, Video & E2EE — target UX",
|
||||
"208": "Updater",
|
||||
"209": "LiveKitClient",
|
||||
"210": "migrate.go",
|
||||
"211": "Queries",
|
||||
"212": "Messaging — target UX",
|
||||
"213": "Registry",
|
||||
"214": "handleChannelFocusV2",
|
||||
"215": "handlers_channel_perms_test.go",
|
||||
"216": "knip.json",
|
||||
"217": "RNNoiseProcessor",
|
||||
"218": "DeviceManager",
|
||||
"219": "finish",
|
||||
"220": "TestHarness",
|
||||
"221": "Connection & Authentication — target UX",
|
||||
"222": "Settings & Admin — target UX",
|
||||
"223": "buildClientUpdateRouter",
|
||||
"224": "logPersistence.ts",
|
||||
"225": "newTestRoleService",
|
||||
"226": "event.go",
|
||||
"227": "NewTopicRateLimiter",
|
||||
"228": "Skill Authoring — taxonomy, licensing, confidentiality, editing rules",
|
||||
"229": ".oxlintrc.json",
|
||||
"230": "message.go",
|
||||
"231": "e2e/dm-system.spec.ts",
|
||||
"232": "Queries",
|
||||
"233": "emoji.sql.go",
|
||||
"234": "OwnCord — Architectural Audit & Spec-Conformance Review",
|
||||
"235": "LiveKit Setup Guide",
|
||||
"236": "Voice Signaling",
|
||||
"237": "Quick Start Guide",
|
||||
"238": "readPump",
|
||||
"239": "mockTauriFullSessionWithVoice",
|
||||
"240": "index.mjs",
|
||||
"241": "countingReadStateStore",
|
||||
"242": "bughunt.harness.mjs",
|
||||
"243": "voice-audio-tab.test.ts",
|
||||
"244": "reactions.sql.go",
|
||||
"245": "Channel Permission Overrides",
|
||||
"246": "Server Stats & User Administration",
|
||||
"247": "deep-link.ts",
|
||||
"248": "EventSink",
|
||||
"249": "handleChatCommandV2",
|
||||
"250": "slashFS",
|
||||
"251": "Running the bughunt pipeline",
|
||||
"252": "OverlayManagers.ts",
|
||||
"253": "reconnectAfterCertAccept",
|
||||
"254": "VoiceTopic",
|
||||
"255": "emoji-voicemod.parity.spec.ts",
|
||||
"256": "voice-e2ee-verify.spec.ts",
|
||||
"257": "include",
|
||||
"258": "Queries",
|
||||
"259": "Custom Emoji",
|
||||
"260": "OwnCord — Test-Coverage Audit",
|
||||
"261": "OriginAcceptOptions",
|
||||
"262": "EventRingBuffer",
|
||||
"263": "IsUniqueConstraintError",
|
||||
"264": "newTokenTestDB",
|
||||
"265": "scripts",
|
||||
"266": "bughunt-fix.harness.mjs",
|
||||
"267": "router.ts",
|
||||
"268": "E2E Test Status — 2026-08-05",
|
||||
"269": "render-ledger.mjs",
|
||||
"270": "MountGIFRoutes",
|
||||
"271": "TestMigrate_UpgradeFromMigration019PreservesData",
|
||||
"272": "Queries",
|
||||
"273": "TestChannelVisibility_RESTWSAgreement",
|
||||
"274": "seed.go",
|
||||
"275": "Finish the V2 Dispatch Migration (backlog item 11) — Design",
|
||||
"276": "Port Forwarding Guide",
|
||||
"277": "Chat Messages",
|
||||
"278": "hello/main.go",
|
||||
"279": "DMChannelInfo",
|
||||
"280": "RingBuffer",
|
||||
"281": "Client HTTP TOFU Proxy (D5) — Design",
|
||||
"282": "create_tray",
|
||||
"283": "API Tokens",
|
||||
"284": "Backups",
|
||||
"285": "Plugin Administration",
|
||||
"286": "Invite Endpoints",
|
||||
"287": "2. Code Quality",
|
||||
"288": "Infrastructure roadmap — design",
|
||||
"289": "Member Updates",
|
||||
"290": "genprotocol/main.go",
|
||||
"291": "Hub",
|
||||
"292": ".finishVoiceLeave",
|
||||
"293": "ChatSendCmd",
|
||||
"294": "Environments, Activation Setup, and Handoff-Doc Mode",
|
||||
"295": "handlePingV2",
|
||||
"296": "capabilities-scope.test.ts",
|
||||
"297": "savePref",
|
||||
"298": "GET /admin/api/updates",
|
||||
"299": "Channel-Visibility Unification (backlog item 3) — Design",
|
||||
"300": "sqlc Adoption (D2) — Progress & Plan",
|
||||
"301": "Authentication Flow",
|
||||
"302": "Voice Moderation",
|
||||
"303": "bug_report.md",
|
||||
"304": "Pull Request",
|
||||
"305": "prettier",
|
||||
"306": "openFileDB",
|
||||
"307": "hello plugin",
|
||||
"308": "TestAdminAPI_PatchChannel_ArchiveCleansVoice",
|
||||
"309": "window-state.ts",
|
||||
"310": "Tauri HTTP Capability Narrowing — Design",
|
||||
"311": "protocol_contract_test.go",
|
||||
"312": "ChatCommandCmd",
|
||||
"313": "ci-check",
|
||||
"314": "Comprehensive Review (scheduled or fallback)",
|
||||
"315": "VoiceWidgetOptions",
|
||||
"316": "LiveKitProcess",
|
||||
"317": "cert-tofu.spec.ts",
|
||||
"318": "updater.spec.ts",
|
||||
"319": "message_reactions_test.go",
|
||||
"320": "tsconfig.build.json",
|
||||
"321": "User Blocks",
|
||||
"322": "PATCH /admin/api/settings",
|
||||
"323": "GET /api/v1/gif/search",
|
||||
"324": "First-Run Setup",
|
||||
"325": "LiveKit Endpoints",
|
||||
"326": "types.go",
|
||||
"327": "Tailscale Guide (Zero-Config Remote Access)",
|
||||
"328": "LiveKitProcess",
|
||||
"329": "DB",
|
||||
"330": "ChatEditCmd",
|
||||
"331": "VoiceE2EEOfferCmd",
|
||||
"332": "VoiceModDeafenCmd",
|
||||
"333": "VoiceModMuteCmd",
|
||||
"334": "TestHandlePresenceUpdate_BareStatusReadFailureAbortsBeforeCommit",
|
||||
"335": "New",
|
||||
"336": "GET /api/v1/client-update/{target}/{current_version}",
|
||||
"337": "OwnCord Architecture Blueprints",
|
||||
"338": "Voice End-to-End Encryption",
|
||||
"339": "feature_request.md",
|
||||
"340": "volume-menu.test.ts",
|
||||
"341": "buildMetricsRouter",
|
||||
"342": "RunningInContainer",
|
||||
"343": "ChatDeleteCmd",
|
||||
"344": "Permission-Middleware Consolidation (audit finding A-2026-07-16) — Design",
|
||||
"345": "MessageDeletedDMEvent",
|
||||
"346": "MessageEditedDMEvent",
|
||||
"347": "MessageSentDMEvent",
|
||||
"348": "PresenceUpdateCmd",
|
||||
"349": "ReactionAddCmd",
|
||||
"350": "PresenceOthersEvent",
|
||||
"351": "ReactionRemoveCmd",
|
||||
"352": "stubExcludeSenderEvent",
|
||||
"353": "stubSequencedDMEvent",
|
||||
"354": "stubVoiceChannelEvent",
|
||||
"355": "stubVoiceChannelGuardedEvent",
|
||||
"356": "ReactionDMEvent",
|
||||
"357": "VoiceE2EEAnnounceCmd",
|
||||
"358": "TypingChannelEvent",
|
||||
"359": "VoiceE2EEAnnounceEvent",
|
||||
"360": "VoiceModMoveCmd",
|
||||
"361": "OwnCord",
|
||||
"362": "OwnCord Client (Tauri v2)",
|
||||
"363": "VadProcessor",
|
||||
"364": "log_level_from_env",
|
||||
"365": "TestHandleVoiceCameraV2_RefusedWhenScreenshareSlotFull",
|
||||
"366": "VoiceE2EEOfferGuardedEvent",
|
||||
"367": "File Upload and Serving",
|
||||
"368": "Server Logs (SSE)",
|
||||
"369": "D5 — Entity-relationship overview",
|
||||
"370": "CallSignalEvent",
|
||||
"371": "DMChannelOpenEvent",
|
||||
"372": "MessageDeletedChannelEvent",
|
||||
"373": "DM Calls",
|
||||
"374": "Channel Updates",
|
||||
"375": "Heartbeat and Connection Liveness",
|
||||
"376": "Message Type Reference Table",
|
||||
"377": "Direct Messages",
|
||||
"378": "OwnCord Server (Go)",
|
||||
"379": "MessageEditedChannelEvent",
|
||||
"380": "CallDeclineCmd",
|
||||
"381": "CallRingCmd",
|
||||
"382": "MessageSentChannelEvent",
|
||||
"383": "ChannelFocusCmd",
|
||||
"384": "PluginBroadcastEvent",
|
||||
"385": "MarkReadCmd",
|
||||
"386": "PresenceSelfEvent",
|
||||
"387": "ReactionChannelEvent",
|
||||
"388": "TypingDMEvent",
|
||||
"389": "VoiceStateEvent",
|
||||
"390": "TestDeleteExpiredSessions_SargableFormat",
|
||||
"391": ".EmitEvents",
|
||||
"392": "stubChannelEvent",
|
||||
"393": "stubUserTargetedEvent",
|
||||
"394": "TestPresenceEvents_InvisibleBlanksCustomStatusForOthers",
|
||||
"395": "TypingStartCmd",
|
||||
"396": "VoiceCameraCmd",
|
||||
"397": "VoiceDeafenCmd",
|
||||
"398": "VoiceJoinCmd",
|
||||
"399": "VoiceMuteCmd",
|
||||
"400": "VoiceScreenshareCmd",
|
||||
"401": "PresenceEvent",
|
||||
"402": "errDMChannelIDsStore",
|
||||
"403": "db-change",
|
||||
"404": "enable_media_capture",
|
||||
"405": "admin-panel.spec.ts",
|
||||
"406": "start-server.sh",
|
||||
"407": "Channel Focus and Read State",
|
||||
"408": "Error Handling",
|
||||
"409": "Presence",
|
||||
"410": "Transport Layer",
|
||||
"411": "pre-commit",
|
||||
"412": "pre-push",
|
||||
"413": "stubBroadcastAllEvent",
|
||||
"416": "015_plugins.sql",
|
||||
"417": "tryLoadPluginTOML",
|
||||
"418": "tryLoadPluginTOML",
|
||||
"424": "protocol-change/SKILL.md",
|
||||
"425": "strip-appimage-bundled-libs.sh",
|
||||
"426": "build.rs",
|
||||
"427": "main.rs",
|
||||
"428": "jitsi-rnnoise.d.ts",
|
||||
"429": "stryker.config.mjs",
|
||||
"430": "setup.ts",
|
||||
"431": "appearance-high-contrast.test.ts",
|
||||
"432": "base-font-size-css.test.ts",
|
||||
"433": "vite.config.ts",
|
||||
"434": "Querier",
|
||||
"435": ".serialize",
|
||||
"436": "lockfile_other.go",
|
||||
"437": "lockfile_unix.go",
|
||||
"438": "lockfile_windows.go",
|
||||
"439": "free_other.go",
|
||||
"440": "free_unix.go",
|
||||
"441": "free_windows.go",
|
||||
"442": "003_audit_log.sql",
|
||||
"443": "011_rate_lockouts.sql",
|
||||
"444": "014_events_table.sql",
|
||||
"445": "chaos-test.sh",
|
||||
"446": "voice-test.sh",
|
||||
"447": "proc_spawner_nix.go",
|
||||
"448": "proc_spawner_win.go",
|
||||
"449": "RateLimiter",
|
||||
"450": "playwright.config.ts",
|
||||
"451": "playwright.config.admin.ts",
|
||||
"452": "playwright.config.native.ts",
|
||||
"453": "playwright.config.prod.ts",
|
||||
"454": "constants.rs",
|
||||
"455": "vite-env.d.ts",
|
||||
"456": "smoke.test.ts",
|
||||
"457": ".addEventListener",
|
||||
"458": "tauri-conf-webview2-args.test.ts",
|
||||
"459": "video-grid-track-muted-css.test.ts",
|
||||
"460": "vitest.config.ts",
|
||||
"461": "vitest.config.browser.ts",
|
||||
"462": "github.com/owncord/server",
|
||||
"463": "owncord-client",
|
||||
"464": "auth.go",
|
||||
"465": "auth/constants.go",
|
||||
"466": "config/constants.go",
|
||||
"467": "apitoken_queries.go",
|
||||
"468": "block_queries.go",
|
||||
"469": "emoji_queries.go",
|
||||
"470": "invite_queries.go",
|
||||
"471": "lockout_queries.go",
|
||||
"472": "db/logvalue.go",
|
||||
"473": "profile_queries.go",
|
||||
"474": "admin.sql",
|
||||
"475": "apitokens.sql",
|
||||
"476": "attachments.sql",
|
||||
"477": "blocks.sql",
|
||||
"478": "channels.sql",
|
||||
"479": "dm.sql",
|
||||
"480": "emoji.sql",
|
||||
"481": "events.sql",
|
||||
"482": "invites.sql",
|
||||
"483": "lockouts.sql",
|
||||
"484": "messages.sql",
|
||||
"485": "plugins.sql",
|
||||
"486": "profile.sql",
|
||||
"487": "reactions.sql",
|
||||
"488": "roles.sql",
|
||||
"489": "sessions.sql",
|
||||
"490": "users.sql",
|
||||
"491": "voice.sql",
|
||||
"492": "diskutil.go",
|
||||
"493": "004_voice_optimization.sql",
|
||||
"494": "005_fix_member_permissions.sql",
|
||||
"495": "006_channel_overrides_index.sql",
|
||||
"496": "007_member_video_permissions.sql",
|
||||
"497": "008_attachment_dimensions.sql",
|
||||
"498": "attachments",
|
||||
"499": "010_attachment_uploader.sql",
|
||||
"500": "attachments",
|
||||
"501": "013_channel_type_constraint.sql",
|
||||
"502": "016_announcement_channel_type.sql",
|
||||
"503": "017_user_identity_key.sql",
|
||||
"504": "019_perf_indexes.sql",
|
||||
"505": "020_drop_redundant_indexes.sql",
|
||||
"506": "021_voice_server_moderation.sql",
|
||||
"507": "023_role_management.sql",
|
||||
"508": "025_channel_nsfw.sql",
|
||||
"509": "026_emoji_mime.sql",
|
||||
"510": "emoji",
|
||||
"511": "027_user_profile_fields.sql",
|
||||
"512": "028_group_dms.sql",
|
||||
"513": "029_drop_sounds_table.sql",
|
||||
"514": "031_sessions_expiry_index.sql",
|
||||
"515": "migrations.go",
|
||||
"516": "plugin/errors.go",
|
||||
"517": "host_storage.go",
|
||||
"518": "host_ui.go",
|
||||
"519": "message_crud.go",
|
||||
"520": "message_purge.go",
|
||||
"521": "mutex.go",
|
||||
"522": "mutex_deadlock.go",
|
||||
"523": "mutex_prod.go",
|
||||
"524": "emit.go",
|
||||
"525": "ws/errors.go",
|
||||
"526": "handlers.go",
|
||||
"527": "hub_livekit.go",
|
||||
"528": "hub_sweep.go",
|
||||
"529": "message_types.go",
|
||||
"530": ".RoundTrip",
|
||||
"531": "docker-smoke.sh",
|
||||
"532": "TestRegisterNow_ReplacementNeverLosesAConcurrentGlobalBroadcast",
|
||||
"533": "prettier",
|
||||
"534": "@vitest/browser",
|
||||
"535": "@vitest/coverage-v8"
|
||||
}
|
||||
Generated
+1
File diff suppressed because one or more lines are too long
Generated
+1
@@ -0,0 +1 @@
|
||||
.
|
||||
Generated
+1880
File diff suppressed because it is too large
Load Diff
Generated
+320
File diff suppressed because one or more lines are too long
Generated
+509089
File diff suppressed because it is too large
Load Diff
Generated
+5522
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user