Skip to content

Reformat metadata and config; update site copy#2

Merged
delano merged 11 commits intomainfrom
docs/public-readmes
Feb 17, 2026
Merged

Reformat metadata and config; update site copy#2
delano merged 11 commits intomainfrom
docs/public-readmes

Conversation

@delano
Copy link
Member

@delano delano commented Feb 17, 2026

No description provided.

delano and others added 10 commits February 8, 2026 19:00
Rewrite root README from SvelteKit boilerplate to cover the
project purpose, available demos, local dev setup, build steps,
new-demo workflow, and tech stack. Update the sso-demos component
README with a repo context header and tightened intro.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two new translucent dark surface tokens replace raw bg-black/30
and bg-black/40 used in HTTP entry and payload code blocks.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Replace ~120 raw Tailwind gray-* utilities across 9 files with
the semantic token system (canvas, surface, ink, edge, accent).

Surfaces: bg-gray-900 → bg-surface, bg-gray-800 → bg-surface-raised
Text: text-gray-100/300/400/500 → text-ink/-secondary/-tertiary/-muted
Borders: border-gray-700 → border-edge
Code: bg-black/30 → bg-code-surface
Links: text-blue-400 → text-accent

Print variants, browser chrome mockup, and dynamically constructed
ProtocolStack connector classes intentionally unchanged.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Document the token vocabulary, depth strategy, typography rules,
semantic HTTP/actor color mappings, and component patterns for
future design consistency.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Demo components use crypto.randomUUID() for aria-controls IDs, which
requires a secure context (HTTPS or localhost). On plain HTTP, the call
throws during Svelte hydration causing an unrecoverable white screen.

Rather than silently falling back to a weaker RNG — which would
undermine the security posture of a site teaching security concepts —
this gates the entire app at the layout level. On insecure contexts, a
friendly error message explains the HTTPS requirement. No child
components are mounted, so the failing code path is never reached.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Avoids conflict with the main frontend application on the
default Vite port 5173.
New demos:
- SP-initiated SAML with Okta: 7-step direct SAML 2.0 flow with
  AuthnRequest/Response XML payloads and signature validation notes
- OAuth2 social login with Google: 7-step Authorization Code + PKCE
  flow with JWT payloads and userinfo endpoint

Design system:
- Migrate 6 screen components from raw slate-* to semantic tokens
- Standardize button patterns in TranscriptView and StepArticle
- Add shadow color modifiers across shared components
- Add actor-okta (indigo) and actor-google (rose) theme tokens

Infrastructure:
- Update gallery with all 3 demos and refreshed Coming Soon section
- Add OG meta tags and JSON-LD structured data to all routes
- Support VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS in vite.config.ts
- Document svelte.config.js .ts limitation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Wrap og:description and JSON-LD for readability, tidy svelte.config.js
formatting and trailing commas, and tweak intro and footer copy
Copilot AI review requested due to automatic review settings February 17, 2026 05:59
@claude
Copy link

claude bot commented Feb 17, 2026

Claude finished @delano's task —— View job


PR Code Review ✅

I've completed a comprehensive code review of this substantial PR. Here's my detailed analysis covering code quality, security, performance, and best practices.

Todo List

  • Read repository setup instructions (CLAUDE.md)
  • Review new SSO demo implementations (OAuth2 Google & SP-SAML Okta)
  • Analyze security considerations in authentication flows
  • Check configuration changes and build setup
  • Review design system additions
  • Assess performance implications
  • Check for test coverage
  • Provide comprehensive feedback

🔍 Code Quality Assessment

Overall: Excellent - This is well-structured, educational code with strong documentation and consistent patterns.

✅ Strengths

  • Exceptional Documentation: Both OAuth2 and SAML demo flows include comprehensive step-by-step explanations with security notes
  • Consistent Architecture: New demos follow established patterns from existing codebase
  • TypeScript Integration: Strong typing throughout with proper interfaces and type definitions
  • Educational Value: Code serves dual purpose as working demos and learning material

⚠️ Areas for Improvement

  • Missing Tests: No test files found (**/*test* glob returned empty) - this is the biggest concern
  • Code Duplication: Some repetitive patterns in step definitions could be abstracted
  • Hardcoded URLs: Demo URLs are hardcoded rather than configurable

🔒 Security Analysis

Overall: Very Strong - Demonstrates excellent understanding of SSO security principles.

✅ Security Highlights

  • PKCE Implementation: OAuth2 demo correctly implements PKCE flow with proper code_verifier/code_challenge handling
  • Comprehensive Validation: SAML demo shows proper assertion validation (signatures, timestamps, audience restrictions)
  • Security Notes: Each step includes detailed security considerations and potential attack vectors
  • Proper Session Handling: Shows secure session cookie patterns with HttpOnly, Secure, SameSite flags

Security Best Practices Demonstrated:

  1. OAuth2 Flow (oauth2-google/steps.ts:26-352):

    • PKCE code challenge generation and verification
    • State parameter for CSRF protection
    • Nonce for ID token replay prevention
    • Server-side token exchange (never exposing tokens to browser)
    • JWT signature validation against JWKS
  2. SAML Flow (sp-saml-okta/steps.ts:28-392):

    • AuthnRequest ID tracking for InResponseTo validation
    • Dual signature validation (Response + Assertion)
    • Timestamp validation with clock skew tolerance
    • AudienceRestriction verification
    • Assertion ID storage for replay prevention

⚡ Performance Considerations

Overall: Good - No major performance concerns, but some opportunities for optimization.

✅ Performance Strengths

  • Static Site Generation: Svelte + static adapter ensures fast loading
  • Efficient Bundling: Vite configuration supports optimal builds
  • Semantic Tokens: CSS design system prevents style bloat

🔄 Optimization Opportunities

  • Large Step Arrays: 387-427 line step definitions could impact bundle size
  • Repeated Data: Some HTTP headers/URLs repeated across steps
  • Image Assets: No optimization strategy visible for any images used

🎨 Design System Review

Overall: Excellent - Comprehensive design system with strong semantic foundations.

✅ Design System Strengths

  • Semantic Tokens: Well-organized color system (app.css:4-27) prevents arbitrary values
  • Comprehensive Documentation: .interface-design/system.md provides excellent guidelines
  • Dark Theme Consistency: Proper contrast ratios and accessibility considerations
  • Component Patterns: Clear button, container, and typography hierarchies

The new design system file is particularly well-done, providing:

  • Clear semantic token definitions
  • Component pattern documentation
  • Typography scale and spacing guidelines
  • HTTP/Actor color semantics for demo components

🏗️ Configuration & Build Setup

Overall: Good - Clean build configuration with room for minor improvements.

Configuration Review:

  1. Vite Config (vite.config.ts:11-24):

    • ✅ Proper environment variable handling
    • ✅ Tailwind integration
    • ⚠️ Additional hosts feature lacks validation
  2. Svelte Config (svelte.config.js:10-27):

    • ✅ Static adapter properly configured
    • ✅ Precompression disabled (appropriate for demos)
    • ✅ Proper error handling for missing assets

🧪 Test Coverage Analysis

Critical Issue: No Tests Found

The most significant concern is the complete absence of test files. For code demonstrating security-critical flows, this is particularly important.

Recommended Test Coverage:

  1. Unit Tests:

    • Step data validation
    • Configuration object integrity
    • Utility function behavior
  2. Integration Tests:

    • Demo navigation flows
    • Component rendering with step data
    • Actor state transitions
  3. Security Tests:

    • XSS prevention in dynamic content
    • Proper encoding of demo URLs/tokens
    • CSRF token handling in examples

📋 Specific Recommendations

High Priority

  1. Add Test Suite: Implement basic test coverage for new components
  2. Environment Configuration: Make demo URLs configurable via environment variables
  3. Bundle Analysis: Analyze impact of large step arrays on bundle size

Medium Priority

  1. Abstract Common Patterns: Create shared utilities for HTTP step generation
  2. Accessibility Audit: Ensure keyboard navigation works properly in new demos
  3. Content Security Policy: Review CSP headers for demo security

Low Priority

  1. Code Splitting: Consider lazy loading for large step definitions
  2. Development Tools: Add lint/typecheck npm scripts for easier development

🎯 Conclusion

This is high-quality educational code with excellent documentation and strong security awareness. The two new SSO demos (OAuth2 Google and SP-SAML Okta) are well-implemented and will be valuable learning resources.

Primary Concern: The lack of test coverage is the only significant issue. For code that teaches security concepts, having tests would both validate the implementations and serve as additional documentation.

Approval Recommendation: ✅ Approve with minor improvements - The code quality and educational value are excellent. Adding tests can be addressed in a follow-up PR.


@gemini-code-assist
Copy link

Summary of Changes

Hello @delano, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly expands the interactive SSO authentication flow demonstrations by adding two new, detailed scenarios: OAuth2 with Google and SP-initiated SAML with Okta. It also focuses on improving the overall user experience and developer workflow by implementing a robust design system, updating the site's branding and metadata, and enhancing development server configurations. These changes aim to make the platform more informative, visually cohesive, and easier to develop on.

Highlights

  • New SSO Demos Added: Introduced two new comprehensive SSO authentication flow demonstrations: OAuth2 Social Login with Google and SP-Initiated SAML with Okta. Each demo provides step-by-step visualizations of the protocol interactions.
  • UI/UX Design System Implementation: Refactored existing UI components and implemented new ones using a semantic token system for colors, typography, and spacing, enhancing visual consistency and maintainability across the application. A detailed design system document was also added.
  • Landing Page and Metadata Enhancements: The main landing page has been significantly updated with new branding elements, improved demo listings, and comprehensive SEO and Open Graph metadata to better describe the project and its offerings.
  • Development Experience Improvements: Added a secure context gate to the main layout to prevent rendering issues on insecure connections and configured the Vite development server to allow additional hosts, streamlining local development and testing.
Changelog
  • .interface-design/system.md
    • Added a new design system document detailing UI/UX principles, token systems, motion, and component patterns.
  • README.md
    • Updated the project README with specific information about ssowhat.dev, including its purpose, available demos, local development instructions, and tech stack.
  • package.json
    • Updated the 'dev' script to specify port 5184 for the Vite development server.
  • src/app.css
    • Added new CSS variables for code block surface colors.
  • src/lib/sso-demos/README.md
    • Updated the title and description to reflect the component library's purpose within ssowhat.dev.
  • src/lib/sso-demos/oauth2-google/OAuth2Google.svelte
    • Added a new Svelte component for the OAuth2 Google demo.
  • src/lib/sso-demos/oauth2-google/config.ts
    • Added configuration for the OAuth2 Google demo, including actor and protocol stack definitions.
  • src/lib/sso-demos/oauth2-google/steps.ts
    • Added detailed step-by-step instructions and HTTP interactions for the OAuth2 Google demo.
  • src/lib/sso-demos/screens/idp/EntraAutoSubmit.svelte
    • Updated styling to use semantic design tokens for background and text colors.
  • src/lib/sso-demos/screens/idp/EntraLogin.svelte
    • Updated styling to use semantic design tokens for background, text, border, and placeholder colors.
  • src/lib/sso-demos/screens/idp/LogtoSignIn.svelte
    • Updated styling to use semantic design tokens for backgrounds, borders, text, and ring offsets.
  • src/lib/sso-demos/screens/ots/Blank.svelte
    • Updated styling to use semantic design tokens for background and text colors.
  • src/lib/sso-demos/screens/ots/Dashboard.svelte
    • Updated styling to use semantic design tokens for backgrounds, borders, text, and disabled states.
  • src/lib/sso-demos/screens/ots/Loading.svelte
    • Updated styling to use semantic design tokens for background and text colors.
  • src/lib/sso-demos/shared/ActorDiagram.svelte
    • Updated styling to use semantic design tokens for borders, backgrounds, text, and added shadow classes for active actors.
  • src/lib/sso-demos/shared/BrowserMockup.svelte
    • Updated styling to use semantic design tokens for borders, shadows, and loading bar background.
  • src/lib/sso-demos/shared/HttpEntry.svelte
    • Updated styling to use semantic design tokens for backgrounds, text, borders, and expanded payload elements.
  • src/lib/sso-demos/shared/HttpTranscriptEntry.svelte
    • Updated styling to use semantic design tokens for backgrounds, rings, borders, and text colors.
  • src/lib/sso-demos/shared/ProtocolStack.svelte
    • Updated styling to use semantic design tokens for backgrounds, borders, text, and inactive component states.
  • src/lib/sso-demos/shared/SSODemoShell.svelte
    • Updated styling to use semantic design tokens across various elements, including background, text, navigation controls, and step indicators.
  • src/lib/sso-demos/shared/StepArticle.svelte
    • Updated styling to use semantic design tokens for backgrounds, text, buttons, and various section elements.
  • src/lib/sso-demos/shared/TranscriptView.svelte
    • Updated styling to use semantic design tokens for backgrounds, text, headers, buttons, and table of contents links.
  • src/lib/sso-demos/shared/sso-demo-theme.css
    • Added new @source inline directives for actor shadow classes.
    • Defined new actor color tokens for Okta and Google.
  • src/lib/sso-demos/shared/transcript-utils.ts
    • Added shadowClass to the ActorColorInfo interface and its corresponding implementation.
  • src/lib/sso-demos/sp-saml-okta/SPSAMLOkta.svelte
    • Added a new Svelte component for the SP-initiated SAML Okta demo.
  • src/lib/sso-demos/sp-saml-okta/config.ts
    • Added configuration for the SP-initiated SAML Okta demo, including actor and protocol stack definitions.
  • src/lib/sso-demos/sp-saml-okta/steps.ts
    • Added detailed step-by-step instructions and HTTP interactions for the SP-initiated SAML Okta demo.
  • src/routes/+layout.svelte
    • Implemented a secure context gate to ensure Web Crypto API availability, displaying an error on insecure connections.
    • Updated styling to use semantic design tokens for the error message display.
  • src/routes/+page.svelte
    • Updated the main landing page to include new demo listings for OAuth2 Google and SP-SAML Okta.
    • Added new branding elements, including an SVG mark, wordmark, and tagline.
    • Enhanced SEO and Open Graph metadata for the main page.
    • Refined introductory text and added a section about the example application.
  • src/routes/oauth2-google/+page.svelte
    • Added a new route for the OAuth2 Google demo, including specific SEO metadata.
  • src/routes/oidc-saml-bridge/+page.svelte
    • Updated SEO metadata for the OIDC SAML bridge demo page.
  • src/routes/sp-saml-okta/+page.svelte
    • Added a new route for the SP-initiated SAML Okta demo, including specific SEO metadata.
  • svelte.config.js
    • Added comments clarifying the JS-only nature of the configuration file.
    • Updated prerender error handling logic.
  • vite.config.ts
    • Modified the Vite configuration to allow additional hosts for the development server via an environment variable.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This is an excellent and substantial pull request. It introduces a comprehensive design system and refactors numerous components to use it, which is a great improvement for consistency and maintainability. The addition of the two new detailed demos for Google OAuth2 and Okta SAML significantly enhances the project's value. The code quality is high, and the new features are well-implemented. I've only found a couple of minor documentation inconsistencies in the README.md that should be updated to reflect the new demos. Great work!

@delano delano disabled auto-merge February 17, 2026 06:06
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the SvelteKit/Vite configuration and refreshes site metadata/copy while adding two new interactive authentication-flow demos (OAuth2 Google and SP-initiated SAML with Okta). It also expands the shared demo theming to support new actors and a more consistent token-based UI.

Changes:

  • Add new demos (+ routes) for OAuth2 Google and SP-initiated SAML (Okta), including SEO metadata (OG + JSON-LD).
  • Introduce a secure-context gate in the root layout to prevent runtime failures from crypto.randomUUID() usage.
  • Refresh shared demo UI styling to use semantic tokens, add new actor colors (Okta/Google), and update docs/copy.

Reviewed changes

Copilot reviewed 34 out of 34 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
vite.config.ts Loads VITE_ env and configures dev server host allowlist support.
svelte.config.js Adds clarifying config comments + minor formatting cleanup.
src/routes/sp-saml-okta/+page.svelte New route page wiring + SEO metadata for Okta SAML demo.
src/routes/oidc-saml-bridge/+page.svelte Enhances title + adds OG/JSON-LD metadata.
src/routes/oauth2-google/+page.svelte New route page wiring + SEO metadata for Google OAuth2 demo.
src/routes/+page.svelte Updates landing-page branding, demo list, and site copy/structure.
src/routes/+layout.svelte Adds secure-context gate for crypto-dependent demo components.
src/lib/sso-demos/sp-saml-okta/steps.ts New step transcript content for SP-initiated SAML (Okta).
src/lib/sso-demos/sp-saml-okta/config.ts New actor/protocol-stack config for Okta SAML demo.
src/lib/sso-demos/sp-saml-okta/SPSAMLOkta.svelte New demo entry component wiring shell + screens + config/steps.
src/lib/sso-demos/oauth2-google/steps.ts New step transcript content for OAuth2/OIDC Google demo.
src/lib/sso-demos/oauth2-google/config.ts New actor/protocol-stack config for Google OAuth2 demo.
src/lib/sso-demos/oauth2-google/OAuth2Google.svelte New demo entry component wiring shell + screens + config/steps.
src/lib/sso-demos/shared/transcript-utils.ts Adds derived shadowClass for actor color styling.
src/lib/sso-demos/shared/sso-demo-theme.css Safelists new derived classes + adds Okta/Google actor tokens.
src/lib/sso-demos/shared/TranscriptView.svelte Updates transcript styling to semantic tokens.
src/lib/sso-demos/shared/StepArticle.svelte Updates transcript step styling + uses new actor shadow token.
src/lib/sso-demos/shared/SSODemoShell.svelte Updates demo shell UI to semantic tokens and refreshed styles.
src/lib/sso-demos/shared/ProtocolStack.svelte Updates protocol stack styling to semantic tokens.
src/lib/sso-demos/shared/HttpTranscriptEntry.svelte Updates transcript entry styling and ring offsets to semantic tokens.
src/lib/sso-demos/shared/HttpEntry.svelte Updates interactive HTTP entry styling to semantic tokens.
src/lib/sso-demos/shared/BrowserMockup.svelte Updates browser mock styling (borders/shadows/progress surface).
src/lib/sso-demos/shared/ActorDiagram.svelte Adds per-actor shadow styling via getActorColorInfo().
src/lib/sso-demos/screens/ots/Loading.svelte Updates mock screen styling to semantic tokens.
src/lib/sso-demos/screens/ots/Dashboard.svelte Updates mock dashboard styling to semantic tokens.
src/lib/sso-demos/screens/ots/Blank.svelte Updates mock blank screen styling to semantic tokens.
src/lib/sso-demos/screens/idp/LogtoSignIn.svelte Updates mock Logto screen styling to semantic tokens.
src/lib/sso-demos/screens/idp/EntraLogin.svelte Updates mock Entra screen styling to semantic tokens.
src/lib/sso-demos/screens/idp/EntraAutoSubmit.svelte Updates mock Entra autosubmit screen styling to semantic tokens.
src/lib/sso-demos/README.md Updates library readme to reflect ssowhat.dev context + Svelte 5 framing.
src/app.css Adds semantic tokens for code surfaces.
package.json Pins dev server port to 5184 for consistency with docs.
README.md Replaces template README with ssowhat.dev documentation and local run steps.
.interface-design/system.md Adds a design system document defining tokens/patterns and UI rules.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +13 to +17
export const actorConfig: ActorConfig[] = [
{ key: "browser", label: "Browser", activeColor: "bg-actor-browser" },
{ key: "ots", label: "OTS", activeColor: "bg-actor-ots" },
{ key: "google", label: "Google", activeColor: "bg-actor-google" },
];
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

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

This new file doesn’t match the repo’s Prettier settings (tabs + single quotes). .prettierrc sets useTabs: true and singleQuote: true, but this file uses 2-space indentation and double quotes. Please run Prettier (or reformat) so future diffs stay consistent.

Copilot uses AI. Check for mistakes.
- `actor-caddy`: lime-600
- `actor-logto`: purple-500
- `actor-entra`: cyan-500
- `actor-ots`: red-500
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

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

The actor-color list here is missing the newly introduced actor-okta and actor-google tokens (added in sso-demo-theme.css). Update this section so the docs match the available theme tokens.

Suggested change
- `actor-ots`: red-500
- `actor-ots`: red-500
- `actor-okta`: theme-defined Okta brand color (see `sso-demo-theme.css`)
- `actor-google`: theme-defined Google brand color (see `sso-demo-theme.css`)

Copilot uses AI. Check for mistakes.
Comment on lines +13 to +17
export const actorConfig: ActorConfig[] = [
{ key: "browser", label: "Browser", activeColor: "bg-actor-browser" },
{ key: "ots", label: "OTS", activeColor: "bg-actor-ots" },
{ key: "okta", label: "Okta", activeColor: "bg-actor-okta" },
];
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

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

This new file doesn’t match the repo’s Prettier settings (tabs + single quotes). .prettierrc sets useTabs: true and singleQuote: true, but this file uses 2-space indentation and double quotes. Please run Prettier (or reformat) so future diffs stay consistent.

Copilot uses AI. Check for mistakes.
@delano delano enabled auto-merge February 17, 2026 06:19
- Update README demo table with SP-SAML Okta and OAuth2 Google entries
- Remove implemented items from README planned list
- Use crypto.randomUUID feature detection instead of isSecureContext
- Fix SP-SAML Okta meta description grammar
- Add actor-okta and actor-google to design system doc
- Run prettier on demo config and steps files
@delano delano disabled auto-merge February 17, 2026 09:13
@delano delano merged commit 96a1e12 into main Feb 17, 2026
4 checks passed
@delano delano deleted the docs/public-readmes branch February 17, 2026 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants