Skip to content

feat: Add git-standup-digest template#233

Open
saiashok0981 wants to merge 3 commits into
Lamatic:mainfrom
saiashok0981:feat/git-standup-digest
Open

feat: Add git-standup-digest template#233
saiashok0981 wants to merge 3 commits into
Lamatic:mainfrom
saiashok0981:feat/git-standup-digest

Conversation

@saiashok0981

@saiashok0981 saiashok0981 commented Jul 12, 2026

Copy link
Copy Markdown

Adds git-standup-digest — a Lamatic template that fetches GitHub repository activity (commits, merged PRs, open issues) and synthesizes it into a human-readable daily standup digest.

Why: Developers spend 10–15 min every morning scanning GitHub tabs. This template replaces that with a single API call that returns an AI-written morning briefing.

Files changed:

  • kits/git-standup-digest/lamatic.config.ts
  • kits/git-standup-digest/agent.md
  • kits/git-standup-digest/README.md
  • kits/git-standup-digest/flows/git-standup-digest.ts
  • kits/git-standup-digest/constitutions/default.md
  • kits/git-standup-digest/prompts/git-standup-digest_generate-standup_system.md
  • kits/git-standup-digest/model-configs/git-standup-digest_generate-standup.ts
  • registry.json (new entry added)

Checklist:

  • lamatic.config.ts type is template
  • agent.md, README.md, flows/, constitutions/ all present
  • PR title starts with feat:
  • registry.json updated
  • Added the git-standup-digest Lamatic template and supporting configuration.
  • Added documentation covering setup, inputs/outputs, API usage, architecture, and customization.
  • Added a single flow that:
    • Calculates the activity window and parses the repository.
    • Calls GitHub APIs for recent commits, merged pull requests, and open issues.
    • Filters and formats the activity data.
    • Generates highlights and blockers.
    • Sends the formatted data to an LLM for a concise standup digest.
    • Returns digest, highlights, and blockers.
  • Added the flow’s constitution with factuality, safety, privacy, and credential-handling rules.
  • Added the LLM system prompt defining digest sections, markdown formatting, empty-state handling, and stale-item warnings.
  • Added model configuration for the standup-generation LLM node.
  • Added .gitignore entries for environment files, dependencies, and macOS metadata.
  • Added template metadata and a mandatory flow step through lamatic.config.ts.

Adds a single-flow Lamatic template that fetches GitHub repository
activity (commits, merged PRs, open issues) via the GitHub REST API
and synthesizes it into a human-readable daily standup digest using
an LLM — replacing manual log scanning with an AI-written morning
briefing.

Flow nodes: graphqlNode → codeNode (compute since) → 3x apiNode
(GitHub) → codeNode (format) → LLMNode (generate) → graphqlResponseNode

Signed-off-by: saiashok103@gmail.com
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Changes

The PR adds a Git Standup Digest Lamatic template that collects GitHub activity, formats commits, pull requests, and issues, generates an LLM-based digest, and returns digest, highlights, and blockers.

Git Standup Digest

Layer / File(s) Summary
Template contract and setup
kits/git-standup-digest/lamatic.config.ts, kits/git-standup-digest/agent.md, kits/git-standup-digest/README.md, kits/git-standup-digest/constitutions/*, kits/git-standup-digest/prompts/*, kits/git-standup-digest/model-configs/*, kits/git-standup-digest/.gitignore, kits/git-standup-digest/flows/...
Defines template metadata, documented inputs and outputs, environment requirements, safety rules, prompt references, model configuration, and included flow assets.
GitHub activity pipeline
kits/git-standup-digest/flows/git-standup-digest.ts
Computes the time window and repository identifiers, fetches GitHub commits, merged pull requests, and open issues, then formats activity and derives highlights and blockers.
Standup generation and response
kits/git-standup-digest/flows/git-standup-digest.ts
Passes formatted activity to the LLM, maps generated and computed fields into the GraphQL response, and defines execution edges between flow nodes.

Suggested reviewers: amanintech, d-pamneja

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise, clear, and accurately names the new git-standup-digest template.
Description check ✅ Passed The description covers the template purpose, files changed, and key checklist items, though it omits some template sections.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

:robot_face: AgentKit Structural Validation

New Contributions Detected

  • Template: kits/git-standup-digest

Check Results

Check Status
No edits to existing kits ✅ Pass
Required root files present ✅ Pass
Flow .ts files present ✅ Pass
lamatic.config.ts valid ✅ Pass
No changes outside kits/ ✅ Pass

🎉 All checks passed! This contribution follows the AgentKit structure.

Removing registry.json from the PR changes to resolve the validation warning
and allow the PR to receive the 'passing-checks' label. Changes outside of
the kits/ directory are not permitted for new contributions.

Signed-off-by: saiashok103@gmail.com

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🤖 Prompt for all review comments with 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.

Inline comments:
In `@kits/git-standup-digest/agent.md`:
- Around line 38-45: Update the flow walkthrough and architecture diagram to
include the Compute Since codeNode_compute_since step between API Request and
Fetch Commits. Document that it defaults since to 24 hours ago and splits repo
into owner and repoName for API paths, preserving the existing downstream fetch
sequence.

In `@kits/git-standup-digest/flows/git-standup-digest.ts`:
- Around line 254-280: Update the digest data handling around rawCommits,
rawPRs, and rawIssues to detect non-array error outputs before converting them
to empty lists. Surface a clear API failure indication in the generated digest,
including which GitHub data source failed when identifiable, while preserving
the existing formatting for valid array responses.
- Around line 184-187: Validate the repo input in the Compute Since flow before
deriving owner and repoName: require a non-empty owner/repository pair separated
by a slash, and fail clearly when the format is invalid. Update the parsing
around the graphqlNode_trigger repo handling while preserving normal owner/repo
processing for valid inputs.
- Line 379: Update the digest mapping to use the generatedResponse field from
LLMNode_generate_standup.output rather than routing the entire output object,
preserving the existing output reference structure.

In
`@kits/git-standup-digest/prompts/git-standup-digest_generate-standup_system.md`:
- Around line 38-40: Remove the “Activity Input” section and its
{{codeNode_format.output}} placeholder from the system prompt, leaving activity
data to be supplied through the existing userPrompt in the LLMNode flow.

In `@kits/git-standup-digest/README.md`:
- Around line 21-26: Update the node overview in the README to state that the
flow contains 8 nodes, and add the codeNode_compute_since (Compute Since) node
to the list. Preserve the existing node descriptions while ensuring the listed
nodes and multiplicities total 8.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 37ba2dc4-f62a-4943-8708-2891fca06373

📥 Commits

Reviewing files that changed from the base of the PR and between dafde4c and 4fa3086.

📒 Files selected for processing (8)
  • kits/git-standup-digest/.gitignore
  • kits/git-standup-digest/README.md
  • kits/git-standup-digest/agent.md
  • kits/git-standup-digest/constitutions/default.md
  • kits/git-standup-digest/flows/git-standup-digest.ts
  • kits/git-standup-digest/lamatic.config.ts
  • kits/git-standup-digest/model-configs/git-standup-digest_generate-standup.ts
  • kits/git-standup-digest/prompts/git-standup-digest_generate-standup_system.md

Comment on lines +38 to +45
**What it does:**
1. `API Request` (`graphqlNode`) — receives the inbound payload with `repo`, `github_token`, and `since`
2. `Fetch Commits` (`apiNode`) — calls `GET /repos/{owner}/{repo}/commits?since={since}` with Bearer auth; returns up to 30 recent commits
3. `Fetch Merged PRs` (`apiNode`) — calls `GET /repos/{owner}/{repo}/pulls?state=closed&sort=updated&direction=desc` to get recently merged pull requests
4. `Fetch Open Issues` (`apiNode`) — calls `GET /repos/{owner}/{repo}/issues?state=open&sort=updated&direction=desc` to surface active blockers
5. `Format Activity` (`codeNode`) — collects the three API responses, extracts relevant fields (commit messages, PR titles, issue titles), and formats them into a clean text block for the LLM
6. `Generate Standup` (`LLMNode`) — runs the system prompt with the formatted activity block and synthesizes a human-readable digest
7. `API Response` (`graphqlResponseNode`) — returns `{ digest, highlights, blockers }` to the caller

Copy link
Copy Markdown
Contributor

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

Flow walkthrough skips the Compute Since node.

The step-by-step jumps from API Request directly to Fetch Commits, omitting the Compute Since (codeNode_compute_since) node that defaults since to 24 hours ago and splits repo into owner/repoName for the API paths. The architecture diagram (lines 80–94) has the same omission. Add the missing step for documentation accuracy.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~39-~39: The official name of this software platform is spelled with a capital “H”.
Context: ...ceives the inbound payload with repo, github_token, and since 2. Fetch Commits ...

(GITHUB)

🤖 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 `@kits/git-standup-digest/agent.md` around lines 38 - 45, Update the flow
walkthrough and architecture diagram to include the Compute Since
codeNode_compute_since step between API Request and Fetch Commits. Document that
it defaults since to 24 hours ago and splits repo into owner and repoName for
API paths, preserving the existing downstream fetch sequence.

Comment on lines +184 to +187
const repo = inputs.graphqlNode_trigger?.repo || "";
const parts = repo.split("/");
const owner = parts[0] || "";
const repoName = parts[1] || "";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

No validation of repo format allows malformed API URLs.

If repo is empty, missing, or lacks the owner/repo slash, owner and repoName resolve to empty strings, producing broken GitHub API URLs like https://api.github.com/repos//commits. The flow fails downstream with confusing 404s instead of a clear input error. Validate the format before proceeding.

🛡️ Proposed fix: validate repo format in Compute Since
 const repo = inputs.graphqlNode_trigger?.repo || "";
-const parts = repo.split("/");
-const owner = parts[0] || "";
-const repoName = parts[1] || "";
+const parts = repo.split("/");
+if (parts.length < 2 || !parts[0] || !parts[1]) {
+  throw new Error("Invalid repo format. Expected 'owner/repo' (e.g. 'vercel/next.js').");
+}
+const owner = parts[0];
+const repoName = parts[1];
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const repo = inputs.graphqlNode_trigger?.repo || "";
const parts = repo.split("/");
const owner = parts[0] || "";
const repoName = parts[1] || "";
const repo = inputs.graphqlNode_trigger?.repo || "";
const parts = repo.split("/");
if (parts.length < 2 || !parts[0] || !parts[1]) {
throw new Error("Invalid repo format. Expected 'owner/repo' (e.g. 'vercel/next.js').");
}
const owner = parts[0];
const repoName = parts[1];
🤖 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 `@kits/git-standup-digest/flows/git-standup-digest.ts` around lines 184 - 187,
Validate the repo input in the Compute Since flow before deriving owner and
repoName: require a non-empty owner/repository pair separated by a slash, and
fail clearly when the format is invalid. Update the parsing around the
graphqlNode_trigger repo handling while preserving normal owner/repo processing
for valid inputs.

Comment on lines +254 to +280
const rawCommits = inputs.apiNode_commits?.output || [];
const commits = Array.isArray(rawCommits)
? rawCommits.slice(0, 12).map((c) => {
const sha = (c.sha || "").slice(0, 7);
const msg = (c.commit?.message || "").split("\\n")[0].trim();
return \` - [\${sha}] \${msg}\`;
})
: [];

// ── Merged PRs ───────────────────────────────────────────────────────────────
const rawPRs = inputs.apiNode_merged_prs?.output || [];
const now = new Date();
const mergedPRs = Array.isArray(rawPRs)
? rawPRs
.filter((pr) => pr.merged_at)
.slice(0, 10)
.map((pr) => {
const ageDays = Math.floor(
(now - new Date(pr.merged_at)) / (1000 * 60 * 60 * 24)
);
return \` - #\${pr.number} — \${pr.title} (merged \${ageDays === 0 ? "today" : ageDays + "d ago"})\`;
})
: [];

// ── Open Issues ───────────────────────────────────────────────────────────────
// GitHub issues endpoint returns both issues and PRs; filter out PRs
const rawIssues = inputs.apiNode_open_issues?.output || [];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Failed GitHub API calls are silently swallowed.

When an API call fails (401, 404, rate limit), output may be an error object rather than an array. The Array.isArray() guard converts it to [], so the user receives a digest saying "No activity" with no indication that the API calls actually failed. Consider checking for error responses and surfacing them.

🤖 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 `@kits/git-standup-digest/flows/git-standup-digest.ts` around lines 254 - 280,
Update the digest data handling around rawCommits, rawPRs, and rawIssues to
detect non-array error outputs before converting them to empty lists. Surface a
clear API failure indication in the generated digest, including which GitHub
data source failed when identifiable, while preserving the existing formatting
for valid array responses.

label: "API Response",
data: {
output: {
digest: "{{LLMNode_generate_standup.output}}",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check LLMNode output mapping patterns across existing kits.
rg -n 'LLMNode.*\.output' --type ts -g 'kits/*/flows/*.ts' -C1 | head -40

Repository: Lamatic/AgentKit

Length of output: 154


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== LLMNode output mapping usage =="
rg -n 'generatedResponse|LLMNode_generate_standup|\.output(\b|[^A-Za-z_])' kits -g 'kits/*/flows/*.ts' -C 2 || true

echo
echo "== Relevant file slice =="
sed -n '340,395p' kits/git-standup-digest/flows/git-standup-digest.ts

echo
echo "== Any flow docs or config references =="
rg -n 'git-standup-digest|standup.*digest|generatedResponse' kits -g '!**/node_modules/**' -C 1 || true

Repository: Lamatic/AgentKit

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== File metadata =="
wc -l kits/git-standup-digest/flows/git-standup-digest.ts

echo
echo "== AST outline =="
ast-grep outline kits/git-standup-digest/flows/git-standup-digest.ts --view expanded

echo
echo "== Search for outputMapping and response fields =="
rg -n 'outputMapping|generatedResponse|responseField|digest:' kits/git-standup-digest/flows/git-standup-digest.ts -C 2

Repository: Lamatic/AgentKit

Length of output: 707


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Target file slice =="
sed -n '350,390p' kits/git-standup-digest/flows/git-standup-digest.ts

echo
echo "== Search for LLMNode output shape in repo =="
rg -n 'generatedResponse|LLMNode|outputMapping' . -g '!**/node_modules/**' -g '!*dist*' -g '!*build*' -C 2 || true

Repository: Lamatic/AgentKit

Length of output: 50373


🌐 Web query:

Lamatic LLMNode outputMapping generatedResponse output generatedResponse site:docs.lamatic.ai OR site:lamatic.ai

💡 Result:

In the Lamatic.ai platform, generatedResponse is the primary field containing the text output produced by an LLM node (such as the Text Agent or Generate Text node) [1][2]. When configuring a flow, outputMapping is used to map, transform, or reference data produced by previous nodes for use in subsequent steps [3][4][5]. For example, to reference the text output of an LLM node named LLMNode_746 in an output mapping or elsewhere in a flow, you would typically use the syntax: {{LLMNode_746.output.generatedResponse}} [5] The structure of the node output generally includes the generatedResponse string alongside a _meta object, which contains metadata such as token usage (prompt_tokens, completion_tokens) and model details (model_name, model_provider) [1][2]. Key technical points: - generatedResponse: The actual string output from the LLM [2]. - outputMapping: A configuration mechanism within a node or flow to define how data is passed between nodes [4][5]. - Schema: You can verify the availability of these fields by checking the Schema tab in the Node Configuration panel for any specific AI node [3].

Citations:


Route digest to generatedResponseLLMNode_generate_standup exposes the text in output.generatedResponse, so digest should map {{LLMNode_generate_standup.output.generatedResponse}} instead of the full output object.

🤖 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 `@kits/git-standup-digest/flows/git-standup-digest.ts` at line 379, Update the
digest mapping to use the generatedResponse field from
LLMNode_generate_standup.output rather than routing the entire output object,
preserving the existing output reference structure.

Source: Learnings

Comment on lines +38 to +40
## Activity Input

{{codeNode_format.output}}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Activity data placeholder in system prompt is redundant with the user prompt.

The {{codeNode_format.output}} placeholder at line 40 duplicates the activity data that's already passed as userPrompt in the LLMNode (flow line 366). If the runtime interpolates system prompt files, the LLM receives the activity block twice; if it doesn't, the LLM sees a literal {{codeNode_format.output}} string. Remove the placeholder from the system prompt since the user prompt already carries the data.

♻️ Proposed fix: remove redundant placeholder
 ## Output format

Git Standup — {repo}

Period: {since} → now

✅ Shipped (Merged PRs)

  • {list of merged PRs with title and number}

🔨 Recent Commits

  • {list of commit messages, max 8}

🚧 In Progress / Needs Attention

  • {list of open PRs with age in days if > 1 day}

🐛 Open Issues

  • {list of open issues with title}

Summary: {highlights one-liner} | Blockers: {blockers one-liner}


-## Activity Input
-
-{{codeNode_format.output}}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Activity Input
{{codeNode_format.output}}
🤖 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
`@kits/git-standup-digest/prompts/git-standup-digest_generate-standup_system.md`
around lines 38 - 40, Remove the “Activity Input” section and its
{{codeNode_format.output}} placeholder from the system prompt, leaving activity
data to be supplied through the existing userPrompt in the LLMNode flow.

Comment on lines +21 to +26
This flow includes **6 nodes** working together to produce the digest:
- `graphqlNode` (API Request trigger)
- `apiNode` × 3 (commits, merged PRs, open issues)
- `codeNode` (format activity)
- `LLMNode` (generate standup)
- `graphqlResponseNode` (API Response)

Copy link
Copy Markdown
Contributor

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

Node count is incorrect and Compute Since node is missing from the list.

The README states "6 nodes" but the actual flow has 8 nodes, and the listed items add up to 7. The codeNode_compute_since (Compute Since) node — which defaults since to 24 hours ago and splits repo into owner/repoName — is entirely absent from the list.

💚 Proposed fix: correct node count and add missing node
-This flow includes **6 nodes** working together to produce the digest:
+This flow includes **8 nodes** working together to produce the digest:
 - `graphqlNode` (API Request trigger)
+- `codeNode` (compute default `since` timestamp and split `repo` into owner/repoName)
 - `apiNode` × 3 (commits, merged PRs, open issues)
 - `codeNode` (format activity)
 - `LLMNode` (generate standup)
 - `graphqlResponseNode` (API Response)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This flow includes **6 nodes** working together to produce the digest:
- `graphqlNode` (API Request trigger)
- `apiNode` × 3 (commits, merged PRs, open issues)
- `codeNode` (format activity)
- `LLMNode` (generate standup)
- `graphqlResponseNode` (API Response)
This flow includes **8 nodes** working together to produce the digest:
- `graphqlNode` (API Request trigger)
- `codeNode` (compute default `since` timestamp and split `repo` into owner/repoName)
- `apiNode` × 3 (commits, merged PRs, open issues)
- `codeNode` (format activity)
- `LLMNode` (generate standup)
- `graphqlResponseNode` (API Response)
🤖 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 `@kits/git-standup-digest/README.md` around lines 21 - 26, Update the node
overview in the README to state that the flow contains 8 nodes, and add the
codeNode_compute_since (Compute Since) node to the list. Preserve the existing
node descriptions while ensuring the listed nodes and multiplicities total 8.

@github-actions

Copy link
Copy Markdown
Contributor

Hi @saiashok0981! 👋

Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review.

Steps to follow:

  1. Read through all CodeRabbit comments carefully
  2. Address each issue raised (or reply explaining why you disagree)
  3. Push your fixes as new commits
  4. Once all issues are resolved, comment here so we can re-review

This helps keep the review process efficient for everyone. Thank you! 🙏

@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant