@volter/twin-github 0.1.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -36
- package/client/github-mirror.css +277 -319
- package/client/github-mirror.d.ts +418 -0
- package/client/github-mirror.js +485 -0
- package/client/github-mirror.tsx +153 -357
- package/client/pulls-rest.ts +159 -0
- package/client/pulls-workspace.tsx +841 -0
- package/dist/client/github-mirror.bundle.js +239 -0
- package/dist/client/github-mirror.css +916 -0
- package/dist/client/github-mirror.d.ts +418 -0
- package/dist/client/github-mirror.js +485 -0
- package/dist/client/github-mirror.tsx +1315 -0
- package/dist/client/pulls-rest.d.ts +42 -0
- package/dist/client/pulls-rest.js +140 -0
- package/dist/client/pulls-rest.ts +159 -0
- package/dist/client/pulls-workspace.bundle.js +22 -0
- package/dist/client/pulls-workspace.d.ts +114 -0
- package/dist/client/pulls-workspace.js +418 -0
- package/dist/client/pulls-workspace.tsx +841 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +40 -0
- package/dist/src/generated/graphql-sdl.gen.json +1 -0
- package/dist/src/generated/graphql.gen.json +1 -0
- package/dist/src/generated/surface.gen.json +1 -0
- package/dist/src/generated/ui.gen.json +1 -0
- package/dist/src/github-budget.d.ts +69 -0
- package/dist/src/github-budget.js +172 -0
- package/dist/src/github-capabilities.d.ts +5 -0
- package/dist/src/github-capabilities.js +4468 -0
- package/dist/src/github-conformance.d.ts +43 -0
- package/dist/src/github-conformance.js +76 -0
- package/dist/src/github-connector.d.ts +307 -0
- package/dist/src/github-connector.js +1398 -0
- package/dist/src/github-events.d.ts +41 -0
- package/dist/src/github-events.js +232 -0
- package/dist/src/github-git-http.d.ts +49 -0
- package/dist/src/github-git-http.js +185 -0
- package/dist/src/github-git-plane.d.ts +114 -0
- package/dist/src/github-git-plane.js +407 -0
- package/dist/src/github-mirror-state.d.ts +2 -0
- package/dist/src/github-mirror-state.js +335 -0
- package/dist/src/github-mirror-ui.d.ts +20 -0
- package/dist/src/github-mirror-ui.js +101 -0
- package/dist/src/github-server.d.ts +14 -0
- package/dist/src/github-server.js +240 -0
- package/dist/src/github-shared.d.ts +12 -0
- package/dist/src/github-shared.js +21 -0
- package/dist/src/github-twin.d.ts +1411 -0
- package/dist/src/github-twin.js +4084 -0
- package/dist/src/github-ui-conformance.d.ts +4 -0
- package/dist/src/github-ui-conformance.js +105 -0
- package/dist/src/github-ui-structure.d.ts +18 -0
- package/dist/src/github-ui-structure.js +251 -0
- package/dist/src/graphql-wire.d.ts +22 -0
- package/dist/src/graphql-wire.js +89 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.js +104 -0
- package/dist/src/manifest.d.ts +8 -0
- package/dist/src/manifest.js +597 -0
- package/dist/src/npm-registry.d.ts +7 -0
- package/dist/src/npm-registry.js +47 -0
- package/dist/src/screens/app-installation.d.ts +3 -0
- package/dist/src/screens/app-installation.js +166 -0
- package/dist/src/screens/app-manifest.d.ts +3 -0
- package/dist/src/screens/app-manifest.js +81 -0
- package/dist/src/screens/oauth.d.ts +15 -0
- package/dist/src/screens/oauth.js +257 -0
- package/dist/src/screens/session.d.ts +8 -0
- package/dist/src/screens/session.js +170 -0
- package/dist/src/semantics/actions.d.ts +2 -0
- package/dist/src/semantics/actions.js +413 -0
- package/dist/src/semantics/activity.d.ts +4 -0
- package/dist/src/semantics/activity.js +161 -0
- package/dist/src/semantics/apps.d.ts +2 -0
- package/dist/src/semantics/apps.js +144 -0
- package/dist/src/semantics/branches.d.ts +2 -0
- package/dist/src/semantics/branches.js +136 -0
- package/dist/src/semantics/checks.d.ts +2 -0
- package/dist/src/semantics/checks.js +176 -0
- package/dist/src/semantics/code-scanning-upload.d.ts +2 -0
- package/dist/src/semantics/code-scanning-upload.js +97 -0
- package/dist/src/semantics/codespaces.d.ts +2 -0
- package/dist/src/semantics/codespaces.js +58 -0
- package/dist/src/semantics/commits.d.ts +2 -0
- package/dist/src/semantics/commits.js +109 -0
- package/dist/src/semantics/contents.d.ts +2 -0
- package/dist/src/semantics/contents.js +131 -0
- package/dist/src/semantics/deployments.d.ts +2 -0
- package/dist/src/semantics/deployments.js +127 -0
- package/dist/src/semantics/gists.d.ts +2 -0
- package/dist/src/semantics/gists.js +86 -0
- package/dist/src/semantics/git.d.ts +2 -0
- package/dist/src/semantics/git.js +235 -0
- package/dist/src/semantics/graphql.d.ts +7 -0
- package/dist/src/semantics/graphql.js +512 -0
- package/dist/src/semantics/index.d.ts +5 -0
- package/dist/src/semantics/index.js +62 -0
- package/dist/src/semantics/issues.d.ts +2 -0
- package/dist/src/semantics/issues.js +456 -0
- package/dist/src/semantics/keys.d.ts +2 -0
- package/dist/src/semantics/keys.js +66 -0
- package/dist/src/semantics/labels.d.ts +2 -0
- package/dist/src/semantics/labels.js +100 -0
- package/dist/src/semantics/meta.d.ts +12 -0
- package/dist/src/semantics/meta.js +144 -0
- package/dist/src/semantics/notifications.d.ts +4 -0
- package/dist/src/semantics/notifications.js +62 -0
- package/dist/src/semantics/orgs.d.ts +2 -0
- package/dist/src/semantics/orgs.js +420 -0
- package/dist/src/semantics/packages.d.ts +2 -0
- package/dist/src/semantics/packages.js +55 -0
- package/dist/src/semantics/pages.d.ts +2 -0
- package/dist/src/semantics/pages.js +176 -0
- package/dist/src/semantics/projects.d.ts +2 -0
- package/dist/src/semantics/projects.js +239 -0
- package/dist/src/semantics/pulls.d.ts +2 -0
- package/dist/src/semantics/pulls.js +462 -0
- package/dist/src/semantics/push-reactions.d.ts +101 -0
- package/dist/src/semantics/push-reactions.js +513 -0
- package/dist/src/semantics/releases.d.ts +19 -0
- package/dist/src/semantics/releases.js +231 -0
- package/dist/src/semantics/repo-invitations.d.ts +2 -0
- package/dist/src/semantics/repo-invitations.js +98 -0
- package/dist/src/semantics/repos.d.ts +17 -0
- package/dist/src/semantics/repos.js +390 -0
- package/dist/src/semantics/rulesets.d.ts +2 -0
- package/dist/src/semantics/rulesets.js +111 -0
- package/dist/src/semantics/search.d.ts +2 -0
- package/dist/src/semantics/search.js +84 -0
- package/dist/src/semantics/security.d.ts +2 -0
- package/dist/src/semantics/security.js +177 -0
- package/dist/src/semantics/shared.d.ts +61 -0
- package/dist/src/semantics/shared.js +151 -0
- package/dist/src/semantics/users.d.ts +2 -0
- package/dist/src/semantics/users.js +255 -0
- package/dist/src/semantics/webhooks.d.ts +2 -0
- package/dist/src/semantics/webhooks.js +107 -0
- package/dist/test-fixtures/github-a11y-reference.pr-list.SOURCE.md +56 -0
- package/dist/test-fixtures/github-a11y-reference.pr-list.json +1447 -0
- package/dist/test-fixtures/github-comment-schema.SOURCE.md +11 -0
- package/dist/test-fixtures/github-comment-schema.json +702 -0
- package/dist/test-fixtures/github-known-deviations.json +94 -0
- package/dist/test-fixtures/github-openapi-operations.SOURCE.md +76 -0
- package/dist/test-fixtures/github-openapi-operations.json +362 -0
- package/dist/test-fixtures/github-pull-schema.SOURCE.md +37 -0
- package/dist/test-fixtures/github-pull-schema.json +3601 -0
- package/dist/test-fixtures/github-review-schema.SOURCE.md +12 -0
- package/dist/test-fixtures/github-review-schema.json +236 -0
- package/package.json +20 -11
- package/src/cli.ts +7 -6
- package/src/generated/graphql-sdl.gen.json +1 -0
- package/src/generated/graphql.gen.json +1 -0
- package/src/generated/surface.gen.json +1 -0
- package/src/generated/ui.gen.json +1 -0
- package/src/github-a11y-snapshot.uitest.ts +5 -5
- package/src/github-budget.ts +4 -4
- package/src/github-capabilities.ts +1993 -556
- package/src/github-conformance.ts +12 -7
- package/src/github-connector.ts +108 -96
- package/src/github-events.ts +225 -95
- package/src/github-git-http.ts +48 -84
- package/src/github-git-plane.ts +247 -385
- package/src/github-journey.uitest.ts +28 -44
- package/src/github-mirror-state.ts +23 -61
- package/src/github-mirror-ui.ts +16 -10
- package/src/github-server.ts +158 -60
- package/src/github-shared.ts +1 -1
- package/src/github-twin.ts +1525 -4494
- package/src/github-ui-conformance.ts +7 -8
- package/src/github-ui-structure.ts +19 -18
- package/src/graphql-wire.ts +115 -0
- package/src/index.ts +50 -7
- package/src/manifest.ts +605 -0
- package/src/npm-registry.ts +43 -0
- package/src/screens/app-installation.tsx +217 -0
- package/src/screens/app-manifest.tsx +97 -0
- package/src/screens/oauth.tsx +258 -0
- package/src/screens/session.tsx +193 -0
- package/src/semantics/actions.ts +395 -0
- package/src/semantics/activity.ts +171 -0
- package/src/semantics/apps.ts +133 -0
- package/src/semantics/branches.ts +133 -0
- package/src/semantics/checks.ts +163 -0
- package/src/semantics/code-scanning-upload.ts +92 -0
- package/src/semantics/codespaces.ts +58 -0
- package/src/semantics/commits.ts +109 -0
- package/src/semantics/contents.ts +112 -0
- package/src/semantics/deployments.ts +116 -0
- package/src/semantics/gists.ts +85 -0
- package/src/semantics/git.ts +226 -0
- package/src/semantics/graphql.ts +505 -0
- package/src/semantics/index.ts +68 -0
- package/src/semantics/issues.ts +434 -0
- package/src/semantics/keys.ts +66 -0
- package/src/semantics/labels.ts +91 -0
- package/src/semantics/meta.ts +139 -0
- package/src/semantics/notifications.ts +58 -0
- package/src/semantics/orgs.ts +383 -0
- package/src/semantics/packages.ts +59 -0
- package/src/semantics/pages.ts +154 -0
- package/src/semantics/projects.ts +246 -0
- package/src/semantics/pulls.ts +421 -0
- package/src/semantics/push-reactions.ts +471 -0
- package/src/semantics/releases.ts +213 -0
- package/src/semantics/repo-invitations.ts +112 -0
- package/src/semantics/repos.ts +373 -0
- package/src/semantics/rulesets.ts +107 -0
- package/src/semantics/search.ts +83 -0
- package/src/semantics/security.ts +153 -0
- package/src/semantics/shared.ts +181 -0
- package/src/semantics/users.ts +252 -0
- package/src/semantics/webhooks.ts +101 -0
- package/test-fixtures/github-known-deviations.json +7 -8
- package/test-fixtures/github-openapi-operations.json +46 -227
- package/src/github-graphql.ts +0 -398
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// A repository's webhooks: create (pinged at once, as GitHub does), read, edit (the hook or its
|
|
2
|
+
// config), delete, and the delivery doors (deliveries, a delivery, redelivery, ping), which the
|
|
3
|
+
// delivery pipeline in ../github-events.ts serves. Two hooks may not deliver the same event to the
|
|
4
|
+
// same URL, content type and secret.
|
|
5
|
+
import type { Semantics, SemanticsContext } from '@volter/world-core';
|
|
6
|
+
import { githubNotFound, hookConfigOverlaps, paginate, toGithubWebhook, toGithubWebhookConfig, validateGithubWebhook, type GithubResponse, type GithubWebhook } from '../github-twin.ts';
|
|
7
|
+
import { handleGithubWebhookRequest, hookLastResponse, pingGithubHook } from '../github-events.ts';
|
|
8
|
+
import { gh, nextSeq, put, send } from './shared.ts';
|
|
9
|
+
|
|
10
|
+
const hookOf = (ctx: SemanticsContext) => {
|
|
11
|
+
const { repo, seg, state } = gh(ctx);
|
|
12
|
+
const id = Number(decodeURIComponent(seg[4]!));
|
|
13
|
+
return { id, hook: state().webhooks.find((h) => h.repository === repo && h.id === id) };
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** PATCH the hook (events, active, config; an omitted secret is removed) or only its config (a
|
|
17
|
+
* secret is kept unless named), refused when the result would duplicate another hook. */
|
|
18
|
+
const updateHook = (configOnly: boolean): Semantics => async (ctx) => {
|
|
19
|
+
const { id, hook } = hookOf(ctx);
|
|
20
|
+
if (!hook) return send(ctx, githubNotFound());
|
|
21
|
+
const { repo, body, occurredAt, state } = gh(ctx);
|
|
22
|
+
const error = validateGithubWebhook(body, configOnly, false);
|
|
23
|
+
if (error) return send(ctx, error);
|
|
24
|
+
const cfg = (configOnly ? body : (body.config ?? {})) as Record<string, any>;
|
|
25
|
+
const response = await ctx.atomically<GithubResponse>(() => {
|
|
26
|
+
const hooks = state().webhooks;
|
|
27
|
+
const current = hooks.find((h) => h.repository === repo && h.id === id);
|
|
28
|
+
if (!current) return { value: githubNotFound() };
|
|
29
|
+
const fields: Record<string, unknown> = { repository: repo, updated_at: occurredAt };
|
|
30
|
+
if (!configOnly) {
|
|
31
|
+
if (body.active !== undefined) fields.active = body.active;
|
|
32
|
+
if (body.events !== undefined || body.add_events !== undefined || body.remove_events !== undefined) {
|
|
33
|
+
const events: string[] = [...(body.events ?? current.events), ...(body.add_events ?? [])];
|
|
34
|
+
const removed = new Set<string>(body.remove_events ?? []);
|
|
35
|
+
fields.events = [...new Set(events)].filter((event) => !removed.has(event));
|
|
36
|
+
}
|
|
37
|
+
fields.secret = cfg.secret ?? '';
|
|
38
|
+
}
|
|
39
|
+
if (cfg.url !== undefined) fields.url = cfg.url;
|
|
40
|
+
if (cfg.content_type !== undefined) fields.content_type = cfg.content_type;
|
|
41
|
+
if (cfg.secret !== undefined) fields.secret = cfg.secret;
|
|
42
|
+
const next = { ...current, ...fields } as GithubWebhook;
|
|
43
|
+
if (hookConfigOverlaps(hooks, next, id)) return { value: { status: 422, body: { message: 'Hook already exists on this repository' } } };
|
|
44
|
+
return { value: { status: 200, body: configOnly ? toGithubWebhookConfig(next) : toGithubWebhook(next) }, write: { resource: 'webhook', id: `webhook:${id}`, fields, operation: 'webhook.update' } };
|
|
45
|
+
});
|
|
46
|
+
return send(ctx, response);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/** The delivery doors, answered by the delivery pipeline. */
|
|
50
|
+
const deliveries: Semantics = async (ctx) => (await handleGithubWebhookRequest(ctx.call.request, { ...(ctx.root !== undefined ? { root: ctx.root } : {}) })) ?? send(ctx, githubNotFound());
|
|
51
|
+
|
|
52
|
+
export function webhooksSemantics(): Record<string, Semantics> {
|
|
53
|
+
const reposListWebhooks: Semantics = async (ctx) => {
|
|
54
|
+
const { repo, query, state } = gh(ctx);
|
|
55
|
+
return ctx.reply(paginate(state().webhooks.filter((h) => h.repository === repo), query).map((h) => ({ ...toGithubWebhook(h), last_response: hookLastResponse(h.repository, h.id, ctx.root) })));
|
|
56
|
+
};
|
|
57
|
+
const reposGetWebhook: Semantics = async (ctx) => {
|
|
58
|
+
const { hook } = hookOf(ctx);
|
|
59
|
+
return send(ctx, hook ? { status: 200, body: { ...toGithubWebhook(hook), last_response: hookLastResponse(hook.repository, hook.id, ctx.root) } } : githubNotFound());
|
|
60
|
+
};
|
|
61
|
+
const reposGetWebhookConfigForRepo: Semantics = async (ctx) => {
|
|
62
|
+
const { hook } = hookOf(ctx);
|
|
63
|
+
return send(ctx, hook ? { status: 200, body: toGithubWebhookConfig(hook) } : githubNotFound());
|
|
64
|
+
};
|
|
65
|
+
const reposCreateWebhook: Semantics = async (ctx) => {
|
|
66
|
+
const { repo, body, occurredAt, root, state } = gh(ctx);
|
|
67
|
+
const error = validateGithubWebhook(body, false, true);
|
|
68
|
+
if (error) return send(ctx, error);
|
|
69
|
+
const cfg = (body.config ?? {}) as Record<string, any>;
|
|
70
|
+
const events = body.events ?? ['push'];
|
|
71
|
+
const fields = { repository: repo, active: body.active !== false, events, url: cfg.url, content_type: cfg.content_type ?? 'form', ...(cfg.secret !== undefined ? { secret: cfg.secret } : {}), created_at: occurredAt, updated_at: occurredAt };
|
|
72
|
+
const hook = await ctx.atomically<GithubWebhook | undefined>(() => {
|
|
73
|
+
if (hookConfigOverlaps(state().webhooks, fields)) return { value: undefined };
|
|
74
|
+
const id = nextSeq(ctx, 'webhook');
|
|
75
|
+
return { value: { id, name: 'web', ...fields }, write: { resource: 'webhook', id: `webhook:${id}`, fields, operation: 'webhook.create' } };
|
|
76
|
+
});
|
|
77
|
+
if (hook === undefined) return ctx.reply({ message: 'Hook already exists on this repository' }, 422);
|
|
78
|
+
// GitHub pings a hook it creates; a delivery failure does not undo the hook
|
|
79
|
+
try { await pingGithubHook(repo, hook.id, { occurredAt, ...(root !== undefined ? { root } : {}) }); } catch { /* fire-and-forget */ }
|
|
80
|
+
return ctx.reply(toGithubWebhook(hook), 201);
|
|
81
|
+
};
|
|
82
|
+
const reposDeleteWebhook: Semantics = async (ctx) => {
|
|
83
|
+
const { id, hook } = hookOf(ctx);
|
|
84
|
+
if (!hook) return send(ctx, githubNotFound());
|
|
85
|
+
await put(ctx, { operation: 'webhook.delete', subjectType: 'webhook', subjectId: `webhook:${id}`, fields: { deleted: true, repository: gh(ctx).repo } });
|
|
86
|
+
return send(ctx, { status: 204, body: undefined });
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
'repos/list-webhooks': reposListWebhooks,
|
|
90
|
+
'repos/get-webhook': reposGetWebhook,
|
|
91
|
+
'repos/get-webhook-config-for-repo': reposGetWebhookConfigForRepo,
|
|
92
|
+
'repos/create-webhook': reposCreateWebhook,
|
|
93
|
+
'repos/update-webhook': updateHook(false),
|
|
94
|
+
'repos/update-webhook-config-for-repo': updateHook(true),
|
|
95
|
+
'repos/delete-webhook': reposDeleteWebhook,
|
|
96
|
+
'repos/list-webhook-deliveries': deliveries,
|
|
97
|
+
'repos/get-webhook-delivery': deliveries,
|
|
98
|
+
'repos/redeliver-webhook-delivery': deliveries,
|
|
99
|
+
'repos/ping-webhook': deliveries,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_doc": "Declared evidence-twin scope: GitHub fields the twin does NOT model, each with a reason. Applies to ALL GitHub objects the twin serves (pull_request, pull_request_review, review-comment, pull-file, pull-commit, label, assignee, issue, issue_comment, commit_status, check_run, milestone, requested_reviewer, issue cross-reference event) — the
|
|
2
|
+
"_doc": "Declared evidence-twin scope: GitHub fields the twin does NOT model, each with a reason. Applies to ALL GitHub objects the twin serves (pull_request, pull_request_review, review-comment, pull-file, pull-commit, label, assignee, issue, issue_comment, commit_status, check_run, milestone, requested_reviewer, issue cross-reference event) — PR node_id names the twin GraphQL node; other objects retain the declared node_id gaps. Object-specific gaps are namespaced (label.*, assignee.*, reviewComment.*, pullFile.*, pullCommit.*, status.*, checkRun.*, milestone.*, requestedReviewer.*, issueEvent.*). The spec-conformance gate (github-conformance.ts) treats a missing-required field as a BUG unless it is declared here, so 'what we don't serve' is explicit and reviewable, not silently absent. See github-twin.ts header: the `github` world is an EVIDENCE mirror (metadata), not a content mirror. A trailing `.*` covers a whole unmodeled sub-object. NOTE: issues, commit statuses, check runs, and milestones are LOCAL simulator/fork constructs (no observed evidence fold — observed PR evidence never carries CI/checks/milestones/review-requests) and have no vendored conformance schema yet, so those objects are not run through the spec gate; their simplifications below are recorded for honesty.",
|
|
3
3
|
"deviations": [
|
|
4
4
|
{ "path": "issue.id", "kind": "missing-required", "reason": "issue object: no real GitHub integer id is observed on pull (the issue body carries number/title/body/state); a fabricated id would be invented" },
|
|
5
5
|
{ "path": "issue.node_id", "kind": "missing-required", "reason": "no real GraphQL node id for a local issue" },
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
{ "path": "issue.reactions", "kind": "missing-required", "reason": "reaction rollup not modeled by the local issue construct" },
|
|
8
8
|
{ "path": "issue.timeline_url", "kind": "missing-required", "reason": "timeline hypermedia not modeled" },
|
|
9
9
|
{ "path": "id", "kind": "missing-required", "reason": "PR object: evidence mirror has no real GitHub id (reviews/comments DO emit an integer id from the local sequence)" },
|
|
10
|
-
{ "path": "node_id", "kind": "missing-required", "reason": "
|
|
10
|
+
{ "path": "node_id", "kind": "missing-required", "reason": "PRs emit the synthetic node ID accepted by the twin GraphQL API. Other objects do not yet model node IDs." },
|
|
11
11
|
{ "path": "created_at", "kind": "missing-required", "reason": "observed PR-evidence events do not carry PR creation timestamps" },
|
|
12
12
|
{ "path": "updated_at", "kind": "missing-required", "reason": "see created_at — no PR timestamps in evidence" },
|
|
13
13
|
{ "path": "title", "kind": "missing-required", "reason": "title IS folded on pull (content mirror) and on local writes; declared only for the edge case of a PR that surfaced solely via a review/comment reference (no PR-list entry), which has no title to emit" },
|
|
14
|
-
{ "path": "user.*", "kind": "missing-required", "reason": "
|
|
15
|
-
{ "path": "user", "kind": "missing-required", "reason": "PR author
|
|
14
|
+
{ "path": "user.*", "kind": "missing-required", "reason": "PR author login/type are retained when known. Other simple-user subfields, including vendor numeric id and profile URLs, are not modeled." },
|
|
15
|
+
{ "path": "user", "kind": "missing-required", "reason": "When PR author identity was never observed and no explicit local create proves the modeled caller, user is omitted rather than fabricated." },
|
|
16
16
|
{ "path": "_links.*", "kind": "missing-required", "reason": "hypermedia _links block not modeled by the evidence twin" },
|
|
17
17
|
{ "path": "_links", "kind": "missing-required", "reason": "see _links.*" },
|
|
18
18
|
{ "path": "author_association", "kind": "missing-required", "reason": "author relationship to repo not observed" },
|
|
@@ -21,16 +21,15 @@
|
|
|
21
21
|
{ "path": "maintainer_can_modify", "kind": "missing-required", "reason": "permission flag not observed" },
|
|
22
22
|
{ "path": "additions", "kind": "missing-required", "reason": "line-addition count is NOT in observed PR evidence (only file/commit counts are), so an observed PR omits it; a LOCAL write that carries a `files` list rolls additions up from the diff and emits a typed integer. Declared for the observed scope only." },
|
|
23
23
|
{ "path": "deletions", "kind": "missing-required", "reason": "line-deletion count is NOT in observed PR evidence; observed PRs omit it, while a LOCAL write with a `files` list rolls deletions up from the diff and emits a typed integer. Declared for the observed scope only." },
|
|
24
|
-
{ "path": "comments", "kind": "missing-required", "reason": "issue-comment count
|
|
25
|
-
{ "path": "review_comments", "kind": "missing-required", "reason": "review-comment count
|
|
24
|
+
{ "path": "comments", "kind": "missing-required", "reason": "the issue-comment count is not surfaced" },
|
|
25
|
+
{ "path": "review_comments", "kind": "missing-required", "reason": "the review-comment count is not surfaced" },
|
|
26
26
|
{ "path": "commits", "kind": "missing-required", "reason": "emitted as a typed integer when observed; declared only for PRs whose evidence lacked a commit count" },
|
|
27
27
|
{ "path": "changed_files", "kind": "missing-required", "reason": "emitted as a typed integer when observed; declared only for PRs whose evidence lacked a changed-files count" },
|
|
28
28
|
{ "path": "base.label", "kind": "missing-required", "reason": "evidence tracks base ref only, not the owner:ref label" },
|
|
29
29
|
{ "path": "base.sha", "kind": "missing-required", "reason": "evidence tracks head sha only; base sha is not observed" },
|
|
30
30
|
{ "path": "base.user.*", "kind": "missing-required", "reason": "base repo owner not modeled (evidence twin)" },
|
|
31
31
|
{ "path": "base.user", "kind": "missing-required", "reason": "see base.user.*" },
|
|
32
|
-
{ "path": "base.repo.*", "kind": "missing-required", "reason": "
|
|
33
|
-
{ "path": "base.repo", "kind": "missing-required", "reason": "see base.repo.*" },
|
|
32
|
+
{ "path": "base.repo.*", "kind": "missing-required", "reason": "full_name is served from the stored PR repository. Other Repository fields, including URL templates and settings, are not modeled here." },
|
|
34
33
|
{ "path": "head.label", "kind": "missing-required", "reason": "evidence tracks head sha only, not the owner:ref label" },
|
|
35
34
|
{ "path": "head.ref", "kind": "missing-required", "reason": "evidence tracks head sha; head branch ref is not observed" },
|
|
36
35
|
{ "path": "head.user.*", "kind": "missing-required", "reason": "head repo owner not modeled (evidence twin)" },
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "GitHub REST API (spec-census pilot subset)",
|
|
5
5
|
"version": "2026-06-14",
|
|
6
|
-
"description": "A curated, hand-vendored SUBSET of GitHub's published REST OpenAPI (github/rest-api-description, https://github.com/github/rest-api-description), used ONLY as the operation-inventory denominator for the TWIN-15 spec census (see ../github-spec-census.json). Domain covered: issues, pull requests, repos, git refs, and commit/review comments -- the surface the @volter/twin-github pack models -- PLUS a deliberate handful of adjacent real GitHub operations the pack does NOT model, so the census genuinely exercises its `unmapped` and `
|
|
6
|
+
"description": "A curated, hand-vendored SUBSET of GitHub's published REST OpenAPI (github/rest-api-description, https://github.com/github/rest-api-description), used ONLY as the operation-inventory denominator for the TWIN-15 spec census (see ../github-spec-census.json). Domain covered: issues, pull requests, repos, git refs, and commit/review comments -- the surface the @volter/twin-github pack models -- PLUS a deliberate handful of adjacent real GitHub operations the pack does NOT model, so the census genuinely exercises its `unmapped` and `$ruled` buckets instead of mapping 1:1. This is NOT a full GitHub OpenAPI document (GitHub's real spec is multi-megabyte); it is bounded to ~30-40 operations by design, offline and deterministic -- see github-openapi-operations.SOURCE.md for exactly how each path/method was curated. Method + path + operationId + summary ONLY: no schemas and NO STATUS CODES. It used to carry a response code or two per operation, which read as the operation's whole response set -- diff status codes against the freshly fetched spec, never against this file."
|
|
7
7
|
},
|
|
8
8
|
"x-source": {
|
|
9
9
|
"vendor": "github",
|
|
@@ -11,33 +11,31 @@
|
|
|
11
11
|
"upstreamFile": "descriptions/api.github.com/api.github.com.json",
|
|
12
12
|
"vendored": "hand-authored from the operator's knowledge of GitHub's published REST API paths/methods -- NOT fetched over the network (offline/deterministic build requirement)",
|
|
13
13
|
"curatedOn": "2026-07-04",
|
|
14
|
-
"scope": "issues, pulls, repos, git-data refs, commit/review comments -- the domain the github pack models -- plus adjacent real GitHub operations the pack intentionally leaves unmapped/
|
|
14
|
+
"scope": "issues, pulls, repos, git-data refs, commit/review comments -- the domain the github pack models -- plus adjacent real GitHub operations the pack intentionally leaves unmapped/unmapped"
|
|
15
15
|
},
|
|
16
16
|
"paths": {
|
|
17
|
+
"/graphql": {
|
|
18
|
+
"post": {
|
|
19
|
+
"operationId": "graphql/api",
|
|
20
|
+
"summary": "Execute a GraphQL query or mutation",
|
|
21
|
+
"tags": ["graphql"],
|
|
22
|
+
"responses": { "200": { "description": "GraphQL response with data and/or errors" } }
|
|
23
|
+
}
|
|
24
|
+
},
|
|
17
25
|
"/repos/{owner}/{repo}/issues": {
|
|
18
26
|
"get": {
|
|
19
27
|
"operationId": "issues/list-for-repo",
|
|
20
28
|
"summary": "List repository issues",
|
|
21
29
|
"tags": [
|
|
22
30
|
"issues"
|
|
23
|
-
]
|
|
24
|
-
"responses": {
|
|
25
|
-
"200": {
|
|
26
|
-
"description": "list of issues"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
31
|
+
]
|
|
29
32
|
},
|
|
30
33
|
"post": {
|
|
31
34
|
"operationId": "issues/create",
|
|
32
35
|
"summary": "Create an issue",
|
|
33
36
|
"tags": [
|
|
34
37
|
"issues"
|
|
35
|
-
]
|
|
36
|
-
"responses": {
|
|
37
|
-
"201": {
|
|
38
|
-
"description": "issue created"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
38
|
+
]
|
|
41
39
|
}
|
|
42
40
|
},
|
|
43
41
|
"/repos/{owner}/{repo}/issues/{issue_number}": {
|
|
@@ -46,12 +44,7 @@
|
|
|
46
44
|
"summary": "Update an issue (title/body/state/labels/assignees/milestone)",
|
|
47
45
|
"tags": [
|
|
48
46
|
"issues"
|
|
49
|
-
]
|
|
50
|
-
"responses": {
|
|
51
|
-
"200": {
|
|
52
|
-
"description": "issue updated"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
47
|
+
]
|
|
55
48
|
}
|
|
56
49
|
},
|
|
57
50
|
"/repos/{owner}/{repo}/issues/{issue_number}/comments": {
|
|
@@ -60,24 +53,14 @@
|
|
|
60
53
|
"summary": "List issue comments",
|
|
61
54
|
"tags": [
|
|
62
55
|
"issues"
|
|
63
|
-
]
|
|
64
|
-
"responses": {
|
|
65
|
-
"200": {
|
|
66
|
-
"description": "list of comments"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
56
|
+
]
|
|
69
57
|
},
|
|
70
58
|
"post": {
|
|
71
59
|
"operationId": "issues/create-comment",
|
|
72
60
|
"summary": "Create an issue comment",
|
|
73
61
|
"tags": [
|
|
74
62
|
"issues"
|
|
75
|
-
]
|
|
76
|
-
"responses": {
|
|
77
|
-
"201": {
|
|
78
|
-
"description": "comment created"
|
|
79
|
-
}
|
|
80
|
-
}
|
|
63
|
+
]
|
|
81
64
|
}
|
|
82
65
|
},
|
|
83
66
|
"/repos/{owner}/{repo}/issues/{issue_number}/labels": {
|
|
@@ -86,12 +69,7 @@
|
|
|
86
69
|
"summary": "Add labels to an issue",
|
|
87
70
|
"tags": [
|
|
88
71
|
"issues"
|
|
89
|
-
]
|
|
90
|
-
"responses": {
|
|
91
|
-
"200": {
|
|
92
|
-
"description": "labels added"
|
|
93
|
-
}
|
|
94
|
-
}
|
|
72
|
+
]
|
|
95
73
|
}
|
|
96
74
|
},
|
|
97
75
|
"/repos/{owner}/{repo}/issues/{issue_number}/lock": {
|
|
@@ -100,12 +78,7 @@
|
|
|
100
78
|
"summary": "Lock an issue conversation",
|
|
101
79
|
"tags": [
|
|
102
80
|
"issues"
|
|
103
|
-
]
|
|
104
|
-
"responses": {
|
|
105
|
-
"204": {
|
|
106
|
-
"description": "locked"
|
|
107
|
-
}
|
|
108
|
-
}
|
|
81
|
+
]
|
|
109
82
|
}
|
|
110
83
|
},
|
|
111
84
|
"/repos/{owner}/{repo}/issues/comments": {
|
|
@@ -114,12 +87,7 @@
|
|
|
114
87
|
"summary": "List issue comments for a repository (repo-wide, across all issues)",
|
|
115
88
|
"tags": [
|
|
116
89
|
"issues"
|
|
117
|
-
]
|
|
118
|
-
"responses": {
|
|
119
|
-
"200": {
|
|
120
|
-
"description": "list of comments"
|
|
121
|
-
}
|
|
122
|
-
}
|
|
90
|
+
]
|
|
123
91
|
}
|
|
124
92
|
},
|
|
125
93
|
"/repos/{owner}/{repo}/issues/events": {
|
|
@@ -128,12 +96,7 @@
|
|
|
128
96
|
"summary": "List issue events for a repository (repo-wide, across all issues)",
|
|
129
97
|
"tags": [
|
|
130
98
|
"issues"
|
|
131
|
-
]
|
|
132
|
-
"responses": {
|
|
133
|
-
"200": {
|
|
134
|
-
"description": "list of events"
|
|
135
|
-
}
|
|
136
|
-
}
|
|
99
|
+
]
|
|
137
100
|
}
|
|
138
101
|
},
|
|
139
102
|
"/repos/{owner}/{repo}/pulls": {
|
|
@@ -142,24 +105,14 @@
|
|
|
142
105
|
"summary": "List pull requests",
|
|
143
106
|
"tags": [
|
|
144
107
|
"pulls"
|
|
145
|
-
]
|
|
146
|
-
"responses": {
|
|
147
|
-
"200": {
|
|
148
|
-
"description": "list of pull requests"
|
|
149
|
-
}
|
|
150
|
-
}
|
|
108
|
+
]
|
|
151
109
|
},
|
|
152
110
|
"post": {
|
|
153
111
|
"operationId": "pulls/create",
|
|
154
112
|
"summary": "Create a pull request",
|
|
155
113
|
"tags": [
|
|
156
114
|
"pulls"
|
|
157
|
-
]
|
|
158
|
-
"responses": {
|
|
159
|
-
"201": {
|
|
160
|
-
"description": "pull request created"
|
|
161
|
-
}
|
|
162
|
-
}
|
|
115
|
+
]
|
|
163
116
|
}
|
|
164
117
|
},
|
|
165
118
|
"/repos/{owner}/{repo}/pulls/{pull_number}": {
|
|
@@ -168,24 +121,14 @@
|
|
|
168
121
|
"summary": "Get a pull request",
|
|
169
122
|
"tags": [
|
|
170
123
|
"pulls"
|
|
171
|
-
]
|
|
172
|
-
"responses": {
|
|
173
|
-
"200": {
|
|
174
|
-
"description": "pull request"
|
|
175
|
-
}
|
|
176
|
-
}
|
|
124
|
+
]
|
|
177
125
|
},
|
|
178
126
|
"patch": {
|
|
179
127
|
"operationId": "pulls/update",
|
|
180
128
|
"summary": "Update a pull request",
|
|
181
129
|
"tags": [
|
|
182
130
|
"pulls"
|
|
183
|
-
]
|
|
184
|
-
"responses": {
|
|
185
|
-
"200": {
|
|
186
|
-
"description": "pull request updated"
|
|
187
|
-
}
|
|
188
|
-
}
|
|
131
|
+
]
|
|
189
132
|
}
|
|
190
133
|
},
|
|
191
134
|
"/repos/{owner}/{repo}/pulls/{pull_number}/merge": {
|
|
@@ -194,12 +137,7 @@
|
|
|
194
137
|
"summary": "Merge a pull request",
|
|
195
138
|
"tags": [
|
|
196
139
|
"pulls"
|
|
197
|
-
]
|
|
198
|
-
"responses": {
|
|
199
|
-
"200": {
|
|
200
|
-
"description": "merged"
|
|
201
|
-
}
|
|
202
|
-
}
|
|
140
|
+
]
|
|
203
141
|
}
|
|
204
142
|
},
|
|
205
143
|
"/repos/{owner}/{repo}/pulls/{pull_number}/files": {
|
|
@@ -208,12 +146,7 @@
|
|
|
208
146
|
"summary": "List pull request files",
|
|
209
147
|
"tags": [
|
|
210
148
|
"pulls"
|
|
211
|
-
]
|
|
212
|
-
"responses": {
|
|
213
|
-
"200": {
|
|
214
|
-
"description": "list of changed files"
|
|
215
|
-
}
|
|
216
|
-
}
|
|
149
|
+
]
|
|
217
150
|
}
|
|
218
151
|
},
|
|
219
152
|
"/repos/{owner}/{repo}/pulls/{pull_number}/reviews": {
|
|
@@ -222,24 +155,14 @@
|
|
|
222
155
|
"summary": "List reviews for a pull request",
|
|
223
156
|
"tags": [
|
|
224
157
|
"pulls"
|
|
225
|
-
]
|
|
226
|
-
"responses": {
|
|
227
|
-
"200": {
|
|
228
|
-
"description": "list of reviews"
|
|
229
|
-
}
|
|
230
|
-
}
|
|
158
|
+
]
|
|
231
159
|
},
|
|
232
160
|
"post": {
|
|
233
161
|
"operationId": "pulls/create-review",
|
|
234
162
|
"summary": "Create a review for a pull request",
|
|
235
163
|
"tags": [
|
|
236
164
|
"pulls"
|
|
237
|
-
]
|
|
238
|
-
"responses": {
|
|
239
|
-
"200": {
|
|
240
|
-
"description": "review created"
|
|
241
|
-
}
|
|
242
|
-
}
|
|
165
|
+
]
|
|
243
166
|
}
|
|
244
167
|
},
|
|
245
168
|
"/repos/{owner}/{repo}/pulls/{pull_number}/comments": {
|
|
@@ -260,12 +183,7 @@
|
|
|
260
183
|
"summary": "Create a diff-anchored review comment",
|
|
261
184
|
"tags": [
|
|
262
185
|
"pulls"
|
|
263
|
-
]
|
|
264
|
-
"responses": {
|
|
265
|
-
"201": {
|
|
266
|
-
"description": "review comment created"
|
|
267
|
-
}
|
|
268
|
-
}
|
|
186
|
+
]
|
|
269
187
|
}
|
|
270
188
|
},
|
|
271
189
|
"/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies": {
|
|
@@ -288,12 +206,7 @@
|
|
|
288
206
|
"summary": "Request reviewers for a pull request",
|
|
289
207
|
"tags": [
|
|
290
208
|
"pulls"
|
|
291
|
-
]
|
|
292
|
-
"responses": {
|
|
293
|
-
"201": {
|
|
294
|
-
"description": "reviewers requested"
|
|
295
|
-
}
|
|
296
|
-
}
|
|
209
|
+
]
|
|
297
210
|
}
|
|
298
211
|
},
|
|
299
212
|
"/repos/{owner}/{repo}/pulls/comments": {
|
|
@@ -302,12 +215,7 @@
|
|
|
302
215
|
"summary": "List review comments in a repository (repo-wide, across all pull requests)",
|
|
303
216
|
"tags": [
|
|
304
217
|
"pulls"
|
|
305
|
-
]
|
|
306
|
-
"responses": {
|
|
307
|
-
"200": {
|
|
308
|
-
"description": "list of review comments"
|
|
309
|
-
}
|
|
310
|
-
}
|
|
218
|
+
]
|
|
311
219
|
}
|
|
312
220
|
},
|
|
313
221
|
"/repos/{owner}/{repo}": {
|
|
@@ -316,12 +224,7 @@
|
|
|
316
224
|
"summary": "Get a repository",
|
|
317
225
|
"tags": [
|
|
318
226
|
"repos"
|
|
319
|
-
]
|
|
320
|
-
"responses": {
|
|
321
|
-
"200": {
|
|
322
|
-
"description": "repository"
|
|
323
|
-
}
|
|
324
|
-
}
|
|
227
|
+
]
|
|
325
228
|
}
|
|
326
229
|
},
|
|
327
230
|
"/repos/{owner}/{repo}/branches": {
|
|
@@ -330,12 +233,7 @@
|
|
|
330
233
|
"summary": "List branches",
|
|
331
234
|
"tags": [
|
|
332
235
|
"repos"
|
|
333
|
-
]
|
|
334
|
-
"responses": {
|
|
335
|
-
"200": {
|
|
336
|
-
"description": "list of branches"
|
|
337
|
-
}
|
|
338
|
-
}
|
|
236
|
+
]
|
|
339
237
|
}
|
|
340
238
|
},
|
|
341
239
|
"/repos/{owner}/{repo}/contents/{path}": {
|
|
@@ -344,36 +242,21 @@
|
|
|
344
242
|
"summary": "Get repository content",
|
|
345
243
|
"tags": [
|
|
346
244
|
"repos"
|
|
347
|
-
]
|
|
348
|
-
"responses": {
|
|
349
|
-
"200": {
|
|
350
|
-
"description": "file content"
|
|
351
|
-
}
|
|
352
|
-
}
|
|
245
|
+
]
|
|
353
246
|
},
|
|
354
247
|
"put": {
|
|
355
248
|
"operationId": "repos/create-or-update-file-contents",
|
|
356
249
|
"summary": "Create or update file contents",
|
|
357
250
|
"tags": [
|
|
358
251
|
"repos"
|
|
359
|
-
]
|
|
360
|
-
"responses": {
|
|
361
|
-
"200": {
|
|
362
|
-
"description": "file content"
|
|
363
|
-
}
|
|
364
|
-
}
|
|
252
|
+
]
|
|
365
253
|
},
|
|
366
254
|
"delete": {
|
|
367
255
|
"operationId": "repos/delete-file",
|
|
368
256
|
"summary": "Delete a file",
|
|
369
257
|
"tags": [
|
|
370
258
|
"repos"
|
|
371
|
-
]
|
|
372
|
-
"responses": {
|
|
373
|
-
"200": {
|
|
374
|
-
"description": "file content"
|
|
375
|
-
}
|
|
376
|
-
}
|
|
259
|
+
]
|
|
377
260
|
}
|
|
378
261
|
},
|
|
379
262
|
"/repos/{owner}/{repo}/community/profile": {
|
|
@@ -382,12 +265,7 @@
|
|
|
382
265
|
"summary": "Get community profile metrics",
|
|
383
266
|
"tags": [
|
|
384
267
|
"repos"
|
|
385
|
-
]
|
|
386
|
-
"responses": {
|
|
387
|
-
"200": {
|
|
388
|
-
"description": "community profile"
|
|
389
|
-
}
|
|
390
|
-
}
|
|
268
|
+
]
|
|
391
269
|
}
|
|
392
270
|
},
|
|
393
271
|
"/repos/{owner}/{repo}/merge-upstream": {
|
|
@@ -396,12 +274,7 @@
|
|
|
396
274
|
"summary": "Sync a fork branch with the upstream repository",
|
|
397
275
|
"tags": [
|
|
398
276
|
"repos"
|
|
399
|
-
]
|
|
400
|
-
"responses": {
|
|
401
|
-
"200": {
|
|
402
|
-
"description": "merge result"
|
|
403
|
-
}
|
|
404
|
-
}
|
|
277
|
+
]
|
|
405
278
|
}
|
|
406
279
|
},
|
|
407
280
|
"/repos/{owner}/{repo}/vulnerability-alerts": {
|
|
@@ -410,15 +283,7 @@
|
|
|
410
283
|
"summary": "Check if Dependabot vulnerability alerts are enabled",
|
|
411
284
|
"tags": [
|
|
412
285
|
"repos"
|
|
413
|
-
]
|
|
414
|
-
"responses": {
|
|
415
|
-
"204": {
|
|
416
|
-
"description": "enabled"
|
|
417
|
-
},
|
|
418
|
-
"404": {
|
|
419
|
-
"description": "disabled"
|
|
420
|
-
}
|
|
421
|
-
}
|
|
286
|
+
]
|
|
422
287
|
}
|
|
423
288
|
},
|
|
424
289
|
"/repos/{owner}/{repo}/git/refs": {
|
|
@@ -427,12 +292,7 @@
|
|
|
427
292
|
"summary": "Create a reference",
|
|
428
293
|
"tags": [
|
|
429
294
|
"git"
|
|
430
|
-
]
|
|
431
|
-
"responses": {
|
|
432
|
-
"201": {
|
|
433
|
-
"description": "ref created"
|
|
434
|
-
}
|
|
435
|
-
}
|
|
295
|
+
]
|
|
436
296
|
}
|
|
437
297
|
},
|
|
438
298
|
"/repos/{owner}/{repo}/git/ref/{ref}": {
|
|
@@ -441,12 +301,7 @@
|
|
|
441
301
|
"summary": "Get a reference",
|
|
442
302
|
"tags": [
|
|
443
303
|
"git"
|
|
444
|
-
]
|
|
445
|
-
"responses": {
|
|
446
|
-
"200": {
|
|
447
|
-
"description": "ref"
|
|
448
|
-
}
|
|
449
|
-
}
|
|
304
|
+
]
|
|
450
305
|
}
|
|
451
306
|
},
|
|
452
307
|
"/repos/{owner}/{repo}/git/matching-refs/{ref}": {
|
|
@@ -455,12 +310,7 @@
|
|
|
455
310
|
"summary": "List matching references",
|
|
456
311
|
"tags": [
|
|
457
312
|
"git"
|
|
458
|
-
]
|
|
459
|
-
"responses": {
|
|
460
|
-
"200": {
|
|
461
|
-
"description": "list of matching refs"
|
|
462
|
-
}
|
|
463
|
-
}
|
|
313
|
+
]
|
|
464
314
|
}
|
|
465
315
|
},
|
|
466
316
|
"/repos/{owner}/{repo}/commits/{commit_sha}/comments": {
|
|
@@ -469,12 +319,7 @@
|
|
|
469
319
|
"summary": "List commit comments",
|
|
470
320
|
"tags": [
|
|
471
321
|
"repos"
|
|
472
|
-
]
|
|
473
|
-
"responses": {
|
|
474
|
-
"200": {
|
|
475
|
-
"description": "list of commit comments"
|
|
476
|
-
}
|
|
477
|
-
}
|
|
322
|
+
]
|
|
478
323
|
}
|
|
479
324
|
},
|
|
480
325
|
"/repos/{owner}/{repo}/stats/contributors": {
|
|
@@ -483,15 +328,7 @@
|
|
|
483
328
|
"summary": "Get all contributor commit activity (async-computed statistics)",
|
|
484
329
|
"tags": [
|
|
485
330
|
"repos"
|
|
486
|
-
]
|
|
487
|
-
"responses": {
|
|
488
|
-
"200": {
|
|
489
|
-
"description": "contributor stats"
|
|
490
|
-
},
|
|
491
|
-
"202": {
|
|
492
|
-
"description": "stats being computed"
|
|
493
|
-
}
|
|
494
|
-
}
|
|
331
|
+
]
|
|
495
332
|
}
|
|
496
333
|
},
|
|
497
334
|
"/repos/{owner}/{repo}/stats/commit_activity": {
|
|
@@ -500,15 +337,7 @@
|
|
|
500
337
|
"summary": "Get the last year of commit activity (async-computed statistics)",
|
|
501
338
|
"tags": [
|
|
502
339
|
"repos"
|
|
503
|
-
]
|
|
504
|
-
"responses": {
|
|
505
|
-
"200": {
|
|
506
|
-
"description": "commit activity"
|
|
507
|
-
},
|
|
508
|
-
"202": {
|
|
509
|
-
"description": "stats being computed"
|
|
510
|
-
}
|
|
511
|
-
}
|
|
340
|
+
]
|
|
512
341
|
}
|
|
513
342
|
},
|
|
514
343
|
"/repos/{owner}/{repo}/transfer": {
|
|
@@ -517,12 +346,7 @@
|
|
|
517
346
|
"summary": "Transfer a repository to another owner",
|
|
518
347
|
"tags": [
|
|
519
348
|
"repos"
|
|
520
|
-
]
|
|
521
|
-
"responses": {
|
|
522
|
-
"202": {
|
|
523
|
-
"description": "transfer accepted"
|
|
524
|
-
}
|
|
525
|
-
}
|
|
349
|
+
]
|
|
526
350
|
}
|
|
527
351
|
},
|
|
528
352
|
"/repos/{owner}/{repo}/automated-security-fixes": {
|
|
@@ -531,12 +355,7 @@
|
|
|
531
355
|
"summary": "Disable automated security fixes (Dependabot security updates toggle)",
|
|
532
356
|
"tags": [
|
|
533
357
|
"repos"
|
|
534
|
-
]
|
|
535
|
-
"responses": {
|
|
536
|
-
"204": {
|
|
537
|
-
"description": "disabled"
|
|
538
|
-
}
|
|
539
|
-
}
|
|
358
|
+
]
|
|
540
359
|
}
|
|
541
360
|
}
|
|
542
361
|
}
|