claude-teammate 0.1.299 → 0.1.301

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-teammate",
3
- "version": "0.1.299",
3
+ "version": "0.1.301",
4
4
  "description": "CLI bootstrapper for Claude Teammate.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -175,6 +175,9 @@ export function createGitLabClient(config) {
175
175
  body
176
176
  });
177
177
  } catch (error) {
178
+ if (String(error?.message || "").includes("Award Emoji Name has already been taken")) {
179
+ return;
180
+ }
178
181
  lastError = error;
179
182
  }
180
183
  }
@@ -89,18 +89,21 @@ export async function persistForgeCommentMemoryIfNeeded({
89
89
  return { issueMemory, githubIssueLink, githubIssueMemory };
90
90
  }
91
91
 
92
- await services.persistEpicCandidateKnowledge({
93
- projectRoot,
94
- jiraBaseUrl,
95
- issueRef: githubIssueMemory,
96
- candidateUpdates: {
97
- epic_guardrails: [String(latestComment.body || "").trim()]
98
- },
99
- permissionMode,
100
- timeoutMs,
101
- reason,
102
- logger
103
- });
92
+ const commentBody = String(latestComment.body || "").trim();
93
+ if (!isApprovalComment(commentBody)) {
94
+ await services.persistEpicCandidateKnowledge({
95
+ projectRoot,
96
+ jiraBaseUrl,
97
+ issueRef: githubIssueMemory,
98
+ candidateUpdates: {
99
+ epic_guardrails: [commentBody]
100
+ },
101
+ permissionMode,
102
+ timeoutMs,
103
+ reason,
104
+ logger
105
+ });
106
+ }
104
107
 
105
108
  githubIssueLink[commentField] = String(latestComment.id);
106
109
  issueMemory.github_issues = dedupeGitHubIssues(issueMemory.github_issues);
@@ -403,7 +406,7 @@ export async function processGitHubIssue({
403
406
  currentEpicMemory: reviewEpicMemory,
404
407
  candidateUpdates: {
405
408
  epic_facts: review.epic_facts,
406
- epic_guardrails: review.epic_guardrails
409
+ epic_guardrails: (review.epic_guardrails || []).filter((g) => !isApprovalComment(g))
407
410
  },
408
411
  permissionMode: config.CLAUDE_PERMISSION_MODE,
409
412
  timeoutMs: parseOptionalInt(config.CLAUDE_TIMEOUT_MS),
@@ -84,6 +84,22 @@ export function createTrackedIssuePoller({
84
84
  return { shouldDispatch: false, inline: false };
85
85
  }
86
86
 
87
+ const linkedGitHubIssue = (issueMemoryRecord.data?.github_issues || []).find(
88
+ (gi) =>
89
+ normalizeRepoIdentity(gi?.repo_url || "") === normalizeRepoIdentity(repo.url || "") &&
90
+ String(gi?.number || "") === String(issue.number || "")
91
+ );
92
+ if (
93
+ linkedGitHubIssue &&
94
+ String(linkedGitHubIssue.last_issue_memory_comment_id || "") === String(latestComment.id)
95
+ ) {
96
+ await logger.info("GitHub issue latest comment already processed (memory stamp), not queueing for work", {
97
+ issue: issue.number,
98
+ repo: issue.repoUrl
99
+ });
100
+ return { shouldDispatch: false, inline: false };
101
+ }
102
+
87
103
  const isMember = await checkCommentAuthorIsMember(provider, repo, latestComment, logger, issue.number, false);
88
104
  if (!isMember) {
89
105
  await logger.info("GitHub issue latest comment author is not a repo member, not queueing for work", {