Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - dreamdata-io/code-challenge-integrations · GitHub
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CRM source connector challenge

Start here. Clone this challenge repository locally, then create a new private repository under your own GitHub account and push your completed work there. Add GitHub user paddie as a collaborator (select the Read role where available), and confirm the repository shows paddie as active or invited. Then email prm@dreamdata.io with the repository URL and submitted commit hash. The invitation may still be pending when you submit. Do not submit only in the supplied challenge repository.

Add your Go connector, tests, documentation, decision notes, and AI_USE.md, then complete the checklist in ASSIGNMENT.md. Extend this README with your connector's exact build, full-run, and incremental-run commands so it remains the repository landing page for review.

The supplied mock-crm executables are challenge infrastructure. Their source is intentionally absent; do not modify or replace them.

Read before coding

  1. ASSIGNMENT.md — task, baseline success criteria, deliverables, checklist, and technical review.
  2. docs/crm-api.md — authoritative HTTP resources, schemas, relationships, pagination, tombstones, and retry contract.
  3. docs/local-mock.md — authoritative startup and process-local scenario behavior.
  4. AGENTS.md — concise working agreement for you and coding agents.

If a summary conflicts with the detailed API, follow docs/crm-api.md; for executable behavior and flags, follow docs/local-mock.md. Ask rather than inventing unspecified behavior.

Select and start the mock CRM

Identify your host:

uname -s
uname -m

Select the matching executable. x86_64 means amd64; arm64 and aarch64 mean arm64.

uname -suname -mExecutable
Darwinarm64bin/darwin-arm64/mock-crm
Darwinx86_64bin/darwin-amd64/mock-crm
Linuxaarch64 or arm64bin/linux-arm64/mock-crm
Linuxx86_64bin/linux-amd64/mock-crm

Windows executables are not supplied.

From the repository root, copy/paste the pair for your host:

# macOS on Apple silicon
chmod +x bin/darwin-arm64/mock-crm
bin/darwin-arm64/mock-crm --listen=:8080
# macOS on Intel
chmod +x bin/darwin-amd64/mock-crm
bin/darwin-amd64/mock-crm --listen=:8080
# Linux on arm64
chmod +x bin/linux-arm64/mock-crm
bin/linux-arm64/mock-crm --listen=:8080
# Linux on amd64
chmod +x bin/linux-amd64/mock-crm
bin/linux-amd64/mock-crm --listen=:8080

Run only the matching command and leave that terminal running. For an exactly reproducible scenario, append --simulation-start=2031-02-03; otherwise startup visibly selects the current UTC date. In another terminal, check readiness and make the first page of a full pull:

curl --fail http://localhost:8080/healthz
curl --fail 'http://localhost:8080/v1/companies?page=0&size=2'

Follow each next_page until it is absent. HTTP requests never advance the simulation, so repeated full and inclusive incremental pulls remain unchanged. After the full pull completes, save its greatest updated_at and make an inclusive boundary pull:

CHECKPOINT='<greatest updated_at from the completed full pull>'
curl --fail --get 'http://localhost:8080/v1/companies' \
--data-urlencode page=0 --data-urlencode size=500 \
--data-urlencode order=asc --data-urlencode "since=$CHECKPOINT"

Follow next_page until it is absent. Then return to the mock terminal, press Enter on an empty line, and wait for the completed-day confirmation. Repeat the same inclusive command and follow its pages again; it now returns boundary ties plus records touched during the simulated day. Finally, rerun the full-pull command to observe the refreshed current state.

Press Enter only between completed pulls; pagination across a publication is intentionally unsupported. In connector code, derive the checkpoint from the greatest updated_at safely emitted, not merely observed. See docs/local-mock.md for the complete terminal and process lifecycle.

Keep this mock process alive for the required validation: for every implemented entity, perform an initial full pull and retrieve at least 10 Enter-driven incremental ticks using the prior emitted state each time. You can retrieve several entities after each Enter press. Your connector process may restart freely; restarting the mock starts a fresh scenario and invalidates old connector checkpoints.

Resilience is required: retry 429 and 5xx responses, honor Retry-After-Ms, and fail safely after a documented bounded retry policy. Test this by restarting the matching mock binary with --enable-fault-profile=true; the profile is disabled by default and affects /v1 only. See the assignment and docs/local-mock.md for the exact command.

Maintainer build

With mise and Go available, build all supplied mock CRM targets from source into this repository's generated bin/ directory:

# Required once when mise first sees this repository's configuration.
mise trust
mise run build

This produces bin/{darwin,linux}-{arm64,amd64}/mock-crm. The generated binaries are ignored; use mock-crm/scripts/build-release.sh when creating the sanitized candidate package under mock-crm/dist/.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors