From b3fbfb8ff3bb41a168762fc5b3654d7c0bb4601a Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 31 Jan 2026 16:30:28 +0000 Subject: [PATCH 1/2] functional pragmatist --- .github/aw/actions-lock.json | 5 ++++ .github/workflows/ci-doctor.lock.yml | 4 +-- ...ock.yml => functional-pragmatist.lock.yml} | 26 +++++++++---------- ...l-enhancer.md => functional-pragmatist.md} | 2 +- .../src/content/docs/agent-factory-status.mdx | 2 +- ...et-the-workflows-continuous-improvement.md | 12 ++++----- pkg/workflow/data/action_pins.json | 2 +- 7 files changed, 29 insertions(+), 24 deletions(-) rename .github/workflows/{functional-enhancer.lock.yml => functional-pragmatist.lock.yml} (98%) rename .github/workflows/{functional-enhancer.md => functional-pragmatist.md} (99%) diff --git a/.github/aw/actions-lock.json b/.github/aw/actions-lock.json index 2db5179bb9..edbd2e8785 100644 --- a/.github/aw/actions-lock.json +++ b/.github/aw/actions-lock.json @@ -25,6 +25,11 @@ "version": "v4.3.0", "sha": "0057852bfaa89a56745cba8c7296529d2fc39830" }, + "actions/checkout@v3": { + "repo": "actions/checkout", + "version": "v3", + "sha": "f43a0e5ff2bd294095638e18286ca9a3d1956744" + }, "actions/checkout@v4": { "repo": "actions/checkout", "version": "v4", diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 21448b142e..80d2e16d9c 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -25,7 +25,7 @@ # # frontmatter-hash: fd78e8183e3a4c0c3bd23b924c1c3164dae64a7589e74ef9a3102788475ad145 # -# Effective stop-time: 2026-03-03 15:23:52 +# Effective stop-time: 2026-03-03 16:27:58 name: "CI Failure Doctor" "on": @@ -1075,7 +1075,7 @@ jobs: id: check_stop_time uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: - GH_AW_STOP_TIME: 2026-03-03 15:23:52 + GH_AW_STOP_TIME: 2026-03-03 16:27:58 GH_AW_WORKFLOW_NAME: "CI Failure Doctor" with: script: | diff --git a/.github/workflows/functional-enhancer.lock.yml b/.github/workflows/functional-pragmatist.lock.yml similarity index 98% rename from .github/workflows/functional-enhancer.lock.yml rename to .github/workflows/functional-pragmatist.lock.yml index 9b8508ddd4..ccc5112c73 100644 --- a/.github/workflows/functional-enhancer.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -27,7 +27,7 @@ # # frontmatter-hash: a3a882e5b432319e495ef33cf6b175688127dabd81d90624999492b6100b7384 -name: "Functional Enhancer" +name: "Functional Pragmatist" "on": schedule: - cron: "0 9 * * 2,4" @@ -38,7 +38,7 @@ permissions: {} concurrency: group: "gh-aw-${{ github.workflow }}" -run-name: "Functional Enhancer" +run-name: "Functional Pragmatist" jobs: activation: @@ -62,7 +62,7 @@ jobs: - name: Check workflow file timestamps uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: - GH_AW_WORKFLOW_FILE: "functional-enhancer.lock.yml" + GH_AW_WORKFLOW_FILE: "functional-pragmatist.lock.yml" with: script: | const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs'); @@ -442,7 +442,7 @@ jobs: model: process.env.GH_AW_MODEL_AGENT_CLAUDE || "", version: "", agent_version: "2.1.27", - workflow_name: "Functional Enhancer", + workflow_name: "Functional Pragmatist", experimental: false, supports_tools_allowlist: true, supports_http_transport: true, @@ -618,7 +618,7 @@ jobs: PROMPT_EOF cat << 'PROMPT_EOF' >> "$GH_AW_PROMPT" - {{#runtime-import workflows/functional-enhancer.md}} + {{#runtime-import workflows/functional-pragmatist.md}} PROMPT_EOF - name: Substitute placeholders uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 @@ -940,7 +940,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: 1 - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" GH_AW_TRACKER_ID: "functional-enhancer" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -954,7 +954,7 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" GH_AW_TRACKER_ID: "functional-enhancer" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -968,7 +968,7 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" GH_AW_TRACKER_ID: "functional-enhancer" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} @@ -985,7 +985,7 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" GH_AW_TRACKER_ID: "functional-enhancer" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} with: @@ -1003,7 +1003,7 @@ jobs: GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }} GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" GH_AW_TRACKER_ID: "functional-enhancer" GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.result }} @@ -1056,7 +1056,7 @@ jobs: - name: Setup threat detection uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: - WORKFLOW_NAME: "Functional Enhancer" + WORKFLOW_NAME: "Functional Pragmatist" WORKFLOW_DESCRIPTION: "Identifies opportunities to apply moderate functional programming techniques systematically - immutability, functional options, pure functions, reducing mutation and reusable logic wrappers" HAS_PATCH: ${{ needs.agent.outputs.has_patch }} with: @@ -1152,8 +1152,8 @@ jobs: env: GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "functional-enhancer" - GH_AW_WORKFLOW_ID: "functional-enhancer" - GH_AW_WORKFLOW_NAME: "Functional Enhancer" + GH_AW_WORKFLOW_ID: "functional-pragmatist" + GH_AW_WORKFLOW_NAME: "Functional Pragmatist" outputs: process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }} diff --git a/.github/workflows/functional-enhancer.md b/.github/workflows/functional-pragmatist.md similarity index 99% rename from .github/workflows/functional-enhancer.md rename to .github/workflows/functional-pragmatist.md index e909c9369b..df6ab838c7 100644 --- a/.github/workflows/functional-enhancer.md +++ b/.github/workflows/functional-pragmatist.md @@ -1,5 +1,5 @@ --- -name: Functional Enhancer +name: Functional Pragmatist description: Identifies opportunities to apply moderate functional programming techniques systematically - immutability, functional options, pure functions, reducing mutation and reusable logic wrappers on: schedule: diff --git a/docs/src/content/docs/agent-factory-status.mdx b/docs/src/content/docs/agent-factory-status.mdx index 408f59ace1..9ce210d919 100644 --- a/docs/src/content/docs/agent-factory-status.mdx +++ b/docs/src/content/docs/agent-factory-status.mdx @@ -82,7 +82,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Example: Custom Error Patterns](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/example-custom-error-patterns.md) | copilot | [![Example: Custom Error Patterns](https://github.com/githubnext/gh-aw/actions/workflows/example-custom-error-patterns.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/example-custom-error-patterns.lock.yml) | - | - | | [Example: Properly Provisioned Permissions](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/example-permissions-warning.md) | copilot | [![Example: Properly Provisioned Permissions](https://github.com/githubnext/gh-aw/actions/workflows/example-permissions-warning.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/example-permissions-warning.lock.yml) | - | - | | [Firewall Test Agent](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/firewall.md) | copilot | [![Firewall Test Agent](https://github.com/githubnext/gh-aw/actions/workflows/firewall.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/firewall.lock.yml) | - | - | -| [Functional Enhancer](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/functional-programming-enhancer.md) | claude | [![Functional Enhancer](https://github.com/githubnext/gh-aw/actions/workflows/functional-programming-enhancer.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/functional-programming-enhancer.lock.yml) | `0 9 * * 2,4` | - | +| [Functional Pragmatist](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/functional-programming-enhancer.md) | claude | [![Functional Pragmatist](https://github.com/githubnext/gh-aw/actions/workflows/functional-programming-enhancer.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/functional-programming-enhancer.lock.yml) | `0 9 * * 2,4` | - | | [GitHub MCP Remote Server Tools Report Generator](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/github-mcp-tools-report.md) | claude | [![GitHub MCP Remote Server Tools Report Generator](https://github.com/githubnext/gh-aw/actions/workflows/github-mcp-tools-report.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/github-mcp-tools-report.lock.yml) | - | - | | [GitHub MCP Structural Analysis](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/github-mcp-structural-analysis.md) | claude | [![GitHub MCP Structural Analysis](https://github.com/githubnext/gh-aw/actions/workflows/github-mcp-structural-analysis.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/github-mcp-structural-analysis.lock.yml) | `0 11 * * 1-5` | - | | [GitHub Remote MCP Authentication Test](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/github-remote-mcp-auth-test.md) | copilot | [![GitHub Remote MCP Authentication Test](https://github.com/githubnext/gh-aw/actions/workflows/github-remote-mcp-auth-test.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/github-remote-mcp-auth-test.lock.yml) | - | - | diff --git a/docs/src/content/docs/blog/2026-01-13-meet-the-workflows-continuous-improvement.md b/docs/src/content/docs/blog/2026-01-13-meet-the-workflows-continuous-improvement.md index 0b3ad9698e..c7a4417809 100644 --- a/docs/src/content/docs/blog/2026-01-13-meet-the-workflows-continuous-improvement.md +++ b/docs/src/content/docs/blog/2026-01-13-meet-the-workflows-continuous-improvement.md @@ -28,7 +28,7 @@ Today's agents analyze higher-level concerns and long-term health: - **[Go Fan](https://github.com/githubnext/gh-aw/blob/v0.37.7/.github/workflows/go-fan.md?plain=1)** - Daily Go module usage reviewer that analyzes direct dependencies - **[Typist](https://github.com/githubnext/gh-aw/blob/v0.37.7/.github/workflows/typist.md?plain=1)** - Analyzes Go type usage patterns to improve type safety -- **[Functional Programming Enhancer](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/functional-programming-enhancer.md?plain=1)** - Applies moderate functional programming techniques for clarity and safety +- **[Functional Pragmatist](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/functional-programming-enhancer.md?plain=1)** - Applies moderate functional programming techniques for clarity and safety - **[Repository Quality Improver](https://github.com/githubnext/gh-aw/blob/v0.37.7/.github/workflows/repository-quality-improver.md?plain=1)** - Takes a holistic view of code quality and suggests improvements ### Go Fan: The Dependency Enthusiast 🐹 @@ -63,9 +63,9 @@ Typist creates discussions rather than issues because type safety improvements o Today's hybrid languages like Go, C# and F# support both strong and dynamic typing. Seeing strong typing as arising from continuous improvement area is a particularly novel insight: rather than enforcing strict typing upfront, we can develop quickly with flexibility, then let autonomous agents like Typist trail behind, strengthening type safety over time. -### Functional Programming Enhancer: The Pragmatic Purist 🔄 +### Functional Pragmatist: The Pragmatic Purist 🔄 -The **Functional Programming Enhancer** systematically identifies opportunities to apply moderate, tasteful functional programming techniques to improve code clarity, safety, and maintainability. Unlike dogmatic functional approaches, this workflow balances pragmatism with functional purity. +The **Functional Pragmatist** systematically identifies opportunities to apply moderate, tasteful functional programming techniques to improve code clarity, safety, and maintainability. Unlike dogmatic functional approaches, this workflow balances pragmatism with functional purity. The workflow focuses on seven key patterns: immutability (making data immutable where there's no existing mutation), functional initialization (using composite literals and declarative patterns), transformative operations (leveraging map/filter/reduce approaches), functional options pattern (using option functions for flexible configuration), avoiding shared mutable state (eliminating global variables), pure functions (extracting calculations from side effects), and reusable logic wrappers (creating higher-order functions for retry, logging, caching). @@ -97,9 +97,9 @@ The Repository Quality Improver looks for these cross-cutting concerns that don' ## The Power of Holistic Improvement -Together, these workflows complete the autonomous improvement picture. Go Fan ensures our dependencies stay fresh and well-used, Typist systematically strengthens type safety, Functional Programming Enhancer applies moderate functional techniques for clarity and safety, and Repository Quality Improver maintains overall coherence. +Together, these workflows complete the autonomous improvement picture. Go Fan ensures our dependencies stay fresh and well-used, Typist systematically strengthens type safety, Functional Pragmatist applies moderate functional techniques for clarity and safety, and Repository Quality Improver maintains overall coherence. -Combined with our earlier workflows covering simplicity, refactoring, and style, we now have agents that continuously improve code at every level: the Terminal Stylist ensures beautiful output at the line level, Code Simplifier removes complexity at the function level, Semantic Function Refactor improves organization at the file level, Go Pattern Detector enforces consistency at the pattern level, Functional Programming Enhancer applies functional patterns for clarity and safety, Typist strengthens type safety at the type level, Go Fan optimizes dependencies at the module level, and Repository Quality Improver maintains coherence at the repository level. +Combined with our earlier workflows covering simplicity, refactoring, and style, we now have agents that continuously improve code at every level: the Terminal Stylist ensures beautiful output at the line level, Code Simplifier removes complexity at the function level, Semantic Function Refactor improves organization at the file level, Go Pattern Detector enforces consistency at the pattern level, Functional Pragmatist applies functional patterns for clarity and safety, Typist strengthens type safety at the type level, Go Fan optimizes dependencies at the module level, and Repository Quality Improver maintains coherence at the repository level. This is the future of code quality: not periodic cleanup sprints, but continuous autonomous improvement across every dimension simultaneously. @@ -119,7 +119,7 @@ gh aw add https://github.com/githubnext/gh-aw/blob/v0.37.7/.github/workflows/go- gh aw add https://github.com/githubnext/gh-aw/blob/v0.37.7/.github/workflows/typist.md ``` -**Functional Programming Enhancer:** +**Functional Pragmatist:** ```bash gh aw add https://github.com/githubnext/gh-aw/blob/main/.github/workflows/functional-programming-enhancer.md diff --git a/pkg/workflow/data/action_pins.json b/pkg/workflow/data/action_pins.json index 2db5179bb9..80130e4a1a 100644 --- a/pkg/workflow/data/action_pins.json +++ b/pkg/workflow/data/action_pins.json @@ -100,7 +100,7 @@ "version": "v5.6.0", "sha": "a26af69be951a213d495a4c3e4e4022e16d87065" }, - "actions/upload-artifact@v4.6.2": { + "actions/upload-artifact@v4": { "repo": "actions/upload-artifact", "version": "v4.6.2", "sha": "ea165f8d65b6e75b540449e92b4886f43607fa02" From 4d5ead5f5b54f28194f2341f7b21e96407d3fbcd Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 31 Jan 2026 16:50:05 +0000 Subject: [PATCH 2/2] update --- .github/aw/actions-lock.json | 7 +------ .github/workflows/functional-pragmatist.lock.yml | 14 +++++++------- .github/workflows/functional-pragmatist.md | 2 +- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.github/aw/actions-lock.json b/.github/aw/actions-lock.json index edbd2e8785..80130e4a1a 100644 --- a/.github/aw/actions-lock.json +++ b/.github/aw/actions-lock.json @@ -25,11 +25,6 @@ "version": "v4.3.0", "sha": "0057852bfaa89a56745cba8c7296529d2fc39830" }, - "actions/checkout@v3": { - "repo": "actions/checkout", - "version": "v3", - "sha": "f43a0e5ff2bd294095638e18286ca9a3d1956744" - }, "actions/checkout@v4": { "repo": "actions/checkout", "version": "v4", @@ -105,7 +100,7 @@ "version": "v5.6.0", "sha": "a26af69be951a213d495a4c3e4e4022e16d87065" }, - "actions/upload-artifact@v4.6.2": { + "actions/upload-artifact@v4": { "repo": "actions/upload-artifact", "version": "v4.6.2", "sha": "ea165f8d65b6e75b540449e92b4886f43607fa02" diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index 984075f835..b46c610486 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -25,7 +25,7 @@ # Imports: # - shared/reporting.md # -# frontmatter-hash: 36841d7adc44ab7c99505b33f4d1113ef59368bb97402809d58f67dfb21cee0a +# frontmatter-hash: 955a84fff7ccabae05d43d2d19f374f23fbab1f92936115dd01210d0b25616e8 name: "Functional Pragmatist" "on": @@ -896,7 +896,7 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: 1 GH_AW_WORKFLOW_NAME: "Functional Pragmatist" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -910,7 +910,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "Functional Pragmatist" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -924,7 +924,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "Functional Pragmatist" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.agent.outputs.secret_verification_result }} @@ -941,7 +941,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "Functional Pragmatist" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -959,7 +959,7 @@ jobs: GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }} GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_WORKFLOW_NAME: "Functional Pragmatist" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.result }} with: @@ -1091,7 +1091,7 @@ jobs: timeout-minutes: 15 env: GH_AW_ENGINE_ID: "copilot" - GH_AW_TRACKER_ID: "functional-enhancer" + GH_AW_TRACKER_ID: "functional-pragmatist" GH_AW_WORKFLOW_ID: "functional-pragmatist" GH_AW_WORKFLOW_NAME: "Functional Pragmatist" outputs: diff --git a/.github/workflows/functional-pragmatist.md b/.github/workflows/functional-pragmatist.md index 7ce404f41c..5fda6584c5 100644 --- a/.github/workflows/functional-pragmatist.md +++ b/.github/workflows/functional-pragmatist.md @@ -11,7 +11,7 @@ permissions: issues: read pull-requests: read -tracker-id: functional-enhancer +tracker-id: functional-pragmatist network: allowed: